@optable/web-sdk 0.41.2 → 0.43.0
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/README.md +0 -3
- package/browser/dist/sdk.js +1 -1
- package/lib/dist/addons/prototypes/analytics.js +1 -1
- package/lib/dist/build.json +1 -1
- package/lib/dist/config.d.ts +5 -2
- package/lib/dist/config.js +1 -0
- package/lib/dist/core/events/cache-refresh.js +2 -1
- package/lib/dist/core/network.js +3 -0
- package/lib/dist/core/prebid/rtd.d.ts +82 -0
- package/lib/dist/core/prebid/rtd.js +251 -0
- package/lib/dist/edge/targeting.d.ts +1 -0
- package/lib/dist/edge/targeting.js +3 -0
- package/lib/dist/edge/tokenize.js +1 -4
- package/lib/dist/sdk.js +0 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -114,9 +114,6 @@ When creating an instance of `OptableSDK`, you can pass an `InitConfig` object t
|
|
|
114
114
|
- **`cookies` (boolean, default: `true`)**
|
|
115
115
|
If `true`, enables the use of browser cookies for storage.
|
|
116
116
|
|
|
117
|
-
- **`legacyHostCache` (string)**
|
|
118
|
-
Used when migrating from one DCN host to another. If specified, it retains the previous cache state when switching hosts.
|
|
119
|
-
|
|
120
117
|
- **`initPassport` (boolean, default: `true`)**
|
|
121
118
|
If `true`, initializes the user passport (identity mechanism) upon SDK load.
|
|
122
119
|
|
package/browser/dist/sdk.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see sdk.js.LICENSE.txt */
|
|
2
|
-
(()=>{var e={312:(e,t,r)=>{var i;!function(){"use strict";var t="input is invalid type",s="object"==typeof window,n=s?window:{};n.JS_SHA256_NO_WINDOW&&(s=!1);var o=!s&&"object"==typeof self,a=!n.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;a?n=r.g:o&&(n=self);var c=!n.JS_SHA256_NO_COMMON_JS&&e.exports,d=r.amdO,u=!n.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,h="0123456789abcdef".split(""),p=[-2147483648,8388608,32768,128],l=[24,16,8,0],g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],f=["hex","array","digest","arrayBuffer"],m=[];!n.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!u||!n.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var y=function(e,t){return function(r){return new b(t,!0).update(r)[e]()}},w=function(e){var t=y("hex",e);a&&(t=v(t,e)),t.create=function(){return new b(e)},t.update=function(e){return t.create().update(e)};for(var r=0;r<f.length;++r){var i=f[r];t[i]=y(i,e)}return t},v=function(e,i){var s,o=r(394),a=r(903).Buffer,c=i?"sha224":"sha256";return s=a.from&&!n.JS_SHA256_NO_BUFFER_FROM?a.from:function(e){return new a(e)},function(r){if("string"==typeof r)return o.createHash(c).update(r,"utf8").digest("hex");if(null==r)throw new Error(t);return r.constructor===ArrayBuffer&&(r=new Uint8Array(r)),Array.isArray(r)||ArrayBuffer.isView(r)||r.constructor===a?o.createHash(c).update(s(r)).digest("hex"):e(r)}},A=function(e,t){return function(r,i){return new P(r,t,!0).update(i)[e]()}},S=function(e){var t=A("hex",e);t.create=function(t){return new P(t,e)},t.update=function(e,r){return t.create(e).update(r)};for(var r=0;r<f.length;++r){var i=f[r];t[i]=A(i,e)}return t};function b(e,t){t?(m[0]=m[16]=m[1]=m[2]=m[3]=m[4]=m[5]=m[6]=m[7]=m[8]=m[9]=m[10]=m[11]=m[12]=m[13]=m[14]=m[15]=0,this.blocks=m):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=e}function P(e,r,i){var s,n=typeof e;if("string"===n){var o,a=[],c=e.length,d=0;for(s=0;s<c;++s)(o=e.charCodeAt(s))<128?a[d++]=o:o<2048?(a[d++]=192|o>>>6,a[d++]=128|63&o):o<55296||o>=57344?(a[d++]=224|o>>>12,a[d++]=128|o>>>6&63,a[d++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++s)),a[d++]=240|o>>>18,a[d++]=128|o>>>12&63,a[d++]=128|o>>>6&63,a[d++]=128|63&o);e=a}else{if("object"!==n)throw new Error(t);if(null===e)throw new Error(t);if(u&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||u&&ArrayBuffer.isView(e)))throw new Error(t)}e.length>64&&(e=new b(r,!0).update(e).array());var h=[],p=[];for(s=0;s<64;++s){var l=e[s]||0;h[s]=92^l,p[s]=54^l}b.call(this,r,i),this.update(p),this.oKeyPad=h,this.inner=!0,this.sharedMemory=i}b.prototype.update=function(e){if(!this.finalized){var r,i=typeof e;if("string"!==i){if("object"!==i)throw new Error(t);if(null===e)throw new Error(t);if(u&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||u&&ArrayBuffer.isView(e)))throw new Error(t);r=!0}for(var s,n,o=0,a=e.length,c=this.blocks;o<a;){if(this.hashed&&(this.hashed=!1,c[0]=this.block,this.block=c[16]=c[1]=c[2]=c[3]=c[4]=c[5]=c[6]=c[7]=c[8]=c[9]=c[10]=c[11]=c[12]=c[13]=c[14]=c[15]=0),r)for(n=this.start;o<a&&n<64;++o)c[n>>>2]|=e[o]<<l[3&n++];else for(n=this.start;o<a&&n<64;++o)(s=e.charCodeAt(o))<128?c[n>>>2]|=s<<l[3&n++]:s<2048?(c[n>>>2]|=(192|s>>>6)<<l[3&n++],c[n>>>2]|=(128|63&s)<<l[3&n++]):s<55296||s>=57344?(c[n>>>2]|=(224|s>>>12)<<l[3&n++],c[n>>>2]|=(128|s>>>6&63)<<l[3&n++],c[n>>>2]|=(128|63&s)<<l[3&n++]):(s=65536+((1023&s)<<10|1023&e.charCodeAt(++o)),c[n>>>2]|=(240|s>>>18)<<l[3&n++],c[n>>>2]|=(128|s>>>12&63)<<l[3&n++],c[n>>>2]|=(128|s>>>6&63)<<l[3&n++],c[n>>>2]|=(128|63&s)<<l[3&n++]);this.lastByteIndex=n,this.bytes+=n-this.start,n>=64?(this.block=c[16],this.start=n-64,this.hash(),this.hashed=!0):this.start=n}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},b.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>>2]|=p[3&t],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},b.prototype.hash=function(){var e,t,r,i,s,n,o,a,c,d=this.h0,u=this.h1,h=this.h2,p=this.h3,l=this.h4,f=this.h5,m=this.h6,y=this.h7,w=this.blocks;for(e=16;e<64;++e)t=((s=w[e-15])>>>7|s<<25)^(s>>>18|s<<14)^s>>>3,r=((s=w[e-2])>>>17|s<<15)^(s>>>19|s<<13)^s>>>10,w[e]=w[e-16]+t+w[e-7]+r|0;for(c=u&h,e=0;e<64;e+=4)this.first?(this.is224?(n=300032,y=(s=w[0]-1413257819)-150054599|0,p=s+24177077|0):(n=704751109,y=(s=w[0]-210244248)-1521486534|0,p=s+143694565|0),this.first=!1):(t=(d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),i=(n=d&u)^d&h^c,y=p+(s=y+(r=(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7))+(l&f^~l&m)+g[e]+w[e])|0,p=s+(t+i)|0),t=(p>>>2|p<<30)^(p>>>13|p<<19)^(p>>>22|p<<10),i=(o=p&d)^p&u^n,m=h+(s=m+(r=(y>>>6|y<<26)^(y>>>11|y<<21)^(y>>>25|y<<7))+(y&l^~y&f)+g[e+1]+w[e+1])|0,t=((h=s+(t+i)|0)>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),i=(a=h&p)^h&d^o,f=u+(s=f+(r=(m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+(m&y^~m&l)+g[e+2]+w[e+2])|0,t=((u=s+(t+i)|0)>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),i=(c=u&h)^u&p^a,l=d+(s=l+(r=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))+(f&m^~f&y)+g[e+3]+w[e+3])|0,d=s+(t+i)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+d|0,this.h1=this.h1+u|0,this.h2=this.h2+h|0,this.h3=this.h3+p|0,this.h4=this.h4+l|0,this.h5=this.h5+f|0,this.h6=this.h6+m|0,this.h7=this.h7+y|0},b.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,i=this.h3,s=this.h4,n=this.h5,o=this.h6,a=this.h7,c=h[e>>>28&15]+h[e>>>24&15]+h[e>>>20&15]+h[e>>>16&15]+h[e>>>12&15]+h[e>>>8&15]+h[e>>>4&15]+h[15&e]+h[t>>>28&15]+h[t>>>24&15]+h[t>>>20&15]+h[t>>>16&15]+h[t>>>12&15]+h[t>>>8&15]+h[t>>>4&15]+h[15&t]+h[r>>>28&15]+h[r>>>24&15]+h[r>>>20&15]+h[r>>>16&15]+h[r>>>12&15]+h[r>>>8&15]+h[r>>>4&15]+h[15&r]+h[i>>>28&15]+h[i>>>24&15]+h[i>>>20&15]+h[i>>>16&15]+h[i>>>12&15]+h[i>>>8&15]+h[i>>>4&15]+h[15&i]+h[s>>>28&15]+h[s>>>24&15]+h[s>>>20&15]+h[s>>>16&15]+h[s>>>12&15]+h[s>>>8&15]+h[s>>>4&15]+h[15&s]+h[n>>>28&15]+h[n>>>24&15]+h[n>>>20&15]+h[n>>>16&15]+h[n>>>12&15]+h[n>>>8&15]+h[n>>>4&15]+h[15&n]+h[o>>>28&15]+h[o>>>24&15]+h[o>>>20&15]+h[o>>>16&15]+h[o>>>12&15]+h[o>>>8&15]+h[o>>>4&15]+h[15&o];return this.is224||(c+=h[a>>>28&15]+h[a>>>24&15]+h[a>>>20&15]+h[a>>>16&15]+h[a>>>12&15]+h[a>>>8&15]+h[a>>>4&15]+h[15&a]),c},b.prototype.toString=b.prototype.hex,b.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,i=this.h3,s=this.h4,n=this.h5,o=this.h6,a=this.h7,c=[e>>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,r>>>24&255,r>>>16&255,r>>>8&255,255&r,i>>>24&255,i>>>16&255,i>>>8&255,255&i,s>>>24&255,s>>>16&255,s>>>8&255,255&s,n>>>24&255,n>>>16&255,n>>>8&255,255&n,o>>>24&255,o>>>16&255,o>>>8&255,255&o];return this.is224||c.push(a>>>24&255,a>>>16&255,a>>>8&255,255&a),c},b.prototype.array=b.prototype.digest,b.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e},P.prototype=new b,P.prototype.finalize=function(){if(b.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();b.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),b.prototype.finalize.call(this)}};var I=w();I.sha256=I,I.sha224=w(!0),I.sha256.hmac=S(),I.sha224.hmac=S(!0),c?e.exports=I:(n.sha256=I.sha256,n.sha224=I.sha224,d&&(void 0===(i=function(){return I}.call(I,r,I,e))||(e.exports=i)))}()},903:()=>{},394:()=>{}},t={};function r(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,r),n.exports}r.amdO={},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";const e={r:"v0.41.2"};function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function i(e,r,i){return(r=function(e){var r=function(e){if("object"!=t(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,"string");if("object"!=t(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==t(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[r]=i,e}async function s(e){const t=await S("/config",e,{method:"GET",headers:{Accept:"application/json"}});return new A(e).setSite(t),t}const n={"Europe/Vienna":"gdpr","Europe/Brussels":"gdpr","Europe/Sofia":"gdpr","Europe/Zagreb":"gdpr","Asia/Nicosia":"gdpr","Europe/Nicosia":"gdpr","Europe/Prague":"gdpr","Europe/Copenhagen":"gdpr","Europe/Tallinn":"gdpr","Europe/Helsinki":"gdpr","Europe/Paris":"gdpr","Europe/Berlin":"gdpr","Europe/Athens":"gdpr","Europe/Budapest":"gdpr","Atlantic/Reykjavik":"gdpr","Europe/Dublin":"gdpr","Europe/Rome":"gdpr","Europe/Riga":"gdpr","Europe/Vaduz":"gdpr","Europe/Vilnius":"gdpr","Europe/Luxembourg":"gdpr","Europe/Malta":"gdpr","Europe/Oslo":"gdpr","Europe/Warsaw":"gdpr","Europe/Lisbon":"gdpr","Europe/Bucharest":"gdpr","Europe/Bratislava":"gdpr","Europe/Ljubljana":"gdpr","Europe/Madrid":"gdpr","Europe/Stockholm":"gdpr","Europe/Amsterdam":"gdpr","Atlantic/Azores":"gdpr","Atlantic/Canary":"gdpr","America/Cayenne":"gdpr","America/Guadeloupe":"gdpr","Atlantic/Madeira":"gdpr","America/Martinique":"gdpr","Indian/Mayotte":"gdpr","Indian/Reunion":"gdpr","America/Marigot":"gdpr","Europe/Zurich":"gdpr","Europe/London":"gdpr","America/Toronto":"can","America/Adak":"us","America/Anchorage":"us","America/Atka":"us","America/Boise":"us","America/Chicago":"us","America/Denver":"us","America/Detroit":"us","America/Indiana/Indianapolis":"us","America/Indiana/Knox":"us","America/Indiana/Marengo":"us","America/Indiana/Petersburg":"us","America/Indiana/Tell_City":"us","America/Indiana/Vevay":"us","America/Indiana/Vincennes":"us","America/Indiana/Winamac":"us","America/Indianapolis":"us","America/Juneau":"us","America/Kentucky/Louisville":"us","America/Kentucky/Monticello":"us","America/Knox_IN":"us","America/Los_Angeles":"us","America/Louisville":"us","America/Menominee":"us","America/Metlakatla":"us","America/New_York":"us","America/Nome":"us","America/North_Dakota/Beulah":"us","America/North_Dakota/Center":"us","America/North_Dakota/New_Salem":"us","America/Phoenix":"us","America/Shiprock":"us","America/Sitka":"us","America/Yakutat":"us","Pacific/Honolulu":"us"},o="tcfcav1",a="tcfeuv2",c=[2],d=[5],u=[7,8,10,12,17,13,18,14,19,20,21,15,22,16,11,9];function h(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=function(e,t){const{gdprApplies:r,gppSectionIDs:i,gdprData:s}=t;if(void 0!==r)return r?"gdpr":"gdpr"===e?null:e;if(void 0!==s&&"gdpr"===e)return"gdpr";if(void 0===i||1===i.length&&0===i[0])return e;if(1===i.length&&-1===i[0])return null;if(i.some((e=>c.includes(e))))return"gdpr";if(i.some((e=>d.includes(e))))return"can";if(i.some((e=>u.includes(e))))return"us";switch(e){case"gdpr":if(!i.some((e=>c.includes(e))))return null;break;case"can":if(!i.some((e=>d.includes(e))))return null;break;case"us":if(!i.some((e=>u.includes(e))))return null}return e}(e,t),s={reg:i,gpp:t.gppString,gppSectionIDs:t.gppSectionIDs,gdpr:t.gdprString,gdprApplies:t.gdprApplies,deviceAccess:!1,createProfilesForAdvertising:!1,useProfilesForAdvertising:!1,measureAdvertisingPerformance:!1};switch(i){case"gdpr":t.gdprData?(s.deviceAccess=l(t.gdprData,1,r.tcfeuVendorID),s.createProfilesForAdvertising=l(t.gdprData,3,r.tcfeuVendorID),s.useProfilesForAdvertising=l(t.gdprData,4,r.tcfeuVendorID),s.measureAdvertisingPerformance=l(t.gdprData,7,r.tcfeuVendorID)):t.gppData&&(s.deviceAccess=f(t.gppData,1,r.tcfeuVendorID),s.createProfilesForAdvertising=f(t.gppData,3,r.tcfeuVendorID),s.useProfilesForAdvertising=f(t.gppData,4,r.tcfeuVendorID),s.measureAdvertisingPerformance=f(t.gppData,7,r.tcfeuVendorID));break;case"can":s.deviceAccess=!0,t.gppData&&(s.createProfilesForAdvertising=g(t.gppData,3,r.tcfcaVendorID),s.useProfilesForAdvertising=g(t.gppData,4,r.tcfcaVendorID),s.measureAdvertisingPerformance=g(t.gppData,7,r.tcfcaVendorID));break;default:s.deviceAccess=!0,s.createProfilesForAdvertising=!0,s.useProfilesForAdvertising=!0,s.measureAdvertisingPerformance=!0}return s}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={};!function(){if("function"==typeof window.__tcfapi)return;let e;const t={};let r=window;for(;r;){try{if(r.frames.__tcfapiLocator){e=r;break}}catch{}if(r===window.top)break;r=r.parent}e&&(window.__tcfapi=function(r,i,s){const n=Math.random()+"";t[n]=s,e.postMessage({__tcfapiCall:{command:r,version:i,callId:n}},"*")},window.addEventListener("message",(e=>{let r={};try{r="string"==typeof e.data?JSON.parse(e.data):e.data}catch{}const i=r.__tcfapiReturn;i&&"function"==typeof t[i.callId]&&(t[i.callId](i.returnValue,i.success),delete t[i.callId])}),!1))}(),function(){if("function"==typeof window.__gpp)return;let e;const t={};let r=window;for(;r;){try{if(r.frames.__gppLocator){e=r;break}}catch{}if(r===window.top)break;r=r.parent}e&&(window.__gpp=function(r,i){const s=Math.random()+"";t[s]=i,e.postMessage({__gppCall:{command:r,version:"1.1",callId:s}},"*")},window.addEventListener("message",(e=>{let r={};try{r="string"==typeof e.data?JSON.parse(e.data):e.data}catch{}const i=r.__gppReturn;i&&"function"==typeof t[i.callId]&&(t[i.callId](i.returnValue,i.success),delete t[i.callId])}),!1))}();const i=h(e,r,t);return"function"==typeof window.__tcfapi&&window.__tcfapi?.("addEventListener",2,((s,n)=>{n&&("tcloaded"===s.eventStatus||"useractioncomplete"===s.eventStatus)&&(s=>{r.gdprString=s.tcString,r.gdprApplies=s.gdprApplies,r.gdprData=s,Object.assign(i,h(e,r,t))})(s)})),"function"==typeof window.__gpp&&window.__gpp?.("addEventListener",((s,n)=>{n&&"signalStatus"===s.eventName&&"ready"===s.data&&(s=>{r.gppString=s.gppString,r.gppSectionIDs=s.applicableSections,r.gppData=s,Object.assign(i,h(e,r,t))})(s.pingData)})),i}function l(e,t,r){return r?!!e.purpose?.consents?.[t]&&!!e.vendor?.consents?.[r]:!!e.publisher?.consents?.[t]}function g(e,t,r){const i=t>1,s=e.parsedSections?.[o]||[];if("number"==typeof r){const e=s.find((e=>"Version"in e));if(!e)return!1;let n=e.PurposesExpressConsent.includes(t)&&e.VendorExpressConsent.includes(r);return i&&(n||=e.PurposesImpliedConsent.includes(t)&&e.VendorImpliedConsent.includes(r)),n}const n=s.find((e=>"SubsectionType"in e&&3===e.SubsectionType));if(!n)return!1;let a=n.PubPurposesExpressConsent.includes(t);return i&&(a||=n.PubPurposesImpliedConsent.includes(t)),a}function f(e,t,r){const i=t>1,s=e.parsedSections?.[a]||[];if("number"==typeof r){const e=s.find((e=>"Version"in e));if(!e)return!1;let n=e.PurposeConsent.includes(t)&&e.VendorConsent.includes(r);return i&&(n||=e.PurposesLITransparency.includes(t)&&e.VendorLegitimateInterest.includes(r)),n}const n=s.find((e=>"SegmentType"in e&&3===e.SegmentType));if(!n)return!1;let o=n.PubPurposesConsent.includes(t);return i&&(o||=n.PubPurposesLITransparency.includes(t)),o}class m{constructor(e){i(this,"consent",void 0),this.consent=e}getItem(e){return this.consent.deviceAccess?window.localStorage.getItem(e):null}setItem(e,t){this.consent.deviceAccess&&window.localStorage.setItem(e,t)}removeItem(e){this.consent.deviceAccess&&window.localStorage.removeItem(e)}}const y="_optable_pairId";function w(e){const t=new Uint16Array(e.length);for(let r=0;r<t.length;r++)t[r]=e.charCodeAt(r);return btoa(String.fromCharCode(...new Uint8Array(t.buffer)))}function v(e){return e.node?w(`${e.host}/${e.node}`):w(`${e.host}`)}class A{constructor(e){this.config=e,i(this,"passportKeys",void 0),i(this,"targetingKeys",void 0),i(this,"siteKeys",void 0),i(this,"pairKeys",void 0),i(this,"storage",void 0),this.passportKeys=function(e){const t=[],r=[],i=`OPTABLE_PASSPORT_${v(e)}`;return t.push(i),r.push(i),e.legacyHostCache?(r.push(`OPTABLE_PASSPORT_${w(`${e.legacyHostCache}`)}`),r.push(`OPTABLE_PASS_${w(`${e.legacyHostCache}/${e.site}`)}`)):r.push(`OPTABLE_PASS_${w(`${e.host}/${e.site}`)}`),{write:t,read:r}}(e),this.targetingKeys=function(e){const t=`OPTABLE_TARGETING_${v(e)}`;return{write:[t,e.optableCacheTargeting],read:[t]}}(e),this.siteKeys=function(e){const t=`OPTABLE_SITE_${v(e)}`;return{write:[t],read:[t]}}(e),this.pairKeys={write:[y],read:[y]},this.storage=new m(this.config.consent)}getPassport(){return this.readStorageKeys(this.passportKeys)}setPassport(e){this.writeToStorageKeys(this.passportKeys,e)}getTargeting(){const e=this.readStorageKeys(this.targetingKeys);return e?JSON.parse(e):null}setTargeting(e){e&&(this.writeToStorageKeys(this.targetingKeys,JSON.stringify(e)),this.setPairIDs(e))}getSite(){const e=this.readStorageKeys(this.siteKeys);return e?JSON.parse(e):null}setSite(e){e&&this.writeToStorageKeys(this.siteKeys,JSON.stringify(e))}setPairIDs(e){const t=e.ortb2?.user?.eids?.filter((e=>"pair-protocol.com"===e.source)),r=t?.flatMap((e=>e.uids));if(!r)return;const i=new Set(r.map((e=>e.id)));this.writeToStorageKeys(this.pairKeys,btoa(JSON.stringify({envelope:[...i]})))}getPairIDs(){const e=this.readStorageKeys(this.pairKeys);return e?JSON.parse(atob(e))?.envelope:null}readStorageKeys(e){for(const t of e.read){const e=this.storage.getItem(t);if(e)return e}return null}writeToStorageKeys(e,t){if(t)for(const r of e.write)this.storage.setItem(r,t)}clearStorageKeys(e){for(const t of[...e.read,...e.write])this.storage.removeItem(t)}clearPassport(){this.clearStorageKeys(this.passportKeys)}clearTargeting(){this.clearStorageKeys(this.targetingKeys)}clearSite(){this.clearStorageKeys(this.siteKeys)}}async function S(t,r,i){const s=await globalThis.fetch(function(t,r,i){const{host:s,cookies:n}=r,o=new URL(t,`https://${s}`);if(o.searchParams.set("osdk",`web-${e.r}`),o.searchParams.set("sid",r.sessionID),r.skipEnrichment&&o.searchParams.set("skip_enrichment",`${r.skipEnrichment}`),r.node&&o.searchParams.set("t",r.node),r.site&&o.searchParams.set("o",r.site),void 0!==r.consent.gpp&&o.searchParams.set("gpp",r.consent.gpp),void 0!==r.consent.gppSectionIDs&&o.searchParams.set("gpp_sid",r.consent.gppSectionIDs.join(",")),void 0!==r.consent.gdpr&&o.searchParams.set("gdpr_consent",r.consent.gdpr),void 0!==r.consent.gdprApplies&&o.searchParams.set("gdpr",Number(r.consent.gdprApplies).toString()),r.readOnly&&o.searchParams.set("ro","true"),n)o.searchParams.set("cookies","yes");else{const e=new A(r).getPassport();o.searchParams.set("cookies","no"),o.searchParams.set("passport",e||"")}const a={...i};return a.credentials=r.consent.deviceAccess?"include":"omit",r.mockedIP&&(a.headers=new Headers(a.headers),a.headers.set("X-Forwarded-For",r.mockedIP)),new Request(o.toString(),a)}(t,r,i)),n=s.headers.get("Content-Type"),o=n?.startsWith("application/json")?await s.json():await s.text();if(!s.ok)throw new Error(o.error);return o.passport&&(new A(r).setPassport(o.passport),delete o.passport),o}var b,P,I,_=((P=_||{})[P.Banner=1]="Banner",P[P.Video=2]="Video",P[P.Audio=3]="Audio",P[P.Native=4]="Native",P),E={},T={},k={};(I=b||(b={})).Placement=T,I.Media=k,I.Context=E;const C={cookies:!0,initPassport:!0,readOnly:!1,experiments:[],consent:{reg:null,deviceAccess:!0,createProfilesForAdvertising:!0,useProfilesForAdvertising:!0,measureAdvertisingPerformance:!0}};function D(){const e=new Uint8Array(16);return crypto.getRandomValues(e),btoa(String.fromCharCode(...e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function O(e){return{user:{data:(e?.audience??[]).map((e=>({name:e.provider,segment:e.ids,ext:{segtax:e.rtb_segtax}}))),ext:{eids:(e?.user??[]).map((e=>({source:e.provider,uids:e.ids.map((e=>{let{id:t}=e;return{id:t,atype:3}}))})))}}}}function x(e){const t={};if(!e)return t;for(const r of e.audience??[])r.keyspace&&(r.keyspace in t||(t[r.keyspace]=[]),t[r.keyspace].push(...r.ids.map((e=>e.id))));return t}function N(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function K(){const e={};let t=0;return{refs:e,process:(r,i)=>{if(!r.refs)return i;for(const s of i.uids)if(N(s.ext?.optable)&&"ref"in s.ext.optable&&"string"==typeof s.ext.optable.ref){const i=r.refs[s.ext.optable.ref];t+=1;const n=t.toString(10);e[n]=i,s.ext.optable.ref=n}return i}}}var B=r(312);class V{constructor(e){i(this,"dcn",void 0),i(this,"init",void 0),this.dcn=function(e){const t={host:e.host,site:e.site,optableCacheTargeting:e.optableCacheTargeting??"optable-cache:targeting",cookies:e.cookies??C.cookies,initPassport:e.initPassport??C.initPassport,consent:C.consent,readOnly:e.readOnly??C.readOnly,node:e.node,legacyHostCache:e.legacyHostCache,experiments:e.experiments??C.experiments,mockedIP:e.mockedIP,sessionID:e.sessionID??D(),skipEnrichment:e.skipEnrichment,initTargeting:e.initTargeting,abTests:e.abTests,additionalTargetingSignals:e.additionalTargetingSignals};return e.consent?.static?t.consent=e.consent.static:e.consent?.cmpapi&&(t.consent=p(function(){const e=Intl.DateTimeFormat().resolvedOptions().timeZone,t=n[e];return"can"===t?["fr","fr-CA"].some((e=>navigator.languages.includes(e)))?"can":null:t??null}(),e.consent.cmpapi)),t}(e),this.init=this.initialize()}async initialize(){this.dcn.initPassport&&await s(this.dcn).catch((()=>{})),this.dcn.initTargeting&&this.targeting().catch((()=>{}))}async identify(){await this.init;for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e,t){return S("/identify",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}(this.dcn,t.filter((e=>e)))}async uid2Token(e){return await this.init,function(e,t){return S("/uid2/token",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}(this.dcn,e)}async targeting(){const e=function(e){if("string"==typeof e)return{ids:[e],hids:[]};if(N(e))return{ids:e?.ids??[],hids:e?.hids??[]};throw"Invalid request type for targeting. Expected string or object."}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"__passport__");if(e.ids.length>1&&!this.dcn.experiments.includes("targeting-cascade"))throw"Targeting multiple IDs is only available with the 'targeting-cascade' experiment enabled.";return await this.init,async function(e,t){const r=new URLSearchParams;t.ids.forEach((e=>r.append("id",e))),t.hids.forEach((e=>r.append("hid",e)));const i=function(e){if(!e||0===e.length)return null;if(e.reduce(((e,t)=>e+t.trafficPercentage),0)>100)return console.error("AB Test Config Error: Traffic Percentage Sum Exceeds 100%"),null;const t=Math.floor(100*Math.random());let r=0;for(const i of e)if(r+=i.trafficPercentage,t<r)return i;return null}(e.abTests);i&&(r.append("ab_test_id",i.id),i.matcher_override)&&[...i.matcher_override].sort(((e,t)=>e.rank-t.rank)).forEach((e=>{r.append("matcher_override",e.id)}));e.additionalTargetingSignals?.ref&&r.append("ref",`${window.location.protocol}//${window.location.host}${window.location.pathname}`);const s="/v2/targeting?"+r.toString(),n=await S(s,e,{method:"GET",headers:{Accept:"application/json"}});return n&&(new A(e).setTargeting(n),function(e,t){const r=t.ortb2?.user?.eids?.map((e=>e.matcher));window.dispatchEvent(new CustomEvent("optable-targeting:change",{detail:{instance:e.node||e.host,resolved:!!t.ortb2?.user?.eids?.length,resolvedIDs:t.resolved_ids??[],ortb2:t.ortb2,provenance:new Set(r)}}))}(e,n)),n}(this.dcn,e)}targetingFromCache(){return e=this.dcn,new A(e).getTargeting();var e}async site(){return s(this.dcn)}siteFromCache(){return e=this.dcn,new A(e).getSite();var e}targetingClearCache(){var e;e=this.dcn,new A(e).clearTargeting()}async prebidORTB2(){return O(await this.targeting())}prebidORTB2FromCache(){return O(this.targetingFromCache())}async targetingKeyValues(){return x(await this.targeting())}targetingKeyValuesFromCache(){return x(this.targetingFromCache())}async witness(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return await this.init,function(e,t,r){const i={event:t,properties:r};return S("/witness",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}(this.dcn,e,t)}async profile(e){return await this.init,function(e,t){const r={traits:t};return S("/profile",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}(this.dcn,e)}async tokenize(e){return await this.init,function(e,t){let r="/v1/tokenize";e.experiments.includes("tokenize-v2")&&(r="/v2/tokenize");let i={id:t};return S(r,e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}(this.dcn,e)}async resolve(e){return await this.init,async function(e,t){const r=new URLSearchParams;"string"==typeof t&&r.append("id",t);const i="/v1/resolve?"+r.toString();return function(e){const t={clusters:[],lmpid:""};if("object"!=typeof e||null===e)return t;if("lmpid"in e&&"string"==typeof e?.lmpid&&(t.lmpid=e.lmpid),!("clusters"in e)||!Array.isArray(e?.clusters))return t;for(const r of e.clusters){const e={ids:[],traits:[]};if(Array.isArray(r?.ids))for(const t of r.ids)"string"==typeof t&&e.ids.push(t);if(Array.isArray(r?.traits))for(const t of r.traits)"string"==typeof t?.key&&"string"==typeof t?.value&&e.traits.push({key:t.key,value:t.value});(e.ids.length>0||e.traits.length>0)&&t.clusters.push(e)}return t}(await S(i,e,{method:"GET",headers:{Accept:"application/json"}}))}(this.dcn,e)}static eid(e){return e?"e:"+B.sha256.hex(e.toLowerCase().trim()):""}static sha256(e){return e?B.sha256.hex(e):""}static cid(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r="c:";if("string"!=typeof e)throw new Error("Invalid ppid");if("number"!=typeof t||isNaN(t)||t<0||t>19)throw new Error("Invalid variant");return t>0&&(r=`c${t}:`),e?r+e.trim():""}static TargetingKeyValues(e){return x(e)}static PrebidORTB2(e){return O(e)}}i(V,"version",e.r);const L=V;function j(e){return{advertiserId:e.advertiserId?.toString(),campaignId:e.campaignId?.toString(),creativeId:e.creativeId?.toString(),isEmpty:e.isEmpty?.toString(),lineItemId:e.lineItemId?.toString(),serviceName:e.serviceName?.toString(),size:e.size?.toString(),slotElementId:e.slot?.getSlotElementId(),sourceAgnosticCreativeId:e.sourceAgnosticCreativeId?.toString(),sourceAgnosticLineItemId:e.sourceAgnosticLineItemId?.toString()}}L.prototype.installGPTEventListeners=function(){const e=this;e.installGPTEventListeners=function(){},window.googletag=window.googletag||{cmd:[]};const t=window.googletag;t.cmd.push((function(){t.pubads().addEventListener("slotRenderEnded",(function(t){e.witness("googletag.events.slotRenderEnded",j(t))})),t.pubads().addEventListener("impressionViewable",(function(t){e.witness("googletag.events.impressionViewable",j(t))}))}))},L.prototype.installGPTSecureSignals=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];window.googletag=window.googletag||{cmd:[]};const i=window.googletag;t&&t.length>0&&i.cmd.push((()=>{t.forEach((e=>{let{provider:t,id:r}=e;i.secureSignalProviders.push({id:t,collectorFunction:()=>Promise.resolve(r)})}))}))};const F=/^[a-f0-9]{64}$/i;L.prototype.tryIdentifyFromParams=function(e,t){const r=new RegExp(`^${e||"oeid"}$`,"i"),i=new URLSearchParams(window.location.search);let s="";for(const[e,t]of i)if(r.test(e)){s=t;break}""!=s&&(t||function(e){return F.test(e)}(s))&&this.identify((t||"e")+":"+s.toLowerCase())},window.optable=window.optable||{},window.optable.SDK=L,window.optable.cmd=new class{constructor(e){if(this.cmds=e,Array.isArray(this.cmds))for(const e of this.cmds)"function"==typeof e&&e()}push(e){e()}}(window.optable.cmd||[]),window.optable.utils={resolveMultiNodeTargeting:async function(e){return e?e.some((e=>e.priority))?async function(e){const t=new Set,{refs:r,process:i}=K(),s={user:{data:[],eids:[]}},n=new Map,o=new Map;const a=e.map((e=>{let{targetingFn:t,matcher:r,mm:a,priority:c}=e;return t().then((e=>function(e,t,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const c=Math.max(0,a),{data:d=[],eids:u=[]}=e.ortb2?.user??{};s.user.data.push(...d),u.filter((e=>e.uids.length)).forEach((s=>{const a=s.matcher??t,d=n.get(c)??[];a&&n.set(c,[...d,a]);const u={...i(e,s),matcher:s.matcher??t,mm:s.mm??r},h=o.get(c)??[];o.set(c,[...h,u])}))}(e,r,a,c)))}));await Promise.allSettled(a);const c=Array.from(o.keys()).sort(((e,t)=>e-t)).filter((e=>o.get(e)?.length)).shift();if(c){const e=n.get(c)||[];s.user.eids.push(...o.get(c)||[]),e.forEach((e=>t.add(e)))}return{ortb2:s,eidSources:t,refs:r}}(e):async function(e){const t=new Set,{refs:r,process:i}=K(),s={user:{data:[],eids:[]}};const n=e.map((e=>{let{targetingFn:r,matcher:n,mm:o}=e;return r().then((e=>function(e,r,n){const{data:o=[],eids:a=[]}=e.ortb2?.user??{};s.user.data.push(...o),a.filter((e=>e.uids.length)).forEach((o=>{const a=o.matcher??r;a&&t.add(a),s.user.eids.push({...i(e,o),mm:o.mm??n,matcher:o.matcher??r})}))}(e,n,o)))}));return await Promise.allSettled(n),{ortb2:s,eidSources:t,refs:r}}(e):Promise.reject("No targeting rules provided")}},window.optable.instance_config&&(window.optable.instance=new L(window.optable.instance_config))})()})();
|
|
2
|
+
(()=>{var e={312:(e,t,r)=>{var i;!function(){"use strict";var t="input is invalid type",s="object"==typeof window,n=s?window:{};n.JS_SHA256_NO_WINDOW&&(s=!1);var o=!s&&"object"==typeof self,a=!n.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;a?n=r.g:o&&(n=self);var c=!n.JS_SHA256_NO_COMMON_JS&&e.exports,d=r.amdO,u=!n.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,h="0123456789abcdef".split(""),p=[-2147483648,8388608,32768,128],l=[24,16,8,0],g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],f=["hex","array","digest","arrayBuffer"],m=[];!n.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!u||!n.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var y=function(e,t){return function(r){return new b(t,!0).update(r)[e]()}},w=function(e){var t=y("hex",e);a&&(t=v(t,e)),t.create=function(){return new b(e)},t.update=function(e){return t.create().update(e)};for(var r=0;r<f.length;++r){var i=f[r];t[i]=y(i,e)}return t},v=function(e,i){var s,o=r(394),a=r(903).Buffer,c=i?"sha224":"sha256";return s=a.from&&!n.JS_SHA256_NO_BUFFER_FROM?a.from:function(e){return new a(e)},function(r){if("string"==typeof r)return o.createHash(c).update(r,"utf8").digest("hex");if(null==r)throw new Error(t);return r.constructor===ArrayBuffer&&(r=new Uint8Array(r)),Array.isArray(r)||ArrayBuffer.isView(r)||r.constructor===a?o.createHash(c).update(s(r)).digest("hex"):e(r)}},A=function(e,t){return function(r,i){return new P(r,t,!0).update(i)[e]()}},S=function(e){var t=A("hex",e);t.create=function(t){return new P(t,e)},t.update=function(e,r){return t.create(e).update(r)};for(var r=0;r<f.length;++r){var i=f[r];t[i]=A(i,e)}return t};function b(e,t){t?(m[0]=m[16]=m[1]=m[2]=m[3]=m[4]=m[5]=m[6]=m[7]=m[8]=m[9]=m[10]=m[11]=m[12]=m[13]=m[14]=m[15]=0,this.blocks=m):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=e}function P(e,r,i){var s,n=typeof e;if("string"===n){var o,a=[],c=e.length,d=0;for(s=0;s<c;++s)(o=e.charCodeAt(s))<128?a[d++]=o:o<2048?(a[d++]=192|o>>>6,a[d++]=128|63&o):o<55296||o>=57344?(a[d++]=224|o>>>12,a[d++]=128|o>>>6&63,a[d++]=128|63&o):(o=65536+((1023&o)<<10|1023&e.charCodeAt(++s)),a[d++]=240|o>>>18,a[d++]=128|o>>>12&63,a[d++]=128|o>>>6&63,a[d++]=128|63&o);e=a}else{if("object"!==n)throw new Error(t);if(null===e)throw new Error(t);if(u&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||u&&ArrayBuffer.isView(e)))throw new Error(t)}e.length>64&&(e=new b(r,!0).update(e).array());var h=[],p=[];for(s=0;s<64;++s){var l=e[s]||0;h[s]=92^l,p[s]=54^l}b.call(this,r,i),this.update(p),this.oKeyPad=h,this.inner=!0,this.sharedMemory=i}b.prototype.update=function(e){if(!this.finalized){var r,i=typeof e;if("string"!==i){if("object"!==i)throw new Error(t);if(null===e)throw new Error(t);if(u&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||u&&ArrayBuffer.isView(e)))throw new Error(t);r=!0}for(var s,n,o=0,a=e.length,c=this.blocks;o<a;){if(this.hashed&&(this.hashed=!1,c[0]=this.block,this.block=c[16]=c[1]=c[2]=c[3]=c[4]=c[5]=c[6]=c[7]=c[8]=c[9]=c[10]=c[11]=c[12]=c[13]=c[14]=c[15]=0),r)for(n=this.start;o<a&&n<64;++o)c[n>>>2]|=e[o]<<l[3&n++];else for(n=this.start;o<a&&n<64;++o)(s=e.charCodeAt(o))<128?c[n>>>2]|=s<<l[3&n++]:s<2048?(c[n>>>2]|=(192|s>>>6)<<l[3&n++],c[n>>>2]|=(128|63&s)<<l[3&n++]):s<55296||s>=57344?(c[n>>>2]|=(224|s>>>12)<<l[3&n++],c[n>>>2]|=(128|s>>>6&63)<<l[3&n++],c[n>>>2]|=(128|63&s)<<l[3&n++]):(s=65536+((1023&s)<<10|1023&e.charCodeAt(++o)),c[n>>>2]|=(240|s>>>18)<<l[3&n++],c[n>>>2]|=(128|s>>>12&63)<<l[3&n++],c[n>>>2]|=(128|s>>>6&63)<<l[3&n++],c[n>>>2]|=(128|63&s)<<l[3&n++]);this.lastByteIndex=n,this.bytes+=n-this.start,n>=64?(this.block=c[16],this.start=n-64,this.hash(),this.hashed=!0):this.start=n}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},b.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>>2]|=p[3&t],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},b.prototype.hash=function(){var e,t,r,i,s,n,o,a,c,d=this.h0,u=this.h1,h=this.h2,p=this.h3,l=this.h4,f=this.h5,m=this.h6,y=this.h7,w=this.blocks;for(e=16;e<64;++e)t=((s=w[e-15])>>>7|s<<25)^(s>>>18|s<<14)^s>>>3,r=((s=w[e-2])>>>17|s<<15)^(s>>>19|s<<13)^s>>>10,w[e]=w[e-16]+t+w[e-7]+r|0;for(c=u&h,e=0;e<64;e+=4)this.first?(this.is224?(n=300032,y=(s=w[0]-1413257819)-150054599|0,p=s+24177077|0):(n=704751109,y=(s=w[0]-210244248)-1521486534|0,p=s+143694565|0),this.first=!1):(t=(d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),i=(n=d&u)^d&h^c,y=p+(s=y+(r=(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7))+(l&f^~l&m)+g[e]+w[e])|0,p=s+(t+i)|0),t=(p>>>2|p<<30)^(p>>>13|p<<19)^(p>>>22|p<<10),i=(o=p&d)^p&u^n,m=h+(s=m+(r=(y>>>6|y<<26)^(y>>>11|y<<21)^(y>>>25|y<<7))+(y&l^~y&f)+g[e+1]+w[e+1])|0,t=((h=s+(t+i)|0)>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),i=(a=h&p)^h&d^o,f=u+(s=f+(r=(m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+(m&y^~m&l)+g[e+2]+w[e+2])|0,t=((u=s+(t+i)|0)>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),i=(c=u&h)^u&p^a,l=d+(s=l+(r=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))+(f&m^~f&y)+g[e+3]+w[e+3])|0,d=s+(t+i)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+d|0,this.h1=this.h1+u|0,this.h2=this.h2+h|0,this.h3=this.h3+p|0,this.h4=this.h4+l|0,this.h5=this.h5+f|0,this.h6=this.h6+m|0,this.h7=this.h7+y|0},b.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,i=this.h3,s=this.h4,n=this.h5,o=this.h6,a=this.h7,c=h[e>>>28&15]+h[e>>>24&15]+h[e>>>20&15]+h[e>>>16&15]+h[e>>>12&15]+h[e>>>8&15]+h[e>>>4&15]+h[15&e]+h[t>>>28&15]+h[t>>>24&15]+h[t>>>20&15]+h[t>>>16&15]+h[t>>>12&15]+h[t>>>8&15]+h[t>>>4&15]+h[15&t]+h[r>>>28&15]+h[r>>>24&15]+h[r>>>20&15]+h[r>>>16&15]+h[r>>>12&15]+h[r>>>8&15]+h[r>>>4&15]+h[15&r]+h[i>>>28&15]+h[i>>>24&15]+h[i>>>20&15]+h[i>>>16&15]+h[i>>>12&15]+h[i>>>8&15]+h[i>>>4&15]+h[15&i]+h[s>>>28&15]+h[s>>>24&15]+h[s>>>20&15]+h[s>>>16&15]+h[s>>>12&15]+h[s>>>8&15]+h[s>>>4&15]+h[15&s]+h[n>>>28&15]+h[n>>>24&15]+h[n>>>20&15]+h[n>>>16&15]+h[n>>>12&15]+h[n>>>8&15]+h[n>>>4&15]+h[15&n]+h[o>>>28&15]+h[o>>>24&15]+h[o>>>20&15]+h[o>>>16&15]+h[o>>>12&15]+h[o>>>8&15]+h[o>>>4&15]+h[15&o];return this.is224||(c+=h[a>>>28&15]+h[a>>>24&15]+h[a>>>20&15]+h[a>>>16&15]+h[a>>>12&15]+h[a>>>8&15]+h[a>>>4&15]+h[15&a]),c},b.prototype.toString=b.prototype.hex,b.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,i=this.h3,s=this.h4,n=this.h5,o=this.h6,a=this.h7,c=[e>>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,r>>>24&255,r>>>16&255,r>>>8&255,255&r,i>>>24&255,i>>>16&255,i>>>8&255,255&i,s>>>24&255,s>>>16&255,s>>>8&255,255&s,n>>>24&255,n>>>16&255,n>>>8&255,255&n,o>>>24&255,o>>>16&255,o>>>8&255,255&o];return this.is224||c.push(a>>>24&255,a>>>16&255,a>>>8&255,255&a),c},b.prototype.array=b.prototype.digest,b.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e},P.prototype=new b,P.prototype.finalize=function(){if(b.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();b.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),b.prototype.finalize.call(this)}};var _=w();_.sha256=_,_.sha224=w(!0),_.sha256.hmac=S(),_.sha224.hmac=S(!0),c?e.exports=_:(n.sha256=_.sha256,n.sha224=_.sha224,d&&(void 0===(i=function(){return _}.call(_,r,_,e))||(e.exports=i)))}()},903:()=>{},394:()=>{}},t={};function r(i){var s=t[i];if(void 0!==s)return s.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,r),n.exports}r.amdO={},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";const e={r:"v0.43.0"};function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function i(e,r,i){return(r=function(e){var r=function(e){if("object"!=t(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,"string");if("object"!=t(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==t(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[r]=i,e}async function s(e){const t=await S("/config",e,{method:"GET",headers:{Accept:"application/json"}});return new A(e).setSite(t),t}const n={"Europe/Vienna":"gdpr","Europe/Brussels":"gdpr","Europe/Sofia":"gdpr","Europe/Zagreb":"gdpr","Asia/Nicosia":"gdpr","Europe/Nicosia":"gdpr","Europe/Prague":"gdpr","Europe/Copenhagen":"gdpr","Europe/Tallinn":"gdpr","Europe/Helsinki":"gdpr","Europe/Paris":"gdpr","Europe/Berlin":"gdpr","Europe/Athens":"gdpr","Europe/Budapest":"gdpr","Atlantic/Reykjavik":"gdpr","Europe/Dublin":"gdpr","Europe/Rome":"gdpr","Europe/Riga":"gdpr","Europe/Vaduz":"gdpr","Europe/Vilnius":"gdpr","Europe/Luxembourg":"gdpr","Europe/Malta":"gdpr","Europe/Oslo":"gdpr","Europe/Warsaw":"gdpr","Europe/Lisbon":"gdpr","Europe/Bucharest":"gdpr","Europe/Bratislava":"gdpr","Europe/Ljubljana":"gdpr","Europe/Madrid":"gdpr","Europe/Stockholm":"gdpr","Europe/Amsterdam":"gdpr","Atlantic/Azores":"gdpr","Atlantic/Canary":"gdpr","America/Cayenne":"gdpr","America/Guadeloupe":"gdpr","Atlantic/Madeira":"gdpr","America/Martinique":"gdpr","Indian/Mayotte":"gdpr","Indian/Reunion":"gdpr","America/Marigot":"gdpr","Europe/Zurich":"gdpr","Europe/London":"gdpr","America/Toronto":"can","America/Adak":"us","America/Anchorage":"us","America/Atka":"us","America/Boise":"us","America/Chicago":"us","America/Denver":"us","America/Detroit":"us","America/Indiana/Indianapolis":"us","America/Indiana/Knox":"us","America/Indiana/Marengo":"us","America/Indiana/Petersburg":"us","America/Indiana/Tell_City":"us","America/Indiana/Vevay":"us","America/Indiana/Vincennes":"us","America/Indiana/Winamac":"us","America/Indianapolis":"us","America/Juneau":"us","America/Kentucky/Louisville":"us","America/Kentucky/Monticello":"us","America/Knox_IN":"us","America/Los_Angeles":"us","America/Louisville":"us","America/Menominee":"us","America/Metlakatla":"us","America/New_York":"us","America/Nome":"us","America/North_Dakota/Beulah":"us","America/North_Dakota/Center":"us","America/North_Dakota/New_Salem":"us","America/Phoenix":"us","America/Shiprock":"us","America/Sitka":"us","America/Yakutat":"us","Pacific/Honolulu":"us"},o="tcfcav1",a="tcfeuv2",c=[2],d=[5],u=[7,8,10,12,17,13,18,14,19,20,21,15,22,16,11,9];function h(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=function(e,t){const{gdprApplies:r,gppSectionIDs:i,gdprData:s}=t;if(void 0!==r)return r?"gdpr":"gdpr"===e?null:e;if(void 0!==s&&"gdpr"===e)return"gdpr";if(void 0===i||1===i.length&&0===i[0])return e;if(1===i.length&&-1===i[0])return null;if(i.some((e=>c.includes(e))))return"gdpr";if(i.some((e=>d.includes(e))))return"can";if(i.some((e=>u.includes(e))))return"us";switch(e){case"gdpr":if(!i.some((e=>c.includes(e))))return null;break;case"can":if(!i.some((e=>d.includes(e))))return null;break;case"us":if(!i.some((e=>u.includes(e))))return null}return e}(e,t),s={reg:i,gpp:t.gppString,gppSectionIDs:t.gppSectionIDs,gdpr:t.gdprString,gdprApplies:t.gdprApplies,deviceAccess:!1,createProfilesForAdvertising:!1,useProfilesForAdvertising:!1,measureAdvertisingPerformance:!1};switch(i){case"gdpr":t.gdprData?(s.deviceAccess=l(t.gdprData,1,r.tcfeuVendorID),s.createProfilesForAdvertising=l(t.gdprData,3,r.tcfeuVendorID),s.useProfilesForAdvertising=l(t.gdprData,4,r.tcfeuVendorID),s.measureAdvertisingPerformance=l(t.gdprData,7,r.tcfeuVendorID)):t.gppData&&(s.deviceAccess=f(t.gppData,1,r.tcfeuVendorID),s.createProfilesForAdvertising=f(t.gppData,3,r.tcfeuVendorID),s.useProfilesForAdvertising=f(t.gppData,4,r.tcfeuVendorID),s.measureAdvertisingPerformance=f(t.gppData,7,r.tcfeuVendorID));break;case"can":s.deviceAccess=!0,t.gppData&&(s.createProfilesForAdvertising=g(t.gppData,3,r.tcfcaVendorID),s.useProfilesForAdvertising=g(t.gppData,4,r.tcfcaVendorID),s.measureAdvertisingPerformance=g(t.gppData,7,r.tcfcaVendorID));break;default:s.deviceAccess=!0,s.createProfilesForAdvertising=!0,s.useProfilesForAdvertising=!0,s.measureAdvertisingPerformance=!0}return s}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={};!function(){if("function"==typeof window.__tcfapi)return;let e;const t={};let r=window;for(;r;){try{if(r.frames.__tcfapiLocator){e=r;break}}catch{}if(r===window.top)break;r=r.parent}e&&(window.__tcfapi=function(r,i,s){const n=Math.random()+"";t[n]=s,e.postMessage({__tcfapiCall:{command:r,version:i,callId:n}},"*")},window.addEventListener("message",(e=>{let r={};try{r="string"==typeof e.data?JSON.parse(e.data):e.data}catch{}const i=r.__tcfapiReturn;i&&"function"==typeof t[i.callId]&&(t[i.callId](i.returnValue,i.success),delete t[i.callId])}),!1))}(),function(){if("function"==typeof window.__gpp)return;let e;const t={};let r=window;for(;r;){try{if(r.frames.__gppLocator){e=r;break}}catch{}if(r===window.top)break;r=r.parent}e&&(window.__gpp=function(r,i){const s=Math.random()+"";t[s]=i,e.postMessage({__gppCall:{command:r,version:"1.1",callId:s}},"*")},window.addEventListener("message",(e=>{let r={};try{r="string"==typeof e.data?JSON.parse(e.data):e.data}catch{}const i=r.__gppReturn;i&&"function"==typeof t[i.callId]&&(t[i.callId](i.returnValue,i.success),delete t[i.callId])}),!1))}();const i=h(e,r,t);return"function"==typeof window.__tcfapi&&window.__tcfapi?.("addEventListener",2,((s,n)=>{n&&("tcloaded"===s.eventStatus||"useractioncomplete"===s.eventStatus)&&(s=>{r.gdprString=s.tcString,r.gdprApplies=s.gdprApplies,r.gdprData=s,Object.assign(i,h(e,r,t))})(s)})),"function"==typeof window.__gpp&&window.__gpp?.("addEventListener",((s,n)=>{n&&"signalStatus"===s.eventName&&"ready"===s.data&&(s=>{r.gppString=s.gppString,r.gppSectionIDs=s.applicableSections,r.gppData=s,Object.assign(i,h(e,r,t))})(s.pingData)})),i}function l(e,t,r){return r?!!e.purpose?.consents?.[t]&&!!e.vendor?.consents?.[r]:!!e.publisher?.consents?.[t]}function g(e,t,r){const i=t>1,s=e.parsedSections?.[o]||[];if("number"==typeof r){const e=s.find((e=>"Version"in e));if(!e)return!1;let n=e.PurposesExpressConsent.includes(t)&&e.VendorExpressConsent.includes(r);return i&&(n||=e.PurposesImpliedConsent.includes(t)&&e.VendorImpliedConsent.includes(r)),n}const n=s.find((e=>"SubsectionType"in e&&3===e.SubsectionType));if(!n)return!1;let a=n.PubPurposesExpressConsent.includes(t);return i&&(a||=n.PubPurposesImpliedConsent.includes(t)),a}function f(e,t,r){const i=t>1,s=e.parsedSections?.[a]||[];if("number"==typeof r){const e=s.find((e=>"Version"in e));if(!e)return!1;let n=e.PurposeConsent.includes(t)&&e.VendorConsent.includes(r);return i&&(n||=e.PurposesLITransparency.includes(t)&&e.VendorLegitimateInterest.includes(r)),n}const n=s.find((e=>"SegmentType"in e&&3===e.SegmentType));if(!n)return!1;let o=n.PubPurposesConsent.includes(t);return i&&(o||=n.PubPurposesLITransparency.includes(t)),o}class m{constructor(e){i(this,"consent",void 0),this.consent=e}getItem(e){return this.consent.deviceAccess?window.localStorage.getItem(e):null}setItem(e,t){this.consent.deviceAccess&&window.localStorage.setItem(e,t)}removeItem(e){this.consent.deviceAccess&&window.localStorage.removeItem(e)}}const y="_optable_pairId";function w(e){const t=new Uint16Array(e.length);for(let r=0;r<t.length;r++)t[r]=e.charCodeAt(r);return btoa(String.fromCharCode(...new Uint8Array(t.buffer)))}function v(e){return e.node?w(`${e.host}/${e.node}`):w(`${e.host}`)}class A{constructor(e){this.config=e,i(this,"passportKeys",void 0),i(this,"targetingKeys",void 0),i(this,"siteKeys",void 0),i(this,"pairKeys",void 0),i(this,"storage",void 0),this.passportKeys=function(e){const t=[],r=[],i=`OPTABLE_PASSPORT_${v(e)}`;return t.push(i),r.push(i),e.legacyHostCache?(r.push(`OPTABLE_PASSPORT_${w(`${e.legacyHostCache}`)}`),r.push(`OPTABLE_PASS_${w(`${e.legacyHostCache}/${e.site}`)}`)):r.push(`OPTABLE_PASS_${w(`${e.host}/${e.site}`)}`),{write:t,read:r}}(e),this.targetingKeys=function(e){const t=`OPTABLE_TARGETING_${v(e)}`;return{write:[t,e.optableCacheTargeting],read:[t]}}(e),this.siteKeys=function(e){const t=`OPTABLE_SITE_${v(e)}`;return{write:[t],read:[t]}}(e),this.pairKeys={write:[y],read:[y]},this.storage=new m(this.config.consent)}getPassport(){return this.readStorageKeys(this.passportKeys)}setPassport(e){this.writeToStorageKeys(this.passportKeys,e)}getTargeting(){const e=this.readStorageKeys(this.targetingKeys);return e?JSON.parse(e):null}setTargeting(e){e&&(this.writeToStorageKeys(this.targetingKeys,JSON.stringify(e)),this.setPairIDs(e))}getSite(){const e=this.readStorageKeys(this.siteKeys);return e?JSON.parse(e):null}setSite(e){e&&this.writeToStorageKeys(this.siteKeys,JSON.stringify(e))}setPairIDs(e){const t=e.ortb2?.user?.eids?.filter((e=>"pair-protocol.com"===e.source)),r=t?.flatMap((e=>e.uids));if(!r)return;const i=new Set(r.map((e=>e.id)));this.writeToStorageKeys(this.pairKeys,btoa(JSON.stringify({envelope:[...i]})))}getPairIDs(){const e=this.readStorageKeys(this.pairKeys);return e?JSON.parse(atob(e))?.envelope:null}readStorageKeys(e){for(const t of e.read){const e=this.storage.getItem(t);if(e)return e}return null}writeToStorageKeys(e,t){if(t)for(const r of e.write)this.storage.setItem(r,t)}clearStorageKeys(e){for(const t of[...e.read,...e.write])this.storage.removeItem(t)}clearPassport(){this.clearStorageKeys(this.passportKeys)}clearTargeting(){this.clearStorageKeys(this.targetingKeys)}clearSite(){this.clearStorageKeys(this.siteKeys)}}async function S(t,r,i){const s=await globalThis.fetch(function(t,r,i){const{host:s,cookies:n}=r,o=new URL(t,`https://${s}`);if(o.searchParams.set("osdk",`web-${e.r}`),o.searchParams.set("sid",r.sessionID),r.skipEnrichment&&o.searchParams.set("skip_enrichment",`${r.skipEnrichment}`),r.node&&o.searchParams.set("t",r.node),r.site&&o.searchParams.set("o",r.site),void 0!==r.consent.gpp&&o.searchParams.set("gpp",r.consent.gpp),void 0!==r.consent.gppSectionIDs&&o.searchParams.set("gpp_sid",r.consent.gppSectionIDs.join(",")),void 0!==r.consent.gdpr&&o.searchParams.set("gdpr_consent",r.consent.gdpr),void 0!==r.consent.gdprApplies&&o.searchParams.set("gdpr",Number(r.consent.gdprApplies).toString()),r.readOnly&&o.searchParams.set("ro","true"),r.timeout&&o.searchParams.set("timeout",r.timeout),n)o.searchParams.set("cookies","yes");else{const e=new A(r).getPassport();o.searchParams.set("cookies","no"),o.searchParams.set("passport",e||"")}const a={...i};return a.credentials=r.consent.deviceAccess?"include":"omit",r.mockedIP&&(a.headers=new Headers(a.headers),a.headers.set("X-Forwarded-For",r.mockedIP)),new Request(o.toString(),a)}(t,r,i)),n=s.headers.get("Content-Type"),o=n?.startsWith("application/json")?await s.json():await s.text();if(!s.ok)throw new Error(o.error);return o.passport&&(new A(r).setPassport(o.passport),delete o.passport),o}var b,P,_,I=((P=I||{})[P.Banner=1]="Banner",P[P.Video=2]="Video",P[P.Audio=3]="Audio",P[P.Native=4]="Native",P),E={},T={},k={};(_=b||(b={})).Placement=T,_.Media=k,_.Context=E;const C={cookies:!0,initPassport:!0,readOnly:!1,experiments:[],consent:{reg:null,deviceAccess:!0,createProfilesForAdvertising:!0,useProfilesForAdvertising:!0,measureAdvertisingPerformance:!0}};function D(){const e=new Uint8Array(16);return crypto.getRandomValues(e),btoa(String.fromCharCode(...e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function O(e){return{user:{data:(e?.audience??[]).map((e=>({name:e.provider,segment:e.ids,ext:{segtax:e.rtb_segtax}}))),ext:{eids:(e?.user??[]).map((e=>({source:e.provider,uids:e.ids.map((e=>{let{id:t}=e;return{id:t,atype:3}}))})))}}}}function x(e){const t={};if(!e)return t;for(const r of e.audience??[])r.keyspace&&(r.keyspace in t||(t[r.keyspace]=[]),t[r.keyspace].push(...r.ids.map((e=>e.id))));return t}function N(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function K(){const e={};let t=0;return{refs:e,process:(r,i)=>{if(!r.refs)return i;for(const s of i.uids)if(N(s.ext?.optable)&&"ref"in s.ext.optable&&"string"==typeof s.ext.optable.ref){const i=r.refs[s.ext.optable.ref];t+=1;const n=t.toString(10);e[n]=i,s.ext.optable.ref=n}return i}}}var B=r(312);class V{constructor(e){i(this,"dcn",void 0),i(this,"init",void 0),this.dcn=function(e){const t={host:e.host,site:e.site,optableCacheTargeting:e.optableCacheTargeting??"optable-cache:targeting",cookies:e.cookies??C.cookies,initPassport:e.initPassport??C.initPassport,consent:C.consent,readOnly:e.readOnly??C.readOnly,node:e.node,legacyHostCache:e.legacyHostCache,experiments:e.experiments??C.experiments,mockedIP:e.mockedIP,sessionID:e.sessionID??D(),skipEnrichment:e.skipEnrichment,initTargeting:e.initTargeting,abTests:e.abTests,additionalTargetingSignals:e.additionalTargetingSignals,timeout:e.timeout};return e.consent?.static?t.consent=e.consent.static:e.consent?.cmpapi&&(t.consent=p(function(){const e=Intl.DateTimeFormat().resolvedOptions().timeZone,t=n[e];return"can"===t?["fr","fr-CA"].some((e=>navigator.languages.includes(e)))?"can":null:t??null}(),e.consent.cmpapi)),t}(e),this.init=this.initialize()}async initialize(){this.dcn.initPassport&&await s(this.dcn).catch((()=>{})),this.dcn.initTargeting&&this.targeting().catch((()=>{}))}async identify(){await this.init;for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e,t){return S("/identify",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}(this.dcn,t.filter((e=>e)))}async uid2Token(e){return await this.init,function(e,t){return S("/uid2/token",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}(this.dcn,e)}async targeting(){const e=function(e){if("string"==typeof e)return{ids:[e],hids:[]};if(N(e))return{ids:e?.ids??[],hids:e?.hids??[]};throw"Invalid request type for targeting. Expected string or object."}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"__passport__");return await this.init,async function(e,t){const r=new URLSearchParams;t.ids.forEach((e=>r.append("id",e))),t.hids.forEach((e=>r.append("hid",e)));const i=function(e){if(!e||0===e.length)return null;if(e.reduce(((e,t)=>e+t.trafficPercentage),0)>100)return console.error("AB Test Config Error: Traffic Percentage Sum Exceeds 100%"),null;const t=Math.floor(100*Math.random());let r=0;for(const i of e)if(r+=i.trafficPercentage,t<r)return i;return null}(e.abTests);i&&(r.append("ab_test_id",i.id),i.matcher_override&&[...i.matcher_override].sort(((e,t)=>e.rank-t.rank)).forEach((e=>{r.append("matcher_override",e.id)})),i.skipMatchers&&r.append("skip_matchers",i.skipMatchers.join(",")));e.additionalTargetingSignals?.ref&&r.append("ref",`${window.location.protocol}//${window.location.host}${window.location.pathname}`);const s="/v2/targeting?"+r.toString(),n=await S(s,e,{method:"GET",headers:{Accept:"application/json"}});return n&&(new A(e).setTargeting(n),function(e,t){const r=t.ortb2?.user?.eids?.map((e=>e.matcher));window.dispatchEvent(new CustomEvent("optable-targeting:change",{detail:{instance:e.node||e.host,resolved:!!t.ortb2?.user?.eids?.length,resolvedIDs:t.resolved_ids??[],abTestID:t.ab_test_id??void 0,ortb2:t.ortb2,provenance:new Set(r)}}))}(e,n)),n}(this.dcn,e)}targetingFromCache(){return e=this.dcn,new A(e).getTargeting();var e}async site(){return s(this.dcn)}siteFromCache(){return e=this.dcn,new A(e).getSite();var e}targetingClearCache(){var e;e=this.dcn,new A(e).clearTargeting()}async prebidORTB2(){return O(await this.targeting())}prebidORTB2FromCache(){return O(this.targetingFromCache())}async targetingKeyValues(){return x(await this.targeting())}targetingKeyValuesFromCache(){return x(this.targetingFromCache())}async witness(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return await this.init,function(e,t,r){const i={event:t,properties:r};return S("/witness",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}(this.dcn,e,t)}async profile(e){return await this.init,function(e,t){const r={traits:t};return S("/profile",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}(this.dcn,e)}async tokenize(e){return await this.init,function(e,t){let r={id:t};return S("/v2/tokenize",e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}(this.dcn,e)}async resolve(e){return await this.init,async function(e,t){const r=new URLSearchParams;"string"==typeof t&&r.append("id",t);const i="/v1/resolve?"+r.toString();return function(e){const t={clusters:[],lmpid:""};if("object"!=typeof e||null===e)return t;if("lmpid"in e&&"string"==typeof e?.lmpid&&(t.lmpid=e.lmpid),!("clusters"in e)||!Array.isArray(e?.clusters))return t;for(const r of e.clusters){const e={ids:[],traits:[]};if(Array.isArray(r?.ids))for(const t of r.ids)"string"==typeof t&&e.ids.push(t);if(Array.isArray(r?.traits))for(const t of r.traits)"string"==typeof t?.key&&"string"==typeof t?.value&&e.traits.push({key:t.key,value:t.value});(e.ids.length>0||e.traits.length>0)&&t.clusters.push(e)}return t}(await S(i,e,{method:"GET",headers:{Accept:"application/json"}}))}(this.dcn,e)}static eid(e){return e?"e:"+B.sha256.hex(e.toLowerCase().trim()):""}static sha256(e){return e?B.sha256.hex(e):""}static cid(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r="c:";if("string"!=typeof e)throw new Error("Invalid ppid");if("number"!=typeof t||isNaN(t)||t<0||t>19)throw new Error("Invalid variant");return t>0&&(r=`c${t}:`),e?r+e.trim():""}static TargetingKeyValues(e){return x(e)}static PrebidORTB2(e){return O(e)}}i(V,"version",e.r);const j=V;function L(e){return{advertiserId:e.advertiserId?.toString(),campaignId:e.campaignId?.toString(),creativeId:e.creativeId?.toString(),isEmpty:e.isEmpty?.toString(),lineItemId:e.lineItemId?.toString(),serviceName:e.serviceName?.toString(),size:e.size?.toString(),slotElementId:e.slot?.getSlotElementId(),sourceAgnosticCreativeId:e.sourceAgnosticCreativeId?.toString(),sourceAgnosticLineItemId:e.sourceAgnosticLineItemId?.toString()}}j.prototype.installGPTEventListeners=function(){const e=this;e.installGPTEventListeners=function(){},window.googletag=window.googletag||{cmd:[]};const t=window.googletag;t.cmd.push((function(){t.pubads().addEventListener("slotRenderEnded",(function(t){e.witness("googletag.events.slotRenderEnded",L(t))})),t.pubads().addEventListener("impressionViewable",(function(t){e.witness("googletag.events.impressionViewable",L(t))}))}))},j.prototype.installGPTSecureSignals=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];window.googletag=window.googletag||{cmd:[]};const i=window.googletag;t&&t.length>0&&i.cmd.push((()=>{t.forEach((e=>{let{provider:t,id:r}=e;i.secureSignalProviders.push({id:t,collectorFunction:()=>Promise.resolve(r)})}))}))};const F=/^[a-f0-9]{64}$/i;j.prototype.tryIdentifyFromParams=function(e,t){const r=new RegExp(`^${e||"oeid"}$`,"i"),i=new URLSearchParams(window.location.search);let s="";for(const[e,t]of i)if(r.test(e)){s=t;break}""!=s&&(t||function(e){return F.test(e)}(s))&&this.identify((t||"e")+":"+s.toLowerCase())},window.optable=window.optable||{},window.optable.SDK=j,window.optable.cmd=new class{constructor(e){if(this.cmds=e,Array.isArray(this.cmds))for(const e of this.cmds)"function"==typeof e&&e()}push(e){e()}}(window.optable.cmd||[]),window.optable.utils={resolveMultiNodeTargeting:async function(e){return e?e.some((e=>e.priority))?async function(e){const t=new Set,{refs:r,process:i}=K(),s={user:{data:[],eids:[]}},n=new Map,o=new Map;const a=e.map((e=>{let{targetingFn:t,matcher:r,mm:a,priority:c}=e;return t().then((e=>function(e,t,r){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const c=Math.max(0,a),{data:d=[],eids:u=[]}=e.ortb2?.user??{};s.user.data.push(...d),u.filter((e=>e.uids.length)).forEach((s=>{const a=s.matcher??t,d=n.get(c)??[];a&&n.set(c,[...d,a]);const u={...i(e,s),matcher:s.matcher??t,mm:s.mm??r},h=o.get(c)??[];o.set(c,[...h,u])}))}(e,r,a,c)))}));await Promise.allSettled(a);const c=Array.from(o.keys()).sort(((e,t)=>e-t)).filter((e=>o.get(e)?.length)).shift();if(c){const e=n.get(c)||[];s.user.eids.push(...o.get(c)||[]),e.forEach((e=>t.add(e)))}return{ortb2:s,eidSources:t,refs:r}}(e):async function(e){const t=new Set,{refs:r,process:i}=K(),s={user:{data:[],eids:[]}};const n=e.map((e=>{let{targetingFn:r,matcher:n,mm:o}=e;return r().then((e=>function(e,r,n){const{data:o=[],eids:a=[]}=e.ortb2?.user??{};s.user.data.push(...o),a.filter((e=>e.uids.length)).forEach((o=>{const a=o.matcher??r;a&&t.add(a),s.user.eids.push({...i(e,o),mm:o.mm??n,matcher:o.matcher??r})}))}(e,n,o)))}));return await Promise.allSettled(n),{ortb2:s,eidSources:t,refs:r}}(e):Promise.reject("No targeting rules provided")}},window.optable.instance_config&&(window.optable.instance=new j(window.optable.instance_config))})()})();
|
|
@@ -113,7 +113,7 @@ class OptablePrebidAnalytics {
|
|
|
113
113
|
const optableSources = [...new Set(optableEIDS.map((e) => e.source).filter(Boolean))];
|
|
114
114
|
// LiveIntent EIDs
|
|
115
115
|
const liveintentEIDS = eids
|
|
116
|
-
.filter((e) => e.uids.some((u) => { var _a; return ((_a = u.ext) === null || _a === void 0 ? void 0 : _a.provider) === "liveintent.com"; }))
|
|
116
|
+
.filter((e) => { var _a; return (_a = e.uids) === null || _a === void 0 ? void 0 : _a.some((u) => { var _a; return ((_a = u.ext) === null || _a === void 0 ? void 0 : _a.provider) === "liveintent.com"; }); })
|
|
117
117
|
.map((e) => (Object.assign(Object.assign({}, e), { uids: e.uids.filter((u) => { var _a; return ((_a = u.ext) === null || _a === void 0 ? void 0 : _a.provider) === "liveintent.com"; }) })));
|
|
118
118
|
const liSources = [...new Set(liveintentEIDS.map((e) => e.source).filter(Boolean))];
|
|
119
119
|
return {
|
package/lib/dist/build.json
CHANGED
package/lib/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CMPApiConfig, Consent } from "./core/regs/consent";
|
|
2
|
-
type Experiment =
|
|
2
|
+
type Experiment = never;
|
|
3
3
|
type MatcherOverride = {
|
|
4
4
|
id: string;
|
|
5
5
|
rank: number;
|
|
@@ -8,6 +8,7 @@ type ABTestConfig = {
|
|
|
8
8
|
id: string;
|
|
9
9
|
trafficPercentage: number;
|
|
10
10
|
matcher_override?: MatcherOverride[];
|
|
11
|
+
skipMatchers?: string[];
|
|
11
12
|
};
|
|
12
13
|
type TargetingSignals = {
|
|
13
14
|
ref?: boolean;
|
|
@@ -33,6 +34,7 @@ type InitConfig = {
|
|
|
33
34
|
optableCacheTargeting?: string;
|
|
34
35
|
abTests?: ABTestConfig[];
|
|
35
36
|
additionalTargetingSignals?: TargetingSignals;
|
|
37
|
+
timeout?: string;
|
|
36
38
|
};
|
|
37
39
|
type ResolvedConfig = {
|
|
38
40
|
site: string;
|
|
@@ -51,6 +53,7 @@ type ResolvedConfig = {
|
|
|
51
53
|
initTargeting?: boolean;
|
|
52
54
|
abTests?: ABTestConfig[];
|
|
53
55
|
additionalTargetingSignals?: TargetingSignals;
|
|
56
|
+
timeout?: string;
|
|
54
57
|
};
|
|
55
58
|
declare const DCN_DEFAULTS: {
|
|
56
59
|
cookies: boolean;
|
|
@@ -67,5 +70,5 @@ declare const DCN_DEFAULTS: {
|
|
|
67
70
|
};
|
|
68
71
|
declare function getConfig(init: InitConfig): ResolvedConfig;
|
|
69
72
|
declare function generateSessionID(): string;
|
|
70
|
-
export type { InitConsent, CMPApiConfig, InitConfig, ResolvedConfig, ABTestConfig, MatcherOverride };
|
|
73
|
+
export type { InitConsent, CMPApiConfig, InitConfig, ResolvedConfig, ABTestConfig, MatcherOverride, Experiment };
|
|
71
74
|
export { getConfig, DCN_DEFAULTS, generateSessionID };
|
package/lib/dist/config.js
CHANGED
|
@@ -31,6 +31,7 @@ function getConfig(init) {
|
|
|
31
31
|
initTargeting: init.initTargeting,
|
|
32
32
|
abTests: init.abTests,
|
|
33
33
|
additionalTargetingSignals: init.additionalTargetingSignals,
|
|
34
|
+
timeout: init.timeout,
|
|
34
35
|
};
|
|
35
36
|
if ((_g = init.consent) === null || _g === void 0 ? void 0 : _g.static) {
|
|
36
37
|
config.consent = init.consent.static;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
const targetingEventName = "optable-targeting:change";
|
|
2
2
|
function sendTargetingUpdateEvent(config, response) {
|
|
3
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
3
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
4
4
|
const matchers = (_c = (_b = (_a = response.ortb2) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.eids) === null || _c === void 0 ? void 0 : _c.map((x) => x.matcher);
|
|
5
5
|
window.dispatchEvent(new CustomEvent(targetingEventName, {
|
|
6
6
|
detail: {
|
|
7
7
|
instance: config.node || config.host,
|
|
8
8
|
resolved: !!((_f = (_e = (_d = response.ortb2) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.eids) === null || _f === void 0 ? void 0 : _f.length),
|
|
9
9
|
resolvedIDs: (_g = response.resolved_ids) !== null && _g !== void 0 ? _g : [],
|
|
10
|
+
abTestID: (_h = response.ab_test_id) !== null && _h !== void 0 ? _h : undefined,
|
|
10
11
|
ortb2: response.ortb2,
|
|
11
12
|
provenance: new Set(matchers),
|
|
12
13
|
},
|
package/lib/dist/core/network.js
CHANGED
|
@@ -38,6 +38,9 @@ function buildRequest(path, config, init) {
|
|
|
38
38
|
if (config.readOnly) {
|
|
39
39
|
url.searchParams.set("ro", "true");
|
|
40
40
|
}
|
|
41
|
+
if (config.timeout) {
|
|
42
|
+
url.searchParams.set("timeout", config.timeout);
|
|
43
|
+
}
|
|
41
44
|
if (cookies) {
|
|
42
45
|
url.searchParams.set("cookies", "yes");
|
|
43
46
|
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export function buildRTD(options?: {}): {
|
|
2
|
+
enableLogging: any;
|
|
3
|
+
log(...args: any[]): void;
|
|
4
|
+
eidSources: any;
|
|
5
|
+
skipMerge: any;
|
|
6
|
+
optableCacheTargeting: any;
|
|
7
|
+
matcherFilter: any;
|
|
8
|
+
matcherExclude: any;
|
|
9
|
+
appendMergeStrategy: typeof appendMergeStrategy;
|
|
10
|
+
prependMergeStrategy: typeof prependMergeStrategy;
|
|
11
|
+
replaceMergeStrategy: typeof replaceMergeStrategy;
|
|
12
|
+
appendNewMergeStrategy: typeof appendNewMergeStrategy;
|
|
13
|
+
targetingFromCache: typeof targetingFromCache;
|
|
14
|
+
handleRtd(reqBidsConfigObj: any): Promise<void | null>;
|
|
15
|
+
};
|
|
16
|
+
export function targetingFromCache(config?: {}): any;
|
|
17
|
+
export function appendMergeStrategy(existingEids: any, newEids: any): any[];
|
|
18
|
+
export function prependMergeStrategy(existingEids: any, newEids: any): any[];
|
|
19
|
+
export function replaceMergeStrategy(existingEids: any, newEids: any, key?: (e: any) => any): any[];
|
|
20
|
+
export function appendNewMergeStrategy(existingEids: any, newEids: any, key?: (e: any) => any): any[];
|
|
21
|
+
export const defaultEIDSources: {
|
|
22
|
+
"adnxs.com": {
|
|
23
|
+
route: string;
|
|
24
|
+
};
|
|
25
|
+
"adsrvr.org": {
|
|
26
|
+
route: string;
|
|
27
|
+
};
|
|
28
|
+
"adserver.org": {
|
|
29
|
+
route: string;
|
|
30
|
+
};
|
|
31
|
+
"audigent.com": {
|
|
32
|
+
route: string;
|
|
33
|
+
};
|
|
34
|
+
"bidswitch.net": {
|
|
35
|
+
route: string;
|
|
36
|
+
};
|
|
37
|
+
"bridge.criteo.com": {
|
|
38
|
+
route: string;
|
|
39
|
+
};
|
|
40
|
+
"criteo-hemapi.com": {
|
|
41
|
+
route: string;
|
|
42
|
+
};
|
|
43
|
+
"epsilon.com": {
|
|
44
|
+
route: string;
|
|
45
|
+
};
|
|
46
|
+
"gumgum.com": {
|
|
47
|
+
route: string;
|
|
48
|
+
};
|
|
49
|
+
"indexexchange.com": {
|
|
50
|
+
route: string;
|
|
51
|
+
};
|
|
52
|
+
"kargo.com": {
|
|
53
|
+
route: string;
|
|
54
|
+
};
|
|
55
|
+
"openx.com": {
|
|
56
|
+
route: string;
|
|
57
|
+
};
|
|
58
|
+
"pubmatic.com": {
|
|
59
|
+
route: string;
|
|
60
|
+
};
|
|
61
|
+
"rubiconproject.com": {
|
|
62
|
+
route: string;
|
|
63
|
+
};
|
|
64
|
+
"smartadserver.com": {
|
|
65
|
+
route: string;
|
|
66
|
+
};
|
|
67
|
+
"sovrn.com": {
|
|
68
|
+
route: string;
|
|
69
|
+
};
|
|
70
|
+
"triplelift.com": {
|
|
71
|
+
route: string;
|
|
72
|
+
};
|
|
73
|
+
"uidapi.com": {
|
|
74
|
+
route: string;
|
|
75
|
+
};
|
|
76
|
+
"yahoo.com": {
|
|
77
|
+
route: string;
|
|
78
|
+
};
|
|
79
|
+
"yieldmo.com": {
|
|
80
|
+
route: string;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
// RTD (Real-Time Data) module for Prebid.js integration
|
|
11
|
+
//
|
|
12
|
+
// Merge strategies for EIDs
|
|
13
|
+
function appendMergeStrategy(existingEids, newEids) {
|
|
14
|
+
return [...existingEids, ...newEids];
|
|
15
|
+
}
|
|
16
|
+
function prependMergeStrategy(existingEids, newEids) {
|
|
17
|
+
return [...newEids, ...existingEids];
|
|
18
|
+
}
|
|
19
|
+
function replaceMergeStrategy(existingEids, newEids, key = (e) => e.source) {
|
|
20
|
+
const existingByKey = existingEids.reduce((acc, eid) => {
|
|
21
|
+
var _a;
|
|
22
|
+
acc[key(eid)] = (_a = acc[key(eid)]) !== null && _a !== void 0 ? _a : [];
|
|
23
|
+
acc[key(eid)].push(eid);
|
|
24
|
+
return acc;
|
|
25
|
+
}, {});
|
|
26
|
+
const newByKey = newEids.reduce((acc, eid) => {
|
|
27
|
+
var _a;
|
|
28
|
+
acc[key(eid)] = (_a = acc[key(eid)]) !== null && _a !== void 0 ? _a : [];
|
|
29
|
+
acc[key(eid)].push(eid);
|
|
30
|
+
return acc;
|
|
31
|
+
}, {});
|
|
32
|
+
const result = Object.values(Object.assign(Object.assign({}, existingByKey), newByKey));
|
|
33
|
+
return result.flat();
|
|
34
|
+
}
|
|
35
|
+
function appendNewMergeStrategy(existingEids, newEids, key = (e) => e.source) {
|
|
36
|
+
const existingByKey = existingEids.reduce((acc, eid) => {
|
|
37
|
+
var _a;
|
|
38
|
+
acc[key(eid)] = (_a = acc[key(eid)]) !== null && _a !== void 0 ? _a : [];
|
|
39
|
+
acc[key(eid)].push(eid);
|
|
40
|
+
return acc;
|
|
41
|
+
}, {});
|
|
42
|
+
const newByKey = newEids.reduce((acc, eid) => {
|
|
43
|
+
var _a;
|
|
44
|
+
acc[key(eid)] = (_a = acc[key(eid)]) !== null && _a !== void 0 ? _a : [];
|
|
45
|
+
acc[key(eid)].push(eid);
|
|
46
|
+
return acc;
|
|
47
|
+
}, {});
|
|
48
|
+
const result = Object.values(Object.assign(Object.assign({}, newByKey), existingByKey));
|
|
49
|
+
return result.flat();
|
|
50
|
+
}
|
|
51
|
+
const defaultEIDSources = {
|
|
52
|
+
"adnxs.com": { route: "appnexus" },
|
|
53
|
+
"adsrvr.org": { route: "global" },
|
|
54
|
+
"adserver.org": { route: "global" },
|
|
55
|
+
"audigent.com": { route: "global" },
|
|
56
|
+
"bidswitch.net": { route: "global" },
|
|
57
|
+
"bridge.criteo.com": { route: "global" },
|
|
58
|
+
"criteo-hemapi.com": { route: "global" },
|
|
59
|
+
"epsilon.com": { route: "global" },
|
|
60
|
+
"gumgum.com": { route: "gumgum" },
|
|
61
|
+
"indexexchange.com": { route: "ix" },
|
|
62
|
+
"kargo.com": { route: "kargo" },
|
|
63
|
+
"openx.com": { route: "openx" },
|
|
64
|
+
"pubmatic.com": { route: "pubmatic" },
|
|
65
|
+
"rubiconproject.com": { route: "rubicon" },
|
|
66
|
+
"smartadserver.com": { route: "smartadserver" },
|
|
67
|
+
"sovrn.com": { route: "sovrn" },
|
|
68
|
+
"triplelift.com": { route: "triplelift" },
|
|
69
|
+
"uidapi.com": { route: "global" },
|
|
70
|
+
"yahoo.com": { route: "global" },
|
|
71
|
+
"yieldmo.com": { route: "yieldmo" },
|
|
72
|
+
};
|
|
73
|
+
function forceGlobalRouting() {
|
|
74
|
+
Object.values(defaultEIDSources).forEach((source) => {
|
|
75
|
+
source.route = "global";
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// Simple logging utility
|
|
79
|
+
function log(level, message, ...args) {
|
|
80
|
+
const prefix = "Optable RTD:";
|
|
81
|
+
const logMethod = ["error", "warn", "info"].includes(level) ? level : "log";
|
|
82
|
+
console[logMethod](`${prefix} ${message}`, ...args); // eslint-disable-line no-console
|
|
83
|
+
}
|
|
84
|
+
// Helper function to get targeting data from cache
|
|
85
|
+
function targetingFromCache(config = {}) {
|
|
86
|
+
var _a;
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(localStorage.getItem((_a = config.optableCacheTargeting) !== null && _a !== void 0 ? _a : "OPTABLE_RESOLVED"));
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
config.log("error", "Failed to parse cached targeting data:", error);
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Get targeting data from cache, if available
|
|
96
|
+
function readTargetingData(config) {
|
|
97
|
+
var _a, _b, _c, _d;
|
|
98
|
+
const cachedData = targetingFromCache(config);
|
|
99
|
+
if (!cachedData) {
|
|
100
|
+
config.log("info", "No cached targeting data found");
|
|
101
|
+
return {};
|
|
102
|
+
}
|
|
103
|
+
let targetingData = cachedData;
|
|
104
|
+
// Validate targeting data structure
|
|
105
|
+
if (!((_b = (_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData.ortb2) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.eids) || !Array.isArray((_d = (_c = targetingData === null || targetingData === void 0 ? void 0 : targetingData.ortb2) === null || _c === void 0 ? void 0 : _c.user) === null || _d === void 0 ? void 0 : _d.eids)) {
|
|
106
|
+
config.log("info", "No valid targeting data found");
|
|
107
|
+
return {};
|
|
108
|
+
}
|
|
109
|
+
config.log("info", `Found targeting data with ${targetingData.ortb2.user.eids.length} EIDs`);
|
|
110
|
+
return targetingData;
|
|
111
|
+
}
|
|
112
|
+
function mergeStrategy(config, eidSource) {
|
|
113
|
+
var _a;
|
|
114
|
+
const strategy = ((_a = config.eidSources[eidSource]) === null || _a === void 0 ? void 0 : _a.mergeStrategy) || config.mergeStrategy;
|
|
115
|
+
if (strategy) {
|
|
116
|
+
return strategy;
|
|
117
|
+
}
|
|
118
|
+
config.log("warn", `No merge strategy defined globally or for EID source: ${eidSource}. Using append.`);
|
|
119
|
+
return appendMergeStrategy;
|
|
120
|
+
}
|
|
121
|
+
function merge(config, targetORTB2, sourceORTB2) {
|
|
122
|
+
var _a, _b, _c;
|
|
123
|
+
/* eslint-disable no-param-reassign */
|
|
124
|
+
targetORTB2.user = (_a = targetORTB2.user) !== null && _a !== void 0 ? _a : {};
|
|
125
|
+
targetORTB2.user.ext = (_b = targetORTB2.user.ext) !== null && _b !== void 0 ? _b : {};
|
|
126
|
+
targetORTB2.user.ext.eids = (_c = targetORTB2.user.ext.eids) !== null && _c !== void 0 ? _c : [];
|
|
127
|
+
/* eslint-enable no-param-reassign */
|
|
128
|
+
let skipped = 0;
|
|
129
|
+
const eidsBySource = sourceORTB2.user.ext.eids.reduce((acc, eid) => {
|
|
130
|
+
var _a;
|
|
131
|
+
acc[eid.source] = (_a = acc[eid.source]) !== null && _a !== void 0 ? _a : [];
|
|
132
|
+
acc[eid.source].push(eid);
|
|
133
|
+
return acc;
|
|
134
|
+
}, {});
|
|
135
|
+
Object.entries(eidsBySource).forEach(([eidSource, eids]) => {
|
|
136
|
+
if (config.skipMerge(targetORTB2, eidSource)) {
|
|
137
|
+
skipped += 1;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const mergeFn = mergeStrategy(config, eidSource);
|
|
141
|
+
// eslint-disable-next-line no-param-reassign
|
|
142
|
+
targetORTB2.user.ext.eids = mergeFn(targetORTB2.user.ext.eids, eids);
|
|
143
|
+
});
|
|
144
|
+
return skipped;
|
|
145
|
+
}
|
|
146
|
+
// Custom handleRtd function to merge targeting data into the reqBidsConfigObj
|
|
147
|
+
function handleRtd(config, reqBidsConfigObj, targetingData) {
|
|
148
|
+
var _a, _b, _c;
|
|
149
|
+
config.log("info", "Starting handleRtd function");
|
|
150
|
+
// Filter EIDs for global ORTB2 and collect bidder-specific EIDs
|
|
151
|
+
const eidsPerRoute = {};
|
|
152
|
+
let processedEids = 0;
|
|
153
|
+
let skippedEids = 0;
|
|
154
|
+
config.log("info", "targetingData", targetingData);
|
|
155
|
+
(_c = (_b = (_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData.ortb2) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.eids) === null || _c === void 0 ? void 0 : _c.forEach((eid, index) => {
|
|
156
|
+
var _a, _b;
|
|
157
|
+
if (!eid || typeof eid !== "object") {
|
|
158
|
+
config.log("warn", `Skipping invalid EID at index ${index}:`, eid);
|
|
159
|
+
skippedEids += 1;
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Apply matcher filter
|
|
163
|
+
if (config.matcherFilter.length > 0 && !config.matcherFilter.includes(eid.matcher)) {
|
|
164
|
+
config.log("info", `EID with source ${eid.source} filtered out by matcher filter (matcher: ${eid.matcher})`);
|
|
165
|
+
skippedEids += 1;
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// Apply matcher exclusions
|
|
169
|
+
if (config.matcherExclude.length > 0 && config.matcherExclude.includes(eid.matcher)) {
|
|
170
|
+
config.log("info", `EID with source ${eid.source} excluded (matcher: ${eid.matcher})`);
|
|
171
|
+
skippedEids += 1;
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const route = (_a = config.eidSources[eid.source]) === null || _a === void 0 ? void 0 : _a.route;
|
|
175
|
+
if (!route) {
|
|
176
|
+
config.log("warn", `EID with unsupported source: ${eid.source}`);
|
|
177
|
+
skippedEids += 1;
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
eidsPerRoute[route] = (_b = eidsPerRoute[route]) !== null && _b !== void 0 ? _b : { user: { ext: { eids: [] } } };
|
|
181
|
+
eidsPerRoute[route].user.ext.eids.push(eid);
|
|
182
|
+
config.log("info", `EID with source ${eid.source} routed to ${route}`);
|
|
183
|
+
processedEids += 1;
|
|
184
|
+
});
|
|
185
|
+
let globalEidsCount = 0;
|
|
186
|
+
let bidderEidsCount = 0;
|
|
187
|
+
Object.entries(eidsPerRoute).forEach(([route, ortb2]) => {
|
|
188
|
+
var _a;
|
|
189
|
+
const count = ortb2.user.ext.eids.length;
|
|
190
|
+
if (route === "global") {
|
|
191
|
+
globalEidsCount += count;
|
|
192
|
+
skippedEids += merge(config, reqBidsConfigObj.ortb2Fragments.global, ortb2);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
bidderEidsCount += count;
|
|
196
|
+
const bidder = (_a = reqBidsConfigObj.ortb2Fragments.bidder[route]) !== null && _a !== void 0 ? _a : {};
|
|
197
|
+
skippedEids += merge(config, bidder, ortb2);
|
|
198
|
+
// eslint-disable-next-line no-param-reassign
|
|
199
|
+
reqBidsConfigObj.ortb2Fragments.bidder[route] = bidder;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
config.log("info", `Processed ${processedEids} EIDs, skipped ${skippedEids} EIDs`);
|
|
203
|
+
config.log("info", `Merged ${globalEidsCount} global EIDs and ${bidderEidsCount} bidder-specific EID sets`);
|
|
204
|
+
config.log("info", "Successfully completed handleRtd function");
|
|
205
|
+
}
|
|
206
|
+
function liveIntentUID2(ortb2) {
|
|
207
|
+
var _a, _b, _c;
|
|
208
|
+
return (_c = (_b = (_a = ortb2.user) === null || _a === void 0 ? void 0 : _a.ext) === null || _b === void 0 ? void 0 : _b.eids) === null || _c === void 0 ? void 0 : _c.some((eid) => eid.source === "uidapi.com" && eid.uids.some((uid) => { var _a; return ((_a = uid.ext) === null || _a === void 0 ? void 0 : _a.provider) === "liveintent.com"; }));
|
|
209
|
+
}
|
|
210
|
+
function buildRTD(options = {}) {
|
|
211
|
+
var _a, _b, _c, _d, _e, _f;
|
|
212
|
+
if (sessionStorage.optableForceGlobalRouting || options.forceGlobalRouting) {
|
|
213
|
+
forceGlobalRouting();
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
enableLogging: (_b = (_a = sessionStorage.optableDebug) !== null && _a !== void 0 ? _a : options.enableLogging) !== null && _b !== void 0 ? _b : false,
|
|
217
|
+
log(...args) {
|
|
218
|
+
if (this.enableLogging) {
|
|
219
|
+
log(...args);
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
eidSources: (_c = options.eidSources) !== null && _c !== void 0 ? _c : Object.assign({}, defaultEIDSources),
|
|
223
|
+
skipMerge: sessionStorage.optableForceSkipMerge
|
|
224
|
+
? () => true
|
|
225
|
+
: options.skipMerge !== undefined
|
|
226
|
+
? options.skipMerge
|
|
227
|
+
: () => false,
|
|
228
|
+
optableCacheTargeting: (_d = options.optableCacheTargeting) !== null && _d !== void 0 ? _d : "OPTABLE_RESOLVED",
|
|
229
|
+
matcherFilter: (_e = options.matcherFilter) !== null && _e !== void 0 ? _e : [],
|
|
230
|
+
matcherExclude: (_f = options.matcherExclude) !== null && _f !== void 0 ? _f : [],
|
|
231
|
+
appendMergeStrategy,
|
|
232
|
+
prependMergeStrategy,
|
|
233
|
+
replaceMergeStrategy,
|
|
234
|
+
appendNewMergeStrategy,
|
|
235
|
+
targetingFromCache,
|
|
236
|
+
handleRtd(reqBidsConfigObj) {
|
|
237
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
238
|
+
var _a;
|
|
239
|
+
const targetingData = (_a = options.targetingData) !== null && _a !== void 0 ? _a : readTargetingData(this);
|
|
240
|
+
try {
|
|
241
|
+
return handleRtd(this, reqBidsConfigObj, targetingData);
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
this.log("error", "Unexpected error in handleRtd function:", error);
|
|
245
|
+
}
|
|
246
|
+
return null;
|
|
247
|
+
});
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
export { buildRTD, targetingFromCache, appendMergeStrategy, prependMergeStrategy, replaceMergeStrategy, appendNewMergeStrategy, defaultEIDSources, };
|
|
@@ -25,6 +25,7 @@ type TargetingResponse = {
|
|
|
25
25
|
};
|
|
26
26
|
refs?: Record<string, unknown>;
|
|
27
27
|
resolved_ids?: string[];
|
|
28
|
+
ab_test_id?: string;
|
|
28
29
|
};
|
|
29
30
|
declare function determineABTest(abTests?: ABTestConfig[]): ABTestConfig | null;
|
|
30
31
|
declare function Targeting(config: ResolvedConfig, req: TargetingRequest): Promise<TargetingResponse>;
|
|
@@ -49,6 +49,9 @@ function Targeting(config, req) {
|
|
|
49
49
|
searchParams.append("matcher_override", override.id);
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
|
+
if (abTest.skipMatchers) {
|
|
53
|
+
searchParams.append("skip_matchers", abTest.skipMatchers.join(","));
|
|
54
|
+
}
|
|
52
55
|
}
|
|
53
56
|
if ((_a = config.additionalTargetingSignals) === null || _a === void 0 ? void 0 : _a.ref) {
|
|
54
57
|
searchParams.append("ref", `${window.location.protocol}//${window.location.host}${window.location.pathname}`);
|
package/lib/dist/sdk.js
CHANGED
|
@@ -49,9 +49,6 @@ class OptableSDK {
|
|
|
49
49
|
targeting() {
|
|
50
50
|
return __awaiter(this, arguments, void 0, function* (input = "__passport__") {
|
|
51
51
|
const request = normalizeTargetingRequest(input);
|
|
52
|
-
if (request.ids.length > 1 && !this.dcn.experiments.includes("targeting-cascade")) {
|
|
53
|
-
throw "Targeting multiple IDs is only available with the 'targeting-cascade' experiment enabled.";
|
|
54
|
-
}
|
|
55
52
|
yield this.init;
|
|
56
53
|
return Targeting(this.dcn, request);
|
|
57
54
|
});
|
package/package.json
CHANGED