@mediarithmics/plugins-nodejs-sdk
Version:
This is the mediarithmics nodejs to help plugin developers bootstrapping their plugin without having to deal with most of the plugin boilerplate
90 lines (89 loc) • 4.31 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const _ = require("lodash");
const index_1 = require("../../../index");
class AdRendererRecoTemplatePlugin extends index_1.AdRendererTemplatePlugin {
/**
* Helper to fetch the User Campaign
* @param campaignId The campaignId -> should come from the AdRendererRequest
* @param userCampaignId The userCampaignId -> should come from the AdRendererRequest
* @returns A Promise of the User Campaign
*/
fetchUserCampaign(campaignId, userCampaignId) {
const _super = name => super[name];
return __awaiter(this, void 0, void 0, function* () {
let userCampaignResponse;
try {
userCampaignResponse = yield _super("requestGatewayHelper").call(this, "GET", `${this
.outboundPlatformUrl}/v1/display_campaigns/${campaignId}/user_campaigns/${userCampaignId}`);
}
catch (e) {
this.logger
.error(`User campaign could not be fetched for: ${campaignId} - ${userCampaignId}
Returning empty user campaign
Error: ${e.message} - ${e.stack}`);
userCampaignResponse = {
status: "ok",
data: {
user_account_id: "null",
user_agent_ids: ["null"],
databag: "",
user_identifiers: []
},
count: 0
};
}
return userCampaignResponse.data;
});
}
/**
* Helper to fetch the User recommendations
* @param instanceContext The instanceContext -> contains the recommender_id of the creative
* @param userAgentId The userAgentId as a string -> should come from the AdRendererRequest (recommended) or from the UserCampaign
* @returns A Promise of the Recommendations
*/
fetchRecommendations(instanceContext, userAgentId) {
const _super = name => super[name];
return __awaiter(this, void 0, void 0, function* () {
// Without any recommender, we return an empty array
if (!instanceContext.recommender_id) {
return Promise.resolve([]);
}
const uri = `${this
.outboundPlatformUrl}/v1/recommenders/${instanceContext.recommender_id}/recommendations`;
const body = {
recommender_id: instanceContext.recommender_id,
input_data: {
user_agent_id: userAgentId
}
};
this.logger.debug(`POST: ${uri} - ${JSON.stringify(body)}`);
const response = yield _super("requestGatewayHelper").call(this, "POST", uri, body);
this.logger.debug(`Recommender ${instanceContext.recommender_id} response : ${JSON.stringify(response)}`);
return response.data.proposals;
});
}
instanceContextBuilder(creativeId) {
const _super = name => super[name];
return __awaiter(this, void 0, void 0, function* () {
const baseInstanceContext = yield _super("instanceContextBuilder").call(this, creativeId);
const recommenderProperty = _.find(baseInstanceContext.displayAdProperties, p => p.technical_name === "recommender_id");
const context = Object.assign({}, baseInstanceContext, { recommender_id: recommenderProperty
? recommenderProperty.value.value
: undefined });
return context;
});
}
constructor() {
super();
}
}
exports.AdRendererRecoTemplatePlugin = AdRendererRecoTemplatePlugin;