@bidkernel/analytics 0.6.0 → 0.7.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 +7 -7
- package/dist/analytics.global.js +1 -1
- package/dist/index.d.mts +96 -1
- package/dist/index.d.ts +96 -1
- package/dist/index.js +624 -41
- package/dist/index.mjs +624 -41
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Vanilla JS bindings, TypeScript types, and the standalone [Prebid.js](https://prebid.org/) analytics adapter for the [Bidkernel](https://bidkernel.io) ad SDK.
|
|
4
4
|
|
|
5
|
-
The analytics adapter collects auction telemetry (auctions, bid requests/responses, wins, timeouts, no-bids, render failures), batches it, and delivers it to your property's Bidkernel ingest endpoint as protobuf
|
|
5
|
+
The analytics adapter collects auction telemetry (auctions, bid requests/responses, wins, timeouts, no-bids, render failures), batches it, and delivers it to your property's Bidkernel ingest endpoint as protobuf (with `sendBeacon` flushing on page hide and automatic re-queueing on delivery failure).
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -20,7 +20,7 @@ curl -Lo bidkernel-analytics.js https://unpkg.com/@bidkernel/analytics/dist/anal
|
|
|
20
20
|
<script async src="/js/bidkernel-analytics.js"></script>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
The same self-registering bundle is exposed as the `./standalone` subpath
|
|
23
|
+
The same self-registering bundle is exposed as the `./standalone` subpath: `import "@bidkernel/analytics/standalone"` in a bundler has the same effect as the script tag. The bundle defaults `endpoint` to production ingest (`https://by.bidkernel.io/t`); properties on a custom (branded) domain must pass their own `endpoint` via config.
|
|
24
24
|
|
|
25
25
|
## Usage with Prebid.js
|
|
26
26
|
|
|
@@ -54,14 +54,14 @@ analytics.enable();
|
|
|
54
54
|
|
|
55
55
|
| Option | Default | Description |
|
|
56
56
|
| ----------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
57
|
-
| `endpoint` |
|
|
58
|
-
| `propertyId` |
|
|
57
|
+
| `endpoint` | - | Ingest base URL; events POST to `{endpoint}/{propertyId}`. The standalone bundle defaults it to `https://by.bidkernel.io/t`. |
|
|
58
|
+
| `propertyId` | - | Your Bidkernel property ID. |
|
|
59
59
|
| `pbjsGlobalName` | `"pbjs"` | Window global holding the Prebid instance (for renamed installs). |
|
|
60
60
|
| `attachPbjsListeners` | `true` | Set `false` when events are fed via `trackRawEvent` (full SDK mode). |
|
|
61
61
|
| `auctionEnabled` | `true` | Collect auction lifecycle events. |
|
|
62
62
|
| `warningsEnabled` | `true` | Collect warning events. |
|
|
63
63
|
| `errorsEnabled` | `true` | Collect error events (capped per session). |
|
|
64
|
-
| `userId` | `""` (empty) | **Not generated
|
|
64
|
+
| `userId` | `""` (empty) | **Not generated, you must pass it.** See [User identity](#user-identity). |
|
|
65
65
|
| `sessionId` / `pageviewId` | generated | Override identity; a 30-minute rolling session is managed otherwise. |
|
|
66
66
|
| `deviceType` / `country` / `region` | server-derived | Optional client hints; ingest resolves these server-side. |
|
|
67
67
|
| `logLevel` | `"INFO"` | Console log verbosity. |
|
|
@@ -76,7 +76,7 @@ in its server-injected config; the npm adapter has no such source, so unless
|
|
|
76
76
|
you supply one, every event lands in the warehouse with a NULL `user_id` and
|
|
77
77
|
unique-user metrics are empty.
|
|
78
78
|
|
|
79
|
-
Pass your own stable identifier (a first-party cookie or your login user id
|
|
79
|
+
Pass your own stable identifier (a first-party cookie or your login user id,
|
|
80
80
|
never PII) when enabling analytics:
|
|
81
81
|
|
|
82
82
|
```js
|
|
@@ -97,7 +97,7 @@ Or set it later (e.g. once consent resolves) on a direct instance:
|
|
|
97
97
|
analytics.setUserId(userId);
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
Only events flushed after `setUserId` carry the id
|
|
100
|
+
Only events flushed after `setUserId` carry the id: batches are stamped at
|
|
101
101
|
send time, so set it as early as possible.
|
|
102
102
|
|
|
103
103
|
## Releasing
|
package/dist/analytics.global.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var bidkernelPrebidAnalyticsBundle=(()=>{var y=(i,e)=>()=>(i&&(e=i(i=0)),e);var ge=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports);function H(){let i=0,e=0;for(let n=0;n<28;n+=7){let r=this.buf[this.pos++];if(i|=(r&127)<<n,(r&128)==0)return this.assertBounds(),[i,e]}let t=this.buf[this.pos++];if(i|=(t&15)<<28,e=(t&112)>>4,(t&128)==0)return this.assertBounds(),[i,e];for(let n=3;n<=31;n+=7){let r=this.buf[this.pos++];if(e|=(r&127)<<n,(r&128)==0)return this.assertBounds(),[i,e]}throw new Error("invalid varint")}function w(i,e,t){for(let s=0;s<28;s=s+7){let o=i>>>s,a=!(!(o>>>7)&&e==0),d=(a?o|128:o)&255;if(t.push(d),!a)return}let n=i>>>28&15|(e&7)<<4,r=e>>3!=0;if(t.push((r?n|128:n)&255),!!r){for(let s=3;s<31;s=s+7){let o=e>>>s,a=!!(o>>>7),d=(a?o|128:o)&255;if(t.push(d),!a)return}t.push(e>>>31&1)}}function C(i){let e=i[0]==="-";e&&(i=i.slice(1));let t=1e6,n=0,r=0;function s(o,a){let d=Number(i.slice(o,a));r*=t,n=n*t+d,n>=E&&(r=r+(n/E|0),n=n%E)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),e?X(n,r):_(n,r)}function Y(i,e){let t=_(i,e),n=t.hi&2147483648;n&&(t=X(t.lo,t.hi));let r=N(t.lo,t.hi);return n?"-"+r:r}function N(i,e){if({lo:i,hi:e}=ve(i,e),e<=2097151)return String(E*e+i);let t=i&16777215,n=(i>>>24|e<<8)&16777215,r=e>>16&65535,s=t+n*6777216+r*6710656,o=n+r*8147497,a=r*2,d=1e7;return s>=d&&(o+=Math.floor(s/d),s%=d),o>=d&&(a+=Math.floor(o/d),o%=d),a.toString()+z(o)+z(s)}function ve(i,e){return{lo:i>>>0,hi:e>>>0}}function _(i,e){return{lo:i|0,hi:e|0}}function X(i,e){return e=~e,i?i=~i+1:e+=1,_(i,e)}function P(i,e){if(i>=0){for(;i>127;)e.push(i&127|128),i=i>>>7;e.push(i)}else{for(let t=0;t<9;t++)e.push(i&127|128),i=i>>7;e.push(1)}}function j(){let i=this.buf[this.pos++],e=i&127;if((i&128)==0)return this.assertBounds(),e;if(i=this.buf[this.pos++],e|=(i&127)<<7,(i&128)==0)return this.assertBounds(),e;if(i=this.buf[this.pos++],e|=(i&127)<<14,(i&128)==0)return this.assertBounds(),e;if(i=this.buf[this.pos++],e|=(i&127)<<21,(i&128)==0)return this.assertBounds(),e;i=this.buf[this.pos++],e|=(i&15)<<28;for(let t=5;(i&128)!==0&&t<10;t++)i=this.buf[this.pos++];if((i&128)!=0)throw new Error("invalid varint");return this.assertBounds(),e>>>0}var E,z,M=y(()=>{"use strict";E=4294967296;z=i=>{let e=String(i);return"0000000".slice(e.length)+e}});function Ee(){let i=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof i.getBigInt64=="function"&&typeof i.getBigUint64=="function"&&typeof i.setBigInt64=="function"&&typeof i.setBigUint64=="function"&&(!!globalThis.Deno||typeof process!="object"||typeof process.env!="object"||process.env.BUF_BIGINT_DISABLE!=="1")){let t=BigInt("-9223372036854775808"),n=BigInt("9223372036854775807"),r=BigInt("0"),s=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(o){let a=typeof o=="bigint"?o:BigInt(o);if(a>n||a<t)throw new Error(`invalid int64: ${o}`);return a},uParse(o){let a=typeof o=="bigint"?o:BigInt(o);if(a>s||a<r)throw new Error(`invalid uint64: ${o}`);return a},enc(o){return i.setBigInt64(0,this.parse(o),!0),{lo:i.getInt32(0,!0),hi:i.getInt32(4,!0)}},uEnc(o){return i.setBigInt64(0,this.uParse(o),!0),{lo:i.getInt32(0,!0),hi:i.getInt32(4,!0)}},dec(o,a){return i.setInt32(0,o,!0),i.setInt32(4,a,!0),i.getBigInt64(0,!0)},uDec(o,a){return i.setInt32(0,o,!0),i.setInt32(4,a,!0),i.getBigUint64(0,!0)}}}return{zero:"0",supported:!1,parse(t){return typeof t!="string"&&(t=t.toString()),Q(t),t},uParse(t){return typeof t!="string"&&(t=t.toString()),Z(t),t},enc(t){return typeof t!="string"&&(t=t.toString()),Q(t),C(t)},uEnc(t){return typeof t!="string"&&(t=t.toString()),Z(t),C(t)},dec(t,n){return Y(t,n)},uDec(t,n){return N(t,n)}}}function Q(i){if(!/^-?[0-9]+$/.test(i))throw new Error("invalid int64: "+i)}function Z(i){if(!/^[0-9]+$/.test(i))throw new Error("invalid uint64: "+i)}var h,J=y(()=>{"use strict";M();h=Ee()});function F(){if(globalThis[V]==null){let i=new globalThis.TextEncoder,e=new globalThis.TextDecoder;globalThis[V]={encodeUtf8(t){return i.encode(t)},decodeUtf8(t){return e.decode(t)},checkUtf8(t){try{return encodeURIComponent(t),!0}catch{return!1}}}}return globalThis[V]}var V,O=y(()=>{"use strict";V=Symbol.for("@bufbuild/protobuf/text-encoding")});function L(i){if(typeof i=="string")i=Number(i);else if(typeof i!="number")throw new Error("invalid int32: "+typeof i);if(!Number.isInteger(i)||i>Re||i<Ae)throw new Error("invalid int32: "+i)}function ee(i){if(typeof i=="string")i=Number(i);else if(typeof i!="number")throw new Error("invalid uint32: "+typeof i);if(!Number.isInteger(i)||i>xe||i<0)throw new Error("invalid uint32: "+i)}function Be(i){if(typeof i=="string"){let e=i;if(i=Number(i),Number.isNaN(i)&&e!=="NaN")throw new Error("invalid float32: "+e)}else if(typeof i!="number")throw new Error("invalid float32: "+typeof i);if(Number.isFinite(i)&&(i>we||i<Se))throw new Error("invalid float32: "+i)}var I,we,Se,xe,Re,Ae,T,p,te=y(()=>{"use strict";M();J();O();(function(i){i[i.Varint=0]="Varint",i[i.Bit64=1]="Bit64",i[i.LengthDelimited=2]="LengthDelimited",i[i.StartGroup=3]="StartGroup",i[i.EndGroup=4]="EndGroup",i[i.Bit32=5]="Bit32"})(I||(I={}));we=34028234663852886e22,Se=-34028234663852886e22,xe=4294967295,Re=2147483647,Ae=-2147483648,T=class{constructor(e=F().encodeUtf8){this.encodeUtf8=e,this.stack=[],this.chunks=[],this.buf=[]}finish(){this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]);let e=0;for(let r=0;r<this.chunks.length;r++)e+=this.chunks[r].length;let t=new Uint8Array(e),n=0;for(let r=0;r<this.chunks.length;r++)t.set(this.chunks[r],n),n+=this.chunks[r].length;return this.chunks=[],t}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let e=this.finish(),t=this.stack.pop();if(!t)throw new Error("invalid state, fork stack empty");return this.chunks=t.chunks,this.buf=t.buf,this.uint32(e.byteLength),this.raw(e)}tag(e,t){return this.uint32((e<<3|t)>>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(ee(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return L(e),P(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let t=this.encodeUtf8(e);return this.uint32(t.byteLength),this.raw(t)}float(e){Be(e);let t=new Uint8Array(4);return new DataView(t.buffer).setFloat32(0,e,!0),this.raw(t)}double(e){let t=new Uint8Array(8);return new DataView(t.buffer).setFloat64(0,e,!0),this.raw(t)}fixed32(e){ee(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){L(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return L(e),e=(e<<1^e>>31)>>>0,P(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),r=h.enc(e);return n.setInt32(0,r.lo,!0),n.setInt32(4,r.hi,!0),this.raw(t)}fixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),r=h.uEnc(e);return n.setInt32(0,r.lo,!0),n.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=h.enc(e);return w(t.lo,t.hi,this.buf),this}sint64(e){let t=h.enc(e),n=t.hi>>31,r=t.lo<<1^n,s=(t.hi<<1|t.lo>>>31)^n;return w(r,s,this.buf),this}uint64(e){let t=h.uEnc(e);return w(t.lo,t.hi,this.buf),this}},p=class{constructor(e,t=F().decodeUtf8){this.decodeUtf8=t,this.varint64=H,this.uint32=j,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}tag(){let e=this.uint32(),t=e>>>3,n=e&7;if(t<=0||n<0||n>5)throw new Error("illegal tag: field no "+t+" wire type "+n);return[t,n]}skip(e,t){let n=this.pos;switch(e){case I.Varint:for(;this.buf[this.pos++]&128;);break;case I.Bit64:this.pos+=4;case I.Bit32:this.pos+=4;break;case I.LengthDelimited:let r=this.uint32();this.pos+=r;break;case I.StartGroup:for(;;){let[s,o]=this.tag();if(o===I.EndGroup){if(t!==void 0&&s!==t)throw new Error("invalid end group tag");break}this.skip(o,s)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(n,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return h.dec(...this.varint64())}uint64(){return h.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),n=-(e&1);return e=(e>>>1|(t&1)<<31)^n,t=t>>>1^n,h.dec(e,t)}bool(){let[e,t]=this.varint64();return e!==0||t!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return h.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return h.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),t=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(t,t+e)}string(){return this.decodeUtf8(this.bytes())}}});var ie=y(()=>{"use strict"});var ne=y(()=>{"use strict"});var re=y(()=>{"use strict"});var se=y(()=>{"use strict";te();ie();O();ne();re()});function oe(){return{propertyId:"",pageviewId:"",sessionId:"",pageUrl:"",country:"",region:"",deviceType:"",userId:"",domain:"",events:[],browser:"",deviceManufacturer:"",deviceModel:"",city:"",postalCode:""}}function ae(){return{timestampMs:0,type:0,eventName:"",auctionId:"",transactionId:"",adUnitCode:"",bid:void 0,namespace:"",eventId:"",metadata:{},viewableDurationMs:void 0}}function de(){return{key:"",value:""}}function ce(){return{bidder:"",cpm:0,currency:"",width:0,height:0,dealId:"",mediaType:"",latencyMs:0,advertiserDomain:"",creativeId:""}}var c,R,S,q,x,ue=y(()=>{"use strict";se();c={TRACE_EVENT_TYPE_UNSPECIFIED:0,AUCTION_START:1,AUCTION_END:2,BID_REQUEST:3,BID_RESPONSE:4,BID_WIN:5,BID_TIMEOUT:6,IMPRESSION:7,VIEWABLE:8,TIME_IN_VIEW:14,REFRESH:9,ERROR:10,SLOT_DEFINED:11,SLOT_DESTROYED:12,CLICK:13,NO_BID:15,AD_RENDER_FAILED:16,UNRECOGNIZED:-1};R={encode(i,e=new T){if(i.propertyId!==void 0&&i.propertyId!==""&&e.uint32(10).string(i.propertyId),i.pageviewId!==void 0&&i.pageviewId!==""&&e.uint32(18).string(i.pageviewId),i.sessionId!==void 0&&i.sessionId!==""&&e.uint32(26).string(i.sessionId),i.pageUrl!==void 0&&i.pageUrl!==""&&e.uint32(34).string(i.pageUrl),i.country!==void 0&&i.country!==""&&e.uint32(42).string(i.country),i.region!==void 0&&i.region!==""&&e.uint32(50).string(i.region),i.deviceType!==void 0&&i.deviceType!==""&&e.uint32(58).string(i.deviceType),i.userId!==void 0&&i.userId!==""&&e.uint32(66).string(i.userId),i.domain!==void 0&&i.domain!==""&&e.uint32(74).string(i.domain),i.events!==void 0&&i.events.length!==0)for(let t of i.events)S.encode(t,e.uint32(82).fork()).join();return i.browser!==void 0&&i.browser!==""&&e.uint32(90).string(i.browser),i.deviceManufacturer!==void 0&&i.deviceManufacturer!==""&&e.uint32(98).string(i.deviceManufacturer),i.deviceModel!==void 0&&i.deviceModel!==""&&e.uint32(106).string(i.deviceModel),i.city!==void 0&&i.city!==""&&e.uint32(114).string(i.city),i.postalCode!==void 0&&i.postalCode!==""&&e.uint32(122).string(i.postalCode),e},decode(i,e){let t=i instanceof p?i:new p(i),n=e===void 0?t.len:t.pos+e,r=oe();for(;t.pos<n;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==10)break;r.propertyId=t.string();continue}case 2:{if(s!==18)break;r.pageviewId=t.string();continue}case 3:{if(s!==26)break;r.sessionId=t.string();continue}case 4:{if(s!==34)break;r.pageUrl=t.string();continue}case 5:{if(s!==42)break;r.country=t.string();continue}case 6:{if(s!==50)break;r.region=t.string();continue}case 7:{if(s!==58)break;r.deviceType=t.string();continue}case 8:{if(s!==66)break;r.userId=t.string();continue}case 9:{if(s!==74)break;r.domain=t.string();continue}case 10:{if(s!==82)break;let o=S.decode(t,t.uint32());o!==void 0&&r.events.push(o);continue}case 11:{if(s!==90)break;r.browser=t.string();continue}case 12:{if(s!==98)break;r.deviceManufacturer=t.string();continue}case 13:{if(s!==106)break;r.deviceModel=t.string();continue}case 14:{if(s!==114)break;r.city=t.string();continue}case 15:{if(s!==122)break;r.postalCode=t.string();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(i){return R.fromPartial(i??{})},fromPartial(i){let e=oe();return e.propertyId=i.propertyId??"",e.pageviewId=i.pageviewId??"",e.sessionId=i.sessionId??"",e.pageUrl=i.pageUrl??"",e.country=i.country??"",e.region=i.region??"",e.deviceType=i.deviceType??"",e.userId=i.userId??"",e.domain=i.domain??"",e.events=i.events?.map(t=>S.fromPartial(t))||[],e.browser=i.browser??"",e.deviceManufacturer=i.deviceManufacturer??"",e.deviceModel=i.deviceModel??"",e.city=i.city??"",e.postalCode=i.postalCode??"",e}};S={encode(i,e=new T){return i.timestampMs!==void 0&&i.timestampMs!==0&&e.uint32(9).double(i.timestampMs),i.type!==void 0&&i.type!==0&&e.uint32(16).int32(i.type),i.eventName!==void 0&&i.eventName!==""&&e.uint32(26).string(i.eventName),i.auctionId!==void 0&&i.auctionId!==""&&e.uint32(34).string(i.auctionId),i.transactionId!==void 0&&i.transactionId!==""&&e.uint32(42).string(i.transactionId),i.adUnitCode!==void 0&&i.adUnitCode!==""&&e.uint32(50).string(i.adUnitCode),i.bid!==void 0&&x.encode(i.bid,e.uint32(58).fork()).join(),i.namespace!==void 0&&i.namespace!==""&&e.uint32(66).string(i.namespace),i.eventId!==void 0&&i.eventId!==""&&e.uint32(74).string(i.eventId),globalThis.Object.entries(i.metadata||{}).forEach(([t,n])=>{q.encode({key:t,value:n},e.uint32(82).fork()).join()}),i.viewableDurationMs!==void 0&&e.uint32(89).double(i.viewableDurationMs),e},decode(i,e){let t=i instanceof p?i:new p(i),n=e===void 0?t.len:t.pos+e,r=ae();for(;t.pos<n;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==9)break;r.timestampMs=t.double();continue}case 2:{if(s!==16)break;r.type=t.int32();continue}case 3:{if(s!==26)break;r.eventName=t.string();continue}case 4:{if(s!==34)break;r.auctionId=t.string();continue}case 5:{if(s!==42)break;r.transactionId=t.string();continue}case 6:{if(s!==50)break;r.adUnitCode=t.string();continue}case 7:{if(s!==58)break;r.bid=x.decode(t,t.uint32());continue}case 8:{if(s!==66)break;r.namespace=t.string();continue}case 9:{if(s!==74)break;r.eventId=t.string();continue}case 10:{if(s!==82)break;let o=q.decode(t,t.uint32());o.value!==void 0&&(r.metadata[o.key]=o.value);continue}case 11:{if(s!==89)break;r.viewableDurationMs=t.double();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(i){return S.fromPartial(i??{})},fromPartial(i){let e=ae();return e.timestampMs=i.timestampMs??0,e.type=i.type??0,e.eventName=i.eventName??"",e.auctionId=i.auctionId??"",e.transactionId=i.transactionId??"",e.adUnitCode=i.adUnitCode??"",e.bid=i.bid!==void 0&&i.bid!==null?x.fromPartial(i.bid):void 0,e.namespace=i.namespace??"",e.eventId=i.eventId??"",e.metadata=globalThis.Object.entries(i.metadata??{}).reduce((t,[n,r])=>(r!==void 0&&(t[n]=globalThis.String(r)),t),{}),e.viewableDurationMs=i.viewableDurationMs??void 0,e}};q={encode(i,e=new T){return i.key!==""&&e.uint32(10).string(i.key),i.value!==""&&e.uint32(18).string(i.value),e},decode(i,e){let t=i instanceof p?i:new p(i),n=e===void 0?t.len:t.pos+e,r=de();for(;t.pos<n;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==10)break;r.key=t.string();continue}case 2:{if(s!==18)break;r.value=t.string();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(i){return q.fromPartial(i??{})},fromPartial(i){let e=de();return e.key=i.key??"",e.value=i.value??"",e}};x={encode(i,e=new T){return i.bidder!==void 0&&i.bidder!==""&&e.uint32(10).string(i.bidder),i.cpm!==void 0&&i.cpm!==0&&e.uint32(17).double(i.cpm),i.currency!==void 0&&i.currency!==""&&e.uint32(26).string(i.currency),i.width!==void 0&&i.width!==0&&e.uint32(32).int32(i.width),i.height!==void 0&&i.height!==0&&e.uint32(40).int32(i.height),i.dealId!==void 0&&i.dealId!==""&&e.uint32(50).string(i.dealId),i.mediaType!==void 0&&i.mediaType!==""&&e.uint32(58).string(i.mediaType),i.latencyMs!==void 0&&i.latencyMs!==0&&e.uint32(65).double(i.latencyMs),i.advertiserDomain!==void 0&&i.advertiserDomain!==""&&e.uint32(74).string(i.advertiserDomain),i.creativeId!==void 0&&i.creativeId!==""&&e.uint32(82).string(i.creativeId),e},decode(i,e){let t=i instanceof p?i:new p(i),n=e===void 0?t.len:t.pos+e,r=ce();for(;t.pos<n;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==10)break;r.bidder=t.string();continue}case 2:{if(s!==17)break;r.cpm=t.double();continue}case 3:{if(s!==26)break;r.currency=t.string();continue}case 4:{if(s!==32)break;r.width=t.int32();continue}case 5:{if(s!==40)break;r.height=t.int32();continue}case 6:{if(s!==50)break;r.dealId=t.string();continue}case 7:{if(s!==58)break;r.mediaType=t.string();continue}case 8:{if(s!==65)break;r.latencyMs=t.double();continue}case 9:{if(s!==74)break;r.advertiserDomain=t.string();continue}case 10:{if(s!==82)break;r.creativeId=t.string();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(i){return x.fromPartial(i??{})},fromPartial(i){let e=ce();return e.bidder=i.bidder??"",e.cpm=i.cpm??0,e.currency=i.currency??"",e.width=i.width??0,e.height=i.height??0,e.dealId=i.dealId??"",e.mediaType=i.mediaType??"",e.latencyMs=i.latencyMs??0,e.advertiserDomain=i.advertiserDomain??"",e.creativeId=i.creativeId??"",e}}});function m(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,i=>{let e=Math.random()*16|0;return(i==="x"?e:e&3|8).toString(16)})}function Le(i){let e="";for(let n=0;n<i.length;n+=8192)e+=String.fromCharCode(...i.subarray(n,n+8192));return btoa(e)}function qe(i){let e=atob(i),t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return t}function ye(){let i=Date.now();v=i;try{typeof localStorage<"u"&&localStorage.setItem(k,i.toString())}catch{}}function $e(){let i=Date.now();try{if(typeof localStorage<"u"){let e=localStorage.getItem(he),t=localStorage.getItem(k),n=t&&parseInt(t,10)||0;if(e&&n&&i-n<=pe)return localStorage.setItem(k,i.toString()),e;let r=m();return localStorage.setItem(he,r),localStorage.setItem(k,i.toString()),r}}catch{}return D&&v&&i-v<=pe?(v=i,D):(D=m(),v=i,D)}function u(i){return String(i??"").replace(/%/g,"%25").replace(/:/g,"%3A")}function We(i,e){switch(i){case"auctionInit":return`auctionInit:${u(e?.auctionId)}`;case"auctionEnd":return`auctionEnd:${u(e?.auctionId)}`;case"bidRequested":{let t=Array.isArray(e?.bids)?e.bids.map(n=>u(n?.bidId||n?.transactionId||n?.adUnitCode)).join(","):"";return`bidRequested:${u(e?.auctionId)}:${u(e?.bidderCode||e?.bidder)}:${t}`}case"bidResponse":{let t=e||{},n=t.creativeId||t.adId||t.requestId||t.bidId||"",r=t.originalCpm??t.cpm??"";return`bidResponse:${u(t.auctionId)}:${u(t.adUnitCode)}:${u(t.bidderCode||t.bidder)}:${u(n)}:${u(r)}`}case"bidTimeout":return"bidTimeout:"+(Array.isArray(e)?e:e?[e]:[]).map(n=>`${u(n?.auctionId)}:${u(n?.bidderCode||n?.bidder)}:${u(n?.bidId||n?.transactionId||n?.adUnitCode)}`).join(",");case"bidWon":{let t=e||{},n=t.creativeId||t.adId||t.requestId||t.bidId||"",r=t.originalCpm??t.cpm??"";return`bidWon:${u(t.auctionId)}:${u(t.adUnitCode)}:${u(t.bidderCode||t.bidder)}:${u(n)}:${u(r)}`}case"noBid":return`noBid:${u(e?.auctionId)}:${u(e?.adUnitCode)}:${u(e?.bidderCode||e?.bidder)}:${u(e?.bidId||e?.transactionId)}`;case"adRenderFailed":{let t=e?.bid||{};return`adRenderFailed:${u(t.auctionId||e?.auctionId)}:${u(t.adUnitCode||e?.adUnitCode)}:${u(t.bidderCode||t.bidder||e?.bidderCode||e?.bidder)}:${u(e?.reason)}:${u(e?.message)}`}case"adRenderSucceeded":{let t=e?.bid||e||{},n=t.creativeId||t.adId||e?.adId||"",r=t.originalCpm??t.cpm??"";return`adRenderSucceeded:${u(t.auctionId||e?.auctionId)}:${u(t.adUnitCode||e?.adUnitCode)}:${u(t.bidderCode||t.bidder)}:${u(n)}:${u(r)}`}case"setTargeting":return`setTargeting:${Object.keys(e||{}).sort().map(u).join(",")}`;case"auctionDebug":return`auctionDebug:${u(e?.type)}:${u(String(e?.arguments?.[0]??"").slice(0,50))}`;default:return""}}function be(i){if(!i)return{width:0,height:0};let e=i;for(;Array.isArray(e)&&e.length>0&&Array.isArray(e[0]);)e=e[0];if(Array.isArray(e)&&e.length>=2){let t=Number(e[0]),n=Number(e[1]);return{width:Number.isFinite(t)?t:0,height:Number.isFinite(n)?n:0}}return{width:0,height:0}}function $(i){if(Number.isFinite(i?.width)&&Number.isFinite(i?.height))return{width:i.width,height:i.height};if(typeof i?.size=="string"){let e=i.size.match(/^(\d+)x(\d+)$/);if(e)return{width:Number(e[1]),height:Number(e[2])}}return{width:Number.isFinite(i?.width)?i.width:0,height:Number.isFinite(i?.height)?i.height:0}}function g(i){if(!i)return null;if(Array.isArray(i)){let e=i.find(t=>t?.provider==="bidkernel")??i.find(t=>t&&typeof t=="object"&&t.provider===void 0);return e?g(e):null}if(typeof i=="object"){if(i.options&&typeof i.options=="object")return i.options;if(i.config&&typeof i.config=="object")return i.config;if(i.propertyId||i.endpoint)return i}return null}function Ge(i){if(!i)return null;if(i._bidkernelAnalyticsConfig){let e=g(i._bidkernelAnalyticsConfig);if(e)return e}if(i.bidkernelPrebidAnalytics){let e=i.bidkernelPrebidAnalytics;if(e.options){let t=g(e.options);if(t)return t}if(e.config){let t=g(e.config);if(t)return t}if(e.propertyId)return g(e)}return null}function K(i="pbjs",e){let t=typeof window<"u"?window:{};t[i]=t[i]||{};let n=t[i],r=o=>{if(t._bidkernelPrebidAnalytics)try{t._bidkernelPrebidAnalytics.disable()}catch(d){console.warn("[bidkernel] Failed to disable previous analytics instance:",d)}let a=new G({pbjsGlobalName:i,...e,...o});return a.enable(),t._bidkernelPrebidAnalytics=a,a},s=()=>{try{n.adapterManager&&typeof n.adapterManager.registerAnalyticsAdapter=="function"&&n.adapterManager.registerAnalyticsAdapter({adapter:{enableAnalytics:a=>{let d=g(a);d&&r(d)},disableAnalytics:()=>{t._bidkernelPrebidAnalytics&&t._bidkernelPrebidAnalytics.disable()}},code:"bidkernel"});let o=Ge(t);o&&(o.propertyId||e?.propertyId)&&r(o)}catch(o){console.warn("[bidkernel] Failed to register standard Prebid analytics adapter:",o)}};n.adapterManager&&typeof n.adapterManager.registerAnalyticsAdapter=="function"?s():(n.que=n.que||[],n.que.push(s))}var ke,le,Ue,A,Ce,Ne,_e,fe,B,Pe,Me,Ve,Fe,Oe,he,k,pe,D,v,W,G,Ie=y(()=>{"use strict";ue();ke=20,le=1e4,Ue=50,A=200,Ce=300*1e3,Ne=10,_e=32*1024,fe="text/plain",B="_bidkernel_pending_",Pe=20,Me=7200*1e3,Ve=1e4,Fe={auctionStart:c.AUCTION_START,auctionEnd:c.AUCTION_END,bidRequest:c.BID_REQUEST,bidResponse:c.BID_RESPONSE,bidTimeout:c.BID_TIMEOUT,bidWin:c.BID_WIN,noBid:c.NO_BID,adRenderFailed:c.AD_RENDER_FAILED,click:c.CLICK,impression:c.IMPRESSION,refresh:c.REFRESH,timeInView:c.TIME_IN_VIEW,viewable:c.VIEWABLE},Oe=new Set([c.IMPRESSION,c.BID_WIN,c.CLICK]),he="_bidkernel_session",k="_bidkernel_session_ts",pe=1800*1e3,D=null,v=0;W=class{seenObjects=new WeakMap;seenKeys=new Set;isDuplicate(e,t){if(!t)return!1;if(typeof t=="object"){let r=this.seenObjects.get(t);if(r){if(r.has(e))return!0;r.add(e)}else this.seenObjects.set(t,new Set([e]))}let n=We(e,t);if(n){if(this.seenKeys.has(n))return!0;if(this.seenKeys.size>=1e3){let r=this.seenKeys.values().next().value;r!==void 0&&this.seenKeys.delete(r)}this.seenKeys.add(n)}return!1}};G=class i{static activeInstances=new Set;config;queue=[];errorCount=0;flushTimer=null;boundFlushBeacon;boundVisibilityChange;isEnabled=!1;boundPbjsHandlers=[];pageUrl="";deduper=new W;consecutiveSendFailures=0;nextSendAllowedAt=0;replayedEventCount=0;immediateFlushScheduled=!1;persistedBatchKeys=[];persistedCleanupTimer=null;intersectionObserver=null;slotViewabilityRecords=new Map;elementToSlotId=new Map;slotRefreshIndices=new Map;pendingThresholdListeners=new Map;constructor(e){this.config={endpoint:e.endpoint||"",propertyId:e.propertyId||"",pageviewId:e.pageviewId||m(),sessionId:e.sessionId||$e(),userId:e.userId||"",deviceType:e.deviceType||"desktop",country:e.country||"",region:e.region||"",auctionEnabled:e.auctionEnabled??!0,warningsEnabled:e.warningsEnabled??!0,errorsEnabled:e.errorsEnabled??!0,viewabilityEnabled:e.viewabilityEnabled??!0,logLevel:e.logLevel||"INFO",pbjsGlobalName:e.pbjsGlobalName||"pbjs",attachPbjsListeners:e.attachPbjsListeners??!0},this.boundFlushBeacon=()=>{this.flushAllSlotsTimeInView(),this.flushBeacon()},this.boundVisibilityChange=()=>this.handleVisibilityChange()}enable(){if(!this.isEnabled){if(this.isEnabled=!0,i.activeInstances.add(this),this.config.endpoint||this.log("WARN","Endpoint is empty. Analytics events will not be transmitted."),this.config.viewabilityEnabled&&typeof IntersectionObserver<"u"){this.intersectionObserver=new IntersectionObserver(this.handleIntersection.bind(this),{threshold:[.5]});for(let e of this.slotViewabilityRecords.values())e.element&&this.intersectionObserver.observe(e.element)}if(this.config.attachPbjsListeners){let t=(typeof window<"u"?window:{})[this.config.pbjsGlobalName]||{};if(typeof t.onEvent=="function"){this.log("DEBUG","Attaching event listeners to pbjs");let n=[["auctionInit",this.handleAuctionInit.bind(this)],["auctionEnd",this.handleAuctionEnd.bind(this)],["bidRequested",this.handleBidRequested.bind(this)],["bidResponse",this.handleBidResponse.bind(this)],["bidTimeout",this.handleBidTimeout.bind(this)],["bidWon",this.handleBidWon.bind(this)],["noBid",this.handleNoBid.bind(this)],["adRenderFailed",this.handleAdRenderFailed.bind(this)],["adRenderSucceeded",this.handleAdRenderSucceeded.bind(this)]];for(let[r,s]of n)t.onEvent(r,s),this.boundPbjsHandlers.push({event:r,handler:s})}else this.log("WARN","pbjs.onEvent is not defined. Prebid analytics will not function.");if(typeof t.getEvents=="function")try{let n=t.getEvents();if(Array.isArray(n)){let r=n.slice(this.replayedEventCount);if(this.replayedEventCount=n.length,r.length>0){this.log("DEBUG",`Replaying ${r.length} historical events from pbjs.getEvents()`);let s={auctionInit:this.handleAuctionInit.bind(this),auctionEnd:this.handleAuctionEnd.bind(this),bidRequested:this.handleBidRequested.bind(this),bidResponse:this.handleBidResponse.bind(this),bidTimeout:this.handleBidTimeout.bind(this),bidWon:this.handleBidWon.bind(this),noBid:this.handleNoBid.bind(this),adRenderFailed:this.handleAdRenderFailed.bind(this),adRenderSucceeded:this.handleAdRenderSucceeded.bind(this)};for(let o of r){if(!o)continue;let a=o.eventType||o.event||o.name,d=o.args!==void 0?o.args:o.data!==void 0?o.data:o,f=s[a];f&&f(d)}}}}catch(n){this.log("WARN","Failed to replay historical events from pbjs.getEvents()",n)}}if(typeof window<"u"){if(!this.pageUrl)try{let e=new URL(window.location.href);this.pageUrl=e.origin+e.pathname}catch{this.pageUrl=window.location.href}window.addEventListener("pagehide",this.boundFlushBeacon),typeof document<"u"&&document.addEventListener("visibilitychange",this.boundVisibilityChange),this.flushTimer=setInterval(()=>this.flush(),le),this.resendPersistedBatches()}}}disable(){if(this.isEnabled){this.flushAllSlotsTimeInView(),this.isEnabled=!1,i.activeInstances.delete(this);for(let e of this.slotViewabilityRecords.values()){e.dwellTimer&&(clearTimeout(e.dwellTimer),e.dwellTimer=null,e.dwellStartedAt=null);for(let t of e.thresholdListeners)t.timer&&(clearTimeout(t.timer),t.timer=null)}if(this.intersectionObserver&&(this.intersectionObserver.disconnect(),this.intersectionObserver=null),this.slotViewabilityRecords.clear(),this.elementToSlotId.clear(),this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.persistedCleanupTimer&&(clearTimeout(this.persistedCleanupTimer),this.persistedCleanupTimer=null),typeof window<"u"&&(window.removeEventListener("pagehide",this.boundFlushBeacon),typeof document<"u"&&document.removeEventListener("visibilitychange",this.boundVisibilityChange)),this.boundPbjsHandlers.length>0){let t=(typeof window<"u"?window:{})[this.config.pbjsGlobalName]||{};if(typeof t.offEvent=="function")for(let{event:n,handler:r}of this.boundPbjsHandlers)t.offEvent(n,r);this.boundPbjsHandlers=[]}this.flush()}}handleVisibilityChange(){if(!(typeof document>"u")){if(document.visibilityState==="hidden"){let e=typeof performance<"u"&&performance.now?performance.now():Date.now();for(let t of this.slotViewabilityRecords.values()){t.inView&&t.lastEnteredViewAt!==null&&(t.accumulatedTimeInViewMs+=Math.max(0,e-t.lastEnteredViewAt),t.lastEnteredViewAt=null,this.checkThresholdListeners(t)),t.dwellTimer&&(clearTimeout(t.dwellTimer),t.dwellTimer=null,t.dwellStartedAt=null);for(let r of t.thresholdListeners)r.timer&&(clearTimeout(r.timer),r.timer=null);let n=Math.round(t.accumulatedTimeInViewMs);n>0&&this.enqueue(c.TIME_IN_VIEW,"timeInView",{auctionId:t.auctionId,transactionId:t.transactionId,adUnitCode:t.adUnitCode,viewableDurationMs:n,bid:t.bidPayload,metadata:{...t.metadata,refresh_index:String(t.refreshIndex)}})}this.flushBeacon()}else if(document.visibilityState==="visible"){let e=typeof performance<"u"&&performance.now?performance.now():Date.now();for(let t of this.slotViewabilityRecords.values())if(t.inView){if(t.lastEnteredViewAt=e,!t.viewableFired&&t.dwellTimer===null){let n=t.mediaType==="video"?2e3:1e3;t.dwellStartedAt=e,t.dwellTimer=setTimeout(()=>{this.handleDwellComplete(t)},n)}this.scheduleThresholdTimers(t)}}}}handleIntersection(e){for(let t of e){let n=this.elementToSlotId.get(t.target);if(!n){for(let d of i.activeInstances)if(d!==this&&d.elementToSlotId.has(t.target)){d.handleIntersection([t]);break}continue}let r=this.slotViewabilityRecords.get(n);if(!r)continue;let s=t.isIntersecting&&(t.intersectionRatio===void 0||t.intersectionRatio>=.5),o=typeof document>"u"||document.visibilityState==="visible",a=typeof performance<"u"&&performance.now?performance.now():Date.now();if(s){if(!r.inView&&(r.inView=!0,o)){if(r.lastEnteredViewAt=a,!r.viewableFired&&r.dwellTimer===null){let d=r.mediaType==="video"?2e3:1e3;r.dwellStartedAt=a,r.dwellTimer=setTimeout(()=>{this.handleDwellComplete(r)},d)}this.scheduleThresholdTimers(r)}}else{r.inView&&(r.lastEnteredViewAt!==null&&(r.accumulatedTimeInViewMs+=Math.max(0,a-r.lastEnteredViewAt),r.lastEnteredViewAt=null),r.inView=!1,this.checkThresholdListeners(r)),r.dwellTimer!==null&&(clearTimeout(r.dwellTimer),r.dwellTimer=null,r.dwellStartedAt=null);for(let d of r.thresholdListeners)d.timer&&(clearTimeout(d.timer),d.timer=null)}}}handleDwellComplete(e){e.dwellTimer=null,e.dwellStartedAt=null,e.inView&&(typeof document<"u"&&document.visibilityState==="hidden"||e.viewableFired||(e.viewableFired=!0,this.enqueue(c.VIEWABLE,"viewable",{auctionId:e.auctionId,transactionId:e.transactionId,adUnitCode:e.adUnitCode,bid:e.bidPayload,metadata:{...e.metadata,refresh_index:String(e.refreshIndex)}})))}scheduleThresholdTimers(e){if(!e.inView||typeof document<"u"&&document.visibilityState==="hidden")return;let t=this.getCurrentTimeInView(e);for(let n of e.thresholdListeners)if(!n.fired)if(t>=n.thresholdMs){n.fired=!0,n.timer&&(clearTimeout(n.timer),n.timer=null);try{n.callback(e.slotId,t)}catch(r){this.log("ERROR","Error in threshold listener callback",r)}}else{n.timer&&clearTimeout(n.timer);let r=n.thresholdMs-t;n.timer=setTimeout(()=>{if(n.timer=null,!n.fired&&e.inView&&(typeof document>"u"||document.visibilityState==="visible")){let s=this.getCurrentTimeInView(e);if(s>=n.thresholdMs){n.fired=!0;try{n.callback(e.slotId,s)}catch(o){this.log("ERROR","Error in threshold listener callback",o)}}}},r)}}checkThresholdListeners(e){let t=this.getCurrentTimeInView(e);for(let n of e.thresholdListeners)if(!n.fired&&t>=n.thresholdMs){n.fired=!0,n.timer&&(clearTimeout(n.timer),n.timer=null);try{n.callback(e.slotId,t)}catch(r){this.log("ERROR","Error in threshold listener callback",r)}}}getCurrentTimeInView(e){let t=e.accumulatedTimeInViewMs;if(e.inView&&e.lastEnteredViewAt!==null){let n=typeof performance<"u"&&performance.now?performance.now():Date.now();t+=Math.max(0,n-e.lastEnteredViewAt)}return t}flushSlotTimeInView(e){let t=this.slotViewabilityRecords.get(e);if(!t)return;if(t.inView&&t.lastEnteredViewAt!==null){let r=typeof performance<"u"&&performance.now?performance.now():Date.now();t.accumulatedTimeInViewMs+=Math.max(0,r-t.lastEnteredViewAt),t.lastEnteredViewAt=null}let n=Math.round(t.accumulatedTimeInViewMs);n>0&&this.enqueue(c.TIME_IN_VIEW,"timeInView",{auctionId:t.auctionId,transactionId:t.transactionId,adUnitCode:t.adUnitCode,viewableDurationMs:n,bid:t.bidPayload,metadata:{...t.metadata,refresh_index:String(t.refreshIndex)}}),t.accumulatedTimeInViewMs=0}flushAllSlotsTimeInView(){for(let e of Array.from(this.slotViewabilityRecords.keys()))this.flushSlotTimeInView(e)}observeSlot(e,t,n){if(!this.config.viewabilityEnabled)return;let r=null;if(typeof e=="string"){if(typeof document<"u"){try{r=document.querySelector(e)||document.getElementById(e)}catch{r=document.getElementById(e)}r||(r=document.getElementById(e))}}else r=e;let s=t||n?.adUnitCode||(r?r.id:"")||m(),o=this.slotViewabilityRecords.get(s);if(o){if(n?.refreshIndex===void 0||n.refreshIndex>o.refreshIndex){this.flushSlotTimeInView(s);let d=n?.refreshIndex!==void 0?n.refreshIndex:(this.slotRefreshIndices.get(s)??o.refreshIndex)+1;this.slotRefreshIndices.set(s,d),n?.emitRefreshEvent!==!1&&this.enqueue(c.REFRESH,"refresh",{auctionId:n?.auctionId||o.auctionId,transactionId:n?.transactionId||o.transactionId,adUnitCode:s,bid:n?.bid??o.bidPayload,metadata:{...n?.metadata,refresh_index:String(d)}}),o.dwellTimer&&(clearTimeout(o.dwellTimer),o.dwellTimer=null,o.dwellStartedAt=null);for(let l of o.thresholdListeners)l.fired=!1,l.timer&&(clearTimeout(l.timer),l.timer=null);o.viewableFired=!1,o.accumulatedTimeInViewMs=0;let f=typeof performance<"u"&&performance.now?performance.now():Date.now();if(o.lastEnteredViewAt=o.inView?f:null,o.refreshIndex=d,o.auctionId=n?.auctionId||o.auctionId,o.transactionId=n?.transactionId||o.transactionId,o.mediaType=n?.mediaType||o.mediaType||"banner",o.bidPayload=n?.bid!==void 0?n.bid:o.bidPayload,o.metadata=n?.metadata??o.metadata,o.inView&&(typeof document>"u"||document.visibilityState==="visible")){let l=o.mediaType==="video"?2e3:1e3;o.dwellStartedAt=f,o.dwellTimer=setTimeout(()=>{this.handleDwellComplete(o)},l),this.scheduleThresholdTimers(o)}}else o.auctionId=n?.auctionId||o.auctionId,o.transactionId=n?.transactionId||o.transactionId,o.mediaType=n?.mediaType||o.mediaType,n?.bid!==void 0&&(o.bidPayload=n.bid),n?.metadata!==void 0&&(o.metadata=n.metadata);r&&(o.element&&o.element!==r&&this.intersectionObserver&&(this.intersectionObserver.unobserve(o.element),this.elementToSlotId.delete(o.element)),o.element=r,this.elementToSlotId.set(r,s),this.intersectionObserver?.observe(r))}else{let a=n?.refreshIndex??this.slotRefreshIndices.get(s)??0;this.slotRefreshIndices.set(s,a);let d=this.pendingThresholdListeners.get(s)||new Set;this.pendingThresholdListeners.delete(s);let f={slotId:s,element:r,adUnitCode:n?.adUnitCode||s,auctionId:n?.auctionId||"",transactionId:n?.transactionId||"",mediaType:n?.mediaType||"banner",bidPayload:n?.bid,metadata:n?.metadata,refreshIndex:a,inView:!1,lastEnteredViewAt:null,accumulatedTimeInViewMs:0,viewableFired:!1,dwellTimer:null,dwellStartedAt:null,thresholdListeners:d};this.slotViewabilityRecords.set(s,f),r&&(this.elementToSlotId.set(r,s),this.intersectionObserver?.observe(r))}}unobserveSlot(e){let t=this.slotViewabilityRecords.get(e);if(t){this.flushSlotTimeInView(e),t.dwellTimer&&(clearTimeout(t.dwellTimer),t.dwellTimer=null,t.dwellStartedAt=null);for(let n of t.thresholdListeners)n.timer&&(clearTimeout(n.timer),n.timer=null);t.thresholdListeners=new Set,t.element&&this.intersectionObserver&&(this.intersectionObserver.unobserve(t.element),this.elementToSlotId.delete(t.element),t.element=null),t.inView=!1,t.lastEnteredViewAt=null}}destroySlot(e){this.unobserveSlot(e),this.slotViewabilityRecords.delete(e),this.slotRefreshIndices.delete(e),this.pendingThresholdListeners.delete(e)}onTimeInViewThreshold(e,t,n){let r={thresholdMs:t,callback:n,timer:null,fired:!1},s=this.slotViewabilityRecords.get(e);if(s){s.thresholdListeners.add(r);let o=this.getCurrentTimeInView(s);if(o>=t){r.fired=!0;try{n(e,o)}catch(a){this.log("ERROR","Error in threshold callback",a)}}else if(s.inView&&(typeof document>"u"||document.visibilityState==="visible")){let a=t-o;r.timer=setTimeout(()=>{if(r.timer=null,!r.fired&&s.inView&&(typeof document>"u"||document.visibilityState==="visible")){let d=this.getCurrentTimeInView(s);if(d>=t){r.fired=!0;try{n(e,d)}catch(f){this.log("ERROR","Error in threshold callback",f)}}}},a)}}else this.pendingThresholdListeners.has(e)||this.pendingThresholdListeners.set(e,new Set),this.pendingThresholdListeners.get(e).add(r);return()=>{r.timer&&(clearTimeout(r.timer),r.timer=null),s&&s.thresholdListeners.delete(r);let o=this.pendingThresholdListeners.get(e);o&&o.delete(r)}}getViewabilityState(e){let t=this.slotViewabilityRecords.get(e);if(!t)return;let n=Math.round(this.getCurrentTimeInView(t));return{inView:t.inView,viewable:t.viewableFired,timeInViewMs:n,refreshIndex:t.refreshIndex}}getRefreshIndex(e){return this.slotRefreshIndices.get(e)??0}triggerSlotRefresh(e,t){let n=this.slotViewabilityRecords.get(e);n&&n.element&&this.observeSlot(n.element,e,t)}trackRawEvent(e,t,n){let r=Fe[t]??(e==="ERROR"?c.ERROR:c.TRACE_EVENT_TYPE_UNSPECIFIED);this.enqueue(r,t,n,e)}setUserId(e){this.config.userId=e}setSessionId(e){this.config.sessionId=e}navigate(e,t){if(this.disable(),this.slotRefreshIndices.clear(),this.pendingThresholdListeners.clear(),this.config.pageviewId=e||m(),t)try{let n=new URL(t);this.pageUrl=n.origin+n.pathname}catch{this.pageUrl=t}else this.pageUrl="";ye(),this.enable()}handleAuctionInit(e){this.isDuplicate("auctionInit",e)||(this.log("DEBUG","auctionInit",e),this.enqueue(c.AUCTION_START,"auctionStart",{auctionId:e.auctionId||"",transactionId:e.transactionId||""}))}handleAuctionEnd(e){this.isDuplicate("auctionEnd",e)||(this.log("DEBUG","auctionEnd",e),this.enqueue(c.AUCTION_END,"auctionEnd",{auctionId:e.auctionId||"",transactionId:e.transactionId||""}))}handleBidRequested(e){if(this.isDuplicate("bidRequested",e))return;this.log("DEBUG","bidRequested",e);let t=e.auctionId||"",n=e.bidderCode||e.bidder||"";Array.isArray(e.bids)&&e.bids.forEach(r=>{let s=Object.keys(r.mediaTypes||{}),o=r.ortb2Imp?.ext?.gpid||r.gpid||e.gpid||"",a=r.transactionId||r.ortb2Imp?.id||e.transactionId||"";if(s.length===0){let d=r.mediaType||"banner",{width:f,height:l}=be(r.sizes||r.playerSize);this.enqueue(c.BID_REQUEST,"bidRequest",{auctionId:t,transactionId:a,adUnitCode:r.adUnitCode||"",gpid:o,bid:{bidder:n,mediaType:d,width:f,height:l}});return}s.forEach(d=>{let f=null;d==="banner"?f=r.mediaTypes?.banner?.sizes||r.sizes:d==="video"?f=r.mediaTypes?.video?.playerSize||r.mediaTypes?.video?.sizes||r.playerSize:f=r.mediaTypes?.[d]?.sizes;let{width:l,height:b}=be(f);this.enqueue(c.BID_REQUEST,"bidRequest",{auctionId:t,transactionId:a,adUnitCode:r.adUnitCode||"",gpid:o,bid:{bidder:n,mediaType:d,width:l,height:b}})})})}handleBidResponse(e){this.isDuplicate("bidResponse",e)||(this.log("DEBUG","bidResponse",e),this.enqueue(c.BID_RESPONSE,"bidResponse",{auctionId:e.auctionId||"",transactionId:e.transactionId||"",adUnitCode:e.adUnitCode||"",bid:{bidder:e.bidderCode||e.bidder||"",cpm:Number.isFinite(e.originalCpm)?e.originalCpm:Number.isFinite(e.cpm)?e.cpm:0,currency:e.originalCurrency??e.currency??"USD",...$(e),dealId:e.dealId||"",mediaType:e.mediaType||"banner",latencyMs:Number.isFinite(e.timeToRespond)?e.timeToRespond:0,advertiserDomain:e.meta?.advertiserDomains?.[0]||"",creativeId:e.creativeId||""}}))}handleBidTimeout(e){if(this.isDuplicate("bidTimeout",e))return;this.log("DEBUG","bidTimeout",e);let t=Array.isArray(e)?e:e?[e]:[];for(let n of t)this.enqueue(c.BID_TIMEOUT,"bidTimeout",{auctionId:n.auctionId||"",transactionId:n.transactionId||"",adUnitCode:n.adUnitCode||"",bid:{bidder:n.bidderCode||n.bidder||"",latencyMs:Number.isFinite(n.timeout)?n.timeout:0}})}handleBidWon(e){this.isDuplicate("bidWon",e)||(this.log("DEBUG","bidWon",e),this.enqueue(c.BID_WIN,"bidWon",{auctionId:e.auctionId||"",transactionId:e.transactionId||"",adUnitCode:e.adUnitCode||"",bid:{bidder:e.bidderCode||e.bidder||"",cpm:Number.isFinite(e.originalCpm)?e.originalCpm:Number.isFinite(e.cpm)?e.cpm:0,currency:e.originalCurrency??e.currency??"USD",...$(e),dealId:e.dealId||"",mediaType:e.mediaType||"banner",latencyMs:Number.isFinite(e.timeToRespond)?e.timeToRespond:0,advertiserDomain:e.meta?.advertiserDomains?.[0]||"",creativeId:e.creativeId||""}}))}handleNoBid(e){this.isDuplicate("noBid",e)||(this.log("DEBUG","noBid",e),this.enqueue(c.NO_BID,"noBid",{auctionId:e.auctionId||"",transactionId:e.transactionId||"",adUnitCode:e.adUnitCode||"",bid:{bidder:e.bidderCode||e.bidder||""}}))}handleAdRenderFailed(e){if(this.isDuplicate("adRenderFailed",e))return;this.log("DEBUG","adRenderFailed",e);let t=e.bid||{};this.enqueue(c.AD_RENDER_FAILED,"adRenderFailed",{auctionId:t.auctionId||e.auctionId||"",transactionId:t.transactionId||e.transactionId||"",adUnitCode:t.adUnitCode||e.adUnitCode||"",bid:{bidder:t.bidderCode||t.bidder||e.bidderCode||e.bidder||""},metadata:{reason:String(e.reason||""),message:String(e.message||e.error?.message||"")},error:e.error||(e.message?new Error(String(e.message)):void 0)})}handleAdRenderSucceeded(e){if(this.isDuplicate("adRenderSucceeded",e))return;this.log("DEBUG","adRenderSucceeded",e);let t=e.bid||e||{},n=e.adUnitCode||t.adUnitCode||"",r=t.auctionId||e.auctionId||"",s=t.transactionId||e.transactionId||"",o=t.mediaType||"banner",a={bidder:t.bidderCode||t.bidder||"",cpm:Number.isFinite(t.originalCpm)?t.originalCpm:Number.isFinite(t.cpm)?t.cpm:0,currency:t.originalCurrency??t.currency??"USD",...$(t),dealId:t.dealId||"",mediaType:o,latencyMs:Number.isFinite(t.timeToRespond)?t.timeToRespond:0,advertiserDomain:t.meta?.advertiserDomains?.[0]||"",creativeId:t.creativeId||""};if(n&&(this.slotViewabilityRecords.has(n)||this.slotRefreshIndices.has(n)&&this.slotRefreshIndices.get(n)>0)){this.flushSlotTimeInView(n);let l=(this.slotRefreshIndices.get(n)??0)+1;this.slotRefreshIndices.set(n,l),this.enqueue(c.REFRESH,"refresh",{auctionId:r,transactionId:s,adUnitCode:n,bid:a,metadata:{refresh_index:String(l)}})}else n&&!this.slotRefreshIndices.has(n)&&this.slotRefreshIndices.set(n,0);let f=n?this.slotRefreshIndices.get(n)??0:0;if(this.enqueue(c.IMPRESSION,"impression",{auctionId:r,transactionId:s,adUnitCode:n,bid:a,metadata:{refresh_index:String(f)}}),this.config.viewabilityEnabled&&typeof document<"u"){let l=null,b=n||e.adId||t.adId;if(b&&(l=document.getElementById(b)),!l&&typeof window<"u"&&window.googletag?.pubads)try{let me=window.googletag.pubads().getSlots();for(let U of me)if((U.getAdUnitPath?.()===n||U.getSlotElementId?.()===n)&&(l=document.getElementById(U.getSlotElementId()),l))break}catch{}if(!l&&b)try{l=document.querySelector(`[data-ad-slot="${b}"]`)||document.querySelector(`#${b}`)}catch{}l&&this.observeSlot(l,n||b,{adUnitCode:n,auctionId:r,transactionId:s,mediaType:o,bid:a,refreshIndex:f,emitRefreshEvent:!1})}}isDuplicate(e,t){return this.deduper.isDuplicate(e,t)}enqueue(e,t,n,r){if(!this.isEnabled||!this.shouldSample(e,r))return;ye();let s={eventId:m(),timestampMs:Date.now(),type:e,eventName:t,auctionId:n.auctionId||"",transactionId:n.transactionId||"",adUnitCode:n.adUnitCode||n.elementId||"",namespace:n.ns||n.namespace||""};n.bid&&(s.bid={bidder:n.bid.bidder||"",cpm:Number.isFinite(n.bid.cpm)?n.bid.cpm:0,currency:n.bid.currency||"",width:Number.isFinite(n.bid.width)?n.bid.width:0,height:Number.isFinite(n.bid.height)?n.bid.height:0,dealId:n.bid.dealId||"",mediaType:n.bid.mediaType||"",latencyMs:Number.isFinite(n.bid.latencyMs)?n.bid.latencyMs:0,advertiserDomain:n.bid.advertiserDomain||"",creativeId:n.bid.creativeId||""}),n.viewableDurationMs!==void 0&&(s.viewableDurationMs=Number.isFinite(n.viewableDurationMs)?n.viewableDurationMs:0);let o={...n.metadata};n.error!==void 0&&n.error!==null&&(o.error=typeof n.error=="object"&&n.error.message?String(n.error.message):String(n.error)),n.gpid&&(o.gpid=String(n.gpid)),n.refreshIndex!==void 0&&o.refresh_index===void 0&&(o.refresh_index=String(n.refreshIndex)),Object.keys(o).length>0&&(s.metadata=o),this.queue.push(s),this.queue.length>A&&this.queue.splice(0,this.queue.length-A),this.queue.length>=ke?this.flush():Oe.has(e)&&!this.immediateFlushScheduled&&(this.immediateFlushScheduled=!0,setTimeout(()=>{this.immediateFlushScheduled=!1,this.flush()},0))}shouldSample(e,t){return e===c.ERROR?(this.errorCount++,this.errorCount>Ue?!1:this.config.errorsEnabled):t==="WARN"?this.config.warningsEnabled:this.config.auctionEnabled}requeue(e){e.length&&(this.queue=e.concat(this.queue),this.queue.length>A&&this.queue.splice(0,this.queue.length-A))}drainBatch(){if(this.queue.length===0||!this.config.endpoint)return null;let e=this.queue,t=typeof window<"u"?window.location.hostname:"",n=s=>({propertyId:this.config.propertyId,pageviewId:this.config.pageviewId,sessionId:this.config.sessionId,pageUrl:this.pageUrl,country:this.config.country,region:this.config.region,deviceType:this.config.deviceType,userId:this.config.userId,domain:t,events:s}),r=R.encode(n(e)).finish();for(;e.length>1&&r.byteLength>_e;)e=e.slice(0,Math.floor(e.length/2)),r=R.encode(n(e)).finish();return this.queue=this.queue.slice(e.length),{url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:r,events:e}}sendFetch(e,t=!1,n){let r={method:"POST",headers:{"Content-Type":fe},body:e.encoded};t&&(r.keepalive=!0),fetch(e.url,r).then(o=>{if(o.ok)this.consecutiveSendFailures=0,this.nextSendAllowedAt=0,n&&n();else{if(this.log("WARN",`Failed to send batch: HTTP ${o.status}`),o.status>=400&&o.status<500&&o.status!==429&&o.status!==408){this.log("WARN",`Dropping batch due to non-retryable client error HTTP ${o.status}`);return}this.handleSendFailure(e.events)}}).catch(o=>{this.log("ERROR","Failed to send batch",o),this.handleSendFailure(e.events)});let s=typeof globalThis<"u"?globalThis.process:void 0;if(s&&typeof s._tickCallback=="function")try{s._tickCallback()}catch{}}handleSendFailure(e){this.consecutiveSendFailures++;let t=Math.min(le*2**(this.consecutiveSendFailures-1),Ce);this.nextSendAllowedAt=Date.now()+t,this.consecutiveSendFailures<=Ne?this.requeue(e):this.log("WARN",`Dropping ${e.length} events after ${this.consecutiveSendFailures} consecutive send failures`)}flush(){if(Date.now()<this.nextSendAllowedAt)return;let e=this.drainBatch();for(;e&&(this.sendFetch(e,!1),!(Date.now()<this.nextSendAllowedAt));)e=this.drainBatch()}flushBeacon(){let e=this.drainBatch();for(;e;){let t=!1;if(typeof navigator<"u"&&typeof navigator.sendBeacon=="function")try{let n=new Blob([e.encoded],{type:fe});t=navigator.sendBeacon(e.url,n)}catch{t=!1}if(!t){let n=this.persistBatch(e.encoded);this.sendFetch(e,!0,()=>this.removePersistedBatch(n))}e=this.drainBatch()}this.schedulePersistedCleanup()}persistBatch(e){try{if(typeof localStorage>"u")return null;let t=0;for(let r=0;r<localStorage.length;r++){let s=localStorage.key(r);s&&s.startsWith(B)&&t++}if(t>=Pe)return null;let n=`${B}${Date.now()}_${Math.floor(Math.random()*1e6)}`;return localStorage.setItem(n,Le(e)),this.persistedBatchKeys.push(n),n}catch{return null}}removePersistedBatch(e){if(!e)return;try{typeof localStorage<"u"&&localStorage.removeItem(e)}catch{}let t=this.persistedBatchKeys.indexOf(e);t!==-1&&this.persistedBatchKeys.splice(t,1)}schedulePersistedCleanup(){this.persistedBatchKeys.length!==0&&(this.persistedCleanupTimer&&clearTimeout(this.persistedCleanupTimer),this.persistedCleanupTimer=setTimeout(()=>{this.persistedCleanupTimer=null;for(let e of[...this.persistedBatchKeys])this.removePersistedBatch(e)},Ve))}resendPersistedBatches(){try{if(typeof localStorage>"u"||!this.config.endpoint)return;let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(B)&&e.push(n)}for(let t of e){let n=null;try{n=localStorage.getItem(t),localStorage.removeItem(t)}catch{continue}if(!n)continue;let r=parseInt(t.slice(B.length),10);if(!Number.isFinite(r)||Date.now()-r>Me)continue;let s;try{s=qe(n)}catch{continue}s.byteLength!==0&&(this.log("DEBUG",`Resending persisted exit batch (${s.byteLength} bytes)`),this.sendFetch({url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:s,events:[]}))}}catch{}}log(e,t,...n){let r={DEBUG:10,INFO:20,WARN:30,ERROR:40};if(r[e]<r[this.config.logLevel])return;let s=`[bidkernel][prebid-analytics][${e}]`;switch(e){case"DEBUG":console.debug(s,t,...n);break;case"INFO":console.info(s,t,...n);break;case"WARN":console.warn(s,t,...n);break;case"ERROR":console.error(s,t,...n);break}}}});var ze=ge(()=>{Ie();var Te="https://by.bidkernel.io/t",Ke=window._bidkernelPbjsGlobal||"pbjs";K(Ke,{endpoint:Te});window.bidkernelPrebidAnalytics={...window.bidkernelPrebidAnalytics,register:(i,e)=>K(i,{endpoint:Te,...e})}});return ze();})();
|
|
1
|
+
"use strict";var bidkernelPrebidAnalyticsBundle=(()=>{var B=(n,e)=>()=>(n&&(e=n(n=0)),e);var Ue=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);function de(){let n=0,e=0;for(let i=0;i<28;i+=7){let r=this.buf[this.pos++];if(n|=(r&127)<<i,(r&128)==0)return this.assertBounds(),[n,e]}let t=this.buf[this.pos++];if(n|=(t&15)<<28,e=(t&112)>>4,(t&128)==0)return this.assertBounds(),[n,e];for(let i=3;i<=31;i+=7){let r=this.buf[this.pos++];if(e|=(r&127)<<i,(r&128)==0)return this.assertBounds(),[n,e]}throw new Error("invalid varint")}function L(n,e,t){for(let s=0;s<28;s=s+7){let o=n>>>s,d=!(!(o>>>7)&&e==0),a=(d?o|128:o)&255;if(t.push(a),!d)return}let i=n>>>28&15|(e&7)<<4,r=e>>3!=0;if(t.push((r?i|128:i)&255),!!r){for(let s=3;s<31;s=s+7){let o=e>>>s,d=!!(o>>>7),a=(d?o|128:o)&255;if(t.push(a),!d)return}t.push(e>>>31&1)}}function z(n){let e=n[0]==="-";e&&(n=n.slice(1));let t=1e6,i=0,r=0;function s(o,d){let a=Number(n.slice(o,d));r*=t,i=i*t+a,i>=V&&(r=r+(i/V|0),i=i%V)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),e?ce(i,r):Q(i,r)}function ae(n,e){let t=Q(n,e),i=t.hi&2147483648;i&&(t=ce(t.lo,t.hi));let r=Y(t.lo,t.hi);return i?"-"+r:r}function Y(n,e){if({lo:n,hi:e}=_e(n,e),e<=2097151)return String(V*e+n);let t=n&16777215,i=(n>>>24|e<<8)&16777215,r=e>>16&65535,s=t+i*6777216+r*6710656,o=i+r*8147497,d=r*2,a=1e7;return s>=a&&(o+=Math.floor(s/a),s%=a),o>=a&&(d+=Math.floor(o/a),o%=a),d.toString()+oe(o)+oe(s)}function _e(n,e){return{lo:n>>>0,hi:e>>>0}}function Q(n,e){return{lo:n|0,hi:e|0}}function ce(n,e){return e=~e,n?n=~n+1:e+=1,Q(n,e)}function j(n,e){if(n>=0){for(;n>127;)e.push(n&127|128),n=n>>>7;e.push(n)}else{for(let t=0;t<9;t++)e.push(n&127|128),n=n>>7;e.push(1)}}function le(){let n=this.buf[this.pos++],e=n&127;if((n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<7,(n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<14,(n&128)==0)return this.assertBounds(),e;if(n=this.buf[this.pos++],e|=(n&127)<<21,(n&128)==0)return this.assertBounds(),e;n=this.buf[this.pos++],e|=(n&15)<<28;for(let t=5;(n&128)!==0&&t<10;t++)n=this.buf[this.pos++];if((n&128)!=0)throw new Error("invalid varint");return this.assertBounds(),e>>>0}var V,oe,X=B(()=>{"use strict";V=4294967296;oe=n=>{let e=String(n);return"0000000".slice(e.length)+e}});function Pe(){let n=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof n.getBigInt64=="function"&&typeof n.getBigUint64=="function"&&typeof n.setBigInt64=="function"&&typeof n.setBigUint64=="function"&&(!!globalThis.Deno||typeof process!="object"||typeof process.env!="object"||process.env.BUF_BIGINT_DISABLE!=="1")){let t=BigInt("-9223372036854775808"),i=BigInt("9223372036854775807"),r=BigInt("0"),s=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(o){let d=typeof o=="bigint"?o:BigInt(o);if(d>i||d<t)throw new Error(`invalid int64: ${o}`);return d},uParse(o){let d=typeof o=="bigint"?o:BigInt(o);if(d>s||d<r)throw new Error(`invalid uint64: ${o}`);return d},enc(o){return n.setBigInt64(0,this.parse(o),!0),{lo:n.getInt32(0,!0),hi:n.getInt32(4,!0)}},uEnc(o){return n.setBigInt64(0,this.uParse(o),!0),{lo:n.getInt32(0,!0),hi:n.getInt32(4,!0)}},dec(o,d){return n.setInt32(0,o,!0),n.setInt32(4,d,!0),n.getBigInt64(0,!0)},uDec(o,d){return n.setInt32(0,o,!0),n.setInt32(4,d,!0),n.getBigUint64(0,!0)}}}return{zero:"0",supported:!1,parse(t){return typeof t!="string"&&(t=t.toString()),ue(t),t},uParse(t){return typeof t!="string"&&(t=t.toString()),fe(t),t},enc(t){return typeof t!="string"&&(t=t.toString()),ue(t),z(t)},uEnc(t){return typeof t!="string"&&(t=t.toString()),fe(t),z(t)},dec(t,i){return ae(t,i)},uDec(t,i){return Y(t,i)}}}function ue(n){if(!/^-?[0-9]+$/.test(n))throw new Error("invalid int64: "+n)}function fe(n){if(!/^[0-9]+$/.test(n))throw new Error("invalid uint64: "+n)}var R,he=B(()=>{"use strict";X();R=Pe()});function J(){if(globalThis[Z]==null){let n=new globalThis.TextEncoder,e=new globalThis.TextDecoder;globalThis[Z]={encodeUtf8(t){return n.encode(t)},decodeUtf8(t){return e.decode(t)},checkUtf8(t){try{return encodeURIComponent(t),!0}catch{return!1}}}}return globalThis[Z]}var Z,ee=B(()=>{"use strict";Z=Symbol.for("@bufbuild/protobuf/text-encoding")});function te(n){if(typeof n=="string")n=Number(n);else if(typeof n!="number")throw new Error("invalid int32: "+typeof n);if(!Number.isInteger(n)||n>Oe||n<Fe)throw new Error("invalid int32: "+n)}function pe(n){if(typeof n=="string")n=Number(n);else if(typeof n!="number")throw new Error("invalid uint32: "+typeof n);if(!Number.isInteger(n)||n>Le||n<0)throw new Error("invalid uint32: "+n)}function $e(n){if(typeof n=="string"){let e=n;if(n=Number(n),Number.isNaN(n)&&e!=="NaN")throw new Error("invalid float32: "+e)}else if(typeof n!="number")throw new Error("invalid float32: "+typeof n);if(Number.isFinite(n)&&(n>Ne||n<Ve))throw new Error("invalid float32: "+n)}var D,Ne,Ve,Le,Oe,Fe,k,A,ye=B(()=>{"use strict";X();he();ee();(function(n){n[n.Varint=0]="Varint",n[n.Bit64=1]="Bit64",n[n.LengthDelimited=2]="LengthDelimited",n[n.StartGroup=3]="StartGroup",n[n.EndGroup=4]="EndGroup",n[n.Bit32=5]="Bit32"})(D||(D={}));Ne=34028234663852886e22,Ve=-34028234663852886e22,Le=4294967295,Oe=2147483647,Fe=-2147483648,k=class{constructor(e=J().encodeUtf8){this.encodeUtf8=e,this.stack=[],this.chunks=[],this.buf=[]}finish(){this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]);let e=0;for(let r=0;r<this.chunks.length;r++)e+=this.chunks[r].length;let t=new Uint8Array(e),i=0;for(let r=0;r<this.chunks.length;r++)t.set(this.chunks[r],i),i+=this.chunks[r].length;return this.chunks=[],t}fork(){return this.stack.push({chunks:this.chunks,buf:this.buf}),this.chunks=[],this.buf=[],this}join(){let e=this.finish(),t=this.stack.pop();if(!t)throw new Error("invalid state, fork stack empty");return this.chunks=t.chunks,this.buf=t.buf,this.uint32(e.byteLength),this.raw(e)}tag(e,t){return this.uint32((e<<3|t)>>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(pe(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return te(e),j(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let t=this.encodeUtf8(e);return this.uint32(t.byteLength),this.raw(t)}float(e){$e(e);let t=new Uint8Array(4);return new DataView(t.buffer).setFloat32(0,e,!0),this.raw(t)}double(e){let t=new Uint8Array(8);return new DataView(t.buffer).setFloat64(0,e,!0),this.raw(t)}fixed32(e){pe(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){te(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return te(e),e=(e<<1^e>>31)>>>0,j(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=R.enc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}fixed64(e){let t=new Uint8Array(8),i=new DataView(t.buffer),r=R.uEnc(e);return i.setInt32(0,r.lo,!0),i.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=R.enc(e);return L(t.lo,t.hi,this.buf),this}sint64(e){let t=R.enc(e),i=t.hi>>31,r=t.lo<<1^i,s=(t.hi<<1|t.lo>>>31)^i;return L(r,s,this.buf),this}uint64(e){let t=R.uEnc(e);return L(t.lo,t.hi,this.buf),this}},A=class{constructor(e,t=J().decodeUtf8){this.decodeUtf8=t,this.varint64=de,this.uint32=le,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}tag(){let e=this.uint32(),t=e>>>3,i=e&7;if(t<=0||i<0||i>5)throw new Error("illegal tag: field no "+t+" wire type "+i);return[t,i]}skip(e,t){let i=this.pos;switch(e){case D.Varint:for(;this.buf[this.pos++]&128;);break;case D.Bit64:this.pos+=4;case D.Bit32:this.pos+=4;break;case D.LengthDelimited:let r=this.uint32();this.pos+=r;break;case D.StartGroup:for(;;){let[s,o]=this.tag();if(o===D.EndGroup){if(t!==void 0&&s!==t)throw new Error("invalid end group tag");break}this.skip(o,s)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(i,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return R.dec(...this.varint64())}uint64(){return R.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),i=-(e&1);return e=(e>>>1|(t&1)<<31)^i,t=t>>>1^i,R.dec(e,t)}bool(){let[e,t]=this.varint64();return e!==0||t!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return R.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return R.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),t=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(t,t+e)}string(){return this.decodeUtf8(this.bytes())}}});var be=B(()=>{"use strict"});var Ie=B(()=>{"use strict"});var me=B(()=>{"use strict"});var Te=B(()=>{"use strict";ye();be();ee();Ie();me()});function ge(){return{propertyId:"",pageviewId:"",sessionId:"",pageUrl:"",country:"",region:"",deviceType:"",userId:"",domain:"",events:[],browser:"",deviceManufacturer:"",deviceModel:"",city:"",postalCode:""}}function Ee(){return{timestampMs:0,type:0,eventName:"",auctionId:"",transactionId:"",adUnitCode:"",bid:void 0,namespace:"",eventId:"",metadata:{},viewableDurationMs:void 0}}function ve(){return{key:"",value:""}}function we(){return{bidder:"",cpm:0,currency:"",width:0,height:0,dealId:"",mediaType:"",latencyMs:0,advertiserDomain:"",creativeId:""}}var f,$,O,ie,F,Se=B(()=>{"use strict";Te();f={TRACE_EVENT_TYPE_UNSPECIFIED:0,AUCTION_START:1,AUCTION_END:2,BID_REQUEST:3,BID_RESPONSE:4,BID_WIN:5,BID_TIMEOUT:6,IMPRESSION:7,VIEWABLE:8,TIME_IN_VIEW:14,REFRESH:9,ERROR:10,SLOT_DEFINED:11,SLOT_DESTROYED:12,CLICK:13,NO_BID:15,AD_RENDER_FAILED:16,UNRECOGNIZED:-1};$={encode(n,e=new k){if(n.propertyId!==void 0&&n.propertyId!==""&&e.uint32(10).string(n.propertyId),n.pageviewId!==void 0&&n.pageviewId!==""&&e.uint32(18).string(n.pageviewId),n.sessionId!==void 0&&n.sessionId!==""&&e.uint32(26).string(n.sessionId),n.pageUrl!==void 0&&n.pageUrl!==""&&e.uint32(34).string(n.pageUrl),n.country!==void 0&&n.country!==""&&e.uint32(42).string(n.country),n.region!==void 0&&n.region!==""&&e.uint32(50).string(n.region),n.deviceType!==void 0&&n.deviceType!==""&&e.uint32(58).string(n.deviceType),n.userId!==void 0&&n.userId!==""&&e.uint32(66).string(n.userId),n.domain!==void 0&&n.domain!==""&&e.uint32(74).string(n.domain),n.events!==void 0&&n.events.length!==0)for(let t of n.events)O.encode(t,e.uint32(82).fork()).join();return n.browser!==void 0&&n.browser!==""&&e.uint32(90).string(n.browser),n.deviceManufacturer!==void 0&&n.deviceManufacturer!==""&&e.uint32(98).string(n.deviceManufacturer),n.deviceModel!==void 0&&n.deviceModel!==""&&e.uint32(106).string(n.deviceModel),n.city!==void 0&&n.city!==""&&e.uint32(114).string(n.city),n.postalCode!==void 0&&n.postalCode!==""&&e.uint32(122).string(n.postalCode),e},decode(n,e){let t=n instanceof A?n:new A(n),i=e===void 0?t.len:t.pos+e,r=ge();for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==10)break;r.propertyId=t.string();continue}case 2:{if(s!==18)break;r.pageviewId=t.string();continue}case 3:{if(s!==26)break;r.sessionId=t.string();continue}case 4:{if(s!==34)break;r.pageUrl=t.string();continue}case 5:{if(s!==42)break;r.country=t.string();continue}case 6:{if(s!==50)break;r.region=t.string();continue}case 7:{if(s!==58)break;r.deviceType=t.string();continue}case 8:{if(s!==66)break;r.userId=t.string();continue}case 9:{if(s!==74)break;r.domain=t.string();continue}case 10:{if(s!==82)break;let o=O.decode(t,t.uint32());o!==void 0&&r.events.push(o);continue}case 11:{if(s!==90)break;r.browser=t.string();continue}case 12:{if(s!==98)break;r.deviceManufacturer=t.string();continue}case 13:{if(s!==106)break;r.deviceModel=t.string();continue}case 14:{if(s!==114)break;r.city=t.string();continue}case 15:{if(s!==122)break;r.postalCode=t.string();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(n){return $.fromPartial(n??{})},fromPartial(n){let e=ge();return e.propertyId=n.propertyId??"",e.pageviewId=n.pageviewId??"",e.sessionId=n.sessionId??"",e.pageUrl=n.pageUrl??"",e.country=n.country??"",e.region=n.region??"",e.deviceType=n.deviceType??"",e.userId=n.userId??"",e.domain=n.domain??"",e.events=n.events?.map(t=>O.fromPartial(t))||[],e.browser=n.browser??"",e.deviceManufacturer=n.deviceManufacturer??"",e.deviceModel=n.deviceModel??"",e.city=n.city??"",e.postalCode=n.postalCode??"",e}};O={encode(n,e=new k){return n.timestampMs!==void 0&&n.timestampMs!==0&&e.uint32(9).double(n.timestampMs),n.type!==void 0&&n.type!==0&&e.uint32(16).int32(n.type),n.eventName!==void 0&&n.eventName!==""&&e.uint32(26).string(n.eventName),n.auctionId!==void 0&&n.auctionId!==""&&e.uint32(34).string(n.auctionId),n.transactionId!==void 0&&n.transactionId!==""&&e.uint32(42).string(n.transactionId),n.adUnitCode!==void 0&&n.adUnitCode!==""&&e.uint32(50).string(n.adUnitCode),n.bid!==void 0&&F.encode(n.bid,e.uint32(58).fork()).join(),n.namespace!==void 0&&n.namespace!==""&&e.uint32(66).string(n.namespace),n.eventId!==void 0&&n.eventId!==""&&e.uint32(74).string(n.eventId),globalThis.Object.entries(n.metadata||{}).forEach(([t,i])=>{ie.encode({key:t,value:i},e.uint32(82).fork()).join()}),n.viewableDurationMs!==void 0&&e.uint32(89).double(n.viewableDurationMs),e},decode(n,e){let t=n instanceof A?n:new A(n),i=e===void 0?t.len:t.pos+e,r=Ee();for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==9)break;r.timestampMs=t.double();continue}case 2:{if(s!==16)break;r.type=t.int32();continue}case 3:{if(s!==26)break;r.eventName=t.string();continue}case 4:{if(s!==34)break;r.auctionId=t.string();continue}case 5:{if(s!==42)break;r.transactionId=t.string();continue}case 6:{if(s!==50)break;r.adUnitCode=t.string();continue}case 7:{if(s!==58)break;r.bid=F.decode(t,t.uint32());continue}case 8:{if(s!==66)break;r.namespace=t.string();continue}case 9:{if(s!==74)break;r.eventId=t.string();continue}case 10:{if(s!==82)break;let o=ie.decode(t,t.uint32());o.value!==void 0&&(r.metadata[o.key]=o.value);continue}case 11:{if(s!==89)break;r.viewableDurationMs=t.double();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(n){return O.fromPartial(n??{})},fromPartial(n){let e=Ee();return e.timestampMs=n.timestampMs??0,e.type=n.type??0,e.eventName=n.eventName??"",e.auctionId=n.auctionId??"",e.transactionId=n.transactionId??"",e.adUnitCode=n.adUnitCode??"",e.bid=n.bid!==void 0&&n.bid!==null?F.fromPartial(n.bid):void 0,e.namespace=n.namespace??"",e.eventId=n.eventId??"",e.metadata=globalThis.Object.entries(n.metadata??{}).reduce((t,[i,r])=>(r!==void 0&&(t[i]=globalThis.String(r)),t),{}),e.viewableDurationMs=n.viewableDurationMs??void 0,e}};ie={encode(n,e=new k){return n.key!==""&&e.uint32(10).string(n.key),n.value!==""&&e.uint32(18).string(n.value),e},decode(n,e){let t=n instanceof A?n:new A(n),i=e===void 0?t.len:t.pos+e,r=ve();for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==10)break;r.key=t.string();continue}case 2:{if(s!==18)break;r.value=t.string();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(n){return ie.fromPartial(n??{})},fromPartial(n){let e=ve();return e.key=n.key??"",e.value=n.value??"",e}};F={encode(n,e=new k){return n.bidder!==void 0&&n.bidder!==""&&e.uint32(10).string(n.bidder),n.cpm!==void 0&&n.cpm!==0&&e.uint32(17).double(n.cpm),n.currency!==void 0&&n.currency!==""&&e.uint32(26).string(n.currency),n.width!==void 0&&n.width!==0&&e.uint32(32).int32(n.width),n.height!==void 0&&n.height!==0&&e.uint32(40).int32(n.height),n.dealId!==void 0&&n.dealId!==""&&e.uint32(50).string(n.dealId),n.mediaType!==void 0&&n.mediaType!==""&&e.uint32(58).string(n.mediaType),n.latencyMs!==void 0&&n.latencyMs!==0&&e.uint32(65).double(n.latencyMs),n.advertiserDomain!==void 0&&n.advertiserDomain!==""&&e.uint32(74).string(n.advertiserDomain),n.creativeId!==void 0&&n.creativeId!==""&&e.uint32(82).string(n.creativeId),e},decode(n,e){let t=n instanceof A?n:new A(n),i=e===void 0?t.len:t.pos+e,r=we();for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{if(s!==10)break;r.bidder=t.string();continue}case 2:{if(s!==17)break;r.cpm=t.double();continue}case 3:{if(s!==26)break;r.currency=t.string();continue}case 4:{if(s!==32)break;r.width=t.int32();continue}case 5:{if(s!==40)break;r.height=t.int32();continue}case 6:{if(s!==50)break;r.dealId=t.string();continue}case 7:{if(s!==58)break;r.mediaType=t.string();continue}case 8:{if(s!==65)break;r.latencyMs=t.double();continue}case 9:{if(s!==74)break;r.advertiserDomain=t.string();continue}case 10:{if(s!==82)break;r.creativeId=t.string();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(n){return F.fromPartial(n??{})},fromPartial(n){let e=we();return e.bidder=n.bidder??"",e.cpm=n.cpm??0,e.currency=n.currency??"",e.width=n.width??0,e.height=n.height??0,e.dealId=n.dealId??"",e.mediaType=n.mediaType??"",e.latencyMs=n.latencyMs??0,e.advertiserDomain=n.advertiserDomain??"",e.creativeId=n.creativeId??"",e}}});function U(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{let e=Math.random()*16|0;return(n==="x"?e:e&3|8).toString(16)})}function Je(n){let e="";for(let i=0;i<n.length;i+=8192)e+=String.fromCharCode(...n.subarray(i,i+8192));return btoa(e)}function et(n){let e=atob(n),t=new Uint8Array(e.length);for(let i=0;i<e.length;i++)t[i]=e.charCodeAt(i);return t}function De(){let n=Date.now();P=n;try{typeof localStorage<"u"&&localStorage.setItem(H,n.toString())}catch{}}function tt(){let n=Date.now();try{if(typeof localStorage<"u"){let e=localStorage.getItem(xe),t=localStorage.getItem(H),i=t&&parseInt(t,10)||0;if(e&&i&&n-i<=Be)return localStorage.setItem(H,n.toString()),e;let r=U();return localStorage.setItem(xe,r),localStorage.setItem(H,n.toString()),r}}catch{}return K&&P&&n-P<=Be?(P=n,K):(K=U(),P=n,K)}function u(n){return String(n??"").replace(/%/g,"%25").replace(/:/g,"%3A")}function it(n,e){switch(n){case"auctionInit":return`auctionInit:${u(e?.auctionId)}`;case"auctionEnd":return`auctionEnd:${u(e?.auctionId)}`;case"bidRequested":{let t=Array.isArray(e?.bids)?e.bids.map(i=>u(i?.bidId||i?.transactionId||i?.adUnitCode)).join(","):"";return`bidRequested:${u(e?.auctionId)}:${u(e?.bidderCode||e?.bidder)}:${t}`}case"bidResponse":{let t=e||{},i=t.creativeId||t.adId||t.requestId||t.bidId||"",r=t.originalCpm??t.cpm??"";return`bidResponse:${u(t.auctionId)}:${u(t.adUnitCode)}:${u(t.bidderCode||t.bidder)}:${u(i)}:${u(r)}`}case"bidTimeout":return"bidTimeout:"+(Array.isArray(e)?e:e?[e]:[]).map(i=>`${u(i?.auctionId)}:${u(i?.bidderCode||i?.bidder)}:${u(i?.bidId||i?.transactionId||i?.adUnitCode)}`).join(",");case"bidWon":{let t=e||{},i=t.creativeId||t.adId||t.requestId||t.bidId||"",r=t.originalCpm??t.cpm??"";return`bidWon:${u(t.auctionId)}:${u(t.adUnitCode)}:${u(t.bidderCode||t.bidder)}:${u(i)}:${u(r)}`}case"noBid":return`noBid:${u(e?.auctionId)}:${u(e?.adUnitCode)}:${u(e?.bidderCode||e?.bidder)}:${u(e?.bidId||e?.transactionId)}`;case"adRenderFailed":{let t=e?.bid||{};return`adRenderFailed:${u(t.auctionId||e?.auctionId)}:${u(t.adUnitCode||e?.adUnitCode)}:${u(t.bidderCode||t.bidder||e?.bidderCode||e?.bidder)}:${u(e?.reason)}:${u(e?.message)}`}case"adRenderSucceeded":{let t=e?.bid||e||{},i=t.creativeId||t.adId||e?.adId||"",r=t.originalCpm??t.cpm??"";return`adRenderSucceeded:${u(t.auctionId||e?.auctionId)}:${u(t.adUnitCode||e?.adUnitCode)}:${u(t.bidderCode||t.bidder)}:${u(i)}:${u(r)}`}case"setTargeting":return`setTargeting:${Object.keys(e||{}).sort().map(u).join(",")}`;case"auctionDebug":return`auctionDebug:${u(e?.type)}:${u(String(e?.arguments?.[0]??"").slice(0,50))}`;default:return""}}function Ce(n){if(!n)return{width:0,height:0};let e=n;for(;Array.isArray(e)&&e.length>0&&Array.isArray(e[0]);)e=e[0];if(Array.isArray(e)&&e.length>=2){let t=Number(e[0]),i=Number(e[1]);return{width:Number.isFinite(t)?t:0,height:Number.isFinite(i)?i:0}}return{width:0,height:0}}function C(n){if(Number.isFinite(n?.width)&&Number.isFinite(n?.height))return{width:n.width,height:n.height};if(typeof n?.size=="string"){let e=n.size.match(/^(\d+)x(\d+)$/);if(e)return{width:Number(e[1]),height:Number(e[2])}}return{width:Number.isFinite(n?.width)?n.width:0,height:Number.isFinite(n?.height)?n.height:0}}function _(n){if(!n)return null;if(Array.isArray(n)){let e=n.find(t=>t?.provider==="bidkernel")??n.find(t=>t&&typeof t=="object"&&t.provider===void 0);return e?_(e):null}if(typeof n=="object"){if(n.options&&typeof n.options=="object")return n.options;if(n.config&&typeof n.config=="object")return n.config;if(n.propertyId||n.endpoint)return n}return null}function nt(n){if(!n)return null;if(n._bidkernelAnalyticsConfig){let e=_(n._bidkernelAnalyticsConfig);if(e)return e}if(n.bidkernelPrebidAnalytics){let e=n.bidkernelPrebidAnalytics;if(e.options){let t=_(e.options);if(t)return t}if(e.config){let t=_(e.config);if(t)return t}if(e.propertyId)return _(e)}return null}function se(n="pbjs",e){let t=typeof window<"u"?window:{};t[n]=t[n]||{};let i=t[n],r=o=>{if(t._bidkernelPrebidAnalytics)try{t._bidkernelPrebidAnalytics.disable()}catch(a){console.warn("[bidkernel] Failed to disable previous analytics instance:",a)}let d=new re({pbjsGlobalName:n,...e,...o});return d.enable(),t._bidkernelPrebidAnalytics=d,d},s=()=>{try{i.adapterManager&&typeof i.adapterManager.registerAnalyticsAdapter=="function"&&i.adapterManager.registerAnalyticsAdapter({adapter:{enableAnalytics:d=>{let a=_(d);a&&r(a)},disableAnalytics:()=>{t._bidkernelPrebidAnalytics&&t._bidkernelPrebidAnalytics.disable()}},code:"bidkernel"});let o=nt(t);o&&(o.propertyId||e?.propertyId)&&r(o)}catch(o){console.warn("[bidkernel] Failed to register standard Prebid analytics adapter:",o)}};i.adapterManager&&typeof i.adapterManager.registerAnalyticsAdapter=="function"?s():(i.que=i.que||[],i.que.push(s))}var We,Re,Ke,q,He,Ge,ze,Ae,W,Ye,Qe,je,Xe,Ze,xe,H,Be,K,P,ne,re,ke=B(()=>{"use strict";Se();We=20,Re=1e4,Ke=50,q=200,He=300*1e3,Ge=10,ze=32*1024,Ae="text/plain",W="_bidkernel_pending_",Ye=20,Qe=7200*1e3,je=1e4,Xe={auctionStart:f.AUCTION_START,auctionEnd:f.AUCTION_END,bidRequest:f.BID_REQUEST,bidResponse:f.BID_RESPONSE,bidTimeout:f.BID_TIMEOUT,bidWin:f.BID_WIN,noBid:f.NO_BID,adRenderFailed:f.AD_RENDER_FAILED,click:f.CLICK,impression:f.IMPRESSION,refresh:f.REFRESH,timeInView:f.TIME_IN_VIEW,viewable:f.VIEWABLE},Ze=new Set([f.IMPRESSION,f.BID_WIN,f.CLICK]),xe="_bidkernel_session",H="_bidkernel_session_ts",Be=1800*1e3,K=null,P=0;ne=class{seenObjects=new WeakMap;seenKeys=new Set;isDuplicate(e,t){if(!t)return!1;if(typeof t=="object"){let r=this.seenObjects.get(t);if(r){if(r.has(e))return!0;r.add(e)}else this.seenObjects.set(t,new Set([e]))}let i=it(e,t);if(i){if(this.seenKeys.has(i))return!0;if(this.seenKeys.size>=1e3){let r=this.seenKeys.values().next().value;r!==void 0&&this.seenKeys.delete(r)}this.seenKeys.add(i)}return!1}};re=class n{static activeInstances=new Set;config;queue=[];errorCount=0;flushTimer=null;boundFlushBeacon;boundVisibilityChange;isEnabled=!1;boundPbjsHandlers=[];pageUrl="";deduper=new ne;consecutiveSendFailures=0;nextSendAllowedAt=0;replayedEventCount=0;immediateFlushScheduled=!1;persistedBatchKeys=[];persistedCleanupTimer=null;intersectionObserver=null;slotViewabilityRecords=new Map;elementToSlotId=new Map;slotRefreshIndices=new Map;slotLastAuctionIds=new Map;pendingThresholdListeners=new Map;slotEmittedImpressionKeys=new Set;cachedWinningBids=new Map;videoDetachCleanups=new Set;constructor(e){this.config={endpoint:e.endpoint||"",propertyId:e.propertyId||"",pageviewId:e.pageviewId||U(),sessionId:e.sessionId||tt(),userId:e.userId||"",deviceType:e.deviceType||"desktop",country:e.country||"",region:e.region||"",auctionEnabled:e.auctionEnabled??!0,warningsEnabled:e.warningsEnabled??!0,errorsEnabled:e.errorsEnabled??!0,viewabilityEnabled:e.viewabilityEnabled??!0,logLevel:e.logLevel||"INFO",pbjsGlobalName:e.pbjsGlobalName||"pbjs",attachPbjsListeners:e.attachPbjsListeners??!0},this.boundFlushBeacon=()=>{this.flushAllSlotsTimeInView(),this.flushBeacon()},this.boundVisibilityChange=()=>this.handleVisibilityChange()}enable(){if(!this.isEnabled){if(this.isEnabled=!0,n.activeInstances.add(this),this.config.endpoint||this.log("WARN","Endpoint is empty. Analytics events will not be transmitted."),this.config.viewabilityEnabled&&typeof IntersectionObserver<"u"){this.intersectionObserver=new IntersectionObserver(this.handleIntersection.bind(this),{threshold:[.5]});for(let e of this.slotViewabilityRecords.values())e.element&&this.intersectionObserver.observe(e.element)}if(this.config.attachPbjsListeners){let t=(typeof window<"u"?window:{})[this.config.pbjsGlobalName]||{};if(typeof t.onEvent=="function"){this.log("DEBUG","Attaching event listeners to pbjs");let i=[["auctionInit",this.handleAuctionInit.bind(this)],["auctionEnd",this.handleAuctionEnd.bind(this)],["bidRequested",this.handleBidRequested.bind(this)],["bidResponse",this.handleBidResponse.bind(this)],["bidTimeout",this.handleBidTimeout.bind(this)],["bidWon",this.handleBidWon.bind(this)],["noBid",this.handleNoBid.bind(this)],["adRenderFailed",this.handleAdRenderFailed.bind(this)],["adRenderSucceeded",this.handleAdRenderSucceeded.bind(this)]];for(let[r,s]of i)t.onEvent(r,s),this.boundPbjsHandlers.push({event:r,handler:s})}else this.log("WARN","pbjs.onEvent is not defined. Prebid analytics will not function.");if(typeof t.getEvents=="function")try{let i=t.getEvents();if(Array.isArray(i)){let r=i.slice(this.replayedEventCount);if(this.replayedEventCount=i.length,r.length>0){this.log("DEBUG",`Replaying ${r.length} historical events from pbjs.getEvents()`);let s={auctionInit:this.handleAuctionInit.bind(this),auctionEnd:this.handleAuctionEnd.bind(this),bidRequested:this.handleBidRequested.bind(this),bidResponse:this.handleBidResponse.bind(this),bidTimeout:this.handleBidTimeout.bind(this),bidWon:this.handleBidWon.bind(this),noBid:this.handleNoBid.bind(this),adRenderFailed:this.handleAdRenderFailed.bind(this),adRenderSucceeded:this.handleAdRenderSucceeded.bind(this)};for(let o of r){if(!o)continue;let d=o.eventType||o.event||o.name,a=o.args!==void 0?o.args:o.data!==void 0?o.data:o,l=s[d];l&&l(a)}}}}catch(i){this.log("WARN","Failed to replay historical events from pbjs.getEvents()",i)}}if(typeof window<"u"){if(!this.pageUrl)try{let e=new URL(window.location.href);this.pageUrl=e.origin+e.pathname}catch{this.pageUrl=window.location.href}window.addEventListener("pagehide",this.boundFlushBeacon),typeof document<"u"&&document.addEventListener("visibilitychange",this.boundVisibilityChange),this.flushTimer=setInterval(()=>this.flush(),Re),this.resendPersistedBatches()}}}disable(){if(this.isEnabled){this.flushAllSlotsTimeInView(),this.isEnabled=!1,n.activeInstances.delete(this);for(let e of this.slotViewabilityRecords.values()){e.dwellTimer&&(clearTimeout(e.dwellTimer),e.dwellTimer=null,e.dwellStartedAt=null);for(let t of e.thresholdListeners)t.timer&&(clearTimeout(t.timer),t.timer=null)}this.intersectionObserver&&(this.intersectionObserver.disconnect(),this.intersectionObserver=null),this.slotViewabilityRecords.clear(),this.elementToSlotId.clear();for(let e of this.videoDetachCleanups)try{e()}catch{}if(this.videoDetachCleanups.clear(),this.cachedWinningBids.clear(),this.slotEmittedImpressionKeys.clear(),this.slotLastAuctionIds.clear(),this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.persistedCleanupTimer&&(clearTimeout(this.persistedCleanupTimer),this.persistedCleanupTimer=null),typeof window<"u"&&(window.removeEventListener("pagehide",this.boundFlushBeacon),typeof document<"u"&&document.removeEventListener("visibilitychange",this.boundVisibilityChange)),this.boundPbjsHandlers.length>0){let t=(typeof window<"u"?window:{})[this.config.pbjsGlobalName]||{};if(typeof t.offEvent=="function")for(let{event:i,handler:r}of this.boundPbjsHandlers)t.offEvent(i,r);this.boundPbjsHandlers=[]}this.flush()}}handleVisibilityChange(){if(!(typeof document>"u")){if(document.visibilityState==="hidden"){let e=typeof performance<"u"&&performance.now?performance.now():Date.now();for(let t of this.slotViewabilityRecords.values()){t.inView&&t.lastEnteredViewAt!==null&&(t.accumulatedTimeInViewMs+=Math.max(0,e-t.lastEnteredViewAt),t.lastEnteredViewAt=null,this.checkThresholdListeners(t)),t.dwellTimer&&(clearTimeout(t.dwellTimer),t.dwellTimer=null,t.dwellStartedAt=null);for(let r of t.thresholdListeners)r.timer&&(clearTimeout(r.timer),r.timer=null);let i=Math.round(t.accumulatedTimeInViewMs);i>0&&this.enqueue(f.TIME_IN_VIEW,"timeInView",{auctionId:t.auctionId,transactionId:t.transactionId,adUnitCode:t.adUnitCode,viewableDurationMs:i,bid:t.bidPayload,metadata:{...t.metadata,refresh_index:String(t.refreshIndex)}})}this.flushBeacon()}else if(document.visibilityState==="visible"){let e=typeof performance<"u"&&performance.now?performance.now():Date.now();for(let t of this.slotViewabilityRecords.values())if(t.inView){if(t.lastEnteredViewAt=e,!t.viewableFired&&t.dwellTimer===null){let i=t.mediaType==="video"?2e3:1e3;t.dwellStartedAt=e,t.dwellTimer=setTimeout(()=>{this.handleDwellComplete(t)},i)}this.scheduleThresholdTimers(t)}}}}handleIntersection(e){for(let t of e){let i=this.elementToSlotId.get(t.target);if(!i){for(let a of n.activeInstances)if(a!==this&&a.elementToSlotId.has(t.target)){a.handleIntersection([t]);break}continue}let r=this.slotViewabilityRecords.get(i);if(!r)continue;let s=t.isIntersecting&&(t.intersectionRatio===void 0||t.intersectionRatio>=.5),o=typeof document>"u"||document.visibilityState==="visible",d=typeof performance<"u"&&performance.now?performance.now():Date.now();if(s){if(!r.inView&&(r.inView=!0,o)){if(r.lastEnteredViewAt=d,!r.viewableFired&&r.dwellTimer===null){let a=r.mediaType==="video"?2e3:1e3;r.dwellStartedAt=d,r.dwellTimer=setTimeout(()=>{this.handleDwellComplete(r)},a)}this.scheduleThresholdTimers(r)}}else{r.inView&&(r.lastEnteredViewAt!==null&&(r.accumulatedTimeInViewMs+=Math.max(0,d-r.lastEnteredViewAt),r.lastEnteredViewAt=null),r.inView=!1,this.checkThresholdListeners(r)),r.dwellTimer!==null&&(clearTimeout(r.dwellTimer),r.dwellTimer=null,r.dwellStartedAt=null);for(let a of r.thresholdListeners)a.timer&&(clearTimeout(a.timer),a.timer=null)}}}handleDwellComplete(e){e.dwellTimer=null,e.dwellStartedAt=null,e.inView&&(typeof document<"u"&&document.visibilityState==="hidden"||e.viewableFired||(e.viewableFired=!0,this.enqueue(f.VIEWABLE,"viewable",{auctionId:e.auctionId,transactionId:e.transactionId,adUnitCode:e.adUnitCode,bid:e.bidPayload,metadata:{...e.metadata,refresh_index:String(e.refreshIndex)}})))}scheduleThresholdTimers(e){if(!e.inView||typeof document<"u"&&document.visibilityState==="hidden")return;let t=this.getCurrentTimeInView(e);for(let i of e.thresholdListeners)if(!i.fired)if(t>=i.thresholdMs){i.fired=!0,i.timer&&(clearTimeout(i.timer),i.timer=null);try{i.callback(e.slotId,t)}catch(r){this.log("ERROR","Error in threshold listener callback",r)}}else{i.timer&&clearTimeout(i.timer);let r=i.thresholdMs-t;i.timer=setTimeout(()=>{if(i.timer=null,!i.fired&&e.inView&&(typeof document>"u"||document.visibilityState==="visible")){let s=this.getCurrentTimeInView(e);if(s>=i.thresholdMs){i.fired=!0;try{i.callback(e.slotId,s)}catch(o){this.log("ERROR","Error in threshold listener callback",o)}}}},r)}}checkThresholdListeners(e){let t=this.getCurrentTimeInView(e);for(let i of e.thresholdListeners)if(!i.fired&&t>=i.thresholdMs){i.fired=!0,i.timer&&(clearTimeout(i.timer),i.timer=null);try{i.callback(e.slotId,t)}catch(r){this.log("ERROR","Error in threshold listener callback",r)}}}getCurrentTimeInView(e){let t=e.accumulatedTimeInViewMs;if(e.inView&&e.lastEnteredViewAt!==null){let i=typeof performance<"u"&&performance.now?performance.now():Date.now();t+=Math.max(0,i-e.lastEnteredViewAt)}return t}flushSlotTimeInView(e){let t=this.slotViewabilityRecords.get(e);if(!t)return;if(t.inView&&t.lastEnteredViewAt!==null){let r=typeof performance<"u"&&performance.now?performance.now():Date.now();t.accumulatedTimeInViewMs+=Math.max(0,r-t.lastEnteredViewAt),t.lastEnteredViewAt=null}let i=Math.round(t.accumulatedTimeInViewMs);i>0&&this.enqueue(f.TIME_IN_VIEW,"timeInView",{auctionId:t.auctionId,transactionId:t.transactionId,adUnitCode:t.adUnitCode,viewableDurationMs:i,bid:t.bidPayload,metadata:{...t.metadata,refresh_index:String(t.refreshIndex)}}),t.accumulatedTimeInViewMs=0}flushAllSlotsTimeInView(){for(let e of Array.from(this.slotViewabilityRecords.keys()))this.flushSlotTimeInView(e)}observeSlot(e,t,i){if(!this.config.viewabilityEnabled)return;let r=null;if(typeof e=="string"){if(typeof document<"u"){try{r=document.querySelector(e)||document.getElementById(e)}catch{r=document.getElementById(e)}r||(r=document.getElementById(e))}}else r=e;let s=t||i?.adUnitCode||(r?r.id:"")||U(),o=this.slotViewabilityRecords.get(s);if(o){if(i?.refreshIndex===void 0||i.refreshIndex>o.refreshIndex){this.flushSlotTimeInView(s);let a=i?.refreshIndex!==void 0?i.refreshIndex:(this.slotRefreshIndices.get(s)??o.refreshIndex)+1;this.slotRefreshIndices.set(s,a),i?.emitRefreshEvent!==!1&&this.enqueue(f.REFRESH,"refresh",{auctionId:i?.auctionId||o.auctionId,transactionId:i?.transactionId||o.transactionId,adUnitCode:s,bid:i?.bid??o.bidPayload,metadata:{...i?.metadata,refresh_index:String(a)}}),o.dwellTimer&&(clearTimeout(o.dwellTimer),o.dwellTimer=null,o.dwellStartedAt=null);for(let I of o.thresholdListeners)I.fired=!1,I.timer&&(clearTimeout(I.timer),I.timer=null);o.viewableFired=!1,o.accumulatedTimeInViewMs=0;let l=typeof performance<"u"&&performance.now?performance.now():Date.now();if(o.lastEnteredViewAt=o.inView?l:null,o.refreshIndex=a,o.auctionId=i?.auctionId||o.auctionId,o.transactionId=i?.transactionId||o.transactionId,o.mediaType=i?.mediaType||o.mediaType||"banner",o.bidPayload=i?.bid!==void 0?i.bid:o.bidPayload,o.metadata=i?.metadata??o.metadata,o.inView&&(typeof document>"u"||document.visibilityState==="visible")){let I=o.mediaType==="video"?2e3:1e3;o.dwellStartedAt=l,o.dwellTimer=setTimeout(()=>{this.handleDwellComplete(o)},I),this.scheduleThresholdTimers(o)}}else o.auctionId=i?.auctionId||o.auctionId,o.transactionId=i?.transactionId||o.transactionId,o.mediaType=i?.mediaType||o.mediaType,i?.bid!==void 0&&(o.bidPayload=i.bid),i?.metadata!==void 0&&(o.metadata=i.metadata);i?.auctionId&&this.slotLastAuctionIds.set(s,i.auctionId),r&&(o.element&&o.element!==r&&this.intersectionObserver&&(this.intersectionObserver.unobserve(o.element),this.elementToSlotId.delete(o.element)),o.element=r,this.elementToSlotId.set(r,s),this.intersectionObserver?.observe(r))}else{let d=i?.refreshIndex??this.slotRefreshIndices.get(s)??0;this.slotRefreshIndices.set(s,d),i?.auctionId&&this.slotLastAuctionIds.set(s,i.auctionId);let a=this.pendingThresholdListeners.get(s)||new Set;this.pendingThresholdListeners.delete(s);let l={slotId:s,element:r,adUnitCode:i?.adUnitCode||s,auctionId:i?.auctionId||"",transactionId:i?.transactionId||"",mediaType:i?.mediaType||"banner",bidPayload:i?.bid,metadata:i?.metadata,refreshIndex:d,inView:!1,lastEnteredViewAt:null,accumulatedTimeInViewMs:0,viewableFired:!1,dwellTimer:null,dwellStartedAt:null,thresholdListeners:a};this.slotViewabilityRecords.set(s,l),r&&(this.elementToSlotId.set(r,s),this.intersectionObserver?.observe(r))}}unobserveSlot(e){let t=this.slotViewabilityRecords.get(e);if(t){this.flushSlotTimeInView(e),t.dwellTimer&&(clearTimeout(t.dwellTimer),t.dwellTimer=null,t.dwellStartedAt=null);for(let i of t.thresholdListeners)i.timer&&(clearTimeout(i.timer),i.timer=null);t.thresholdListeners=new Set,t.element&&this.intersectionObserver&&(this.intersectionObserver.unobserve(t.element),this.elementToSlotId.delete(t.element),t.element=null),t.inView=!1,t.lastEnteredViewAt=null}}destroySlot(e){this.unobserveSlot(e),this.slotViewabilityRecords.delete(e),this.slotRefreshIndices.delete(e),this.slotLastAuctionIds.delete(e),this.pendingThresholdListeners.delete(e);let t=`${u(e)}:`;for(let i of Array.from(this.slotEmittedImpressionKeys))(i===e||i.startsWith(t))&&this.slotEmittedImpressionKeys.delete(i);this.cachedWinningBids.delete(e)}hasImpressionEmitted(e,t,i,r){let s=t??this.slotRefreshIndices.get(e)??0,o=`${u(e)}:${s}`;return r?i?this.slotEmittedImpressionKeys.has(`${o}:auc:${u(i)}:${u(r)}`)||this.slotEmittedImpressionKeys.has(`${o}:${u(r)}`):this.slotEmittedImpressionKeys.has(`${o}:${u(r)}`):i?this.slotEmittedImpressionKeys.has(`${o}:auc:${u(i)}`):this.slotEmittedImpressionKeys.has(o)}markImpressionEmitted(e,t,i,r){let s=`${u(e)}:${t}`;this.slotEmittedImpressionKeys.add(s),r&&this.slotEmittedImpressionKeys.add(`${s}:${u(r)}`),i&&(this.slotEmittedImpressionKeys.add(`${s}:auc:${u(i)}`),r&&this.slotEmittedImpressionKeys.add(`${s}:auc:${u(i)}:${u(r)}`))}recordImpression(e,t){if(!this.isEnabled)return!1;let i=e||t?.adUnitCode||"",r=t?.adUnitCode||i,s=(t?.auctionId&&i?this.cachedWinningBids.get(`${t.auctionId}:${i}`):void 0)||(t?.auctionId&&r?this.cachedWinningBids.get(`${t.auctionId}:${r}`):void 0)||(i?this.cachedWinningBids.get(i):void 0)||(r?this.cachedWinningBids.get(r):void 0),o=t?.bid||s?.rawBid||{},d=t?.auctionId||o.auctionId||s?.auctionId||"",a=t?.transactionId||o.transactionId||s?.transactionId||"",l=o.creativeId||s?.bidTrace?.creativeId||t?.bid?.creativeId||"",I=t?.mediaType||o.mediaType||s?.bidTrace?.mediaType||"banner",y=i||r,h=(i?this.slotViewabilityRecords.get(i):void 0)||(r?this.slotViewabilityRecords.get(r):void 0),b=y?this.slotLastAuctionIds.get(y)||(h?h.auctionId:void 0):void 0,x=!!(y&&d&&b&&b!==d&&t?.refreshIndex===void 0),w={bidder:o.bidderCode||o.bidder||s?.bidTrace?.bidder||"",cpm:Number.isFinite(o.originalCpm)?o.originalCpm:Number.isFinite(o.cpm)?o.cpm:s?.bidTrace?.cpm??0,currency:o.originalCurrency??o.currency??s?.bidTrace?.currency??"USD",...C(o).width?C(o):s?.bidTrace?{width:s.bidTrace.width,height:s.bidTrace.height}:C(o),dealId:o.dealId||s?.bidTrace?.dealId||"",mediaType:I,latencyMs:Number.isFinite(o.timeToRespond)?o.timeToRespond:s?.bidTrace?.latencyMs??0,advertiserDomain:o.meta?.advertiserDomains?.[0]||s?.bidTrace?.advertiserDomain||"",creativeId:o.creativeId||s?.bidTrace?.creativeId||""};if(x&&y){this.flushSlotTimeInView(y);let c=(this.slotRefreshIndices.get(y)??(h?h.refreshIndex:0))+1;this.slotRefreshIndices.set(y,c),this.slotLastAuctionIds.set(y,d),h&&(h.refreshIndex=c,h.auctionId=d,h.transactionId=a,h.bidPayload=w,h.viewableFired=!1,h.accumulatedTimeInViewMs=0),this.enqueue(f.REFRESH,"refresh",{auctionId:d,transactionId:a,adUnitCode:y,bid:w,metadata:{...t?.metadata,refresh_index:String(c)}})}else y&&(d&&this.slotLastAuctionIds.set(y,d),this.slotRefreshIndices.has(y)||this.slotRefreshIndices.set(y,0));let g=t?.refreshIndex??(i?this.slotRefreshIndices.get(i)??(r?this.slotRefreshIndices.get(r):void 0)??(h?h.refreshIndex:0):0);return i&&this.hasImpressionEmitted(i,g,d,l)||r&&r!==i&&this.hasImpressionEmitted(r,g,d,l)?(this.log("DEBUG",`Impression already emitted for slot ${i||r} in cycle ${g}`),!1):(i&&this.markImpressionEmitted(i,g,d,l),r&&r!==i&&this.markImpressionEmitted(r,g,d,l),this.enqueue(f.IMPRESSION,"impression",{auctionId:d,transactionId:a,adUnitCode:r,bid:w,metadata:{...t?.metadata,refresh_index:String(g)}}),h&&(!h.bidPayload&&w&&(h.bidPayload=w),!h.auctionId&&d&&(h.auctionId=d),!h.transactionId&&a&&(h.transactionId=a)),!0)}attachImaAdsManager(e,t){if(!e||typeof e.addEventListener!="function")return this.log("WARN","Invalid AdsManager passed to attachImaAdsManager"),()=>{};let i=t?.slotId||t?.adUnitCode||"video",r=t?.adUnitCode||i,s=t?.auctionId||"",o=t?.transactionId||"",d=()=>(s?this.cachedWinningBids.get(`${s}:${r}`):void 0)||(s&&i!==r?this.cachedWinningBids.get(`${s}:${i}`):void 0)||this.cachedWinningBids.get(r)||(i!==r?this.cachedWinningBids.get(i):void 0),a=m=>{this.log("DEBUG","IMA AdEvent.STARTED / IMPRESSION received",m);let c=typeof m?.getAd=="function"?m.getAd():m?.ad,T={};c&&(T.creativeId=(typeof c.getCreativeId=="function"?c.getCreativeId():c.creativeId)||"",T.adId=(typeof c.getAdId=="function"?c.getAdId():c.id)||"",T.title=(typeof c.getTitle=="function"?c.getTitle():c.title)||"",T.duration=typeof c.getDuration=="function"?c.getDuration():c.duration,T.advertiserName=typeof c.getAdvertiserName=="function"?c.getAdvertiserName():"");let S=d(),p={...S?.rawBid||t?.bid,mediaType:"video",creativeId:T.creativeId||S?.bidTrace?.creativeId||t?.bid?.creativeId||""};if(this.recordImpression(i,{adUnitCode:r,auctionId:s||S?.auctionId,transactionId:o||S?.transactionId,mediaType:"video",bid:p,metadata:{...t?.metadata,media_type:"video",...T.title?{ad_title:T.title}:{},...Number.isFinite(T.duration)?{ad_duration_s:String(T.duration)}:{}}})&&t?.onImpression)try{t.onImpression(i,{ad:c,bid:p})}catch(v){this.log("ERROR","Error in onImpression callback",v)}},l=m=>{if(this.log("DEBUG",`IMA AdEvent milestone: ${m}`),t?.onMilestone)try{t.onMilestone(m,i)}catch(c){this.log("ERROR","Error in onMilestone callback",c)}},I=m=>{this.log("DEBUG","IMA AdEvent.CLICK received",m);let c=d();this.enqueue(f.CLICK,"click",{auctionId:s||c?.auctionId,transactionId:o||c?.transactionId,adUnitCode:r,bid:c?.bidTrace||t?.bid,metadata:{...t?.metadata,media_type:"video"}})},y=m=>{this.log("WARN","IMA AdErrorEvent received",m);let c=typeof m?.getError=="function"?m.getError():m?.error||m,T=(c&&typeof c.getMessage=="function"?c.getMessage():c?.message)||String(c||"IMA ad error"),S=(c&&typeof c.getErrorCode=="function"?c.getErrorCode():c?.code)||"",p=d();if(this.enqueue(f.AD_RENDER_FAILED,"adRenderFailed",{auctionId:s||p?.auctionId,transactionId:o||p?.transactionId,adUnitCode:r,bid:p?.bidTrace||t?.bid,metadata:{...t?.metadata,reason:"ima_ad_error",message:T,...S?{ima_error_code:String(S)}:{}},error:typeof c=="object"?c:new Error(T)}),t?.onError)try{t.onError(c)}catch(E){this.log("ERROR","Error in onError callback",E)}},h=typeof window<"u"?window.google?.ima:void 0,b=h?.AdEvent?.Type||{},x=h?.AdErrorEvent?.Type||{},w=[{type:b.STARTED||"started",handler:a},{type:b.IMPRESSION||"impression",handler:a},{type:b.FIRST_QUARTILE||"firstQuartile",handler:()=>l("firstQuartile")},{type:b.MIDPOINT||"midpoint",handler:()=>l("midpoint")},{type:b.THIRD_QUARTILE||"thirdQuartile",handler:()=>l("thirdQuartile")},{type:b.COMPLETE||"complete",handler:()=>l("complete")},{type:b.CLICK||"click",handler:I},{type:x.AD_ERROR||"adError",handler:y}];for(let{type:m,handler:c}of w)try{e.addEventListener(m,c)}catch{}let g=()=>{for(let{type:m,handler:c}of w)try{e.removeEventListener(m,c)}catch{}this.videoDetachCleanups.delete(g)};return this.videoDetachCleanups.add(g),g}attachVideoPlayer(e,t){if(!e)return this.log("WARN","attachVideoPlayer called with null/undefined target"),()=>{};let i=null;if(typeof e=="string"){if(typeof document<"u")try{i=document.querySelector(e)||document.getElementById(e)}catch{i=document.getElementById(e)}}else if(typeof HTMLElement<"u"&&e instanceof HTMLElement)i=e;else if(e&&typeof e=="object"&&e.nodeType===1)i=e;else{if(typeof e.addEventListener=="function"&&(typeof e.init=="function"||typeof e.start=="function"||typeof e.getCuePoints=="function"||typeof e.getVolume=="function"||e.__imaAdsManager))return this.attachImaAdsManager(e,t);e&&typeof e.addEventListener=="function"&&(i=e)}let r=t?.slotId||t?.adUnitCode||(i?i.id:"")||"video",s=t?.adUnitCode||r,o=t?.auctionId||"",d=t?.transactionId||"",a=()=>(o?this.cachedWinningBids.get(`${o}:${s}`):void 0)||(o&&r!==s?this.cachedWinningBids.get(`${o}:${r}`):void 0)||this.cachedWinningBids.get(s)||(r!==s?this.cachedWinningBids.get(r):void 0),l=null;i&&(i.tagName&&i.tagName.toLowerCase()==="video"?l=i:l=i.querySelector("video"));let I={q1:!1,q2:!1,q3:!1,q4:!1},y=p=>{let E=p||l||(i?.querySelector?i.querySelector("video"):null),v=a(),M={...v?.rawBid||t?.bid,mediaType:"video"};if(this.recordImpression(r,{adUnitCode:s,auctionId:o||v?.auctionId,transactionId:d||v?.transactionId,mediaType:"video",bid:M,metadata:{...t?.metadata,media_type:"video",...E&&Number.isFinite(E.duration)?{video_duration_s:String(Math.round(E.duration))}:{}}})&&t?.onImpression)try{t.onImpression(r,{element:E||i,bid:M})}catch(G){this.log("ERROR","Error in onImpression callback",G)}},h=p=>{this.log("DEBUG","HTML5 video playing event received");let E=p?.target instanceof HTMLVideoElement?p.target:l;y(E)},b=p=>{let E=p?.target instanceof HTMLVideoElement?p.target:l;if(E&&E.currentTime>0&&(y(E),Number.isFinite(E.duration)&&E.duration>0)){let v=E.currentTime/E.duration;v>=.25&&!I.q1&&(I.q1=!0,t?.onMilestone?.("firstQuartile",r)),v>=.5&&!I.q2&&(I.q2=!0,t?.onMilestone?.("midpoint",r)),v>=.75&&!I.q3&&(I.q3=!0,t?.onMilestone?.("thirdQuartile",r))}},x=()=>{I.q4||(I.q4=!0,t?.onMilestone?.("complete",r))},w=p=>{let v=(p?.target instanceof HTMLVideoElement?p.target:l)?.error||l?.error,M=a(),N=v?`HTML5 video error code ${v.code}: ${v.message}`:"Video playback error";if(this.log("WARN",N),this.enqueue(f.AD_RENDER_FAILED,"adRenderFailed",{auctionId:o||M?.auctionId,transactionId:d||M?.transactionId,adUnitCode:s,bid:M?.bidTrace||t?.bid,metadata:{...t?.metadata,reason:"html5_video_error",message:N,...v?.code?{video_error_code:String(v.code)}:{}},error:v?new Error(N):void 0}),t?.onError)try{t.onError(v)}catch(G){this.log("ERROR","Error in onError callback",G)}},g=p=>{p.addEventListener("playing",h),p.addEventListener("play",h),p.addEventListener("timeupdate",b),p.addEventListener("ended",x),p.addEventListener("error",w)},m=p=>{p.removeEventListener("playing",h),p.removeEventListener("play",h),p.removeEventListener("timeupdate",b),p.removeEventListener("ended",x),p.removeEventListener("error",w)},c=null;i&&i!==l&&(i.addEventListener("playing",h,!0),i.addEventListener("play",h,!0),i.addEventListener("timeupdate",b,!0),i.addEventListener("ended",x,!0),i.addEventListener("error",w,!0)),l&&g(l),i&&i.tagName?.toLowerCase()!=="video"&&typeof MutationObserver<"u"&&(c=new MutationObserver(()=>{let p=i.querySelector("video");p&&p!==l&&(l&&m(l),l=p,l&&g(l))}),c.observe(i,{childList:!0,subtree:!0}));let T=a();t?.trackViewability!==!1&&i&&this.observeSlot(i,r,{adUnitCode:s,auctionId:o||T?.auctionId,transactionId:d||T?.transactionId,mediaType:"video",bid:T?.bidTrace||t?.bid,metadata:t?.metadata,emitRefreshEvent:!1});let S=()=>{c&&(c.disconnect(),c=null),i&&i!==l&&(i.removeEventListener("playing",h,!0),i.removeEventListener("play",h,!0),i.removeEventListener("timeupdate",b,!0),i.removeEventListener("ended",x,!0),i.removeEventListener("error",w,!0)),l&&m(l),this.videoDetachCleanups.delete(S)};return this.videoDetachCleanups.add(S),S}onTimeInViewThreshold(e,t,i){let r={thresholdMs:t,callback:i,timer:null,fired:!1},s=this.slotViewabilityRecords.get(e);if(s){s.thresholdListeners.add(r);let o=this.getCurrentTimeInView(s);if(o>=t){r.fired=!0;try{i(e,o)}catch(d){this.log("ERROR","Error in threshold callback",d)}}else if(s.inView&&(typeof document>"u"||document.visibilityState==="visible")){let d=t-o;r.timer=setTimeout(()=>{if(r.timer=null,!r.fired&&s.inView&&(typeof document>"u"||document.visibilityState==="visible")){let a=this.getCurrentTimeInView(s);if(a>=t){r.fired=!0;try{i(e,a)}catch(l){this.log("ERROR","Error in threshold callback",l)}}}},d)}}else this.pendingThresholdListeners.has(e)||this.pendingThresholdListeners.set(e,new Set),this.pendingThresholdListeners.get(e).add(r);return()=>{r.timer&&(clearTimeout(r.timer),r.timer=null),s&&s.thresholdListeners.delete(r);let o=this.pendingThresholdListeners.get(e);o&&o.delete(r)}}getViewabilityState(e){let t=this.slotViewabilityRecords.get(e);if(!t)return;let i=Math.round(this.getCurrentTimeInView(t));return{inView:t.inView,viewable:t.viewableFired,timeInViewMs:i,refreshIndex:t.refreshIndex}}getRefreshIndex(e){return this.slotRefreshIndices.get(e)??0}triggerSlotRefresh(e,t){let i=this.slotViewabilityRecords.get(e);i&&i.element&&this.observeSlot(i.element,e,t)}trackRawEvent(e,t,i){let r=Xe[t]??(e==="ERROR"?f.ERROR:f.TRACE_EVENT_TYPE_UNSPECIFIED);this.enqueue(r,t,i,e)}setUserId(e){this.config.userId=e}setSessionId(e){this.config.sessionId=e}navigate(e,t){if(this.disable(),this.slotRefreshIndices.clear(),this.pendingThresholdListeners.clear(),this.config.pageviewId=e||U(),t)try{let i=new URL(t);this.pageUrl=i.origin+i.pathname}catch{this.pageUrl=t}else this.pageUrl="";De(),this.enable()}handleAuctionInit(e){this.isDuplicate("auctionInit",e)||(this.log("DEBUG","auctionInit",e),this.enqueue(f.AUCTION_START,"auctionStart",{auctionId:e.auctionId||"",transactionId:e.transactionId||""}))}handleAuctionEnd(e){this.isDuplicate("auctionEnd",e)||(this.log("DEBUG","auctionEnd",e),this.enqueue(f.AUCTION_END,"auctionEnd",{auctionId:e.auctionId||"",transactionId:e.transactionId||""}))}handleBidRequested(e){if(this.isDuplicate("bidRequested",e))return;this.log("DEBUG","bidRequested",e);let t=e.auctionId||"",i=e.bidderCode||e.bidder||"";Array.isArray(e.bids)&&e.bids.forEach(r=>{let s=Object.keys(r.mediaTypes||{}),o=r.ortb2Imp?.ext?.gpid||r.gpid||e.gpid||"",d=r.transactionId||r.ortb2Imp?.id||e.transactionId||"";if(s.length===0){let a=r.mediaType||"banner",{width:l,height:I}=Ce(r.sizes||r.playerSize);this.enqueue(f.BID_REQUEST,"bidRequest",{auctionId:t,transactionId:d,adUnitCode:r.adUnitCode||"",gpid:o,bid:{bidder:i,mediaType:a,width:l,height:I}});return}s.forEach(a=>{let l=null;a==="banner"?l=r.mediaTypes?.banner?.sizes||r.sizes:a==="video"?l=r.mediaTypes?.video?.playerSize||r.mediaTypes?.video?.sizes||r.playerSize:l=r.mediaTypes?.[a]?.sizes;let{width:I,height:y}=Ce(l);this.enqueue(f.BID_REQUEST,"bidRequest",{auctionId:t,transactionId:d,adUnitCode:r.adUnitCode||"",gpid:o,bid:{bidder:i,mediaType:a,width:I,height:y}})})})}handleBidResponse(e){this.isDuplicate("bidResponse",e)||(this.log("DEBUG","bidResponse",e),this.enqueue(f.BID_RESPONSE,"bidResponse",{auctionId:e.auctionId||"",transactionId:e.transactionId||"",adUnitCode:e.adUnitCode||"",bid:{bidder:e.bidderCode||e.bidder||"",cpm:Number.isFinite(e.originalCpm)?e.originalCpm:Number.isFinite(e.cpm)?e.cpm:0,currency:e.originalCurrency??e.currency??"USD",...C(e),dealId:e.dealId||"",mediaType:e.mediaType||"banner",latencyMs:Number.isFinite(e.timeToRespond)?e.timeToRespond:0,advertiserDomain:e.meta?.advertiserDomains?.[0]||"",creativeId:e.creativeId||""}}))}handleBidTimeout(e){if(this.isDuplicate("bidTimeout",e))return;this.log("DEBUG","bidTimeout",e);let t=Array.isArray(e)?e:e?[e]:[];for(let i of t)this.enqueue(f.BID_TIMEOUT,"bidTimeout",{auctionId:i.auctionId||"",transactionId:i.transactionId||"",adUnitCode:i.adUnitCode||"",bid:{bidder:i.bidderCode||i.bidder||"",latencyMs:Number.isFinite(i.timeout)?i.timeout:0}})}handleBidWon(e){if(this.isDuplicate("bidWon",e))return;this.log("DEBUG","bidWon",e);let t=e.auctionId||"",i=e.transactionId||"",r=e.adUnitCode||e.adId||"",s={bidder:e.bidderCode||e.bidder||"",cpm:Number.isFinite(e.originalCpm)?e.originalCpm:Number.isFinite(e.cpm)?e.cpm:0,currency:e.originalCurrency??e.currency??"USD",...C(e),dealId:e.dealId||"",mediaType:e.mediaType||"banner",latencyMs:Number.isFinite(e.timeToRespond)?e.timeToRespond:0,advertiserDomain:e.meta?.advertiserDomains?.[0]||"",creativeId:e.creativeId||""};if(r){let o={bidTrace:s,auctionId:t,transactionId:i,adUnitCode:r,rawBid:e,timestamp:Date.now()};this.cachedWinningBids.set(r,o),e.adId&&e.adId!==r&&this.cachedWinningBids.set(e.adId,o),t&&(this.cachedWinningBids.set(`${t}:${r}`,o),e.adId&&e.adId!==r&&this.cachedWinningBids.set(`${t}:${e.adId}`,o))}this.enqueue(f.BID_WIN,"bidWon",{auctionId:t,transactionId:i,adUnitCode:r,bid:s})}handleNoBid(e){this.isDuplicate("noBid",e)||(this.log("DEBUG","noBid",e),this.enqueue(f.NO_BID,"noBid",{auctionId:e.auctionId||"",transactionId:e.transactionId||"",adUnitCode:e.adUnitCode||"",bid:{bidder:e.bidderCode||e.bidder||""}}))}handleAdRenderFailed(e){if(this.isDuplicate("adRenderFailed",e))return;this.log("DEBUG","adRenderFailed",e);let t=e.bid||{};this.enqueue(f.AD_RENDER_FAILED,"adRenderFailed",{auctionId:t.auctionId||e.auctionId||"",transactionId:t.transactionId||e.transactionId||"",adUnitCode:t.adUnitCode||e.adUnitCode||"",bid:{bidder:t.bidderCode||t.bidder||e.bidderCode||e.bidder||""},metadata:{reason:String(e.reason||""),message:String(e.message||e.error?.message||"")},error:e.error||(e.message?new Error(String(e.message)):void 0)})}handleAdRenderSucceeded(e){if(this.isDuplicate("adRenderSucceeded",e))return;this.log("DEBUG","adRenderSucceeded",e);let t=e.bid||e||{},i=e.adUnitCode||t.adUnitCode||e.adId||t.adId||"",r=t.auctionId||e.auctionId||"",s=t.transactionId||e.transactionId||"",o=t.mediaType||"banner",d=e.adUnitCode||t.adUnitCode||"",a=e.adId||t.adId||"",l=(r&&d?this.cachedWinningBids.get(`${r}:${d}`):void 0)||(r&&a?this.cachedWinningBids.get(`${r}:${a}`):void 0)||(d?this.cachedWinningBids.get(d):void 0)||(a?this.cachedWinningBids.get(a):void 0),I={bidder:t.bidderCode||t.bidder||l?.bidTrace?.bidder||"",cpm:Number.isFinite(t.originalCpm)?t.originalCpm:Number.isFinite(t.cpm)?t.cpm:l?.bidTrace?.cpm??0,currency:t.originalCurrency??t.currency??l?.bidTrace?.currency??"USD",...C(t).width?C(t):l?.bidTrace?{width:l.bidTrace.width,height:l.bidTrace.height}:C(t),dealId:t.dealId||l?.bidTrace?.dealId||"",mediaType:o||l?.bidTrace?.mediaType||"banner",latencyMs:Number.isFinite(t.timeToRespond)?t.timeToRespond:l?.bidTrace?.latencyMs??0,advertiserDomain:t.meta?.advertiserDomains?.[0]||l?.bidTrace?.advertiserDomain||"",creativeId:t.creativeId||l?.bidTrace?.creativeId||""},y=r||l?.auctionId||"",h=s||l?.transactionId||"",b=i?this.slotViewabilityRecords.get(i):void 0,x=b&&y&&b.auctionId&&b.auctionId!==y;if(!!(i&&b&&x)){this.flushSlotTimeInView(i);let c=(this.slotRefreshIndices.get(i)??(b?b.refreshIndex:0))+1;this.slotRefreshIndices.set(i,c),this.slotLastAuctionIds.set(i,y),b&&(b.refreshIndex=c,b.auctionId=y,b.transactionId=h,b.bidPayload=I,b.viewableFired=!1,b.accumulatedTimeInViewMs=0),this.enqueue(f.REFRESH,"refresh",{auctionId:y,transactionId:h,adUnitCode:i,bid:I,metadata:{refresh_index:String(c)}})}else i&&(y&&this.slotLastAuctionIds.set(i,y),this.slotRefreshIndices.has(i)||this.slotRefreshIndices.set(i,0));let g=i?this.slotRefreshIndices.get(i)??(b?b.refreshIndex:0):0;if(i&&this.hasImpressionEmitted(i,g,y,I.creativeId)||(i&&this.markImpressionEmitted(i,g,y,I.creativeId),this.enqueue(f.IMPRESSION,"impression",{auctionId:y,transactionId:h,adUnitCode:i,bid:I,metadata:{refresh_index:String(g)}})),this.config.viewabilityEnabled&&typeof document<"u"){let c=null,T=i||e.adId||t.adId;if(T&&(c=document.getElementById(T)),!c&&typeof window<"u"&&window.googletag?.pubads)try{let S=window.googletag.pubads().getSlots();for(let p of S)if((p.getAdUnitPath?.()===i||p.getSlotElementId?.()===i)&&(c=document.getElementById(p.getSlotElementId()),c))break}catch{}if(!c&&T)try{c=document.querySelector(`[data-ad-slot="${T}"]`)||document.querySelector(`#${T}`)}catch{}c&&this.observeSlot(c,i||T,{adUnitCode:i,auctionId:y,transactionId:h,mediaType:o,bid:I,refreshIndex:g,emitRefreshEvent:!1})}}isDuplicate(e,t){return this.deduper.isDuplicate(e,t)}enqueue(e,t,i,r){if(!this.isEnabled||!this.shouldSample(e,r))return;De();let s={eventId:U(),timestampMs:Date.now(),type:e,eventName:t,auctionId:i.auctionId||"",transactionId:i.transactionId||"",adUnitCode:i.adUnitCode||i.elementId||"",namespace:i.ns||i.namespace||""};i.bid&&(s.bid={bidder:i.bid.bidder||"",cpm:Number.isFinite(i.bid.cpm)?i.bid.cpm:0,currency:i.bid.currency||"",width:Number.isFinite(i.bid.width)?i.bid.width:0,height:Number.isFinite(i.bid.height)?i.bid.height:0,dealId:i.bid.dealId||"",mediaType:i.bid.mediaType||"",latencyMs:Number.isFinite(i.bid.latencyMs)?i.bid.latencyMs:0,advertiserDomain:i.bid.advertiserDomain||"",creativeId:i.bid.creativeId||""}),i.viewableDurationMs!==void 0&&(s.viewableDurationMs=Number.isFinite(i.viewableDurationMs)?i.viewableDurationMs:0);let o={...i.metadata};i.error!==void 0&&i.error!==null&&(o.error=typeof i.error=="object"&&i.error.message?String(i.error.message):String(i.error)),i.gpid&&(o.gpid=String(i.gpid)),i.refreshIndex!==void 0&&o.refresh_index===void 0&&(o.refresh_index=String(i.refreshIndex)),Object.keys(o).length>0&&(s.metadata=o),this.queue.push(s),this.queue.length>q&&this.queue.splice(0,this.queue.length-q),this.queue.length>=We?this.flush():Ze.has(e)&&!this.immediateFlushScheduled&&(this.immediateFlushScheduled=!0,setTimeout(()=>{this.immediateFlushScheduled=!1,this.flush()},0))}shouldSample(e,t){return e===f.ERROR?(this.errorCount++,this.errorCount>Ke?!1:this.config.errorsEnabled):t==="WARN"?this.config.warningsEnabled:this.config.auctionEnabled}requeue(e){e.length&&(this.queue=e.concat(this.queue),this.queue.length>q&&this.queue.splice(0,this.queue.length-q))}drainBatch(){if(this.queue.length===0||!this.config.endpoint)return null;let e=this.queue,t=typeof window<"u"?window.location.hostname:"",i=s=>({propertyId:this.config.propertyId,pageviewId:this.config.pageviewId,sessionId:this.config.sessionId,pageUrl:this.pageUrl,country:this.config.country,region:this.config.region,deviceType:this.config.deviceType,userId:this.config.userId,domain:t,events:s}),r=$.encode(i(e)).finish();for(;e.length>1&&r.byteLength>ze;)e=e.slice(0,Math.floor(e.length/2)),r=$.encode(i(e)).finish();return this.queue=this.queue.slice(e.length),{url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:r,events:e}}sendFetch(e,t=!1,i){let r={method:"POST",headers:{"Content-Type":Ae},body:e.encoded};t&&(r.keepalive=!0),fetch(e.url,r).then(o=>{if(o.ok)this.consecutiveSendFailures=0,this.nextSendAllowedAt=0,i&&i();else{if(this.log("WARN",`Failed to send batch: HTTP ${o.status}`),o.status>=400&&o.status<500&&o.status!==429&&o.status!==408){this.log("WARN",`Dropping batch due to non-retryable client error HTTP ${o.status}`);return}this.handleSendFailure(e.events)}}).catch(o=>{this.log("ERROR","Failed to send batch",o),this.handleSendFailure(e.events)});let s=typeof globalThis<"u"?globalThis.process:void 0;if(s&&typeof s._tickCallback=="function")try{s._tickCallback()}catch{}}handleSendFailure(e){this.consecutiveSendFailures++;let t=Math.min(Re*2**(this.consecutiveSendFailures-1),He);this.nextSendAllowedAt=Date.now()+t,this.consecutiveSendFailures<=Ge?this.requeue(e):this.log("WARN",`Dropping ${e.length} events after ${this.consecutiveSendFailures} consecutive send failures`)}flush(){if(Date.now()<this.nextSendAllowedAt)return;let e=this.drainBatch();for(;e&&(this.sendFetch(e,!1),!(Date.now()<this.nextSendAllowedAt));)e=this.drainBatch()}flushBeacon(){let e=this.drainBatch();for(;e;){let t=!1;if(typeof navigator<"u"&&typeof navigator.sendBeacon=="function")try{let i=new Blob([e.encoded],{type:Ae});t=navigator.sendBeacon(e.url,i)}catch{t=!1}if(!t){let i=this.persistBatch(e.encoded);this.sendFetch(e,!0,()=>this.removePersistedBatch(i))}e=this.drainBatch()}this.schedulePersistedCleanup()}persistBatch(e){try{if(typeof localStorage>"u")return null;let t=0;for(let r=0;r<localStorage.length;r++){let s=localStorage.key(r);s&&s.startsWith(W)&&t++}if(t>=Ye)return null;let i=`${W}${Date.now()}_${Math.floor(Math.random()*1e6)}`;return localStorage.setItem(i,Je(e)),this.persistedBatchKeys.push(i),i}catch{return null}}removePersistedBatch(e){if(!e)return;try{typeof localStorage<"u"&&localStorage.removeItem(e)}catch{}let t=this.persistedBatchKeys.indexOf(e);t!==-1&&this.persistedBatchKeys.splice(t,1)}schedulePersistedCleanup(){this.persistedBatchKeys.length!==0&&(this.persistedCleanupTimer&&clearTimeout(this.persistedCleanupTimer),this.persistedCleanupTimer=setTimeout(()=>{this.persistedCleanupTimer=null;for(let e of Array.from(this.persistedBatchKeys))this.removePersistedBatch(e)},je))}resendPersistedBatches(){try{if(typeof localStorage>"u"||!this.config.endpoint)return;let e=[];for(let t=0;t<localStorage.length;t++){let i=localStorage.key(t);i&&i.startsWith(W)&&e.push(i)}for(let t of e){let i=null;try{i=localStorage.getItem(t),localStorage.removeItem(t)}catch{continue}if(!i)continue;let r=parseInt(t.slice(W.length),10);if(!Number.isFinite(r)||Date.now()-r>Qe)continue;let s;try{s=et(i)}catch{continue}s.byteLength!==0&&(this.log("DEBUG",`Resending persisted exit batch (${s.byteLength} bytes)`),this.sendFetch({url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:s,events:[]}))}}catch{}}log(e,t,...i){let r={DEBUG:10,INFO:20,WARN:30,ERROR:40};if(r[e]<r[this.config.logLevel])return;let s=`[bidkernel][prebid-analytics][${e}]`;switch(e){case"DEBUG":console.debug(s,t,...i);break;case"INFO":console.info(s,t,...i);break;case"WARN":console.warn(s,t,...i);break;case"ERROR":console.error(s,t,...i);break}}}});var st=Ue(()=>{ke();var Me="https://by.bidkernel.io/t",rt=window._bidkernelPbjsGlobal||"pbjs";se(rt,{endpoint:Me});window.bidkernelPrebidAnalytics={...window.bidkernelPrebidAnalytics,register:(n,e)=>se(n,{endpoint:Me,...e}),attachVideoPlayer:(n,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.attachVideoPlayer?t.attachVideoPlayer(n,e):()=>{}},attachImaAdsManager:(n,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.attachImaAdsManager?t.attachImaAdsManager(n,e):()=>{}},recordImpression:(n,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.recordImpression?t.recordImpression(n,e):!1}}});return st();})();
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,45 @@
|
|
|
1
|
+
import { BinaryWriter, BinaryReader } from '@bufbuild/protobuf/wire';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* BidTrace captures per-bid metrics for the reporting warehouse.
|
|
5
|
+
* CPM is the raw gross value as reported by the bidder.
|
|
6
|
+
*/
|
|
7
|
+
interface BidTrace {
|
|
8
|
+
bidder?: string | undefined;
|
|
9
|
+
/** raw bidder CPM, falling back to converted CPM if original is absent */
|
|
10
|
+
cpm?: number | undefined;
|
|
11
|
+
/** raw bidder currency, falling back to converted currency if original is absent (default USD) */
|
|
12
|
+
currency?: string | undefined;
|
|
13
|
+
width?: number | undefined;
|
|
14
|
+
height?: number | undefined;
|
|
15
|
+
dealId?: string | undefined;
|
|
16
|
+
/** "banner" | "video" | "native" */
|
|
17
|
+
mediaType?: string | undefined;
|
|
18
|
+
/** time from bid request to response */
|
|
19
|
+
latencyMs?: number | undefined;
|
|
20
|
+
/** primary adomain from bid.meta.advertiserDomains */
|
|
21
|
+
advertiserDomain?: string | undefined;
|
|
22
|
+
/** from bid.creativeId (Prebid) or bid.crid (oRTB) */
|
|
23
|
+
creativeId?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
declare const BidTrace: MessageFns<BidTrace>;
|
|
26
|
+
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
|
27
|
+
type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
|
|
28
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
29
|
+
} : Partial<T>;
|
|
30
|
+
type KeysOfUnion<T> = T extends T ? keyof T : never;
|
|
31
|
+
type Exact<P, I extends P> = P extends Builtin ? P : P & {
|
|
32
|
+
[K in keyof P]: Exact<P[K], I[K]>;
|
|
33
|
+
} & {
|
|
34
|
+
[K in Exclude<keyof I, KeysOfUnion<P>>]: never;
|
|
35
|
+
};
|
|
36
|
+
interface MessageFns<T> {
|
|
37
|
+
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
|
38
|
+
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
|
39
|
+
create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
|
|
40
|
+
fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
|
|
41
|
+
}
|
|
42
|
+
|
|
1
43
|
interface AnalyticsConfig {
|
|
2
44
|
endpoint: string;
|
|
3
45
|
propertyId: string;
|
|
@@ -28,6 +70,32 @@ interface SlotObserveOptions {
|
|
|
28
70
|
refreshIndex?: number;
|
|
29
71
|
emitRefreshEvent?: boolean;
|
|
30
72
|
}
|
|
73
|
+
interface VideoPlayerOptions {
|
|
74
|
+
/** The ad unit code / slot identifier for analytics reporting */
|
|
75
|
+
adUnitCode?: string;
|
|
76
|
+
slotId?: string;
|
|
77
|
+
auctionId?: string;
|
|
78
|
+
transactionId?: string;
|
|
79
|
+
bid?: any;
|
|
80
|
+
metadata?: Record<string, string>;
|
|
81
|
+
refreshIndex?: number;
|
|
82
|
+
/** Whether to automatically track IAB video viewability (2s continuous >=50% in-view) and Time-in-View. Defaults to true. */
|
|
83
|
+
trackViewability?: boolean;
|
|
84
|
+
/** Custom callback when impression is triggered */
|
|
85
|
+
onImpression?: (slotId: string, details: any) => void;
|
|
86
|
+
/** Custom callback when playback milestone reached (25%, 50%, 75%, 100%) */
|
|
87
|
+
onMilestone?: (milestone: "firstQuartile" | "midpoint" | "thirdQuartile" | "complete", slotId: string) => void;
|
|
88
|
+
/** Custom callback when render / playback error occurs */
|
|
89
|
+
onError?: (error: any) => void;
|
|
90
|
+
}
|
|
91
|
+
interface CachedWinningBid {
|
|
92
|
+
bidTrace: BidTrace;
|
|
93
|
+
auctionId: string;
|
|
94
|
+
transactionId: string;
|
|
95
|
+
adUnitCode: string;
|
|
96
|
+
rawBid?: any;
|
|
97
|
+
timestamp: number;
|
|
98
|
+
}
|
|
31
99
|
interface SlotViewabilityState {
|
|
32
100
|
inView: boolean;
|
|
33
101
|
viewable: boolean;
|
|
@@ -71,7 +139,11 @@ declare class BidkernelPrebidAnalytics {
|
|
|
71
139
|
private slotViewabilityRecords;
|
|
72
140
|
private elementToSlotId;
|
|
73
141
|
private slotRefreshIndices;
|
|
142
|
+
private slotLastAuctionIds;
|
|
74
143
|
private pendingThresholdListeners;
|
|
144
|
+
private slotEmittedImpressionKeys;
|
|
145
|
+
private cachedWinningBids;
|
|
146
|
+
private videoDetachCleanups;
|
|
75
147
|
constructor(config: AnalyticsConfig);
|
|
76
148
|
enable(): void;
|
|
77
149
|
disable(): void;
|
|
@@ -86,6 +158,23 @@ declare class BidkernelPrebidAnalytics {
|
|
|
86
158
|
observeSlot(element: HTMLElement | string, slotId?: string, options?: SlotObserveOptions): void;
|
|
87
159
|
unobserveSlot(slotId: string): void;
|
|
88
160
|
destroySlot(slotId: string): void;
|
|
161
|
+
hasImpressionEmitted(slotId: string, refreshIndex?: number, auctionId?: string, creativeId?: string): boolean;
|
|
162
|
+
private markImpressionEmitted;
|
|
163
|
+
recordImpression(slotId: string, options?: SlotObserveOptions & {
|
|
164
|
+
bid?: any;
|
|
165
|
+
}): boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Bridges Google IMA SDK AdsManager events to Bidkernel analytics.
|
|
168
|
+
* Defers IMPRESSION emission until AdEvent.STARTED (or IMPRESSION),
|
|
169
|
+
* tracks milestones (FIRST_QUARTILE, MIDPOINT, THIRD_QUARTILE, COMPLETE),
|
|
170
|
+
* and handles AD_ERROR.
|
|
171
|
+
*/
|
|
172
|
+
attachImaAdsManager(adsManager: any, options?: VideoPlayerOptions): () => void;
|
|
173
|
+
/**
|
|
174
|
+
* Attaches render hooks and viewability tracking to a video player.
|
|
175
|
+
* Supports HTML5 <video> elements, container elements, or Google IMA AdsManager.
|
|
176
|
+
*/
|
|
177
|
+
attachVideoPlayer(target: any, options?: VideoPlayerOptions): () => void;
|
|
89
178
|
onTimeInViewThreshold(slotId: string, thresholdMs: number, callback: (slotId: string, durationMs: number) => void): () => void;
|
|
90
179
|
getViewabilityState(slotId: string): SlotViewabilityState | undefined;
|
|
91
180
|
getRefreshIndex(slotId: string): number;
|
|
@@ -170,6 +259,12 @@ interface AdsGlobal {
|
|
|
170
259
|
refreshAll?: () => void;
|
|
171
260
|
/** Notify the SDK that an SPA route transition happened so analytics and tracking reset. */
|
|
172
261
|
navigate?: (url?: string) => void;
|
|
262
|
+
/** Attach video player hooks (HTML5 <video> or Google IMA AdsManager) for render-triggered telemetry. */
|
|
263
|
+
attachVideoPlayer?: (target: any, options?: any) => () => void;
|
|
264
|
+
/** Attach Google IMA SDK AdsManager event bridge for video render-triggered telemetry. */
|
|
265
|
+
attachImaAdsManager?: (adsManager: any, options?: any) => () => void;
|
|
266
|
+
/** Manually record ad render / impression when using custom rendering pipelines. */
|
|
267
|
+
recordImpression?: (slotId: string, options?: any) => boolean;
|
|
173
268
|
}
|
|
174
269
|
/**
|
|
175
270
|
* Returns the global bidkernel SDK object interface.
|
|
@@ -180,4 +275,4 @@ interface AdsGlobal {
|
|
|
180
275
|
*/
|
|
181
276
|
declare function getbidkernel(alias?: string): AdsGlobal;
|
|
182
277
|
|
|
183
|
-
export { type AdsGlobal, type AnalyticsConfig, BidkernelPrebidAnalytics, PrebidEventDeduper, type SizeMapping, type SlotConfig, type SlotObserveOptions, type SlotSize, type SlotSizes, type SlotViewabilityState, getPrebidEventKey, getbidkernel, registerPrebidAnalytics };
|
|
278
|
+
export { type AdsGlobal, type AnalyticsConfig, BidkernelPrebidAnalytics, type CachedWinningBid, PrebidEventDeduper, type SizeMapping, type SlotConfig, type SlotObserveOptions, type SlotSize, type SlotSizes, type SlotViewabilityState, type VideoPlayerOptions, getPrebidEventKey, getbidkernel, registerPrebidAnalytics };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,45 @@
|
|
|
1
|
+
import { BinaryWriter, BinaryReader } from '@bufbuild/protobuf/wire';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* BidTrace captures per-bid metrics for the reporting warehouse.
|
|
5
|
+
* CPM is the raw gross value as reported by the bidder.
|
|
6
|
+
*/
|
|
7
|
+
interface BidTrace {
|
|
8
|
+
bidder?: string | undefined;
|
|
9
|
+
/** raw bidder CPM, falling back to converted CPM if original is absent */
|
|
10
|
+
cpm?: number | undefined;
|
|
11
|
+
/** raw bidder currency, falling back to converted currency if original is absent (default USD) */
|
|
12
|
+
currency?: string | undefined;
|
|
13
|
+
width?: number | undefined;
|
|
14
|
+
height?: number | undefined;
|
|
15
|
+
dealId?: string | undefined;
|
|
16
|
+
/** "banner" | "video" | "native" */
|
|
17
|
+
mediaType?: string | undefined;
|
|
18
|
+
/** time from bid request to response */
|
|
19
|
+
latencyMs?: number | undefined;
|
|
20
|
+
/** primary adomain from bid.meta.advertiserDomains */
|
|
21
|
+
advertiserDomain?: string | undefined;
|
|
22
|
+
/** from bid.creativeId (Prebid) or bid.crid (oRTB) */
|
|
23
|
+
creativeId?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
declare const BidTrace: MessageFns<BidTrace>;
|
|
26
|
+
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
|
27
|
+
type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
|
|
28
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
29
|
+
} : Partial<T>;
|
|
30
|
+
type KeysOfUnion<T> = T extends T ? keyof T : never;
|
|
31
|
+
type Exact<P, I extends P> = P extends Builtin ? P : P & {
|
|
32
|
+
[K in keyof P]: Exact<P[K], I[K]>;
|
|
33
|
+
} & {
|
|
34
|
+
[K in Exclude<keyof I, KeysOfUnion<P>>]: never;
|
|
35
|
+
};
|
|
36
|
+
interface MessageFns<T> {
|
|
37
|
+
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
|
38
|
+
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
|
39
|
+
create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
|
|
40
|
+
fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
|
|
41
|
+
}
|
|
42
|
+
|
|
1
43
|
interface AnalyticsConfig {
|
|
2
44
|
endpoint: string;
|
|
3
45
|
propertyId: string;
|
|
@@ -28,6 +70,32 @@ interface SlotObserveOptions {
|
|
|
28
70
|
refreshIndex?: number;
|
|
29
71
|
emitRefreshEvent?: boolean;
|
|
30
72
|
}
|
|
73
|
+
interface VideoPlayerOptions {
|
|
74
|
+
/** The ad unit code / slot identifier for analytics reporting */
|
|
75
|
+
adUnitCode?: string;
|
|
76
|
+
slotId?: string;
|
|
77
|
+
auctionId?: string;
|
|
78
|
+
transactionId?: string;
|
|
79
|
+
bid?: any;
|
|
80
|
+
metadata?: Record<string, string>;
|
|
81
|
+
refreshIndex?: number;
|
|
82
|
+
/** Whether to automatically track IAB video viewability (2s continuous >=50% in-view) and Time-in-View. Defaults to true. */
|
|
83
|
+
trackViewability?: boolean;
|
|
84
|
+
/** Custom callback when impression is triggered */
|
|
85
|
+
onImpression?: (slotId: string, details: any) => void;
|
|
86
|
+
/** Custom callback when playback milestone reached (25%, 50%, 75%, 100%) */
|
|
87
|
+
onMilestone?: (milestone: "firstQuartile" | "midpoint" | "thirdQuartile" | "complete", slotId: string) => void;
|
|
88
|
+
/** Custom callback when render / playback error occurs */
|
|
89
|
+
onError?: (error: any) => void;
|
|
90
|
+
}
|
|
91
|
+
interface CachedWinningBid {
|
|
92
|
+
bidTrace: BidTrace;
|
|
93
|
+
auctionId: string;
|
|
94
|
+
transactionId: string;
|
|
95
|
+
adUnitCode: string;
|
|
96
|
+
rawBid?: any;
|
|
97
|
+
timestamp: number;
|
|
98
|
+
}
|
|
31
99
|
interface SlotViewabilityState {
|
|
32
100
|
inView: boolean;
|
|
33
101
|
viewable: boolean;
|
|
@@ -71,7 +139,11 @@ declare class BidkernelPrebidAnalytics {
|
|
|
71
139
|
private slotViewabilityRecords;
|
|
72
140
|
private elementToSlotId;
|
|
73
141
|
private slotRefreshIndices;
|
|
142
|
+
private slotLastAuctionIds;
|
|
74
143
|
private pendingThresholdListeners;
|
|
144
|
+
private slotEmittedImpressionKeys;
|
|
145
|
+
private cachedWinningBids;
|
|
146
|
+
private videoDetachCleanups;
|
|
75
147
|
constructor(config: AnalyticsConfig);
|
|
76
148
|
enable(): void;
|
|
77
149
|
disable(): void;
|
|
@@ -86,6 +158,23 @@ declare class BidkernelPrebidAnalytics {
|
|
|
86
158
|
observeSlot(element: HTMLElement | string, slotId?: string, options?: SlotObserveOptions): void;
|
|
87
159
|
unobserveSlot(slotId: string): void;
|
|
88
160
|
destroySlot(slotId: string): void;
|
|
161
|
+
hasImpressionEmitted(slotId: string, refreshIndex?: number, auctionId?: string, creativeId?: string): boolean;
|
|
162
|
+
private markImpressionEmitted;
|
|
163
|
+
recordImpression(slotId: string, options?: SlotObserveOptions & {
|
|
164
|
+
bid?: any;
|
|
165
|
+
}): boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Bridges Google IMA SDK AdsManager events to Bidkernel analytics.
|
|
168
|
+
* Defers IMPRESSION emission until AdEvent.STARTED (or IMPRESSION),
|
|
169
|
+
* tracks milestones (FIRST_QUARTILE, MIDPOINT, THIRD_QUARTILE, COMPLETE),
|
|
170
|
+
* and handles AD_ERROR.
|
|
171
|
+
*/
|
|
172
|
+
attachImaAdsManager(adsManager: any, options?: VideoPlayerOptions): () => void;
|
|
173
|
+
/**
|
|
174
|
+
* Attaches render hooks and viewability tracking to a video player.
|
|
175
|
+
* Supports HTML5 <video> elements, container elements, or Google IMA AdsManager.
|
|
176
|
+
*/
|
|
177
|
+
attachVideoPlayer(target: any, options?: VideoPlayerOptions): () => void;
|
|
89
178
|
onTimeInViewThreshold(slotId: string, thresholdMs: number, callback: (slotId: string, durationMs: number) => void): () => void;
|
|
90
179
|
getViewabilityState(slotId: string): SlotViewabilityState | undefined;
|
|
91
180
|
getRefreshIndex(slotId: string): number;
|
|
@@ -170,6 +259,12 @@ interface AdsGlobal {
|
|
|
170
259
|
refreshAll?: () => void;
|
|
171
260
|
/** Notify the SDK that an SPA route transition happened so analytics and tracking reset. */
|
|
172
261
|
navigate?: (url?: string) => void;
|
|
262
|
+
/** Attach video player hooks (HTML5 <video> or Google IMA AdsManager) for render-triggered telemetry. */
|
|
263
|
+
attachVideoPlayer?: (target: any, options?: any) => () => void;
|
|
264
|
+
/** Attach Google IMA SDK AdsManager event bridge for video render-triggered telemetry. */
|
|
265
|
+
attachImaAdsManager?: (adsManager: any, options?: any) => () => void;
|
|
266
|
+
/** Manually record ad render / impression when using custom rendering pipelines. */
|
|
267
|
+
recordImpression?: (slotId: string, options?: any) => boolean;
|
|
173
268
|
}
|
|
174
269
|
/**
|
|
175
270
|
* Returns the global bidkernel SDK object interface.
|
|
@@ -180,4 +275,4 @@ interface AdsGlobal {
|
|
|
180
275
|
*/
|
|
181
276
|
declare function getbidkernel(alias?: string): AdsGlobal;
|
|
182
277
|
|
|
183
|
-
export { type AdsGlobal, type AnalyticsConfig, BidkernelPrebidAnalytics, PrebidEventDeduper, type SizeMapping, type SlotConfig, type SlotObserveOptions, type SlotSize, type SlotSizes, type SlotViewabilityState, getPrebidEventKey, getbidkernel, registerPrebidAnalytics };
|
|
278
|
+
export { type AdsGlobal, type AnalyticsConfig, BidkernelPrebidAnalytics, type CachedWinningBid, PrebidEventDeduper, type SizeMapping, type SlotConfig, type SlotObserveOptions, type SlotSize, type SlotSizes, type SlotViewabilityState, type VideoPlayerOptions, getPrebidEventKey, getbidkernel, registerPrebidAnalytics };
|