UNPKG

@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
"use strict"; 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;