@repobit/dex-target 2.12.0 → 2.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [2.12.1](https://github.com/bitdefender/dex-core/compare/@repobit/dex-target@2.12.0...@repobit/dex-target@2.12.1) (2026-02-09)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **DEX-26312:** can already json response from target ([34c1047](https://github.com/bitdefender/dex-core/commit/34c104760d12844d1172ebed5372c2ab8545ee96))
12
+
13
+
14
+
6
15
  ## [2.12.0](https://github.com/bitdefender/dex-core/compare/@repobit/dex-target@2.11.0...@repobit/dex-target@2.12.0) (2026-02-09)
7
16
 
8
17
 
@@ -10,6 +10,16 @@ declare global {
10
10
  };
11
11
  }
12
12
  }
13
+ type JsonObject = Record<string, unknown>;
14
+ type JsonArray = unknown[];
15
+ type ParsedResult<T> = {
16
+ type: 'json';
17
+ value: T;
18
+ } | {
19
+ type: 'string';
20
+ value: string;
21
+ };
22
+ export declare function parseIfJsonStrict<T = JsonObject | JsonArray>(value: unknown): ParsedResult<T>;
13
23
  export default class Target {
14
24
  private urlParameters;
15
25
  private profileUrlParameters;
@@ -81,3 +91,4 @@ export default class Target {
81
91
  scopeDetails: AlloyResponsePropositions["scopeDetails"];
82
92
  }): Promise<void>;
83
93
  }
94
+ export {};
package/dist/src/index.js CHANGED
@@ -10,6 +10,43 @@ if (!window.Promise.withResolvers) {
10
10
  return { resolve, reject, promise };
11
11
  };
12
12
  }
13
+ const parseIfJsonObjectOrArray = (value) => {
14
+ // already parsed
15
+ if (typeof value === 'object' && value !== null) {
16
+ return value;
17
+ }
18
+ if (typeof value !== 'string') {
19
+ return value;
20
+ }
21
+ const trimmed = value.trim();
22
+ // HTML bailout (A/B test content)
23
+ if (trimmed.startsWith('<')) {
24
+ return value;
25
+ }
26
+ // only allow object or array shapes
27
+ const looksLikeJson = (trimmed.startsWith('{') && trimmed.endsWith('}')) ||
28
+ (trimmed.startsWith('[') && trimmed.endsWith(']'));
29
+ if (!looksLikeJson) {
30
+ return value;
31
+ }
32
+ try {
33
+ const parsed = JSON.parse(trimmed);
34
+ // reject primitives
35
+ if (typeof parsed === 'object' && parsed !== null) {
36
+ return parsed;
37
+ }
38
+ return value;
39
+ }
40
+ catch {
41
+ return value;
42
+ }
43
+ };
44
+ export function parseIfJsonStrict(value) {
45
+ const parsed = parseIfJsonObjectOrArray(value);
46
+ return typeof parsed === 'string'
47
+ ? { type: 'string', value: parsed }
48
+ : { type: 'json', value: parsed };
49
+ }
13
50
  export default class Target {
14
51
  urlParameters;
15
52
  profileUrlParameters;
@@ -150,24 +187,8 @@ export default class Target {
150
187
  }
151
188
  });
