@optable/web-sdk 0.31.1 → 0.33.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 +11 -9
- package/browser/dist/sdk.js +1 -1
- package/lib/dist/addons/paapi.js +6 -1
- package/lib/dist/addons/topics-api.js +5 -1
- package/lib/dist/build.json +1 -1
- package/lib/dist/config.d.ts +2 -0
- package/lib/dist/config.js +9 -8
- package/lib/dist/core/events/cache-refresh.d.ts +4 -0
- package/lib/dist/core/events/cache-refresh.js +14 -0
- package/lib/dist/core/storage-keys.js +3 -2
- package/lib/dist/core/storage.js +1 -1
- package/lib/dist/edge/targeting.js +2 -0
- package/lib/dist/sdk.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -128,6 +128,8 @@ When creating an instance of `OptableSDK`, you can pass an `InitConfig` object t
|
|
|
128
128
|
|
|
129
129
|
- **`readOnly` (boolean, default: `false`)**
|
|
130
130
|
When set to `true`, puts the SDK in a read-only mode, preventing any data modifications while still allowing API queries.
|
|
131
|
+
- **`optableCacheTargeting` (string, defaults: `optable-cache:targeting`)**
|
|
132
|
+
Local storage cache key used to store latest targeting response.
|
|
131
133
|
|
|
132
134
|
These configurations allow fine-tuned control over how the `OptableSDK` interacts with the Optable DCN, ensuring compatibility with different environments and privacy settings.
|
|
133
135
|
|
|
@@ -135,7 +137,7 @@ These configurations allow fine-tuned control over how the `OptableSDK` interact
|
|
|
135
137
|
|
|
136
138
|
To configure an instance of `OptableSDK` integrating with an Optable DCN running at hostname `dcn.customer.com`, from a configured web site origin identified by slug `my-site`, you simply create an instance of the `OptableSDK` class exported by the `@optable/web-sdk` module:
|
|
137
139
|
|
|
138
|
-
```
|
|
140
|
+
```javascript
|
|
139
141
|
import OptableSDK from "@optable/web-sdk";
|
|
140
142
|
|
|
141
143
|
const sdk = new OptableSDK({ host: "dcn.customer.com", site: "my-site" });
|
|
@@ -152,7 +154,7 @@ You can then call various SDK APIs on the instance as shown in the examples belo
|
|
|
152
154
|
|
|
153
155
|
To associate a user's browser with an authenticated identifier such as an Email address, optionally linked with other identifiers, such as your own vendor, publisher, or site-level `PPID`, you can call the `identify` API as follows:
|
|
154
156
|
|
|
155
|
-
```
|
|
157
|
+
```javascript
|
|
156
158
|
const onSuccess = () => console.log("Identify API success!");
|
|
157
159
|
const onFailure = (err) => console.warn("Identify API error: ${err.message}");
|
|
158
160
|
|
|
@@ -206,7 +208,7 @@ type ProfileTraits = {
|
|
|
206
208
|
|
|
207
209
|
To get the targeting information associated by the configured DCN with the user's browser in real-time, you can call the targeting API as follows:
|
|
208
210
|
|
|
209
|
-
```
|
|
211
|
+
```javascript
|
|
210
212
|
sdk
|
|
211
213
|
.targeting()
|
|
212
214
|
.then((response) => {
|
|
@@ -222,11 +224,11 @@ On success, the resulting targeting data is typically sent as part of a subseque
|
|
|
222
224
|
|
|
223
225
|
The `targeting` API will automatically cache resulting key value data in client storage on success. You can subsequently retrieve the cached key value data as follows:
|
|
224
226
|
|
|
225
|
-
```
|
|
227
|
+
```javascript
|
|
226
228
|
const cachedTargetingData = sdk.targetingFromCache();
|
|
227
229
|
if (cachedTargetingData) {
|
|
228
|
-
console.log(`Audience targeting: ${cachedTargetingData.audience}`)
|
|
229
|
-
console.log(`User targeting: ${cachedTargetingData.user}`)
|
|
230
|
+
console.log(`Audience targeting: ${cachedTargetingData.audience}`);
|
|
231
|
+
console.log(`User targeting: ${cachedTargetingData.user}`);
|
|
230
232
|
}
|
|
231
233
|
```
|
|
232
234
|
|
|
@@ -242,7 +244,7 @@ Note that both `targetingFromCache()` and `targetingClearCache()` are synchronou
|
|
|
242
244
|
|
|
243
245
|
To send real-time event data from the user's browser to the DCN for eventual audience assembly, you can call the witness API as follows:
|
|
244
246
|
|
|
245
|
-
```
|
|
247
|
+
```javascript
|
|
246
248
|
const onSuccess = () => console.log("Witness API success!");
|
|
247
249
|
const onFailure = (err) => console.warn("Witness API error: ${err.message}");
|
|
248
250
|
|
|
@@ -776,8 +778,8 @@ To fetch Google Privacy Sandbox topics using the Optable SDK, you can use the `g
|
|
|
776
778
|
|
|
777
779
|
It is recommended to call this method before making ad calls to ensure that the latest topics are available for targeting.
|
|
778
780
|
|
|
779
|
-
```
|
|
780
|
-
|
|
781
|
+
```html
|
|
782
|
+
<!-- Optable SDK async load: -->
|
|
781
783
|
<script async src="https://cdn.optable.co/web-sdk/latest/sdk.js"></script>
|
|
782
784
|
<script>
|
|
783
785
|
window.optable = window.optable || { cmd: [] };
|
package/browser/dist/sdk.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see sdk.js.LICENSE.txt */
|
|
2
|
-
(()=>{var t={312:(t,e,r)=>{var i;!function(){"use strict";var e="input is invalid type",n="object"==typeof window,s=n?window:{};s.JS_SHA256_NO_WINDOW&&(n=!1);var o=!n&&"object"==typeof self,a=!s.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;a?s=r.g:o&&(s=self);var c=!s.JS_SHA256_NO_COMMON_JS&&t.exports,u=r.amdO,d=!s.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,h="0123456789abcdef".split(""),p=[-2147483648,8388608,32768,128],g=[24,16,8,0],l=[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"],y=[];!s.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),!d||!s.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var m=function(t,e){return function(r){return new b(e,!0).update(r)[t]()}},w=function(t){var e=m("hex",t);a&&(e=A(e,t)),e.create=function(){return new b(t)},e.update=function(t){return e.create().update(t)};for(var r=0;r<f.length;++r){var i=f[r];e[i]=m(i,t)}return e},A=function(t,i){var n,o=r(394),a=r(903).Buffer,c=i?"sha224":"sha256";return n=a.from&&!s.JS_SHA256_NO_BUFFER_FROM?a.from:function(t){return new a(t)},function(r){if("string"==typeof r)return o.createHash(c).update(r,"utf8").digest("hex");if(null==r)throw new Error(e);return r.constructor===ArrayBuffer&&(r=new Uint8Array(r)),Array.isArray(r)||ArrayBuffer.isView(r)||r.constructor===a?o.createHash(c).update(n(r)).digest("hex"):t(r)}},v=function(t,e){return function(r,i){return new P(r,e,!0).update(i)[t]()}},S=function(t){var e=v("hex",t);e.create=function(e){return new P(e,t)},e.update=function(t,r){return e.create(t).update(r)};for(var r=0;r<f.length;++r){var i=f[r];e[i]=v(i,t)}return e};function b(t,e){e?(y[0]=y[16]=y[1]=y[2]=y[3]=y[4]=y[5]=y[6]=y[7]=y[8]=y[9]=y[10]=y[11]=y[12]=y[13]=y[14]=y[15]=0,this.blocks=y):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t?(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=t}function P(t,r,i){var n,s=typeof t;if("string"===s){var o,a=[],c=t.length,u=0;for(n=0;n<c;++n)(o=t.charCodeAt(n))<128?a[u++]=o:o<2048?(a[u++]=192|o>>>6,a[u++]=128|63&o):o<55296||o>=57344?(a[u++]=224|o>>>12,a[u++]=128|o>>>6&63,a[u++]=128|63&o):(o=65536+((1023&o)<<10|1023&t.charCodeAt(++n)),a[u++]=240|o>>>18,a[u++]=128|o>>>12&63,a[u++]=128|o>>>6&63,a[u++]=128|63&o);t=a}else{if("object"!==s)throw new Error(e);if(null===t)throw new Error(e);if(d&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||d&&ArrayBuffer.isView(t)))throw new Error(e)}t.length>64&&(t=new b(r,!0).update(t).array());var h=[],p=[];for(n=0;n<64;++n){var g=t[n]||0;h[n]=92^g,p[n]=54^g}b.call(this,r,i),this.update(p),this.oKeyPad=h,this.inner=!0,this.sharedMemory=i}b.prototype.update=function(t){if(!this.finalized){var r,i=typeof t;if("string"!==i){if("object"!==i)throw new Error(e);if(null===t)throw new Error(e);if(d&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||d&&ArrayBuffer.isView(t)))throw new Error(e);r=!0}for(var n,s,o=0,a=t.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(s=this.start;o<a&&s<64;++o)c[s>>>2]|=t[o]<<g[3&s++];else for(s=this.start;o<a&&s<64;++o)(n=t.charCodeAt(o))<128?c[s>>>2]|=n<<g[3&s++]:n<2048?(c[s>>>2]|=(192|n>>>6)<<g[3&s++],c[s>>>2]|=(128|63&n)<<g[3&s++]):n<55296||n>=57344?(c[s>>>2]|=(224|n>>>12)<<g[3&s++],c[s>>>2]|=(128|n>>>6&63)<<g[3&s++],c[s>>>2]|=(128|63&n)<<g[3&s++]):(n=65536+((1023&n)<<10|1023&t.charCodeAt(++o)),c[s>>>2]|=(240|n>>>18)<<g[3&s++],c[s>>>2]|=(128|n>>>12&63)<<g[3&s++],c[s>>>2]|=(128|n>>>6&63)<<g[3&s++],c[s>>>2]|=(128|63&n)<<g[3&s++]);this.lastByteIndex=s,this.bytes+=s-this.start,s>=64?(this.block=c[16],this.start=s-64,this.hash(),this.hashed=!0):this.start=s}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 t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>>2]|=p[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},b.prototype.hash=function(){var t,e,r,i,n,s,o,a,c,u=this.h0,d=this.h1,h=this.h2,p=this.h3,g=this.h4,f=this.h5,y=this.h6,m=this.h7,w=this.blocks;for(t=16;t<64;++t)e=((n=w[t-15])>>>7|n<<25)^(n>>>18|n<<14)^n>>>3,r=((n=w[t-2])>>>17|n<<15)^(n>>>19|n<<13)^n>>>10,w[t]=w[t-16]+e+w[t-7]+r|0;for(c=d&h,t=0;t<64;t+=4)this.first?(this.is224?(s=300032,m=(n=w[0]-1413257819)-150054599|0,p=n+24177077|0):(s=704751109,m=(n=w[0]-210244248)-1521486534|0,p=n+143694565|0),this.first=!1):(e=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),i=(s=u&d)^u&h^c,m=p+(n=m+(r=(g>>>6|g<<26)^(g>>>11|g<<21)^(g>>>25|g<<7))+(g&f^~g&y)+l[t]+w[t])|0,p=n+(e+i)|0),e=(p>>>2|p<<30)^(p>>>13|p<<19)^(p>>>22|p<<10),i=(o=p&u)^p&d^s,y=h+(n=y+(r=(m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+(m&g^~m&f)+l[t+1]+w[t+1])|0,e=((h=n+(e+i)|0)>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),i=(a=h&p)^h&u^o,f=d+(n=f+(r=(y>>>6|y<<26)^(y>>>11|y<<21)^(y>>>25|y<<7))+(y&m^~y&g)+l[t+2]+w[t+2])|0,e=((d=n+(e+i)|0)>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),i=(c=d&h)^d&p^a,g=u+(n=g+(r=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))+(f&y^~f&m)+l[t+3]+w[t+3])|0,u=n+(e+i)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+u|0,this.h1=this.h1+d|0,this.h2=this.h2+h|0,this.h3=this.h3+p|0,this.h4=this.h4+g|0,this.h5=this.h5+f|0,this.h6=this.h6+y|0,this.h7=this.h7+m|0},b.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,i=this.h3,n=this.h4,s=this.h5,o=this.h6,a=this.h7,c=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[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[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[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[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[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 t=this.h0,e=this.h1,r=this.h2,i=this.h3,n=this.h4,s=this.h5,o=this.h6,a=this.h7,c=[t>>>24&255,t>>>16&255,t>>>8&255,255&t,e>>>24&255,e>>>16&255,e>>>8&255,255&e,r>>>24&255,r>>>16&255,r>>>8&255,255&r,i>>>24&255,i>>>16&255,i>>>8&255,255&i,n>>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,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 t=new ArrayBuffer(this.is224?28:32),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),e.setUint32(20,this.h5),e.setUint32(24,this.h6),this.is224||e.setUint32(28,this.h7),t},P.prototype=new b,P.prototype.finalize=function(){if(b.prototype.finalize.call(this),this.inner){this.inner=!1;var t=this.array();b.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(t),b.prototype.finalize.call(this)}};var E=w();E.sha256=E,E.sha224=w(!0),E.sha256.hmac=S(),E.sha224.hmac=S(!0),c?t.exports=E:(s.sha256=E.sha256,s.sha224=E.sha224,u&&(void 0===(i=function(){return E}.call(E,r,E,t))||(t.exports=i)))}()},903:()=>{},394:()=>{}},e={};function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}r.amdO={},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{"use strict";const t={r:"v0.31.1"};function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function i(t,r,i){return(r=function(t){var r=function(t){if("object"!=e(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var i=r.call(t,"string");if("object"!=e(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==e(r)?r:r+""}(r))in t?Object.defineProperty(t,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[r]=i,t}async function n(t){const e=await S("/config",t,{method:"GET",headers:{Accept:"application/json"}});return new v(t).setSite(e),e}const s={"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],u=[5],d=[7,8,10,12,17,13,18,14,19,20,21,15,22,16,11,9];function h(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=function(t,e){const{gdprApplies:r,gppSectionIDs:i,gdprData:n}=e;if(void 0!==r)return r?"gdpr":"gdpr"===t?null:t;if(void 0!==n&&"gdpr"===t)return"gdpr";if(void 0===i||1===i.length&&0===i[0])return t;if(1===i.length&&-1===i[0])return null;if(i.some((t=>c.includes(t))))return"gdpr";if(i.some((t=>u.includes(t))))return"can";if(i.some((t=>d.includes(t))))return"us";switch(t){case"gdpr":if(!i.some((t=>c.includes(t))))return null;break;case"can":if(!i.some((t=>u.includes(t))))return null;break;case"us":if(!i.some((t=>d.includes(t))))return null}return t}(t,e),n={reg:i,gpp:e.gppString,gppSectionIDs:e.gppSectionIDs,gdpr:e.gdprString,gdprApplies:e.gdprApplies,deviceAccess:!1,createProfilesForAdvertising:!1,useProfilesForAdvertising:!1,measureAdvertisingPerformance:!1};switch(i){case"gdpr":e.gdprData?(n.deviceAccess=g(e.gdprData,1,r.tcfeuVendorID),n.createProfilesForAdvertising=g(e.gdprData,3,r.tcfeuVendorID),n.useProfilesForAdvertising=g(e.gdprData,4,r.tcfeuVendorID),n.measureAdvertisingPerformance=g(e.gdprData,7,r.tcfeuVendorID)):e.gppData&&(n.deviceAccess=f(e.gppData,1,r.tcfeuVendorID),n.createProfilesForAdvertising=f(e.gppData,3,r.tcfeuVendorID),n.useProfilesForAdvertising=f(e.gppData,4,r.tcfeuVendorID),n.measureAdvertisingPerformance=f(e.gppData,7,r.tcfeuVendorID));break;case"can":n.deviceAccess=!0,e.gppData&&(n.createProfilesForAdvertising=l(e.gppData,3,r.tcfcaVendorID),n.useProfilesForAdvertising=l(e.gppData,4,r.tcfcaVendorID),n.measureAdvertisingPerformance=l(e.gppData,7,r.tcfcaVendorID));break;default:n.deviceAccess=!0,n.createProfilesForAdvertising=!0,n.useProfilesForAdvertising=!0,n.measureAdvertisingPerformance=!0}return n}function p(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={},i=h(t,r,e);return"function"==typeof window.__tcfapi&&window.__tcfapi?.("addEventListener",2,((n,s)=>{s&&("tcloaded"===n.eventStatus||"useractioncomplete"===n.eventStatus)&&(n=>{r.gdprString=n.tcString,r.gdprApplies=n.gdprApplies,r.gdprData=n,Object.assign(i,h(t,r,e))})(n)})),"function"==typeof window.__gpp&&window.__gpp?.("addEventListener",((n,s)=>{s&&"signalStatus"===n.eventName&&"ready"===n.data&&(n=>{r.gppString=n.gppString,r.gppSectionIDs=n.applicableSections,r.gppData=n,Object.assign(i,h(t,r,e))})(n.pingData)})),i}function g(t,e,r){return r?!!t.purpose?.consents?.[e]&&!!t.vendor?.consents?.[r]:!!t.publisher?.consents?.[e]}function l(t,e,r){const i=e>1,n=t.parsedSections?.[o]||[];if("number"==typeof r){const t=n.find((t=>"Version"in t));if(!t)return!1;let s=t.PurposesExpressConsent.includes(e)&&t.VendorExpressConsent.includes(r);return i&&(s||=t.PurposesImpliedConsent.includes(e)&&t.VendorImpliedConsent.includes(r)),s}const s=n.find((t=>"SubsectionType"in t&&3===t.SubsectionType));if(!s)return!1;let a=s.PubPurposesExpressConsent.includes(e);return i&&(a||=s.PubPurposesImpliedConsent.includes(e)),a}function f(t,e,r){const i=e>1,n=t.parsedSections?.[a]||[];if("number"==typeof r){const t=n.find((t=>"Version"in t));if(!t)return!1;let s=t.PurposeConsent.includes(e)&&t.VendorConsent.includes(r);return i&&(s||=t.PurposesLITransparency.includes(e)&&t.VendorLegitimateInterest.includes(r)),s}const s=n.find((t=>"SegmentType"in t&&3===t.SegmentType));if(!s)return!1;let o=s.PubPurposesConsent.includes(e);return i&&(o||=s.PubPurposesLITransparency.includes(e)),o}class y{constructor(t){i(this,"consent",void 0),this.consent=t}getItem(t){return this.consent.deviceAccess?window.localStorage.getItem(t):null}setItem(t,e){this.consent.deviceAccess&&window.localStorage.setItem(t,e)}removeItem(t){this.consent.deviceAccess&&window.localStorage.removeItem(t)}}const m="_optable_pairId";function w(t){const e=new Uint16Array(t.length);for(let r=0;r<e.length;r++)e[r]=t.charCodeAt(r);return btoa(String.fromCharCode(...new Uint8Array(e.buffer)))}function A(t){return t.node?w(`${t.host}/${t.node}`):w(`${t.host}`)}class v{constructor(t){this.config=t,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(t){const e=[],r=[],i=`OPTABLE_PASSPORT_${A(t)}`;return e.push(i),r.push(i),t.legacyHostCache?(r.push(`OPTABLE_PASSPORT_${w(`${t.legacyHostCache}`)}`),r.push(`OPTABLE_PASS_${w(`${t.legacyHostCache}/${t.site}`)}`)):r.push(`OPTABLE_PASS_${w(`${t.host}/${t.site}`)}`),{write:e,read:r}}(t),this.targetingKeys=function(t){const e=`OPTABLE_TARGETING_${A(t)}`;return{write:[e],read:[e]}}(t),this.siteKeys=function(t){const e=`OPTABLE_SITE_${A(t)}`;return{write:[e],read:[e]}}(t),this.pairKeys={write:[m],read:[m]},this.storage=new y(this.config.consent)}getPassport(){return this.readStorageKeys(this.passportKeys)}setPassport(t){this.writeToStorageKeys(this.passportKeys,t)}getTargeting(){const t=this.readStorageKeys(this.targetingKeys);return t?JSON.parse(t):null}setTargeting(t){t&&(this.writeToStorageKeys(this.targetingKeys,JSON.stringify(t)),this.setPairIDs(t))}getSite(){const t=this.readStorageKeys(this.siteKeys);return t?JSON.parse(t):null}setSite(t){t&&this.writeToStorageKeys(this.siteKeys,JSON.stringify(t))}setPairIDs(t){const e=t.ortb2?.user?.eids?.filter((t=>"pair-protocol.com"===t.source)),r=e?.flatMap((t=>t.uids));if(!r)return;const i=new Set(r.map((t=>t.id)));this.writeToStorageKeys(this.pairKeys,btoa(JSON.stringify({envelope:[...i]})))}getPairIDs(){const t=this.readStorageKeys(this.pairKeys);return t?JSON.parse(atob(t))?.envelope:null}readStorageKeys(t){for(const e of t.read){const t=this.storage.getItem(e);if(t)return t}return null}writeToStorageKeys(t,e){if(e)for(const r of t.write)this.storage.setItem(r,e)}clearStorageKeys(t){for(const e of t.read)this.storage.removeItem(e)}clearPassport(){this.clearStorageKeys(this.passportKeys)}clearTargeting(){this.clearStorageKeys(this.targetingKeys)}clearSite(){this.clearStorageKeys(this.siteKeys)}}async function S(e,r,i){const n=await globalThis.fetch(function(e,r,i){const{host:n,cookies:s}=r,o=new URL(e,`https://${n}`);if(o.searchParams.set("osdk",`web-${t.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"),s)o.searchParams.set("cookies","yes");else{const t=new v(r).getPassport();o.searchParams.set("cookies","no"),o.searchParams.set("passport",t||"")}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)}(e,r,i)),s=n.headers.get("Content-Type"),o=s?.startsWith("application/json")?await n.json():await n.text();if(!n.ok)throw new Error(o.error);return o.passport&&(new v(r).setPassport(o.passport),delete o.passport),o}var b,P,E,I=((P=I||{})[P.Banner=1]="Banner",P[P.Video=2]="Video",P[P.Audio=3]="Audio",P[P.Native=4]="Native",P),T={},_={},C={};function k(t){return{user:{data:(t?.audience??[]).map((t=>({name:t.provider,segment:t.ids,ext:{segtax:t.rtb_segtax}}))),ext:{eids:(t?.user??[]).map((t=>({source:t.provider,uids:t.ids.map((t=>{let{id:e}=t;return{id:e,atype:3}}))})))}}}}function D(t){const e={};if(!t)return e;for(const r of t.audience??[])r.keyspace&&(r.keyspace in e||(e[r.keyspace]=[]),e[r.keyspace].push(...r.ids.map((t=>t.id))));return e}(E=b||(b={})).Placement=_,E.Media=C,E.Context=T;const O={cookies:!0,initPassport:!0,readOnly:!1,experiments:[],consent:{reg:null,deviceAccess:!0,createProfilesForAdvertising:!0,useProfilesForAdvertising:!0,measureAdvertisingPerformance:!0}};function x(){const t=new Uint8Array(16);return crypto.getRandomValues(t),btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}var K=r(312);class B{constructor(t){i(this,"dcn",void 0),i(this,"init",void 0),this.dcn=function(t){const e={host:t.host,site:t.site,cookies:t.cookies??O.cookies,initPassport:t.initPassport??O.initPassport,consent:O.consent,readOnly:t.readOnly??O.readOnly,node:t.node,legacyHostCache:t.legacyHostCache,experiments:t.experiments??O.experiments,mockedIP:t.mockedIP,sessionID:t.sessionID??x(),skipEnrichment:t.skipEnrichment,initTargeting:t.initTargeting};return t.consent?.static?e.consent=t.consent.static:t.consent?.cmpapi&&(e.consent=p(function(){const t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=s[t];return"can"===e?["fr","fr-CA"].some((t=>navigator.languages.includes(t)))?"can":null:e??null}(),t.consent.cmpapi)),e}(t),this.init=this.initialize()}async initialize(){this.dcn.initPassport&&await n(this.dcn).catch((()=>{})),this.dcn.initTargeting&&this.targeting().catch((()=>{}))}async identify(){await this.init;for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return function(t,e){return S("/identify",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}(this.dcn,e.filter((t=>t)))}async uid2Token(t){return await this.init,function(t,e){return S("/uid2/token",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}(this.dcn,t)}async targeting(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"__passport__";return await this.init,async function(t,e){const r="/v2/targeting?"+new URLSearchParams({id:e}).toString(),i=await S(r,t,{method:"GET",headers:{Accept:"application/json"}});return i&&new v(t).setTargeting(i),i}(this.dcn,t)}targetingFromCache(){return t=this.dcn,new v(t).getTargeting();var t}async site(){return n(this.dcn)}siteFromCache(){return t=this.dcn,new v(t).getSite();var t}targetingClearCache(){var t;t=this.dcn,new v(t).clearTargeting()}async prebidORTB2(){return k(await this.targeting())}prebidORTB2FromCache(){return k(this.targetingFromCache())}async targetingKeyValues(){return D(await this.targeting())}targetingKeyValuesFromCache(){return D(this.targetingFromCache())}async witness(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return await this.init,function(t,e,r){const i={event:e,properties:r};return S("/witness",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}(this.dcn,t,e)}async profile(t){return await this.init,function(t,e){const r={traits:e};return S("/profile",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}(this.dcn,t)}async tokenize(t){return await this.init,function(t,e){let r="/v1/tokenize";t.experiments.includes("tokenize-v2")&&(r="/v2/tokenize");let i={id:e};return S(r,t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}(this.dcn,t)}async resolve(t){return await this.init,async function(t,e){const r=new URLSearchParams;"string"==typeof e&&r.append("id",e);const i="/v1/resolve?"+r.toString();return function(t){const e={clusters:[],lmpid:""};if("object"!=typeof t||null===t)return e;if("lmpid"in t&&"string"==typeof t?.lmpid&&(e.lmpid=t.lmpid),!("clusters"in t)||!Array.isArray(t?.clusters))return e;for(const r of t.clusters){const t={ids:[],traits:[]};if(Array.isArray(r?.ids))for(const e of r.ids)"string"==typeof e&&t.ids.push(e);if(Array.isArray(r?.traits))for(const e of r.traits)"string"==typeof e?.key&&"string"==typeof e?.value&&t.traits.push({key:e.key,value:e.value});(t.ids.length>0||t.traits.length>0)&&e.clusters.push(t)}return e}(await S(i,t,{method:"GET",headers:{Accept:"application/json"}}))}(this.dcn,t)}static eid(t){return t?"e:"+K.sha256.hex(t.toLowerCase().trim()):""}static sha256(t){return t?K.sha256.hex(t):""}static cid(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r="c:";if("string"!=typeof t)throw new Error("Invalid ppid");if("number"!=typeof e||isNaN(e)||e<0||e>9)throw new Error("Invalid variant");return e>0&&(r=`c${e}:`),t?r+t.trim():""}static TargetingKeyValues(t){return D(t)}static PrebidORTB2(t){return k(t)}}i(B,"version",t.r);const N=B;function V(t){return{advertiserId:t.advertiserId?.toString(),campaignId:t.campaignId?.toString(),creativeId:t.creativeId?.toString(),isEmpty:t.isEmpty?.toString(),lineItemId:t.lineItemId?.toString(),serviceName:t.serviceName?.toString(),size:t.size?.toString(),slotElementId:t.slot?.getSlotElementId(),sourceAgnosticCreativeId:t.sourceAgnosticCreativeId?.toString(),sourceAgnosticLineItemId:t.sourceAgnosticLineItemId?.toString()}}N.prototype.installGPTEventListeners=function(){const t=this;t.installGPTEventListeners=function(){},window.googletag=window.googletag||{cmd:[]};const e=window.googletag;e.cmd.push((function(){e.pubads().addEventListener("slotRenderEnded",(function(e){t.witness("googletag.events.slotRenderEnded",V(e))})),e.pubads().addEventListener("impressionViewable",(function(e){t.witness("googletag.events.impressionViewable",V(e))}))}))},N.prototype.installGPTSecureSignals=function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];window.googletag=window.googletag||{cmd:[]};const i=window.googletag;e&&e.length>0&&i.cmd.push((()=>{e.forEach((t=>{let{provider:e,id:r}=t;i.secureSignalProviders.push({id:e,collectorFunction:()=>Promise.resolve(r)})}))}))};const j=/^[a-f0-9]{64}$/i;N.prototype.tryIdentifyFromParams=function(t,e){const r=new RegExp(`^${t||"oeid"}$`,"i"),i=new URLSearchParams(window.location.search);let n="";for(const[t,e]of i)if(r.test(t)){n=e;break}""!=n&&(e||function(t){return j.test(t)}(n))&&this.identify((e||"e")+":"+n.toLowerCase())},N.prototype.auctionConfig=async function(){let t=this.siteFromCache();return t||(t=await this.site()),t.auctionConfig??null},N.prototype.installGPTAuctionConfigs=async function(t){this.installGPTAuctionConfigs=function(){return Promise.resolve()};const e=await this.auctionConfig();if(!e)return;window.googletag=window.googletag||{cmd:[]};const r=window.googletag;r.cmd.push((function(){let i=r.pubads().getSlots();t&&(i=i.filter(t));for(const t of i){const r=t.getSizes(),i=[];for(const t of r)"fluid"!==t&&i.push({configKey:e.seller+"-"+t.getWidth()+"x"+t.getHeight(),auctionConfig:{...e,requestedSize:{width:t.getWidth()+"px",height:t.getHeight()+"px"}}});t.setConfig({componentAuction:i})}}))},N.prototype.runAdAuction=async function(t,e){if(!("runAdAuction"in navigator))throw"run-ad-auction not supported";const r=document.getElementById(t);if(!r)throw"spot not found";const i=function(t){const e=window.getComputedStyle(t,null);return{width:e.getPropertyValue("width"),height:e.getPropertyValue("height")}}(r),n=await this.auctionConfig();if(!n)return!1;const s={...n,requestedSize:i,resolveToConfig:!0},o=e?.iframe??!1;o&&(s.resolveToConfig=!1);const a=await navigator.runAdAuction(s);if(!a)return r.replaceChildren(),!1;if(o){const t=document.createElement("iframe");t.src=a,t.style.border="none",t.style.width=i.width,t.style.height=i.height,r.replaceChildren(t)}else{const t=document.createElement("fencedframe");t.config=a,t.style.border="none",r.replaceChildren(t)}return!0},N.prototype.joinAdInterestGroups=async function(){if(!("joinAdInterestGroup"in navigator))throw"join-ad-interest-group not supported";if(!(this.dcn.consent.deviceAccess&&this.dcn.consent.createProfilesForAdvertising&&this.dcn.consent.measureAdvertisingPerformance))throw"consent not granted for joining interest groups";const t=await this.site();if(!t.interestGroupPixel)throw"origin not enabled for protected audience apis";const e=new URL(t.interestGroupPixel),r=document.createElement("iframe");r.src=e.toString(),r.allow="join-ad-interest-group "+e.origin,r.style.display="none";const i=new Promise(((t,e)=>{window.addEventListener("message",(i=>{i.source===r.contentWindow&&("success"!==i.data.result?e():t())}))}));return document.body.appendChild(r),i},N.prototype.getTopics=async function(){if(!("browsingTopics"in document))throw"browsing-topics not supported";if(!this.dcn.consent.deviceAccess)throw"consent not granted for reading browsing topics";const t=await this.site();if(!t.getTopicsURL)throw"origin not enabled for topics api";const e=new URL(t.getTopicsURL),r=document.createElement("iframe");r.src=e.toString(),r.allow="browsing-topics "+e.origin,r.style.display="none";const i=new Promise(((t,e)=>{window.addEventListener("message",(i=>{i.source===r.contentWindow&&(i.data.error?e(new Error(i.data.error.toString())):t(i.data.result))}))}));return document.body.appendChild(r),i},N.prototype.ingestTopics=function(){this.getTopics().then((t=>{if(!t.length)return;const e=t.reduce(((t,e)=>{const r=`topics_v${e.taxonomyVersion}`;return t[r]?t[r]+=",":t[r]="",t[r]+=String(e.topic),t}),{});this.profile(e)})).catch((()=>{}))},window.optable=window.optable||{},window.optable.SDK=N,window.optable.cmd=new class{constructor(t){if(this.cmds=t,Array.isArray(this.cmds))for(const t of this.cmds)"function"==typeof t&&t()}push(t){t()}}(window.optable.cmd||[]),window.optable.utils={resolveMultiNodeTargeting:async function(t){return t?t.some((t=>t.priority))?async function(t){const e=new Set,r={user:{data:[],eids:[]}},i=new Map,n=new Map;const s=t.map((t=>{let{targetingFn:e,matcher:s,mm:o,priority:a}=t;return e().then((t=>function(t,e,s){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const a=Math.max(0,o),{data:c=[],eids:u=[]}=t.ortb2?.user??{};r.user.data.push(...c),u.filter((t=>t.uids.length)).forEach((t=>{let{ext:r,...o}=t;const c=i.get(a)??[];i.set(a,[...c,e]);const u=n.get(a)??[];n.set(a,[...u,{...o,matcher:e,mm:s}])}))}(t,s,o,a)))}));await Promise.allSettled(s);const o=Array.from(n.keys()).sort(((t,e)=>t-e)).filter((t=>n.get(t)?.length)).shift();if(o){const t=i.get(o)||[];r.user.eids.push(...n.get(o)||[]),t.forEach((t=>e.add(t)))}return{ortb2:r,eidSources:e}}(t):async function(t){const e=new Set,r={user:{data:[],eids:[]}};const i=t.map((t=>{let{targetingFn:i,matcher:n,mm:s}=t;return i().then((t=>function(t,i,n){const{data:s=[],eids:o=[]}=t.ortb2?.user??{};r.user.data.push(...s),o.filter((t=>t.uids.length)).forEach((t=>{let{ext:s,...o}=t;e.add(i),r.user.eids.push({...o,mm:n,matcher:i})}))}(t,n,s)))}));return await Promise.allSettled(i),{ortb2:r,eidSources:e}}(t):Promise.reject("No targeting rules provided")}},window.optable.instance_config&&(window.optable.instance=new N(window.optable.instance_config))})()})();
|
|
2
|
+
(()=>{var t={312:(t,e,r)=>{var i;!function(){"use strict";var e="input is invalid type",n="object"==typeof window,s=n?window:{};s.JS_SHA256_NO_WINDOW&&(n=!1);var o=!n&&"object"==typeof self,a=!s.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;a?s=r.g:o&&(s=self);var c=!s.JS_SHA256_NO_COMMON_JS&&t.exports,u=r.amdO,d=!s.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,h="0123456789abcdef".split(""),p=[-2147483648,8388608,32768,128],g=[24,16,8,0],l=[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"],y=[];!s.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),!d||!s.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(t){return"object"==typeof t&&t.buffer&&t.buffer.constructor===ArrayBuffer});var m=function(t,e){return function(r){return new b(e,!0).update(r)[t]()}},w=function(t){var e=m("hex",t);a&&(e=A(e,t)),e.create=function(){return new b(t)},e.update=function(t){return e.create().update(t)};for(var r=0;r<f.length;++r){var i=f[r];e[i]=m(i,t)}return e},A=function(t,i){var n,o=r(394),a=r(903).Buffer,c=i?"sha224":"sha256";return n=a.from&&!s.JS_SHA256_NO_BUFFER_FROM?a.from:function(t){return new a(t)},function(r){if("string"==typeof r)return o.createHash(c).update(r,"utf8").digest("hex");if(null==r)throw new Error(e);return r.constructor===ArrayBuffer&&(r=new Uint8Array(r)),Array.isArray(r)||ArrayBuffer.isView(r)||r.constructor===a?o.createHash(c).update(n(r)).digest("hex"):t(r)}},v=function(t,e){return function(r,i){return new P(r,e,!0).update(i)[t]()}},S=function(t){var e=v("hex",t);e.create=function(e){return new P(e,t)},e.update=function(t,r){return e.create(t).update(r)};for(var r=0;r<f.length;++r){var i=f[r];e[i]=v(i,t)}return e};function b(t,e){e?(y[0]=y[16]=y[1]=y[2]=y[3]=y[4]=y[5]=y[6]=y[7]=y[8]=y[9]=y[10]=y[11]=y[12]=y[13]=y[14]=y[15]=0,this.blocks=y):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t?(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=t}function P(t,r,i){var n,s=typeof t;if("string"===s){var o,a=[],c=t.length,u=0;for(n=0;n<c;++n)(o=t.charCodeAt(n))<128?a[u++]=o:o<2048?(a[u++]=192|o>>>6,a[u++]=128|63&o):o<55296||o>=57344?(a[u++]=224|o>>>12,a[u++]=128|o>>>6&63,a[u++]=128|63&o):(o=65536+((1023&o)<<10|1023&t.charCodeAt(++n)),a[u++]=240|o>>>18,a[u++]=128|o>>>12&63,a[u++]=128|o>>>6&63,a[u++]=128|63&o);t=a}else{if("object"!==s)throw new Error(e);if(null===t)throw new Error(e);if(d&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||d&&ArrayBuffer.isView(t)))throw new Error(e)}t.length>64&&(t=new b(r,!0).update(t).array());var h=[],p=[];for(n=0;n<64;++n){var g=t[n]||0;h[n]=92^g,p[n]=54^g}b.call(this,r,i),this.update(p),this.oKeyPad=h,this.inner=!0,this.sharedMemory=i}b.prototype.update=function(t){if(!this.finalized){var r,i=typeof t;if("string"!==i){if("object"!==i)throw new Error(e);if(null===t)throw new Error(e);if(d&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||d&&ArrayBuffer.isView(t)))throw new Error(e);r=!0}for(var n,s,o=0,a=t.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(s=this.start;o<a&&s<64;++o)c[s>>>2]|=t[o]<<g[3&s++];else for(s=this.start;o<a&&s<64;++o)(n=t.charCodeAt(o))<128?c[s>>>2]|=n<<g[3&s++]:n<2048?(c[s>>>2]|=(192|n>>>6)<<g[3&s++],c[s>>>2]|=(128|63&n)<<g[3&s++]):n<55296||n>=57344?(c[s>>>2]|=(224|n>>>12)<<g[3&s++],c[s>>>2]|=(128|n>>>6&63)<<g[3&s++],c[s>>>2]|=(128|63&n)<<g[3&s++]):(n=65536+((1023&n)<<10|1023&t.charCodeAt(++o)),c[s>>>2]|=(240|n>>>18)<<g[3&s++],c[s>>>2]|=(128|n>>>12&63)<<g[3&s++],c[s>>>2]|=(128|n>>>6&63)<<g[3&s++],c[s>>>2]|=(128|63&n)<<g[3&s++]);this.lastByteIndex=s,this.bytes+=s-this.start,s>=64?(this.block=c[16],this.start=s-64,this.hash(),this.hashed=!0):this.start=s}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 t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>>2]|=p[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},b.prototype.hash=function(){var t,e,r,i,n,s,o,a,c,u=this.h0,d=this.h1,h=this.h2,p=this.h3,g=this.h4,f=this.h5,y=this.h6,m=this.h7,w=this.blocks;for(t=16;t<64;++t)e=((n=w[t-15])>>>7|n<<25)^(n>>>18|n<<14)^n>>>3,r=((n=w[t-2])>>>17|n<<15)^(n>>>19|n<<13)^n>>>10,w[t]=w[t-16]+e+w[t-7]+r|0;for(c=d&h,t=0;t<64;t+=4)this.first?(this.is224?(s=300032,m=(n=w[0]-1413257819)-150054599|0,p=n+24177077|0):(s=704751109,m=(n=w[0]-210244248)-1521486534|0,p=n+143694565|0),this.first=!1):(e=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),i=(s=u&d)^u&h^c,m=p+(n=m+(r=(g>>>6|g<<26)^(g>>>11|g<<21)^(g>>>25|g<<7))+(g&f^~g&y)+l[t]+w[t])|0,p=n+(e+i)|0),e=(p>>>2|p<<30)^(p>>>13|p<<19)^(p>>>22|p<<10),i=(o=p&u)^p&d^s,y=h+(n=y+(r=(m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+(m&g^~m&f)+l[t+1]+w[t+1])|0,e=((h=n+(e+i)|0)>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),i=(a=h&p)^h&u^o,f=d+(n=f+(r=(y>>>6|y<<26)^(y>>>11|y<<21)^(y>>>25|y<<7))+(y&m^~y&g)+l[t+2]+w[t+2])|0,e=((d=n+(e+i)|0)>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),i=(c=d&h)^d&p^a,g=u+(n=g+(r=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7))+(f&y^~f&m)+l[t+3]+w[t+3])|0,u=n+(e+i)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+u|0,this.h1=this.h1+d|0,this.h2=this.h2+h|0,this.h3=this.h3+p|0,this.h4=this.h4+g|0,this.h5=this.h5+f|0,this.h6=this.h6+y|0,this.h7=this.h7+m|0},b.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,r=this.h2,i=this.h3,n=this.h4,s=this.h5,o=this.h6,a=this.h7,c=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[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[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[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[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[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 t=this.h0,e=this.h1,r=this.h2,i=this.h3,n=this.h4,s=this.h5,o=this.h6,a=this.h7,c=[t>>>24&255,t>>>16&255,t>>>8&255,255&t,e>>>24&255,e>>>16&255,e>>>8&255,255&e,r>>>24&255,r>>>16&255,r>>>8&255,255&r,i>>>24&255,i>>>16&255,i>>>8&255,255&i,n>>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,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 t=new ArrayBuffer(this.is224?28:32),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),e.setUint32(20,this.h5),e.setUint32(24,this.h6),this.is224||e.setUint32(28,this.h7),t},P.prototype=new b,P.prototype.finalize=function(){if(b.prototype.finalize.call(this),this.inner){this.inner=!1;var t=this.array();b.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(t),b.prototype.finalize.call(this)}};var E=w();E.sha256=E,E.sha224=w(!0),E.sha256.hmac=S(),E.sha224.hmac=S(!0),c?t.exports=E:(s.sha256=E.sha256,s.sha224=E.sha224,u&&(void 0===(i=function(){return E}.call(E,r,E,t))||(t.exports=i)))}()},903:()=>{},394:()=>{}},e={};function r(i){var n=e[i];if(void 0!==n)return n.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}r.amdO={},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{"use strict";const t={r:"v0.33.0"};function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function i(t,r,i){return(r=function(t){var r=function(t){if("object"!=e(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var i=r.call(t,"string");if("object"!=e(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==e(r)?r:r+""}(r))in t?Object.defineProperty(t,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[r]=i,t}async function n(t){const e=await S("/config",t,{method:"GET",headers:{Accept:"application/json"}});return new v(t).setSite(e),e}const s={"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],u=[5],d=[7,8,10,12,17,13,18,14,19,20,21,15,22,16,11,9];function h(t,e){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=function(t,e){const{gdprApplies:r,gppSectionIDs:i,gdprData:n}=e;if(void 0!==r)return r?"gdpr":"gdpr"===t?null:t;if(void 0!==n&&"gdpr"===t)return"gdpr";if(void 0===i||1===i.length&&0===i[0])return t;if(1===i.length&&-1===i[0])return null;if(i.some((t=>c.includes(t))))return"gdpr";if(i.some((t=>u.includes(t))))return"can";if(i.some((t=>d.includes(t))))return"us";switch(t){case"gdpr":if(!i.some((t=>c.includes(t))))return null;break;case"can":if(!i.some((t=>u.includes(t))))return null;break;case"us":if(!i.some((t=>d.includes(t))))return null}return t}(t,e),n={reg:i,gpp:e.gppString,gppSectionIDs:e.gppSectionIDs,gdpr:e.gdprString,gdprApplies:e.gdprApplies,deviceAccess:!1,createProfilesForAdvertising:!1,useProfilesForAdvertising:!1,measureAdvertisingPerformance:!1};switch(i){case"gdpr":e.gdprData?(n.deviceAccess=g(e.gdprData,1,r.tcfeuVendorID),n.createProfilesForAdvertising=g(e.gdprData,3,r.tcfeuVendorID),n.useProfilesForAdvertising=g(e.gdprData,4,r.tcfeuVendorID),n.measureAdvertisingPerformance=g(e.gdprData,7,r.tcfeuVendorID)):e.gppData&&(n.deviceAccess=f(e.gppData,1,r.tcfeuVendorID),n.createProfilesForAdvertising=f(e.gppData,3,r.tcfeuVendorID),n.useProfilesForAdvertising=f(e.gppData,4,r.tcfeuVendorID),n.measureAdvertisingPerformance=f(e.gppData,7,r.tcfeuVendorID));break;case"can":n.deviceAccess=!0,e.gppData&&(n.createProfilesForAdvertising=l(e.gppData,3,r.tcfcaVendorID),n.useProfilesForAdvertising=l(e.gppData,4,r.tcfcaVendorID),n.measureAdvertisingPerformance=l(e.gppData,7,r.tcfcaVendorID));break;default:n.deviceAccess=!0,n.createProfilesForAdvertising=!0,n.useProfilesForAdvertising=!0,n.measureAdvertisingPerformance=!0}return n}function p(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={},i=h(t,r,e);return"function"==typeof window.__tcfapi&&window.__tcfapi?.("addEventListener",2,((n,s)=>{s&&("tcloaded"===n.eventStatus||"useractioncomplete"===n.eventStatus)&&(n=>{r.gdprString=n.tcString,r.gdprApplies=n.gdprApplies,r.gdprData=n,Object.assign(i,h(t,r,e))})(n)})),"function"==typeof window.__gpp&&window.__gpp?.("addEventListener",((n,s)=>{s&&"signalStatus"===n.eventName&&"ready"===n.data&&(n=>{r.gppString=n.gppString,r.gppSectionIDs=n.applicableSections,r.gppData=n,Object.assign(i,h(t,r,e))})(n.pingData)})),i}function g(t,e,r){return r?!!t.purpose?.consents?.[e]&&!!t.vendor?.consents?.[r]:!!t.publisher?.consents?.[e]}function l(t,e,r){const i=e>1,n=t.parsedSections?.[o]||[];if("number"==typeof r){const t=n.find((t=>"Version"in t));if(!t)return!1;let s=t.PurposesExpressConsent.includes(e)&&t.VendorExpressConsent.includes(r);return i&&(s||=t.PurposesImpliedConsent.includes(e)&&t.VendorImpliedConsent.includes(r)),s}const s=n.find((t=>"SubsectionType"in t&&3===t.SubsectionType));if(!s)return!1;let a=s.PubPurposesExpressConsent.includes(e);return i&&(a||=s.PubPurposesImpliedConsent.includes(e)),a}function f(t,e,r){const i=e>1,n=t.parsedSections?.[a]||[];if("number"==typeof r){const t=n.find((t=>"Version"in t));if(!t)return!1;let s=t.PurposeConsent.includes(e)&&t.VendorConsent.includes(r);return i&&(s||=t.PurposesLITransparency.includes(e)&&t.VendorLegitimateInterest.includes(r)),s}const s=n.find((t=>"SegmentType"in t&&3===t.SegmentType));if(!s)return!1;let o=s.PubPurposesConsent.includes(e);return i&&(o||=s.PubPurposesLITransparency.includes(e)),o}class y{constructor(t){i(this,"consent",void 0),this.consent=t}getItem(t){return this.consent.deviceAccess?window.localStorage.getItem(t):null}setItem(t,e){this.consent.deviceAccess&&window.localStorage.setItem(t,e)}removeItem(t){this.consent.deviceAccess&&window.localStorage.removeItem(t)}}const m="_optable_pairId";function w(t){const e=new Uint16Array(t.length);for(let r=0;r<e.length;r++)e[r]=t.charCodeAt(r);return btoa(String.fromCharCode(...new Uint8Array(e.buffer)))}function A(t){return t.node?w(`${t.host}/${t.node}`):w(`${t.host}`)}class v{constructor(t){this.config=t,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(t){const e=[],r=[],i=`OPTABLE_PASSPORT_${A(t)}`;return e.push(i),r.push(i),t.legacyHostCache?(r.push(`OPTABLE_PASSPORT_${w(`${t.legacyHostCache}`)}`),r.push(`OPTABLE_PASS_${w(`${t.legacyHostCache}/${t.site}`)}`)):r.push(`OPTABLE_PASS_${w(`${t.host}/${t.site}`)}`),{write:e,read:r}}(t),this.targetingKeys=function(t){const e=`OPTABLE_TARGETING_${A(t)}`;return{write:[e,t.optableCacheTargeting],read:[e]}}(t),this.siteKeys=function(t){const e=`OPTABLE_SITE_${A(t)}`;return{write:[e],read:[e]}}(t),this.pairKeys={write:[m],read:[m]},this.storage=new y(this.config.consent)}getPassport(){return this.readStorageKeys(this.passportKeys)}setPassport(t){this.writeToStorageKeys(this.passportKeys,t)}getTargeting(){const t=this.readStorageKeys(this.targetingKeys);return t?JSON.parse(t):null}setTargeting(t){t&&(this.writeToStorageKeys(this.targetingKeys,JSON.stringify(t)),this.setPairIDs(t))}getSite(){const t=this.readStorageKeys(this.siteKeys);return t?JSON.parse(t):null}setSite(t){t&&this.writeToStorageKeys(this.siteKeys,JSON.stringify(t))}setPairIDs(t){const e=t.ortb2?.user?.eids?.filter((t=>"pair-protocol.com"===t.source)),r=e?.flatMap((t=>t.uids));if(!r)return;const i=new Set(r.map((t=>t.id)));this.writeToStorageKeys(this.pairKeys,btoa(JSON.stringify({envelope:[...i]})))}getPairIDs(){const t=this.readStorageKeys(this.pairKeys);return t?JSON.parse(atob(t))?.envelope:null}readStorageKeys(t){for(const e of t.read){const t=this.storage.getItem(e);if(t)return t}return null}writeToStorageKeys(t,e){if(e)for(const r of t.write)this.storage.setItem(r,e)}clearStorageKeys(t){for(const e of[...t.read,...t.write])this.storage.removeItem(e)}clearPassport(){this.clearStorageKeys(this.passportKeys)}clearTargeting(){this.clearStorageKeys(this.targetingKeys)}clearSite(){this.clearStorageKeys(this.siteKeys)}}async function S(e,r,i){const n=await globalThis.fetch(function(e,r,i){const{host:n,cookies:s}=r,o=new URL(e,`https://${n}`);if(o.searchParams.set("osdk",`web-${t.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"),s)o.searchParams.set("cookies","yes");else{const t=new v(r).getPassport();o.searchParams.set("cookies","no"),o.searchParams.set("passport",t||"")}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)}(e,r,i)),s=n.headers.get("Content-Type"),o=s?.startsWith("application/json")?await n.json():await n.text();if(!n.ok)throw new Error(o.error);return o.passport&&(new v(r).setPassport(o.passport),delete o.passport),o}var b,P,E,I=((P=I||{})[P.Banner=1]="Banner",P[P.Video=2]="Video",P[P.Audio=3]="Audio",P[P.Native=4]="Native",P),T={},C={},_={};(E=b||(b={})).Placement=C,E.Media=_,E.Context=T;const k={cookies:!0,initPassport:!0,readOnly:!1,experiments:[],consent:{reg:null,deviceAccess:!0,createProfilesForAdvertising:!0,useProfilesForAdvertising:!0,measureAdvertisingPerformance:!0}};function D(){const t=new Uint8Array(16);return crypto.getRandomValues(t),btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function O(t){return{user:{data:(t?.audience??[]).map((t=>({name:t.provider,segment:t.ids,ext:{segtax:t.rtb_segtax}}))),ext:{eids:(t?.user??[]).map((t=>({source:t.provider,uids:t.ids.map((t=>{let{id:e}=t;return{id:e,atype:3}}))})))}}}}function x(t){const e={};if(!t)return e;for(const r of t.audience??[])r.keyspace&&(r.keyspace in e||(e[r.keyspace]=[]),e[r.keyspace].push(...r.ids.map((t=>t.id))));return e}var K=r(312);class B{constructor(t){i(this,"dcn",void 0),i(this,"init",void 0),this.dcn=function(t){const e={host:t.host,site:t.site,optableCacheTargeting:t.optableCacheTargeting??"optable-cache:targeting",cookies:t.cookies??k.cookies,initPassport:t.initPassport??k.initPassport,consent:k.consent,readOnly:t.readOnly??k.readOnly,node:t.node,legacyHostCache:t.legacyHostCache,experiments:t.experiments??k.experiments,mockedIP:t.mockedIP,sessionID:t.sessionID??D(),skipEnrichment:t.skipEnrichment,initTargeting:t.initTargeting};return t.consent?.static?e.consent=t.consent.static:t.consent?.cmpapi&&(e.consent=p(function(){const t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=s[t];return"can"===e?["fr","fr-CA"].some((t=>navigator.languages.includes(t)))?"can":null:e??null}(),t.consent.cmpapi)),e}(t),this.init=this.initialize()}async initialize(){this.dcn.initPassport&&await n(this.dcn).catch((()=>{})),this.dcn.initTargeting&&this.targeting().catch((()=>{}))}async identify(){await this.init;for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return function(t,e){return S("/identify",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}(this.dcn,e.filter((t=>t)))}async uid2Token(t){return await this.init,function(t,e){return S("/uid2/token",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}(this.dcn,t)}async targeting(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"__passport__";return await this.init,async function(t,e){const r="/v2/targeting?"+new URLSearchParams({id:e}).toString(),i=await S(r,t,{method:"GET",headers:{Accept:"application/json"}});return i&&(new v(t).setTargeting(i),function(t,e){const r=e.ortb2?.user?.eids?.map((t=>t.matcher));window.dispatchEvent(new CustomEvent("optable-targeting:change",{detail:{instance:t.node||t.host,resolved:!!e.ortb2?.user?.eids?.length,ortb2:e.ortb2,provenance:new Set(r)}}))}(t,i)),i}(this.dcn,t)}targetingFromCache(){return t=this.dcn,new v(t).getTargeting();var t}async site(){return n(this.dcn)}siteFromCache(){return t=this.dcn,new v(t).getSite();var t}targetingClearCache(){var t;t=this.dcn,new v(t).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(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return await this.init,function(t,e,r){const i={event:e,properties:r};return S("/witness",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}(this.dcn,t,e)}async profile(t){return await this.init,function(t,e){const r={traits:e};return S("/profile",t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}(this.dcn,t)}async tokenize(t){return await this.init,function(t,e){let r="/v1/tokenize";t.experiments.includes("tokenize-v2")&&(r="/v2/tokenize");let i={id:e};return S(r,t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}(this.dcn,t)}async resolve(t){return await this.init,async function(t,e){const r=new URLSearchParams;"string"==typeof e&&r.append("id",e);const i="/v1/resolve?"+r.toString();return function(t){const e={clusters:[],lmpid:""};if("object"!=typeof t||null===t)return e;if("lmpid"in t&&"string"==typeof t?.lmpid&&(e.lmpid=t.lmpid),!("clusters"in t)||!Array.isArray(t?.clusters))return e;for(const r of t.clusters){const t={ids:[],traits:[]};if(Array.isArray(r?.ids))for(const e of r.ids)"string"==typeof e&&t.ids.push(e);if(Array.isArray(r?.traits))for(const e of r.traits)"string"==typeof e?.key&&"string"==typeof e?.value&&t.traits.push({key:e.key,value:e.value});(t.ids.length>0||t.traits.length>0)&&e.clusters.push(t)}return e}(await S(i,t,{method:"GET",headers:{Accept:"application/json"}}))}(this.dcn,t)}static eid(t){return t?"e:"+K.sha256.hex(t.toLowerCase().trim()):""}static sha256(t){return t?K.sha256.hex(t):""}static cid(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r="c:";if("string"!=typeof t)throw new Error("Invalid ppid");if("number"!=typeof e||isNaN(e)||e<0||e>9)throw new Error("Invalid variant");return e>0&&(r=`c${e}:`),t?r+t.trim():""}static TargetingKeyValues(t){return x(t)}static PrebidORTB2(t){return O(t)}}i(B,"version",t.r);const N=B;function V(t){return{advertiserId:t.advertiserId?.toString(),campaignId:t.campaignId?.toString(),creativeId:t.creativeId?.toString(),isEmpty:t.isEmpty?.toString(),lineItemId:t.lineItemId?.toString(),serviceName:t.serviceName?.toString(),size:t.size?.toString(),slotElementId:t.slot?.getSlotElementId(),sourceAgnosticCreativeId:t.sourceAgnosticCreativeId?.toString(),sourceAgnosticLineItemId:t.sourceAgnosticLineItemId?.toString()}}N.prototype.installGPTEventListeners=function(){const t=this;t.installGPTEventListeners=function(){},window.googletag=window.googletag||{cmd:[]};const e=window.googletag;e.cmd.push((function(){e.pubads().addEventListener("slotRenderEnded",(function(e){t.witness("googletag.events.slotRenderEnded",V(e))})),e.pubads().addEventListener("impressionViewable",(function(e){t.witness("googletag.events.impressionViewable",V(e))}))}))},N.prototype.installGPTSecureSignals=function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];window.googletag=window.googletag||{cmd:[]};const i=window.googletag;e&&e.length>0&&i.cmd.push((()=>{e.forEach((t=>{let{provider:e,id:r}=t;i.secureSignalProviders.push({id:e,collectorFunction:()=>Promise.resolve(r)})}))}))};const F=/^[a-f0-9]{64}$/i;N.prototype.tryIdentifyFromParams=function(t,e){const r=new RegExp(`^${t||"oeid"}$`,"i"),i=new URLSearchParams(window.location.search);let n="";for(const[t,e]of i)if(r.test(t)){n=e;break}""!=n&&(e||function(t){return F.test(t)}(n))&&this.identify((e||"e")+":"+n.toLowerCase())},N.prototype.auctionConfig=async function(){await this.init;let t=this.siteFromCache();return t||(t=await this.site()),t.auctionConfig??null},N.prototype.installGPTAuctionConfigs=async function(t){this.installGPTAuctionConfigs=function(){return Promise.resolve()};const e=await this.auctionConfig();if(!e)return;window.googletag=window.googletag||{cmd:[]};const r=window.googletag;r.cmd.push((function(){let i=r.pubads().getSlots();t&&(i=i.filter(t));for(const t of i){const r=t.getSizes(),i=[];for(const t of r)"fluid"!==t&&i.push({configKey:e.seller+"-"+t.getWidth()+"x"+t.getHeight(),auctionConfig:{...e,requestedSize:{width:t.getWidth()+"px",height:t.getHeight()+"px"}}});t.setConfig({componentAuction:i})}}))},N.prototype.runAdAuction=async function(t,e){if(!("runAdAuction"in navigator))throw"run-ad-auction not supported";const r=document.getElementById(t);if(!r)throw"spot not found";const i=function(t){const e=window.getComputedStyle(t,null);return{width:e.getPropertyValue("width"),height:e.getPropertyValue("height")}}(r),n=await this.auctionConfig();if(!n)return!1;const s={...n,requestedSize:i,resolveToConfig:!0},o=e?.iframe??!1;o&&(s.resolveToConfig=!1);const a=await navigator.runAdAuction(s);if(!a)return r.replaceChildren(),!1;if(o){const t=document.createElement("iframe");t.src=a,t.style.border="none",t.style.width=i.width,t.style.height=i.height,r.replaceChildren(t)}else{const t=document.createElement("fencedframe");t.config=a,t.style.border="none",r.replaceChildren(t)}return!0},N.prototype.joinAdInterestGroups=async function(){if(!("joinAdInterestGroup"in navigator))throw"join-ad-interest-group not supported";if(!(this.dcn.consent.deviceAccess&&this.dcn.consent.createProfilesForAdvertising&&this.dcn.consent.measureAdvertisingPerformance))throw"consent not granted for joining interest groups";await this.init;let t=this.siteFromCache();if(t||(t=await this.site()),!t.interestGroupPixel)throw"origin not enabled for protected audience apis";const e=new URL(t.interestGroupPixel),r=document.createElement("iframe");r.src=e.toString(),r.allow="join-ad-interest-group "+e.origin,r.style.display="none";const i=new Promise(((t,e)=>{window.addEventListener("message",(i=>{i.source===r.contentWindow&&("success"!==i.data.result?e():t())}))}));return document.body.appendChild(r),i},N.prototype.getTopics=async function(){if(!("browsingTopics"in document))throw"browsing-topics not supported";if(!this.dcn.consent.deviceAccess)throw"consent not granted for reading browsing topics";await this.init;let t=this.siteFromCache();if(t||(t=await this.site()),!t.getTopicsURL)throw"origin not enabled for topics api";const e=new URL(t.getTopicsURL),r=document.createElement("iframe");r.src=e.toString(),r.allow="browsing-topics "+e.origin,r.style.display="none";const i=new Promise(((t,e)=>{window.addEventListener("message",(i=>{i.source===r.contentWindow&&(i.data.error?e(new Error(i.data.error.toString())):t(i.data.result))}))}));return document.body.appendChild(r),i},N.prototype.ingestTopics=function(){this.getTopics().then((t=>{if(!t.length)return;const e=t.reduce(((t,e)=>{const r=`topics_v${e.taxonomyVersion}`;return t[r]?t[r]+=",":t[r]="",t[r]+=String(e.topic),t}),{});this.profile(e)})).catch((()=>{}))},window.optable=window.optable||{},window.optable.SDK=N,window.optable.cmd=new class{constructor(t){if(this.cmds=t,Array.isArray(this.cmds))for(const t of this.cmds)"function"==typeof t&&t()}push(t){t()}}(window.optable.cmd||[]),window.optable.utils={resolveMultiNodeTargeting:async function(t){return t?t.some((t=>t.priority))?async function(t){const e=new Set,r={user:{data:[],eids:[]}},i=new Map,n=new Map;const s=t.map((t=>{let{targetingFn:e,matcher:s,mm:o,priority:a}=t;return e().then((t=>function(t,e,s){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const a=Math.max(0,o),{data:c=[],eids:u=[]}=t.ortb2?.user??{};r.user.data.push(...c),u.filter((t=>t.uids.length)).forEach((t=>{let{ext:r,...o}=t;const c=i.get(a)??[];i.set(a,[...c,e]);const u=n.get(a)??[];n.set(a,[...u,{...o,matcher:e,mm:s}])}))}(t,s,o,a)))}));await Promise.allSettled(s);const o=Array.from(n.keys()).sort(((t,e)=>t-e)).filter((t=>n.get(t)?.length)).shift();if(o){const t=i.get(o)||[];r.user.eids.push(...n.get(o)||[]),t.forEach((t=>e.add(t)))}return{ortb2:r,eidSources:e}}(t):async function(t){const e=new Set,r={user:{data:[],eids:[]}};const i=t.map((t=>{let{targetingFn:i,matcher:n,mm:s}=t;return i().then((t=>function(t,i,n){const{data:s=[],eids:o=[]}=t.ortb2?.user??{};r.user.data.push(...s),o.filter((t=>t.uids.length)).forEach((t=>{let{ext:s,...o}=t;e.add(i),r.user.eids.push({...o,mm:n,matcher:i})}))}(t,n,s)))}));return await Promise.allSettled(i),{ortb2:r,eidSources:e}}(t):Promise.reject("No targeting rules provided")}},window.optable.instance_config&&(window.optable.instance=new N(window.optable.instance_config))})()})();
|
package/lib/dist/addons/paapi.js
CHANGED
|
@@ -14,6 +14,7 @@ import OptableSDK from "../sdk";
|
|
|
14
14
|
OptableSDK.prototype.auctionConfig = function () {
|
|
15
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
16
|
var _a;
|
|
17
|
+
yield this.init;
|
|
17
18
|
let siteConfig = this.siteFromCache();
|
|
18
19
|
if (!siteConfig) {
|
|
19
20
|
siteConfig = yield this.site();
|
|
@@ -130,7 +131,11 @@ OptableSDK.prototype.joinAdInterestGroups = function () {
|
|
|
130
131
|
if (!accessGranted) {
|
|
131
132
|
throw "consent not granted for joining interest groups";
|
|
132
133
|
}
|
|
133
|
-
|
|
134
|
+
yield this.init;
|
|
135
|
+
let siteConfig = this.siteFromCache();
|
|
136
|
+
if (!siteConfig) {
|
|
137
|
+
siteConfig = yield this.site();
|
|
138
|
+
}
|
|
134
139
|
if (!siteConfig.interestGroupPixel) {
|
|
135
140
|
throw "origin not enabled for protected audience apis";
|
|
136
141
|
}
|
|
@@ -20,7 +20,11 @@ OptableSDK.prototype.getTopics = function () {
|
|
|
20
20
|
if (!this.dcn.consent.deviceAccess) {
|
|
21
21
|
throw "consent not granted for reading browsing topics";
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
yield this.init;
|
|
24
|
+
let siteConfig = this.siteFromCache();
|
|
25
|
+
if (!siteConfig) {
|
|
26
|
+
siteConfig = yield this.site();
|
|
27
|
+
}
|
|
24
28
|
if (!siteConfig.getTopicsURL) {
|
|
25
29
|
throw "origin not enabled for topics api";
|
|
26
30
|
}
|
package/lib/dist/build.json
CHANGED
package/lib/dist/config.d.ts
CHANGED
|
@@ -18,11 +18,13 @@ type InitConfig = {
|
|
|
18
18
|
sessionID?: string;
|
|
19
19
|
skipEnrichment?: boolean;
|
|
20
20
|
initTargeting?: boolean;
|
|
21
|
+
optableCacheTargeting?: string;
|
|
21
22
|
};
|
|
22
23
|
type ResolvedConfig = {
|
|
23
24
|
site: string;
|
|
24
25
|
host: string;
|
|
25
26
|
consent: Consent;
|
|
27
|
+
optableCacheTargeting: string;
|
|
26
28
|
node?: string;
|
|
27
29
|
cookies: boolean;
|
|
28
30
|
initPassport: boolean;
|
package/lib/dist/config.js
CHANGED
|
@@ -13,26 +13,27 @@ const DCN_DEFAULTS = {
|
|
|
13
13
|
},
|
|
14
14
|
};
|
|
15
15
|
function getConfig(init) {
|
|
16
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
16
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
17
17
|
const config = {
|
|
18
18
|
host: init.host,
|
|
19
19
|
site: init.site,
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
optableCacheTargeting: (_a = init.optableCacheTargeting) !== null && _a !== void 0 ? _a : "optable-cache:targeting",
|
|
21
|
+
cookies: (_b = init.cookies) !== null && _b !== void 0 ? _b : DCN_DEFAULTS.cookies,
|
|
22
|
+
initPassport: (_c = init.initPassport) !== null && _c !== void 0 ? _c : DCN_DEFAULTS.initPassport,
|
|
22
23
|
consent: DCN_DEFAULTS.consent,
|
|
23
|
-
readOnly: (
|
|
24
|
+
readOnly: (_d = init.readOnly) !== null && _d !== void 0 ? _d : DCN_DEFAULTS.readOnly,
|
|
24
25
|
node: init.node,
|
|
25
26
|
legacyHostCache: init.legacyHostCache,
|
|
26
|
-
experiments: (
|
|
27
|
+
experiments: (_e = init.experiments) !== null && _e !== void 0 ? _e : DCN_DEFAULTS.experiments,
|
|
27
28
|
mockedIP: init.mockedIP,
|
|
28
|
-
sessionID: (
|
|
29
|
+
sessionID: (_f = init.sessionID) !== null && _f !== void 0 ? _f : generateSessionID(),
|
|
29
30
|
skipEnrichment: init.skipEnrichment,
|
|
30
31
|
initTargeting: init.initTargeting,
|
|
31
32
|
};
|
|
32
|
-
if ((
|
|
33
|
+
if ((_g = init.consent) === null || _g === void 0 ? void 0 : _g.static) {
|
|
33
34
|
config.consent = init.consent.static;
|
|
34
35
|
}
|
|
35
|
-
else if ((
|
|
36
|
+
else if ((_h = init.consent) === null || _h === void 0 ? void 0 : _h.cmpapi) {
|
|
36
37
|
config.consent = getConsent(inferRegulation(), init.consent.cmpapi);
|
|
37
38
|
}
|
|
38
39
|
return config;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const targetingEventName = "optable-targeting:change";
|
|
2
|
+
function sendTargetingUpdateEvent(config, response) {
|
|
3
|
+
var _a, _b, _c, _d, _e, _f;
|
|
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
|
+
window.dispatchEvent(new CustomEvent(targetingEventName, {
|
|
6
|
+
detail: {
|
|
7
|
+
instance: config.node || config.host,
|
|
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
|
+
ortb2: response.ortb2,
|
|
10
|
+
provenance: new Set(matchers),
|
|
11
|
+
},
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
export { sendTargetingUpdateEvent };
|
|
@@ -21,8 +21,9 @@ function generateSiteKeys(config) {
|
|
|
21
21
|
// Generate the keys for the targeting storage
|
|
22
22
|
// The keys are generated based on the host and node configs
|
|
23
23
|
function generateTargetingKeys(config) {
|
|
24
|
-
const
|
|
25
|
-
|
|
24
|
+
const privateKey = `OPTABLE_TARGETING_${getWriteKeyBase64FromConfig(config)}`;
|
|
25
|
+
const publicKey = config.optableCacheTargeting;
|
|
26
|
+
return { write: [privateKey, publicKey], read: [privateKey] };
|
|
26
27
|
}
|
|
27
28
|
function generatedPairKeys() {
|
|
28
29
|
return { write: [pairStorageKey], read: [pairStorageKey] };
|
package/lib/dist/core/storage.js
CHANGED
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { fetch } from "../core/network";
|
|
11
11
|
import { LocalStorage } from "../core/storage";
|
|
12
12
|
import * as adcom from "iab-adcom";
|
|
13
|
+
import { sendTargetingUpdateEvent } from "../core/events/cache-refresh";
|
|
13
14
|
function Targeting(config, id) {
|
|
14
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15
16
|
const searchParams = new URLSearchParams({ id });
|
|
@@ -21,6 +22,7 @@ function Targeting(config, id) {
|
|
|
21
22
|
if (response) {
|
|
22
23
|
const ls = new LocalStorage(config);
|
|
23
24
|
ls.setTargeting(response);
|
|
25
|
+
sendTargetingUpdateEvent(config, response);
|
|
24
26
|
}
|
|
25
27
|
return response;
|
|
26
28
|
});
|
package/lib/dist/sdk.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { TokenizeResponse } from "./edge/tokenize";
|
|
|
9
9
|
declare class OptableSDK {
|
|
10
10
|
static version: string;
|
|
11
11
|
dcn: ResolvedConfig;
|
|
12
|
-
|
|
12
|
+
protected init: Promise<void>;
|
|
13
13
|
constructor(dcn: InitConfig);
|
|
14
14
|
initialize(): Promise<void>;
|
|
15
15
|
identify(...ids: string[]): Promise<void>;
|
package/package.json
CHANGED