Skip to content

Commit

Permalink
Adding AEP connection details and removing hardcoded token
Browse files Browse the repository at this point in the history
  • Loading branch information
syamavarm committed Aug 30, 2024
1 parent ee0b5a4 commit 6e442d0
Show file tree
Hide file tree
Showing 6 changed files with 271 additions and 238 deletions.
8 changes: 8 additions & 0 deletions app.config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ extensions:
LOG_LEVEL: debug
annotations:
final: true
fetchAEPConfig:
function: src/universal-editor-ui-1/actions/fetchAEPConfig/index.js
web: 'yes'
runtime: nodejs:16
inputs:
LOG_LEVEL: debug
annotations:
final: true
fetchFDMTree:
function: src/universal-editor-ui-1/actions/fetchFDMTree/index.js
web: 'yes'
Expand Down
29 changes: 29 additions & 0 deletions src/universal-editor-ui-1/actions/fetchAEPConfig/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
const fetch = require("node-fetch")
const FormData = require('form-data');
async function main(params) {


var aepConfig = {};

const aemRequestOptions = {
method: "GET",
headers: {"Authorization": params.token}
};
const formJsonResponse = await fetch(params.endpoint+ params.formPath +".model.json", aemRequestOptions);
const formModel = await formJsonResponse.json();
if(formModel.properties) {
const properties =formModel.properties;
if(properties.aepConfig) {
aepConfig = JSON.parse(properties.aepConfig);
}
}



return {
status: 200,
body: JSON.stringify(aepConfig)
};
}