152
189
  notRequestedOffersCall.then(result => {
153
- const htmlPropositions = result.propositions.filter(proposition => proposition?.items?.some(item => {
154
- try {
155
- JSON.parse(`${item?.data?.content}`);
156
- return false;
157
- }
158
- catch {
159
- return true;
160
- }
161
- }));
162
- const jsonPropositions = result.propositions.filter(proposition => proposition?.items?.some(item => {
163
- try {
164
- JSON.parse(`${item?.data?.content}`);
165
- return true;
166
- }
167
- catch {
168
- return false;
169
- }
170
- })).map(proposition => {
190
+ const htmlPropositions = result.propositions.filter(proposition => proposition?.items?.some(item => parseIfJsonStrict(item?.data?.content).type === 'string'));
191
+ const jsonPropositions = result.propositions.filter(proposition => proposition?.items?.some(item => parseIfJsonStrict(item?.data?.content).type === 'json')).map(proposition => {
171
192
  const { ...propositionCopy } = proposition;
172
193
  delete propositionCopy.items;
173
194
  delete propositionCopy.renderAttempted;
@@ -198,16 +219,8 @@ export default class Target {
198
219
  }
199
220
  const mboxesPromises = mboxNames.map(mboxName => this.cachedMboxes.get(`${mboxName}_${JSON.stringify(parameters)}_${JSON.stringify(profileParameters)}`));
200
221
  const resolvedMboxes = await Promise.allSettled(mboxesPromises);
201
- const tryParse = (content) => {
202
- try {
203
- return JSON.parse(`${content}`);
204
- }
205
- catch {
206
- return content;
207
- }
208
- };
209
222
  const offersResult = mboxNames.reduce((acc, mboxName, index) => {
210
- acc[mboxName] = resolvedMboxes[index].status === 'fulfilled' ? tryParse(resolvedMboxes[index].value?.items?.[0]?.data?.content) : undefined;
223
+ acc[mboxName] = resolvedMboxes[index].status === 'fulfilled' ? parseIfJsonObjectOrArray(resolvedMboxes[index].value?.items?.[0]?.data?.content) : undefined;
211
224
  return acc;
212
225
  }, {});
213
226
  return isInitialyArray ? offersResult : offersResult[mboxNames[0]];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from '@repobit/dex-constants';\nimport { AdobeDataLayerService, AlloyResponsePropositions, CdpEvent, DecisionsDisplayedEvent, PageLoadStartedEvent } from '@repobit/dex-data-layer';\nimport {\n AlloyAppendIdentityToUrlResponse,\n AlloyApplyPropositionsResponse,\n AlloyFunction,\n AlloySendEventResponse,\n AppendIdentityToUrlCall,\n ApplyPropositionsCall,\n CdpData,\n CdpDataJson,\n ConfigMbox,\n GetIdentityCall,\n GetIdentityResponse,\n MboxParameters,\n MboxProfileParameters,\n SendEventCall,\n URLParameters\n} from './typeDefinitions';\n\ndeclare global {\n interface Window {\n alloyProxy: AlloyFunction;\n BD: {\n state: {\n cdpDataPromise: Promise<CdpData>\n }\n }\n }\n}\n\nif (!window.Promise.withResolvers) {\n window.Promise.withResolvers = function<T>() {\n let resolve, reject;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { resolve, reject, promise } as unknown as PromiseWithResolvers<T>;\n }\n}\n\nexport default class Target {\n private urlParameters : URLParameters;\n private profileUrlParameters: { [key: string]: string | undefined };\n private cachedMboxes : Map<string, Promise<AlloyResponsePropositions | undefined>>;\n private _configMbox : Promise<ConfigMbox | undefined>;\n private controller : AbortController = new AbortController();\n private _visitorInfo : Promise<GetIdentityResponse>;\n private cdpData : Promise<CdpData>;\n\n constructor(config?: Partial<{ pageLoadStartedEvent: PageLoadStartedEvent }>) {\n this.urlParameters = this.getUrlParameters();\n this.profileUrlParameters = this.transfromIntoProfileParameters(this.urlParameters);\n this.cachedMboxes = new Map();\n\n if (!window.alloyProxy) {\n function __alloy(...args: SendEventCall): Promise<AlloySendEventResponse>;\n function __alloy(...args: AppendIdentityToUrlCall): Promise<AlloyAppendIdentityToUrlResponse>;\n function __alloy(...args: ApplyPropositionsCall): Promise<AlloyApplyPropositionsResponse>;\n function __alloy(...args: GetIdentityCall): Promise<GetIdentityResponse>;\n function __alloy(...args: SendEventCall | AppendIdentityToUrlCall | ApplyPropositionsCall | GetIdentityCall):\n Promise<AlloySendEventResponse | AlloyAppendIdentityToUrlResponse | AlloyApplyPropositionsResponse | GetIdentityResponse> {\n return new Promise((resolve, reject) => {\n window.alloyProxy.q.push([resolve, reject, args]);\n });\n }\n\n window.alloyProxy = __alloy as AlloyFunction;\n window.alloyProxy.q = [];\n }\n\n // check for dotest=1 in URL. If it exists abort all target calls\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('dotest') === '1') {\n this.abort();\n }\n\n this._visitorInfo = new Promise((resolve) => {\n if (this.controller.signal?.aborted) {\n resolve({});\n }\n\n window.alloyProxy('getIdentity').then(result => resolve(result))\n .catch(() => resolve({}));\n this.controller.signal?.addEventListener('abort', () => resolve({}));\n });\n this.cdpData = config?.pageLoadStartedEvent && urlParams.get('dotest') !== '1'\n ? this.sendCdpData(config?.pageLoadStartedEvent)\n : Promise.resolve({} as CdpData);\n this._configMbox = this.getOffers({ mboxNames: 'config-mbox' });\n }\n\n /** get an object containing all the url query parameters */\n private getUrlParameters(): URLParameters {\n const urlParams = new URLSearchParams(window.location.search);\n const parameters: URLParameters = {};\n\n urlParams.forEach((value: string, key: string) => {\n parameters[key] = value;\n });\n\n return parameters;\n }\n\n public get configMbox() {\n return this._configMbox;\n }\n\n public get visitorInfo() {\n return this._visitorInfo;\n }\n\n /** add adobe_mc parameter at the end of the url */\n public appendVisitorIDsTo(url: string): Promise<string> {\n if (this.controller.signal?.aborted || url.includes('adobe_mc')) {\n return Promise.resolve(url);\n }\n\n return new Promise((resolve) => {\n window.alloyProxy('appendIdentityToUrl', { url }).then(result => resolve(result.url))\n .catch(() => resolve(url));\n this.controller.signal?.addEventListener('abort', () => resolve(url));\n });\n }\n\n /** abort all the Target calls for casese where Target does not load */\n public abort(): void {\n this.controller.abort();\n }\n\n public async sendCdpData(pageLoadStartedEvent: PageLoadStartedEvent): Promise<CdpData> {\n const cdpDataPromise = Promise.withResolvers<CdpData>();\n let cdpData: CdpData = {};\n if (window.BD.state.cdpDataPromise) {\n return await window.BD.state.cdpDataPromise;\n }\n window.BD.state.cdpDataPromise = cdpDataPromise.promise;\n\n try {\n const ecid = (await this.visitorInfo)?.identity?.ECID;\n const cdpDataCall = await fetch(\n `${Constants.PUBLIC_URL_ORIGIN}/cdp/`,\n {\n method: 'POST',\n body : JSON.stringify({\n mcvisid: ecid || '',\n ...pageLoadStartedEvent.page\n })\n }\n );\n\n /** @type {{auds: string[], mdl: {key: string, value: string}[], ub: any[] vid: string}} */\n const receivedCdpData: CdpDataJson = await cdpDataCall.json();\n cdpData = {\n auds: receivedCdpData?.auds[0] || ''\n };\n\n if (receivedCdpData.mdl) {\n cdpData = receivedCdpData?.mdl.reduce((acc, mdlValue) => {\n acc[mdlValue.key] = mdlValue.value;\n return acc;\n }, cdpData);\n }\n\n if (receivedCdpData.ub) {\n cdpData = receivedCdpData?.ub.reduce((acc, ubValue) => {\n acc[ubValue.key] = ubValue.value;\n return acc;\n }, cdpData);\n }\n\n AdobeDataLayerService.push(new CdpEvent(cdpData));\n } catch (e) {\n console.warn(e);\n }\n\n cdpDataPromise.resolve(cdpData);\n return cdpData;\n }\n\n private transfromIntoProfileParameters(object: { [key: string]: string | undefined }) {\n const profileObject: { [key: string]: string | undefined } = Object.keys(object).reduce((acc, key) => {\n acc[`profile.${key}`] = object[key];\n return acc;\n }, {} as { [key: string]: string | undefined });\n\n return profileObject;\n }\n\n public async getOffers(param: {\n mboxNames : 'config-mbox',\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }): Promise<ConfigMbox | undefined>;\n public async getOffers(param: {\n mboxNames : string,\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }): Promise<object | undefined>;\n public async getOffers(param: {\n mboxNames : string[],\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }): Promise<Record<string, object | undefined>>;\n public async getOffers(param: {\n mboxNames : string[] | string,\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }) {\n let { mboxNames } = param;\n const isInitialyArray = Array.isArray(mboxNames);\n const { parameters, profileParameters } = param;\n if (!Array.isArray(mboxNames)) {\n mboxNames = [mboxNames];\n }\n\n const cdpData = await this.cdpData;\n if (this.controller.signal?.aborted) {\n return mboxNames.length > 1 ? {} : undefined;\n }\n\n const notRequestedMboxes = mboxNames.filter(\n mbox => !this.cachedMboxes.has(`${mbox}_${JSON.stringify(parameters)}`)\n );\n if (notRequestedMboxes.length) {\n const notRequestedOffersCall = window.alloyProxy('sendEvent', {\n type : 'decisioning.propositionFetch',\n decisionScopes: notRequestedMboxes,\n data : {\n '__adobe': {\n 'target': Object.assign(\n {},\n this.urlParameters,\n this.profileUrlParameters,\n parameters ? parameters : {},\n profileParameters ? profileParameters : {},\n cdpData,\n this.transfromIntoProfileParameters(cdpData)\n )\n }\n }\n });\n\n notRequestedOffersCall.then(result => {\n const htmlPropositions = result.propositions.filter(\n proposition => proposition?.items?.some(item => {\n try {\n JSON.parse(`${item?.data?.content}`);\n return false;\n } catch {\n return true;\n }\n }));\n\n const jsonPropositions = result.propositions.filter(\n proposition => proposition?.items?.some(item => {\n try {\n JSON.parse(`${item?.data?.content}`);\n return true;\n } catch {\n return false;\n }\n })\n ).map(proposition => {\n const { ...propositionCopy } = proposition;\n delete propositionCopy.items;\n delete propositionCopy.renderAttempted;\n return propositionCopy;\n });\n\n if (htmlPropositions.length) {\n window.alloyProxy('applyPropositions', {\n 'propositions': htmlPropositions,\n 'viewName' : window.location.href\n });\n }\n\n if (jsonPropositions.length) {\n AdobeDataLayerService.push(new DecisionsDisplayedEvent(jsonPropositions));\n }\n });\n\n notRequestedMboxes.forEach(mbox => {\n const receivedMboxOfferCall: Promise<AlloyResponsePropositions | undefined> = new Promise((resolve, reject) => {\n notRequestedOffersCall.then(result => {\n const mboxResult = result.propositions.find(\n (offer) => offer.scope === mbox\n );\n\n resolve(mboxResult);\n }).catch(e => {\n reject(e);\n });\n\n this.controller.signal?.addEventListener('abort', reject);\n });\n\n this.cachedMboxes.set(`${mbox}_${JSON.stringify(parameters)}_${JSON.stringify(profileParameters)}`, receivedMboxOfferCall);\n });\n }\n\n const mboxesPromises = mboxNames.map(\n mboxName => this.cachedMboxes.get(`${mboxName}_${JSON.stringify(parameters)}_${JSON.stringify(profileParameters)}`)\n );\n const resolvedMboxes = await Promise.allSettled(mboxesPromises);\n const tryParse = (content: unknown) => {\n try {\n return JSON.parse(`${content}`);\n } catch {\n return content;\n }\n };\n\n const offersResult = mboxNames.reduce((acc, mboxName, index) => {\n acc[mboxName] = resolvedMboxes[index].status === 'fulfilled' ? tryParse(resolvedMboxes[index].value?.items?.[0]?.data?.content) : undefined;\n return acc;\n }, {} as Record<string, object | undefined>);\n\n return isInitialyArray ? offersResult : offersResult[mboxNames[0]];\n }\n\n public async getMboxProposition<T extends object = object>(\n param: { mboxName: string, parameters?: MboxParameters, profileParameters?: MboxProfileParameters }\n ): Promise<AlloyResponsePropositions<T> | undefined> {\n return await this.cachedMboxes.get(\n `${param.mboxName}_${JSON.stringify(param.parameters)}_${JSON.stringify(param.profileParameters)}`\n ) as AlloyResponsePropositions<T> | undefined;\n }\n\n public async trackOffer(param: { id: AlloyResponsePropositions[\"id\"], scope: AlloyResponsePropositions[\"scope\"], scopeDetails: AlloyResponsePropositions[\"scopeDetails\"] }) {\n await window.alloyProxy('sendEvent', {\n type: 'decisioning.propositionInteract',\n xdm : {\n _experience: {\n decisioning: {\n propositions: [\n {\n id : param.id,\n scope : param.scope,\n scopeDetails: param.scopeDetails\n }\n ]\n }\n }\n }\n });\n }\n}\n\nwindow.BD = window.BD || {};\nwindow.BD.state = window.BD.state || {};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from '@repobit/dex-constants';\nimport { AdobeDataLayerService, AlloyResponsePropositions, CdpEvent, DecisionsDisplayedEvent, PageLoadStartedEvent } from '@repobit/dex-data-layer';\nimport {\n AlloyAppendIdentityToUrlResponse,\n AlloyApplyPropositionsResponse,\n AlloyFunction,\n AlloySendEventResponse,\n AppendIdentityToUrlCall,\n ApplyPropositionsCall,\n CdpData,\n CdpDataJson,\n ConfigMbox,\n GetIdentityCall,\n GetIdentityResponse,\n MboxParameters,\n MboxProfileParameters,\n SendEventCall,\n URLParameters\n} from './typeDefinitions';\n\ndeclare global {\n interface Window {\n alloyProxy: AlloyFunction;\n BD: {\n state: {\n cdpDataPromise: Promise<CdpData>\n }\n }\n }\n}\n\nif (!window.Promise.withResolvers) {\n window.Promise.withResolvers = function<T>() {\n let resolve, reject;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { resolve, reject, promise } as unknown as PromiseWithResolvers<T>;\n }\n}\n\ntype JsonObject = Record<string, unknown>\ntype JsonArray = unknown[]\n\nconst parseIfJsonObjectOrArray = <T = JsonObject | JsonArray> (\n value: unknown\n): T | string => {\n // already parsed\n if (typeof value === 'object' && value !== null) {\n return value as T\n }\n\n if (typeof value !== 'string') {\n return value as string\n }\n\n const trimmed = value.trim()\n\n // HTML bailout (A/B test content)\n if (trimmed.startsWith('<')) {\n return value\n }\n\n // only allow object or array shapes\n const looksLikeJson =\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n\n if (!looksLikeJson) {\n return value\n }\n\n try {\n const parsed = JSON.parse(trimmed)\n\n // reject primitives\n if (typeof parsed === 'object' && parsed !== null) {\n return parsed as T\n }\n\n return value\n } catch {\n return value\n }\n}\n\ntype ParsedResult<T> =\n | { type: 'json'; value: T }\n | { type: 'string'; value: string }\n\nexport function parseIfJsonStrict<T = JsonObject | JsonArray>(\n value: unknown\n): ParsedResult<T> {\n const parsed = parseIfJsonObjectOrArray<T>(value)\n\n return typeof parsed === 'string'\n ? { type: 'string', value: parsed }\n : { type: 'json', value: parsed }\n}\n\nexport default class Target {\n private urlParameters : URLParameters;\n private profileUrlParameters: { [key: string]: string | undefined };\n private cachedMboxes : Map<string, Promise<AlloyResponsePropositions | undefined>>;\n private _configMbox : Promise<ConfigMbox | undefined>;\n private controller : AbortController = new AbortController();\n private _visitorInfo : Promise<GetIdentityResponse>;\n private cdpData : Promise<CdpData>;\n\n constructor(config?: Partial<{ pageLoadStartedEvent: PageLoadStartedEvent }>) {\n this.urlParameters = this.getUrlParameters();\n this.profileUrlParameters = this.transfromIntoProfileParameters(this.urlParameters);\n this.cachedMboxes = new Map();\n\n if (!window.alloyProxy) {\n function __alloy(...args: SendEventCall): Promise<AlloySendEventResponse>;\n function __alloy(...args: AppendIdentityToUrlCall): Promise<AlloyAppendIdentityToUrlResponse>;\n function __alloy(...args: ApplyPropositionsCall): Promise<AlloyApplyPropositionsResponse>;\n function __alloy(...args: GetIdentityCall): Promise<GetIdentityResponse>;\n function __alloy(...args: SendEventCall | AppendIdentityToUrlCall | ApplyPropositionsCall | GetIdentityCall):\n Promise<AlloySendEventResponse | AlloyAppendIdentityToUrlResponse | AlloyApplyPropositionsResponse | GetIdentityResponse> {\n return new Promise((resolve, reject) => {\n window.alloyProxy.q.push([resolve, reject, args]);\n });\n }\n\n window.alloyProxy = __alloy as AlloyFunction;\n window.alloyProxy.q = [];\n }\n\n // check for dotest=1 in URL. If it exists abort all target calls\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('dotest') === '1') {\n this.abort();\n }\n\n this._visitorInfo = new Promise((resolve) => {\n if (this.controller.signal?.aborted) {\n resolve({});\n }\n\n window.alloyProxy('getIdentity').then(result => resolve(result))\n .catch(() => resolve({}));\n this.controller.signal?.addEventListener('abort', () => resolve({}));\n });\n this.cdpData = config?.pageLoadStartedEvent && urlParams.get('dotest') !== '1'\n ? this.sendCdpData(config?.pageLoadStartedEvent)\n : Promise.resolve({} as CdpData);\n this._configMbox = this.getOffers({ mboxNames: 'config-mbox' });\n }\n\n /** get an object containing all the url query parameters */\n private getUrlParameters(): URLParameters {\n const urlParams = new URLSearchParams(window.location.search);\n const parameters: URLParameters = {};\n\n urlParams.forEach((value: string, key: string) => {\n parameters[key] = value;\n });\n\n return parameters;\n }\n\n public get configMbox() {\n return this._configMbox;\n }\n\n public get visitorInfo() {\n return this._visitorInfo;\n }\n\n /** add adobe_mc parameter at the end of the url */\n public appendVisitorIDsTo(url: string): Promise<string> {\n if (this.controller.signal?.aborted || url.includes('adobe_mc')) {\n return Promise.resolve(url);\n }\n\n return new Promise((resolve) => {\n window.alloyProxy('appendIdentityToUrl', { url }).then(result => resolve(result.url))\n .catch(() => resolve(url));\n this.controller.signal?.addEventListener('abort', () => resolve(url));\n });\n }\n\n /** abort all the Target calls for casese where Target does not load */\n public abort(): void {\n this.controller.abort();\n }\n\n public async sendCdpData(pageLoadStartedEvent: PageLoadStartedEvent): Promise<CdpData> {\n const cdpDataPromise = Promise.withResolvers<CdpData>();\n let cdpData: CdpData = {};\n if (window.BD.state.cdpDataPromise) {\n return await window.BD.state.cdpDataPromise;\n }\n window.BD.state.cdpDataPromise = cdpDataPromise.promise;\n\n try {\n const ecid = (await this.visitorInfo)?.identity?.ECID;\n const cdpDataCall = await fetch(\n `${Constants.PUBLIC_URL_ORIGIN}/cdp/`,\n {\n method: 'POST',\n body : JSON.stringify({\n mcvisid: ecid || '',\n ...pageLoadStartedEvent.page\n })\n }\n );\n\n /** @type {{auds: string[], mdl: {key: string, value: string}[], ub: any[] vid: string}} */\n const receivedCdpData: CdpDataJson = await cdpDataCall.json();\n cdpData = {\n auds: receivedCdpData?.auds[0] || ''\n };\n\n if (receivedCdpData.mdl) {\n cdpData = receivedCdpData?.mdl.reduce((acc, mdlValue) => {\n acc[mdlValue.key] = mdlValue.value;\n return acc;\n }, cdpData);\n }\n\n if (receivedCdpData.ub) {\n cdpData = receivedCdpData?.ub.reduce((acc, ubValue) => {\n acc[ubValue.key] = ubValue.value;\n return acc;\n }, cdpData);\n }\n\n AdobeDataLayerService.push(new CdpEvent(cdpData));\n } catch (e) {\n console.warn(e);\n }\n\n cdpDataPromise.resolve(cdpData);\n return cdpData;\n }\n\n private transfromIntoProfileParameters(object: { [key: string]: string | undefined }) {\n const profileObject: { [key: string]: string | undefined } = Object.keys(object).reduce((acc, key) => {\n acc[`profile.${key}`] = object[key];\n return acc;\n }, {} as { [key: string]: string | undefined });\n\n return profileObject;\n }\n\n public async getOffers(param: {\n mboxNames : 'config-mbox',\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }): Promise<ConfigMbox | undefined>;\n public async getOffers(param: {\n mboxNames : string,\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }): Promise<object | undefined>;\n public async getOffers(param: {\n mboxNames : string[],\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }): Promise<Record<string, object | undefined>>;\n public async getOffers(param: {\n mboxNames : string[] | string,\n parameters? : MboxParameters,\n profileParameters?: MboxProfileParameters\n }) {\n let { mboxNames } = param;\n const isInitialyArray = Array.isArray(mboxNames);\n const { parameters, profileParameters } = param;\n if (!Array.isArray(mboxNames)) {\n mboxNames = [mboxNames];\n }\n\n const cdpData = await this.cdpData;\n if (this.controller.signal?.aborted) {\n return mboxNames.length > 1 ? {} : undefined;\n }\n\n const notRequestedMboxes = mboxNames.filter(\n mbox => !this.cachedMboxes.has(`${mbox}_${JSON.stringify(parameters)}`)\n );\n if (notRequestedMboxes.length) {\n const notRequestedOffersCall = window.alloyProxy('sendEvent', {\n type : 'decisioning.propositionFetch',\n decisionScopes: notRequestedMboxes,\n data : {\n '__adobe': {\n 'target': Object.assign(\n {},\n this.urlParameters,\n this.profileUrlParameters,\n parameters ? parameters : {},\n profileParameters ? profileParameters : {},\n cdpData,\n this.transfromIntoProfileParameters(cdpData)\n )\n }\n }\n });\n\n notRequestedOffersCall.then(result => {\n const htmlPropositions = result.propositions.filter(\n proposition => proposition?.items?.some(item => parseIfJsonStrict(item?.data?.content).type === 'string')\n );\n\n const jsonPropositions = result.propositions.filter(\n proposition => proposition?.items?.some(item => parseIfJsonStrict(item?.data?.content).type === 'json')\n ).map(proposition => {\n const { ...propositionCopy } = proposition;\n delete propositionCopy.items;\n delete propositionCopy.renderAttempted;\n return propositionCopy;\n });\n\n if (htmlPropositions.length) {\n window.alloyProxy('applyPropositions', {\n 'propositions': htmlPropositions,\n 'viewName' : window.location.href\n });\n }\n\n if (jsonPropositions.length) {\n AdobeDataLayerService.push(new DecisionsDisplayedEvent(jsonPropositions));\n }\n });\n\n notRequestedMboxes.forEach(mbox => {\n const receivedMboxOfferCall: Promise<AlloyResponsePropositions | undefined> = new Promise((resolve, reject) => {\n notRequestedOffersCall.then(result => {\n const mboxResult = result.propositions.find(\n (offer) => offer.scope === mbox\n );\n\n resolve(mboxResult);\n }).catch(e => {\n reject(e);\n });\n\n this.controller.signal?.addEventListener('abort', reject);\n });\n\n this.cachedMboxes.set(`${mbox}_${JSON.stringify(parameters)}_${JSON.stringify(profileParameters)}`, receivedMboxOfferCall);\n });\n }\n\n const mboxesPromises = mboxNames.map(\n mboxName => this.cachedMboxes.get(`${mboxName}_${JSON.stringify(parameters)}_${JSON.stringify(profileParameters)}`)\n );\n const resolvedMboxes = await Promise.allSettled(mboxesPromises);\n\n const offersResult = mboxNames.reduce((acc, mboxName, index) => {\n acc[mboxName] = resolvedMboxes[index].status === 'fulfilled' ? parseIfJsonObjectOrArray(resolvedMboxes[index].value?.items?.[0]?.data?.content) : undefined;\n return acc;\n }, {} as Record<string, string | object | undefined>);\n\n return isInitialyArray ? offersResult : offersResult[mboxNames[0]];\n }\n\n public async getMboxProposition<T extends object = object>(\n param: { mboxName: string, parameters?: MboxParameters, profileParameters?: MboxProfileParameters }\n ): Promise<AlloyResponsePropositions<T> | undefined> {\n return await this.cachedMboxes.get(\n `${param.mboxName}_${JSON.stringify(param.parameters)}_${JSON.stringify(param.profileParameters)}`\n ) as AlloyResponsePropositions<T> | undefined;\n }\n\n public async trackOffer(param: { id: AlloyResponsePropositions[\"id\"], scope: AlloyResponsePropositions[\"scope\"], scopeDetails: AlloyResponsePropositions[\"scopeDetails\"] }) {\n await window.alloyProxy('sendEvent', {\n type: 'decisioning.propositionInteract',\n xdm : {\n _experience: {\n decisioning: {\n propositions: [\n {\n id : param.id,\n scope : param.scope,\n scopeDetails: param.scopeDetails\n }\n ]\n }\n }\n }\n });\n }\n}\n\nwindow.BD = window.BD || {};\nwindow.BD.state = window.BD.state || {};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@repobit/dex-target",
3
- "version": "2.12.0",
3
+ "version": "2.12.1",
4
4
  "description": "Client for Adobe Target",
5
5
  "author": "Constantin Ioan Mihai <iconstantin@bitdefender.com>",
6
6
  "homepage": "https://github.com/bitdefender/dex-core#readme",
@@ -36,5 +36,5 @@
36
36
  "volta": {
37
37
  "node": "22.14.0"
38
38
  },
39
- "gitHead": "5061c92fe41ef853077b7ccdd35da03a4e6ffb54"
39
+ "gitHead": "fec2be624d8edad9cf2bc05d31d83886b73af85e"
40
40
  }