{"version":3,"sources":["jsdelivr-header.js","/npm/@repobit/dex-target@2.5.20/src/index.ts"],"names":[],"mappings":"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","file":"/npm/@repobit/dex-target@2.5.20/dist/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@repobit/dex-target@2.5.20/dist/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { Constants } from '@repobit/dex-constants';\nimport { AdobeDataLayerService, 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<object | 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      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 => item.data?.format?.includes('html') || !item.data)\n        );\n        const jsonPropositions = result.propositions.filter(\n          proposition => proposition?.items?.some(item => item.data?.format?.includes('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<object | undefined> = new Promise((resolve, reject) => {\n          notRequestedOffersCall.then(result => {\n            const mboxResult = result.propositions.find(\n              (offer) => offer.scope === mbox\n            )?.items?.[0]?.data?.content;\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' ? resolvedMboxes[index].value : undefined;\n      return acc;\n    }, {} as Record<string, object | undefined>);\n\n    return isInitialyArray ? offersResult : offersResult[mboxNames[0]];\n  }\n}\n\nwindow.BD = window.BD || {};\nwindow.BD.state = window.BD.state || {};"]}