exports.main = main;
91 changes: 51 additions & 40 deletions src/universal-editor-ui-1/actions/fetchSegments/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ async function main(params) {
const aemRequestOptions = {
method: "GET",
headers: {"Authorization": params.token}
};
};
const formJsonResponse = await fetch(params.endpoint+ params.formPath +".model.json", aemRequestOptions);
const formModel = await formJsonResponse.json();
var segments = [];
Expand All @@ -23,9 +23,6 @@ async function main(params) {
if(properties.placementFieldMappings) {
placementFieldMappings = JSON.parse(properties.placementFieldMappings);
}
if(properties.aepToken) {
aepToken = properties.aepToken;
}
if(properties.offerOptionSelected) {
returnSegments.offerOptionSelected = properties.offerOptionSelected;
}
Expand All @@ -43,14 +40,23 @@ async function main(params) {
returnSegments.nativeSegments = segments;
returnSegments.placementFieldMappings = placementFieldMappings;

//fetch RTCDP segments and AJO decisions/placements
if(params.aepToken) {
aepToken = params.aepToken;
//fetch AEP Access token
if(params.aepConfig) {
var requestOptions1 = {
method: "POST",
};

var response1 = await fetch("https://ims-na1.adobelogin.com/ims/token/v3?grant_type=client_credentials&client_id="+params.aepConfig.clientId+"&client_secret="+params.aepConfig.clientSecret+"&scope="+params.aepConfig.scopes, requestOptions1);
if(response1.status === 200) {
var result1 = await response1.json();
aepToken = result1.access_token;
}
returnSegments.accessTokenResponse = response1.status;
}
const myHeaders = {
"x-api-key": "acp_ui_platform",
"x-gw-ims-org-id": "908936ED5D35CC220A495CD4@AdobeOrg",
"x-sandbox-name": "aem-forms-experimentation",
"x-api-key": params.aepConfig.clientId,
"x-gw-ims-org-id": params.aepConfig.orgId,
"x-sandbox-name": params.aepConfig.sandboxName,
"Authorization": "Bearer " + aepToken
};

Expand All @@ -69,10 +75,10 @@ async function main(params) {
));
returnSegments.rtcdpSegments = listItems;

//save aep token after fetch
if(params.aepToken) {
//save aep config
if(params.aepConfig) {
var tokenFormData = new FormData();
tokenFormData.append("aepToken", aepToken);
tokenFormData.append("aepConfig", JSON.stringify(params.aepConfig));
const aemTokenPostRequestOptions = {
method: "POST",
headers: {"Authorization": params.token},
Expand Down Expand Up @@ -104,23 +110,25 @@ async function main(params) {

var audience = Object.keys(formModel[":items"]).filter((key) => formModel[":items"][key].name === "__audience__")[0];
audience = formModel[":items"][audience];
const audiencePath = audience.properties['fd:path'];
var formData = new FormData();
returnSegments.rtcdpSegments.forEach(element => {
formData.append("enum", element.id);
formData.append("enumNames", element.name);
});

returnSegments.nativeSegments.forEach(element => {
formData.append("enum", element.expr);
formData.append("enumNames", element.name);
});
const aemPostRequestOptions = {
method: "POST",
headers: {"Authorization": params.token},
body: formData
};
const postResponse = await fetch(params.endpoint+ audiencePath , aemPostRequestOptions);
if(audience !== undefined) {
const audiencePath = audience.properties['fd:path'];
var formData = new FormData();
returnSegments.rtcdpSegments.forEach(element => {
formData.append("enum", element.id);
formData.append("enumNames", element.name);
});

returnSegments.nativeSegments.forEach(element => {
formData.append("enum", element.expr);
formData.append("enumNames", element.name);
});
const aemPostRequestOptions = {
method: "POST",
headers: {"Authorization": params.token},
body: formData
};
const postResponse = await fetch(params.endpoint+ audiencePath , aemPostRequestOptions);
}

//Get placements and decisions
var placements = [];
Expand All @@ -135,24 +143,27 @@ async function main(params) {
returnSegments.placements = placements;

var decisions = [];
const decisionResponse = await fetch("https://platform.adobe.io/data/core/dps/offer-decisions", requestOptions);
var offerCharacteristics = [];
const decisionResponse = await fetch("https://platform.adobe.io/data/core/dps/offers?offer-type=personalized", requestOptions);
if(decisionResponse.status === 200) {
const result = await decisionResponse.json();
const decisionsInResponse = result.results;
decisions = decisionsInResponse.map(decision => (
{id: decision.id, name: decision.name}
));

for (var decision in decisionsInResponse) {
returnSegments.abc = decisionsInResponse[decision];
if(decisionsInResponse[decision].characteristics !== undefined) {
offerCharacteristics.push(...Object.keys(decisionsInResponse[decision].characteristics).map((key) => ({id: key, name: key})));
}
}


}
returnSegments.decisions = decisions;

var offerCharacteristics = [];
const offerCharecteristicsResponse = await fetch("https://platform.adobe.io/data/core/dps/offers/xcore:personalized-offer:1927a3dbd6be4e86?offer-type=personalized", requestOptions);
if(offerCharecteristicsResponse.status === 200) {
const result = await offerCharecteristicsResponse.json();
const decisionsInResponse = result.characteristics;
offerCharacteristics = Object.keys(decisionsInResponse).map((key) => ({id: key, name: key}));
}
returnSegments.offerCharacteristics = offerCharacteristics;
returnSegments.offerCharacteristics = offerCharacteristics;


return {
status: 200,
Expand Down
59 changes: 30 additions & 29 deletions src/universal-editor-ui-1/actions/saveSegments/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,7 @@ async function main(params) {
formData.append("segments", JSON.stringify(params.nativeSegments));
formData.append("placementFieldMappings", JSON.stringify(params.placementFieldMappings));
formData.append("offerCharacteristicMapping", JSON.stringify(params.offerCharacteristicMapping));
formData.append("offerOptionSelected", params.offerOptionSelected)
if(params.offerOptionSelected === "listed") {
//formData.append("offerActivityId", params.offerActivityId);
} else if (params.offerOptionSelected === "reqparam") {
formData.append("offerReqParamName", params.offerReqParamName)
}
formData.append("offerOptionSelected", JSON.stringify(params.offerOptionSelected));

const aemRequestOptions = {
method: "POST",
Expand All @@ -20,7 +15,6 @@ async function main(params) {
};
const formJsonResponse = await fetch(params.endpoint+ params.formPath, aemRequestOptions);
if(formJsonResponse.status === 200) {

const aemFormModelRequestOptions = {
method: "GET",
headers: {"Authorization": params.token}};
Expand All @@ -29,31 +23,38 @@ async function main(params) {

var audience = Object.keys(formModel[":items"]).filter((key) => formModel[":items"][key].name === "__audience__")[0];
audience = formModel[":items"][audience];
const audiencePath = audience.properties['fd:path'];
var formData = new FormData();
params.nativeSegments.forEach(element => {
formData.append("enum", element.name);
formData.append("enumNames", element.name);
});
params.rtcdpSegments.forEach(element => {
formData.append("enum", element.id);
formData.append("enumNames", element.name);
});
const aemPostRequestOptions = {
method: "POST",
headers: {"Authorization": params.token},
body: formData
};
const postResponse = await fetch(params.endpoint+ audiencePath , aemPostRequestOptions);
if(postResponse.status === 200) {
return {
status: 200,
body: `OK`
if(audience !== undefined) {
const audiencePath = audience.properties['fd:path'];
var formData = new FormData();
params.nativeSegments.forEach(element => {
formData.append("enum", element.name);
formData.append("enumNames", element.name);
});
params.rtcdpSegments.forEach(element => {
formData.append("enum", element.id);
formData.append("enumNames", element.name);
});
const aemPostRequestOptions = {
method: "POST",
headers: {"Authorization": params.token},
body: formData
};
const postResponse = await fetch(params.endpoint+ audiencePath , aemPostRequestOptions);
if(postResponse.status === 200) {
return {
status: 200,
body: `OK`
};
} else {
return {
status: 500,
body: `NOT OK`
};
}
} else {
return {
status: 500,
body: `NOT OK`
status: 200,
body: `OK`
};
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ function ExtensionRegistration() {
rightPanel: {
addRails() {
return [
{
/*{
id: "forms.datatree.panel",
header: "Data Tree",
url: '/#/rail/1',
icon: 'FileData',
},
},*/
{
id: "forms.personalization.panel",
header: "Personalization",
Expand Down
Loading

0 comments on commit 6e442d0

Please sign in to comment.