@bidkernel/analytics 0.10.0 → 0.11.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.
@@ -1 +1 @@
1
- "use strict";var bidkernelPrebidAnalyticsBundle=(()=>{var S=(i,e)=>()=>(i&&(e=i(i=0)),e);var je=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports);function ye(){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 q(i,e,t){for(let s=0;s<28;s=s+7){let o=i>>>s,d=!(!(o>>>7)&&e==0),a=(d?o|128:o)&255;if(t.push(a),!d)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,d=!!(o>>>7),a=(d?o|128:o)&255;if(t.push(a),!d)return}t.push(e>>>31&1)}}function Z(i){let e=i[0]==="-";e&&(i=i.slice(1));let t=1e6,n=0,r=0;function s(o,d){let a=Number(i.slice(o,d));r*=t,n=n*t+a,n>=W&&(r=r+(n/W|0),n=n%W)}return s(-24,-18),s(-18,-12),s(-12,-6),s(-6),e?be(n,r):ee(n,r)}function me(i,e){let t=ee(i,e),n=t.hi&2147483648;n&&(t=be(t.lo,t.hi));let r=J(t.lo,t.hi);return n?"-"+r:r}function J(i,e){if({lo:i,hi:e}=ze(i,e),e<=2097151)return String(W*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,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()+pe(o)+pe(s)}function ze(i,e){return{lo:i>>>0,hi:e>>>0}}function ee(i,e){return{lo:i|0,hi:e|0}}function be(i,e){return e=~e,i?i=~i+1:e+=1,ee(i,e)}function te(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 Ie(){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 W,pe,ie=S(()=>{"use strict";W=4294967296;pe=i=>{let e=String(i);return"0000000".slice(e.length)+e}});function Xe(){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 d=typeof o=="bigint"?o:BigInt(o);if(d>n||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 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,d){return i.setInt32(0,o,!0),i.setInt32(4,d,!0),i.getBigInt64(0,!0)},uDec(o,d){return i.setInt32(0,o,!0),i.setInt32(4,d,!0),i.getBigUint64(0,!0)}}}return{zero:"0",supported:!1,parse(t){return typeof t!="string"&&(t=t.toString()),ge(t),t},uParse(t){return typeof t!="string"&&(t=t.toString()),Te(t),t},enc(t){return typeof t!="string"&&(t=t.toString()),ge(t),Z(t)},uEnc(t){return typeof t!="string"&&(t=t.toString()),Te(t),Z(t)},dec(t,n){return me(t,n)},uDec(t,n){return J(t,n)}}}function ge(i){if(!/^-?[0-9]+$/.test(i))throw new Error("invalid int64: "+i)}function Te(i){if(!/^[0-9]+$/.test(i))throw new Error("invalid uint64: "+i)}var C,Ee=S(()=>{"use strict";ie();C=Xe()});function re(){if(globalThis[ne]==null){let i=new globalThis.TextEncoder,e=new globalThis.TextDecoder;globalThis[ne]={encodeUtf8(t){return i.encode(t)},decodeUtf8(t){return e.decode(t)},checkUtf8(t){try{return encodeURIComponent(t),!0}catch{return!1}}}}return globalThis[ne]}var ne,se=S(()=>{"use strict";ne=Symbol.for("@bufbuild/protobuf/text-encoding")});function oe(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>Je||i<et)throw new Error("invalid int32: "+i)}function ve(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>Ze||i<0)throw new Error("invalid uint32: "+i)}function tt(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>Ye||i<Qe))throw new Error("invalid float32: "+i)}var x,Ye,Qe,Ze,Je,et,M,R,we=S(()=>{"use strict";ie();Ee();se();(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"})(x||(x={}));Ye=34028234663852886e22,Qe=-34028234663852886e22,Ze=4294967295,Je=2147483647,et=-2147483648,M=class{constructor(e=re().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(ve(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return oe(e),te(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){tt(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){ve(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){oe(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return oe(e),e=(e<<1^e>>31)>>>0,te(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),r=C.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=C.uEnc(e);return n.setInt32(0,r.lo,!0),n.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=C.enc(e);return q(t.lo,t.hi,this.buf),this}sint64(e){let t=C.enc(e),n=t.hi>>31,r=t.lo<<1^n,s=(t.hi<<1|t.lo>>>31)^n;return q(r,s,this.buf),this}uint64(e){let t=C.uEnc(e);return q(t.lo,t.hi,this.buf),this}},R=class{constructor(e,t=re().decodeUtf8){this.decodeUtf8=t,this.varint64=ye,this.uint32=Ie,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 x.Varint:for(;this.buf[this.pos++]&128;);break;case x.Bit64:this.pos+=4;case x.Bit32:this.pos+=4;break;case x.LengthDelimited:let r=this.uint32();this.pos+=r;break;case x.StartGroup:for(;;){let[s,o]=this.tag();if(o===x.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 C.dec(...this.varint64())}uint64(){return C.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),n=-(e&1);return e=(e>>>1|(t&1)<<31)^n,t=t>>>1^n,C.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 C.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return C.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 Ae=S(()=>{"use strict"});var Be=S(()=>{"use strict"});var Re=S(()=>{"use strict"});var Ce=S(()=>{"use strict";we();Ae();se();Be();Re()});function Se(){return{propertyId:"",pageviewId:"",sessionId:"",pageUrl:"",country:"",region:"",deviceType:"",userId:"",domain:"",events:[],browser:"",deviceManufacturer:"",deviceModel:"",city:"",postalCode:""}}function De(){return{timestampMs:0,type:0,eventName:"",auctionId:"",transactionId:"",adUnitCode:"",bid:void 0,namespace:"",eventId:"",metadata:{},viewableDurationMs:void 0,bidderOutcomes:[]}}function _e(){return{key:"",value:""}}function xe(){return{bidder:"",adUnitCode:"",mediaType:"",outcome:0,latencyMs:0}}function Me(){return{bidder:"",cpm:0,currency:"",width:0,height:0,dealId:"",mediaType:"",latencyMs:0,advertiserDomain:"",creativeId:""}}var m,D,j,K,de,H,G,Oe=S(()=>{"use strict";Ce();m={TRACE_EVENT_TYPE_UNSPECIFIED:0,AUCTION_START:1,AUCTION_END:2,BID_RESPONSE:3,BID_WIN:4,IMPRESSION:5,VIEWABLE:6,TIME_IN_VIEW:7,REFRESH:8,ERROR:9,SLOT_DEFINED:10,SLOT_DESTROYED:11,CLICK:12,AD_RENDER_FAILED:13,UNRECOGNIZED:-1},D={BIDDER_OUTCOME_UNSPECIFIED:0,BIDDER_OUTCOME_BID:1,BIDDER_OUTCOME_NO_BID:2,BIDDER_OUTCOME_TIMEOUT:3,BIDDER_OUTCOME_ERROR:4,BIDDER_OUTCOME_NO_RESPONSE:5,UNRECOGNIZED:-1};j={encode(i,e=new M){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)K.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 R?i:new R(i),n=e===void 0?t.len:t.pos+e,r=Se();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=K.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 j.fromPartial(i??{})},fromPartial(i){let e=Se();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=>K.fromPartial(t))||[],e.browser=i.browser??"",e.deviceManufacturer=i.deviceManufacturer??"",e.deviceModel=i.deviceModel??"",e.city=i.city??"",e.postalCode=i.postalCode??"",e}};K={encode(i,e=new M){if(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&&G.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])=>{de.encode({key:t,value:n},e.uint32(82).fork()).join()}),i.viewableDurationMs!==void 0&&e.uint32(89).double(i.viewableDurationMs),i.bidderOutcomes!==void 0&&i.bidderOutcomes.length!==0)for(let t of i.bidderOutcomes)H.encode(t,e.uint32(98).fork()).join();return e},decode(i,e){let t=i instanceof R?i:new R(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!==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=G.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=de.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}case 12:{if(s!==98)break;let o=H.decode(t,t.uint32());o!==void 0&&r.bidderOutcomes.push(o);continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(i){return K.fromPartial(i??{})},fromPartial(i){let e=De();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?G.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.bidderOutcomes=i.bidderOutcomes?.map(t=>H.fromPartial(t))||[],e}};de={encode(i,e=new M){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 R?i:new R(i),n=e===void 0?t.len:t.pos+e,r=_e();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 de.fromPartial(i??{})},fromPartial(i){let e=_e();return e.key=i.key??"",e.value=i.value??"",e}};H={encode(i,e=new M){return i.bidder!==void 0&&i.bidder!==""&&e.uint32(10).string(i.bidder),i.adUnitCode!==void 0&&i.adUnitCode!==""&&e.uint32(18).string(i.adUnitCode),i.mediaType!==void 0&&i.mediaType!==""&&e.uint32(26).string(i.mediaType),i.outcome!==void 0&&i.outcome!==0&&e.uint32(32).int32(i.outcome),i.latencyMs!==void 0&&i.latencyMs!==0&&e.uint32(41).double(i.latencyMs),e},decode(i,e){let t=i instanceof R?i:new R(i),n=e===void 0?t.len:t.pos+e,r=xe();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!==18)break;r.adUnitCode=t.string();continue}case 3:{if(s!==26)break;r.mediaType=t.string();continue}case 4:{if(s!==32)break;r.outcome=t.int32();continue}case 5:{if(s!==41)break;r.latencyMs=t.double();continue}}if((s&7)===4||s===0)break;t.skip(s&7)}return r},create(i){return H.fromPartial(i??{})},fromPartial(i){let e=xe();return e.bidder=i.bidder??"",e.adUnitCode=i.adUnitCode??"",e.mediaType=i.mediaType??"",e.outcome=i.outcome??0,e.latencyMs=i.latencyMs??0,e}};G={encode(i,e=new M){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 R?i:new R(i),n=e===void 0?t.len:t.pos+e,r=Me();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 G.fromPartial(i??{})},fromPartial(i){let e=Me();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 L(){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 mt(i){let e="";for(let n=0;n<i.length;n+=8192)e+=String.fromCharCode(...i.subarray(n,n+8192));return btoa(e)}function bt(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 It(i){if(!i)return!1;let e;try{e=new URL(i)}catch{return!1}return e.username||e.password?!1:e.protocol==="https:"?!0:e.protocol==="http:"?e.hostname==="localhost"||e.hostname==="127.0.0.1"||e.hostname==="[::1]":!1}function gt(i){let e={},t=0;for(let n of Object.keys(i)){if(t>=dt)break;let r=i[n];if(r==null)continue;let s=String(r);e[n]=s.length>Ue?`${s.slice(0,Ue)}...[truncated]`:s,t++}return e}function Tt(i){let e=i.slice(Y.length).split("_");return e.length===2&&/^\d+$/.test(e[0])}function Et(i,e){if(!i||!e)return!1;try{return new URL(i).origin===new URL(e).origin}catch{return!1}}function Ve(){let i=Date.now();F=i;try{typeof localStorage<"u"&&localStorage.setItem(Q,i.toString())}catch{}}function vt(){let i=Date.now();try{if(typeof localStorage<"u"){let e=localStorage.getItem(Ne),t=localStorage.getItem(Q),n=t&&parseInt(t,10)||0;if(e&&n&&i-n<=Le)return localStorage.setItem(Q,i.toString()),e;let r=L();return localStorage.setItem(Ne,r),localStorage.setItem(Q,i.toString()),r}}catch{}return X&&F&&i-F<=Le?(F=i,X):(X=L(),F=i,X)}function l(i){return String(i??"").replace(/%/g,"%25").replace(/:/g,"%3A")}function wt(i,e){switch(i){case"auctionInit":return`auctionInit:${l(e?.auctionId)}`;case"auctionEnd":return`auctionEnd:${l(e?.auctionId)}`;case"bidRequested":{let t=Array.isArray(e?.bids)?e.bids.map(n=>l(n?.bidId||n?.transactionId||n?.adUnitCode)).join(","):"";return`bidRequested:${l(e?.auctionId)}:${l(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:${l(t.auctionId)}:${l(t.adUnitCode)}:${l(t.bidderCode||t.bidder)}:${l(n)}:${l(r)}`}case"bidTimeout":return"bidTimeout:"+(Array.isArray(e)?e:e?[e]:[]).map(n=>`${l(n?.auctionId)}:${l(n?.bidderCode||n?.bidder)}:${l(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:${l(t.auctionId)}:${l(t.adUnitCode)}:${l(t.bidderCode||t.bidder)}:${l(n)}:${l(r)}`}case"noBid":return`noBid:${l(e?.auctionId)}:${l(e?.adUnitCode)}:${l(e?.bidderCode||e?.bidder)}:${l(e?.bidId||e?.transactionId)}`;case"adRenderFailed":{let t=e?.bid||{};return`adRenderFailed:${l(t.auctionId||e?.auctionId)}:${l(t.adUnitCode||e?.adUnitCode)}:${l(t.bidderCode||t.bidder||e?.bidderCode||e?.bidder)}:${l(e?.reason)}:${l(e?.message)}`}case"adRenderSucceeded":{let t=e?.bid||e||{},n=t.creativeId||t.adId||e?.adId||"",r=t.originalCpm??t.cpm??"";return`adRenderSucceeded:${l(t.auctionId||e?.auctionId)}:${l(t.adUnitCode||e?.adUnitCode)}:${l(t.bidderCode||t.bidder)}:${l(n)}:${l(r)}`}case"setTargeting":return`setTargeting:${Object.keys(e||{}).sort().map(l).join(",")}`;case"auctionDebug":return`auctionDebug:${l(e?.type)}:${l(String(e?.arguments?.[0]??"").slice(0,50))}`;default:return""}}function O(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 Fe(i){if(i)try{let e=i.prototype;if(e&&typeof e.getAdsManager=="function"&&!e.getAdsManager.__bidkernelHooked){let t=e.getAdsManager,n=function(...r){let s=t.apply(this,r);if(s)for(let o of N.getActiveInstances())try{o.attachImaAdsManager(s)}catch{}return s};n.__bidkernelHooked=!0,e.getAdsManager=n}}catch{}}function $e(i){if(i)try{let e=i.prototype||i;if(e&&typeof e.init=="function"&&!e.init.__bidkernelHooked){let t=e.init,n=function(...r){for(let s of N.getActiveInstances())try{s.attachImaAdsManager(this)}catch{}return t.apply(this,r)};n.__bidkernelHooked=!0,e.init=n}if(e&&typeof e.start=="function"&&!e.start.__bidkernelHooked){let t=e.start,n=function(...r){for(let s of N.getActiveInstances())try{s.attachImaAdsManager(this)}catch{}return t.apply(this,r)};n.__bidkernelHooked=!0,e.start=n}}catch{}}function We(i){if(i)try{let e=i.prototype;if(!e)return;if(typeof e.addEventListener=="function"&&!e.addEventListener.__bidkernelHooked){let t=e.addEventListener,n=function(r,s,...o){if((r==="adsManagerLoaded"||r===(this?.AdsManagerLoadedEvent?.Type?.ADS_MANAGER_LOADED||"adsManagerLoaded"))&&typeof s=="function"){let d=ce.get(s);return d||(d=function(a){if(a&&typeof a.getAdsManager=="function"&&!a.getAdsManager.__bidkernelHooked){let u=a.getAdsManager;a.getAdsManager=function(...h){let b=u.apply(this,h);if(b)for(let f of N.getActiveInstances())try{f.attachImaAdsManager(b)}catch{}return b},a.getAdsManager.__bidkernelHooked=!0}return s.apply(this,arguments)},ce.set(s,d)),t.call(this,r,d,...o)}return t.call(this,r,s,...o)};n.__bidkernelHooked=!0,e.addEventListener=n}if(typeof e.removeEventListener=="function"&&!e.removeEventListener.__bidkernelHooked){let t=e.removeEventListener,n=function(r,s,...o){let d=typeof s=="function"?ce.get(s):void 0;return t.call(this,r,d||s,...o)};n.__bidkernelHooked=!0,e.removeEventListener=n}}catch{}}function $(i){if(!(!i||typeof i!="object"))try{i.AdsManagerLoadedEvent&&Fe(i.AdsManagerLoadedEvent);let e=Object.getOwnPropertyDescriptor(i,"AdsManagerLoadedEvent");if(!e||e.configurable){let r=i.AdsManagerLoadedEvent;try{Object.defineProperty(i,"AdsManagerLoadedEvent",{configurable:!0,enumerable:!0,get(){return r},set(s){r=s,Fe(s)}})}catch{}}i.AdsLoader&&We(i.AdsLoader);let t=Object.getOwnPropertyDescriptor(i,"AdsLoader");if(!t||t.configurable){let r=i.AdsLoader;try{Object.defineProperty(i,"AdsLoader",{configurable:!0,enumerable:!0,get(){return r},set(s){r=s,We(s)}})}catch{}}i.AdsManager&&$e(i.AdsManager);let n=Object.getOwnPropertyDescriptor(i,"AdsManager");if(!n||n.configurable){let r=i.AdsManager;try{Object.defineProperty(i,"AdsManager",{configurable:!0,enumerable:!0,get(){return r},set(s){r=s,$e(s)}})}catch{}}}catch{}}function le(){if(typeof window>"u")return;let i=window;if(i.google?.ima&&$(i.google.ima),i.google&&typeof i.google=="object"){let t=Object.getOwnPropertyDescriptor(i.google,"ima");if(!t||t.configurable){let n=i.google.ima;try{Object.defineProperty(i.google,"ima",{configurable:!0,enumerable:!0,get(){return n},set(r){n=r,$(r)}})}catch{}}}let e=Object.getOwnPropertyDescriptor(i,"google");if(!e||e.configurable){let t=i.google;try{Object.defineProperty(i,"google",{configurable:!0,enumerable:!0,get(){return t},set(n){if(t=n,t&&typeof t=="object"){t.ima&&$(t.ima);let r=Object.getOwnPropertyDescriptor(t,"ima");if(!r||r.configurable){let s=t.ima;try{Object.defineProperty(t,"ima",{configurable:!0,enumerable:!0,get(){return s},set(o){s=o,$(o)}})}catch{}}}}})}catch{}}}function V(i,e=!0){if(!i)return null;if(Array.isArray(i)){let t=i.find(n=>n?.provider==="bidkernel")??(e?i.find(n=>n&&typeof n=="object"&&n.provider===void 0):void 0);return t?V(t,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 At(i){if(!i)return null;if(i._bidkernelAnalyticsConfig){let e=V(i._bidkernelAnalyticsConfig);if(e)return e}if(i.bidkernelPrebidAnalytics){let e=i.bidkernelPrebidAnalytics;if(e.options){let t=V(e.options);if(t)return t}if(e.config){let t=V(e.config);if(t)return t}if(e.propertyId)return V(e)}return null}function fe(i="pbjs",e){let t=typeof window<"u"?window:{};t[i]=t[i]||{};let n=t[i],r=o=>{let d=t._bidkernelPrebidAnalytics,a=d?.getEndpoint?.()||"",u={pbjsGlobalName:i,...e,...o};if(a&&!Et(u.endpoint||"",a)&&(console.warn(`[bidkernel] Ignoring analytics endpoint change to ${u.endpoint||"(empty)"}: this page is pinned to ${a}. Reload to change the ingest endpoint.`),u.endpoint=a),d)try{d.disable()}catch(b){console.warn("[bidkernel] Failed to disable previous analytics instance:",b)}let h=new N(u);return h.enable(),t._bidkernelPrebidAnalytics=h,h},s=()=>{try{n.adapterManager&&typeof n.adapterManager.registerAnalyticsAdapter=="function"&&n.adapterManager.registerAnalyticsAdapter({adapter:{enableAnalytics:d=>{let a=V(d,!Array.isArray(d));a&&r(a)},disableAnalytics:()=>{t._bidkernelPrebidAnalytics&&t._bidkernelPrebidAnalytics.disable()}},code:"bidkernel"});let o=At(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 nt,ke,rt,z,st,ot,ae,Ue,dt,Pe,Y,at,ct,ut,lt,ft,P,ht,pt,yt,Ne,Q,Le,X,F,ue,ce,N,qe=S(()=>{"use strict";Oe();nt=20,ke=1e4,rt=50,z=200,st=300*1e3,ot=10,ae=32*1024,Ue=1024,dt=16,Pe="text/plain",Y="_bidkernel_pending_",at=20,ct=7200*1e3,ut=1e4,lt={auctionStart:m.AUCTION_START,auctionEnd:m.AUCTION_END,bidResponse:m.BID_RESPONSE,bidWin:m.BID_WIN,adRenderFailed:m.AD_RENDER_FAILED,click:m.CLICK,impression:m.IMPRESSION,refresh:m.REFRESH,timeInView:m.TIME_IN_VIEW,viewable:m.VIEWABLE},ft=new Set([m.IMPRESSION,m.BID_WIN,m.CLICK]),P=1800*1e3,ht=200,pt=1e3,yt=50,Ne="_bidkernel_session",Q="_bidkernel_session_ts",Le=1800*1e3,X=null,F=0;ue=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=wt(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}};ce=new WeakMap;typeof window<"u"&&le();N=class i{static activeInstances=new Set;static getActiveInstances(){return i.activeInstances}static initImaInterception(){le()}config;queue=[];errorCount=0;flushTimer=null;boundFlushBeacon;boundVisibilityChange;isEnabled=!1;boundPbjsHandlers=[];pageUrl="";deduper=new ue;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;auctionBidderOutcomes=new Map;constructor(e){let t=e.endpoint||"",n=!t||It(t)?t:"";this.config={endpoint:n,propertyId:e.propertyId||"",pageviewId:e.pageviewId||L(),sessionId:e.sessionId||vt(),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},t&&!n&&this.log("ERROR",`Rejected untrusted analytics endpoint ${t}: must be an absolute https:// URL without embedded credentials. Events will not be transmitted.`),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 d=o.eventType||o.event||o.name,a=o.args!==void 0?o.args:o.data!==void 0?o.data:o,u=s[d];u&&u(a)}}}}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(),ke),this.resendPersistedBatches(),le(),window.google?.ima&&$(window.google.ima)}}}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)}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.auctionBidderOutcomes.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(m.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 a of i.activeInstances)if(a!==this&&a.elementToSlotId.has(t.target)){a.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",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(m.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(m.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:"")||L(),o=this.slotViewabilityRecords.get(s);if(o){if(n?.refreshIndex===void 0||n.refreshIndex>o.refreshIndex){this.flushSlotTimeInView(s);let a=n?.refreshIndex!==void 0?n.refreshIndex:(this.slotRefreshIndices.get(s)??o.refreshIndex)+1;this.slotRefreshIndices.set(s,a),n?.emitRefreshEvent!==!1&&this.enqueue(m.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(a)}}),o.dwellTimer&&(clearTimeout(o.dwellTimer),o.dwellTimer=null,o.dwellStartedAt=null);for(let h of o.thresholdListeners)h.fired=!1,h.timer&&(clearTimeout(h.timer),h.timer=null);o.viewableFired=!1,o.accumulatedTimeInViewMs=0;let u=typeof performance<"u"&&performance.now?performance.now():Date.now();if(o.lastEnteredViewAt=o.inView?u:null,o.refreshIndex=a,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 h=o.mediaType==="video"?2e3:1e3;o.dwellStartedAt=u,o.dwellTimer=setTimeout(()=>{this.handleDwellComplete(o)},h),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);n?.auctionId&&this.slotLastAuctionIds.set(s,n.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=n?.refreshIndex??this.slotRefreshIndices.get(s)??0;this.slotRefreshIndices.set(s,d),n?.auctionId&&this.slotLastAuctionIds.set(s,n.auctionId);let a=this.pendingThresholdListeners.get(s)||new Set;this.pendingThresholdListeners.delete(s);let u={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:d,inView:!1,lastEnteredViewAt:null,accumulatedTimeInViewMs:0,viewableFired:!1,dwellTimer:null,dwellStartedAt:null,thresholdListeners:a};this.slotViewabilityRecords.set(s,u),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.slotLastAuctionIds.delete(e),this.pendingThresholdListeners.delete(e);let t=`${l(e)}:`;for(let r of Array.from(this.slotEmittedImpressionKeys))(r===e||r.startsWith(t))&&this.slotEmittedImpressionKeys.delete(r);let n=this.cachedWinningBids.get(e);n&&this.deleteCachedBidEntry(n)}getCachedBid(e){let t=this.cachedWinningBids.get(e);if(t){if(Date.now()-t.timestamp>P){this.deleteCachedBidEntry(t);return}return t}}deleteCachedBidEntry(e){for(let[t,n]of Array.from(this.cachedWinningBids))n===e&&this.cachedWinningBids.delete(t)}pruneCachedWinningBids(){let e=Date.now();for(let[t,n]of Array.from(this.cachedWinningBids))e-n.timestamp>P&&this.cachedWinningBids.delete(t);for(;this.cachedWinningBids.size>ht;){let t=this.cachedWinningBids.keys().next();if(t.done)break;this.cachedWinningBids.delete(t.value)}}findCachedWinningBid(e){let t=Date.now(),n=o=>this.hasImpressionEmitted(o.adUnitCode,void 0,o.auctionId,o.bidTrace.creativeId);if(e?.creativeId||e?.adId){for(let o of Array.from(this.cachedWinningBids.values()))if(!(t-o.timestamp>P)&&(e.creativeId&&(o.bidTrace.creativeId===e.creativeId||o.rawBid?.creativeId===e.creativeId)||e.adId&&(o.rawBid?.adId===e.adId||o.adUnitCode===e.adId)))return o}let r;if(e?.mediaType){for(let d of Array.from(this.cachedWinningBids.values())){if(t-d.timestamp>P)continue;(d.bidTrace.mediaType===e.mediaType||d.rawBid?.mediaType===e.mediaType||e.mediaType==="video"&&d.rawBid?.mediaTypes?.video!==void 0)&&(n(d)||(!r||d.timestamp<r.timestamp)&&(r=d))}if(r)return r;let o;for(let d of Array.from(this.cachedWinningBids.values())){if(t-d.timestamp>P)continue;(d.bidTrace.mediaType===e.mediaType||d.rawBid?.mediaType===e.mediaType||e.mediaType==="video"&&d.rawBid?.mediaTypes?.video!==void 0)&&(!o||d.timestamp>o.timestamp)&&(o=d)}if(o)return o}for(let o of Array.from(this.cachedWinningBids.values()))t-o.timestamp>P||n(o)||(!r||o.timestamp>r.timestamp)&&(r=o);if(r)return r;let s;for(let o of Array.from(this.cachedWinningBids.values()))t-o.timestamp>P||(!s||o.timestamp>s.timestamp)&&(s=o);return s}addImpressionKey(e){if(!this.slotEmittedImpressionKeys.has(e)){for(;this.slotEmittedImpressionKeys.size>=pt;){let t=this.slotEmittedImpressionKeys.values().next();if(t.done)break;this.slotEmittedImpressionKeys.delete(t.value)}this.slotEmittedImpressionKeys.add(e)}}getOrCreateAuctionOutcomes(e){let t=this.auctionBidderOutcomes.get(e);for(t||(t=new Map,this.auctionBidderOutcomes.set(e,t));this.auctionBidderOutcomes.size>yt;){let n=this.auctionBidderOutcomes.keys().next();if(n.done||n.value===e)break;this.auctionBidderOutcomes.delete(n.value)}return t}hasImpressionEmitted(e,t,n,r){let s=t??this.slotRefreshIndices.get(e)??0,o=`${l(e)}:${s}`;return r?n?this.slotEmittedImpressionKeys.has(`${o}:auc:${l(n)}:${l(r)}`)||this.slotEmittedImpressionKeys.has(`${o}:${l(r)}`):this.slotEmittedImpressionKeys.has(`${o}:${l(r)}`):n?this.slotEmittedImpressionKeys.has(`${o}:auc:${l(n)}`):this.slotEmittedImpressionKeys.has(o)}markImpressionEmitted(e,t,n,r){let s=`${l(e)}:${t}`;this.addImpressionKey(s),r&&this.addImpressionKey(`${s}:${l(r)}`),n&&(this.addImpressionKey(`${s}:auc:${l(n)}`),r&&this.addImpressionKey(`${s}:auc:${l(n)}:${l(r)}`))}recordImpression(e,t){if(!this.isEnabled)return!1;let n=e||t?.adUnitCode||"",r=t?.adUnitCode||n,s=(t?.auctionId&&n?this.getCachedBid(`${t.auctionId}:${n}`):void 0)||(t?.auctionId&&r?this.getCachedBid(`${t.auctionId}:${r}`):void 0)||(n?this.getCachedBid(n):void 0)||(r?this.getCachedBid(r):void 0),o=t?.bid||s?.rawBid||{},d=t?.auctionId||o.auctionId||s?.auctionId||"",a=t?.transactionId||o.transactionId||s?.transactionId||"",u=o.creativeId||s?.bidTrace?.creativeId||t?.bid?.creativeId||"",h=t?.mediaType||o.mediaType||s?.bidTrace?.mediaType||"banner",b=n||r,f=(n?this.slotViewabilityRecords.get(n):void 0)||(r?this.slotViewabilityRecords.get(r):void 0),T=b?this.slotLastAuctionIds.get(b)||(f?f.auctionId:void 0):void 0,v=!!(b&&d&&T&&T!==d&&t?.refreshIndex===void 0),I={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",...O(o).width?O(o):s?.bidTrace?{width:s.bidTrace.width,height:s.bidTrace.height}:O(o),dealId:o.dealId||s?.bidTrace?.dealId||"",mediaType:h,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(v&&b){this.flushSlotTimeInView(b);let w=(this.slotRefreshIndices.get(b)??(f?f.refreshIndex:0))+1;this.slotRefreshIndices.set(b,w),this.slotLastAuctionIds.set(b,d),f&&(f.refreshIndex=w,f.auctionId=d,f.transactionId=a,f.bidPayload=I,f.viewableFired=!1,f.accumulatedTimeInViewMs=0),this.enqueue(m.REFRESH,"refresh",{auctionId:d,transactionId:a,adUnitCode:b,bid:I,metadata:{...t?.metadata,refresh_index:String(w)}})}else b&&(d&&this.slotLastAuctionIds.set(b,d),this.slotRefreshIndices.has(b)||this.slotRefreshIndices.set(b,0));let B=t?.refreshIndex??(n?this.slotRefreshIndices.get(n)??(r?this.slotRefreshIndices.get(r):void 0)??(f?f.refreshIndex:0):0);return n&&this.hasImpressionEmitted(n,B,d,u)||r&&r!==n&&this.hasImpressionEmitted(r,B,d,u)?(this.log("DEBUG",`Impression already emitted for slot ${n||r} in cycle ${B}`),!1):(n&&this.markImpressionEmitted(n,B,d,u),r&&r!==n&&this.markImpressionEmitted(r,B,d,u),this.enqueue(m.IMPRESSION,"impression",{auctionId:d,transactionId:a,adUnitCode:r,bid:I,metadata:{...t?.metadata,refresh_index:String(B)}}),f&&(!f.bidPayload&&I&&(f.bidPayload=I),!f.auctionId&&d&&(f.auctionId=d),!f.transactionId&&a&&(f.transactionId=a)),!0)}attachImaAdsManager(e,t){if(!e||typeof e.addEventListener!="function")return this.log("WARN","Invalid AdsManager passed to attachImaAdsManager"),()=>{};if(!e.__bidkernelAttachedInstances)try{Object.defineProperty(e,"__bidkernelAttachedInstances",{value:new Set,configurable:!0,writable:!0})}catch{e.__bidkernelAttachedInstances=new Set}if(e.__bidkernelAttachedInstances.has(this))return()=>{};e.__bidkernelAttachedInstances.add(this);let n=t?.slotId||t?.adUnitCode||"video",r=t?.adUnitCode||n,s=t?.auctionId||"",o=t?.transactionId||"",d=p=>{let c=(s?this.getCachedBid(`${s}:${r}`):void 0)||(s&&n!==r?this.getCachedBid(`${s}:${n}`):void 0)||(r!=="video"?this.getCachedBid(r):void 0)||(n!==r&&n!=="video"?this.getCachedBid(n):void 0);return c||(c=this.findCachedWinningBid({creativeId:p?.creativeId,adId:p?.adId,mediaType:"video"})),c},a=!1,u=p=>{a=!0,this.log("DEBUG","IMA AdEvent.STARTED / IMPRESSION received",p);let c=typeof p?.getAd=="function"?p.getAd():p?.ad,y={};c&&(y.creativeId=(typeof c.getCreativeId=="function"?c.getCreativeId():c.creativeId)||"",y.adId=(typeof c.getAdId=="function"?c.getAdId():c.id)||"",y.title=(typeof c.getTitle=="function"?c.getTitle():c.title)||"",y.duration=typeof c.getDuration=="function"?c.getDuration():c.duration,y.advertiserName=typeof c.getAdvertiserName=="function"?c.getAdvertiserName():"");let g=d(y),A=t?.slotId&&t.slotId!=="video"?t.slotId:t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:g?.adUnitCode||t?.slotId||t?.adUnitCode||"video",_=t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:g?.adUnitCode||A,U=s||g?.auctionId||"",He=o||g?.transactionId||"",he={...g?.rawBid||t?.bid,mediaType:"video",creativeId:y.creativeId||g?.bidTrace?.creativeId||t?.bid?.creativeId||""};if(this.recordImpression(A,{adUnitCode:_,auctionId:U,transactionId:He,mediaType:"video",bid:he,metadata:{...t?.metadata,media_type:"video",...y.title?{ad_title:y.title}:{},...Number.isFinite(y.duration)?{ad_duration_s:String(y.duration)}:{}}})&&t?.onImpression)try{t.onImpression(A,{ad:c,bid:he})}catch(Ge){this.log("ERROR","Error in onImpression callback",Ge)}},h=p=>{if(this.log("DEBUG",`IMA AdEvent milestone: ${p}`),t?.onMilestone)try{t.onMilestone(p,n)}catch(c){this.log("ERROR","Error in onMilestone callback",c)}},b=p=>{this.log("DEBUG","IMA AdEvent.CLICK received",p);let c=d(),y=t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:c?.adUnitCode||n;this.enqueue(m.CLICK,"click",{auctionId:s||c?.auctionId,transactionId:o||c?.transactionId,adUnitCode:y,bid:c?.bidTrace||t?.bid,metadata:{...t?.metadata,media_type:"video"}})},f=p=>{this.log("WARN","IMA AdErrorEvent received",p);let c=typeof p?.getError=="function"?p.getError():p?.error||p,y=(c&&typeof c.getMessage=="function"?c.getMessage():c?.message)||String(c||"IMA ad error"),g=(c&&typeof c.getErrorCode=="function"?c.getErrorCode():c?.code)||"",A=d(),_=t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:A?.adUnitCode||n;if(this.enqueue(m.AD_RENDER_FAILED,"adRenderFailed",{auctionId:s||A?.auctionId,transactionId:o||A?.transactionId,adUnitCode:_,bid:A?.bidTrace||t?.bid,metadata:{...t?.metadata,reason:a?"ima_playback_error":"ima_ad_error",playback_phase:a?"post_start":"pre_start",message:y,...g?{ima_error_code:String(g)}:{}},error:typeof c=="object"?c:new Error(y)}),t?.onError)try{t.onError(c)}catch(U){this.log("ERROR","Error in onError callback",U)}},T=typeof window<"u"?window.google?.ima:void 0,v=T?.AdEvent?.Type||{},I=T?.AdErrorEvent?.Type||{},B=[{type:v.STARTED||"started",handler:u},{type:v.IMPRESSION||"impression",handler:u},{type:v.FIRST_QUARTILE||"firstQuartile",handler:()=>h("firstQuartile")},{type:v.MIDPOINT||"midpoint",handler:()=>h("midpoint")},{type:v.THIRD_QUARTILE||"thirdQuartile",handler:()=>h("thirdQuartile")},{type:v.COMPLETE||"complete",handler:()=>h("complete")},{type:v.CLICK||"click",handler:b},{type:I.AD_ERROR||"adError",handler:f}],k=new Set,w=[];for(let p of B)k.has(p.type)||(k.add(p.type),w.push(p));for(let{type:p,handler:c}of w)try{e.addEventListener(p,c)}catch{}let E=()=>{e.__bidkernelAttachedInstances?.delete(this);for(let{type:p,handler:c}of w)try{e.removeEventListener(p,c)}catch{}this.videoDetachCleanups.delete(E)};return this.videoDetachCleanups.add(E),E}attachVideoPlayer(e,t){if(!e)return this.log("WARN","attachVideoPlayer called with null/undefined target"),()=>{};let n=null;if(typeof e=="string"){if(typeof document<"u")try{n=document.querySelector(e)||document.getElementById(e)}catch{n=document.getElementById(e)}}else if(typeof HTMLElement<"u"&&e instanceof HTMLElement)n=e;else if(e&&typeof e=="object"&&e.nodeType===1)n=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"&&(n=e)}let r=t?.slotId||t?.adUnitCode||(n?n.id:"")||"video",s=t?.adUnitCode||r,o=t?.auctionId||"",d=t?.transactionId||"",a=()=>(o?this.getCachedBid(`${o}:${s}`):void 0)||(o&&r!==s?this.getCachedBid(`${o}:${r}`):void 0)||this.getCachedBid(s)||(r!==s?this.getCachedBid(r):void 0),u=null;n&&(n.tagName&&n.tagName.toLowerCase()==="video"?u=n:u=n.querySelector("video"));let h={q1:!1,q2:!1,q3:!1,q4:!1},b=c=>{let y=c||u||(n?.querySelector?n.querySelector("video"):null),g=a(),A={...g?.rawBid||t?.bid,mediaType:"video"};if(this.recordImpression(r,{adUnitCode:s,auctionId:o||g?.auctionId,transactionId:d||g?.transactionId,mediaType:"video",bid:A,metadata:{...t?.metadata,media_type:"video",...y&&Number.isFinite(y.duration)?{video_duration_s:String(Math.round(y.duration))}:{}}})&&t?.onImpression)try{t.onImpression(r,{element:y||n,bid:A})}catch(U){this.log("ERROR","Error in onImpression callback",U)}},f=c=>{this.log("DEBUG","HTML5 video playing event received");let y=c?.target instanceof HTMLVideoElement?c.target:u;b(y)},T=c=>{let y=c?.target instanceof HTMLVideoElement?c.target:u;if(y&&y.currentTime>0&&(b(y),Number.isFinite(y.duration)&&y.duration>0)){let g=y.currentTime/y.duration;g>=.25&&!h.q1&&(h.q1=!0,t?.onMilestone?.("firstQuartile",r)),g>=.5&&!h.q2&&(h.q2=!0,t?.onMilestone?.("midpoint",r)),g>=.75&&!h.q3&&(h.q3=!0,t?.onMilestone?.("thirdQuartile",r))}},v=()=>{h.q4||(h.q4=!0,t?.onMilestone?.("complete",r))},I=c=>{let g=(c?.target instanceof HTMLVideoElement?c.target:u)?.error||u?.error,A=a(),_=g?`HTML5 video error code ${g.code}: ${g.message}`:"Video playback error";if(this.log("WARN",_),this.enqueue(m.AD_RENDER_FAILED,"adRenderFailed",{auctionId:o||A?.auctionId,transactionId:d||A?.transactionId,adUnitCode:s,bid:A?.bidTrace||t?.bid,metadata:{...t?.metadata,reason:"html5_video_error",message:_,...g?.code?{video_error_code:String(g.code)}:{}},error:g?new Error(_):void 0}),t?.onError)try{t.onError(g)}catch(U){this.log("ERROR","Error in onError callback",U)}},B=c=>{c.addEventListener("playing",f),c.addEventListener("play",f),c.addEventListener("timeupdate",T),c.addEventListener("ended",v),c.addEventListener("error",I)},k=c=>{c.removeEventListener("playing",f),c.removeEventListener("play",f),c.removeEventListener("timeupdate",T),c.removeEventListener("ended",v),c.removeEventListener("error",I)},w=null;n&&n!==u&&(n.addEventListener("playing",f,!0),n.addEventListener("play",f,!0),n.addEventListener("timeupdate",T,!0),n.addEventListener("ended",v,!0),n.addEventListener("error",I,!0)),u&&B(u),n&&n.tagName?.toLowerCase()!=="video"&&typeof MutationObserver<"u"&&(w=new MutationObserver(()=>{let c=n.querySelector("video");c&&c!==u&&(u&&k(u),u=c,u&&B(u))}),w.observe(n,{childList:!0,subtree:!0}));let E=a();t?.trackViewability!==!1&&n&&this.observeSlot(n,r,{adUnitCode:s,auctionId:o||E?.auctionId,transactionId:d||E?.transactionId,mediaType:"video",bid:E?.bidTrace||t?.bid,metadata:t?.metadata,emitRefreshEvent:!1});let p=()=>{w&&(w.disconnect(),w=null),n&&n!==u&&(n.removeEventListener("playing",f,!0),n.removeEventListener("play",f,!0),n.removeEventListener("timeupdate",T,!0),n.removeEventListener("ended",v,!0),n.removeEventListener("error",I,!0)),u&&k(u),this.videoDetachCleanups.delete(p)};return this.videoDetachCleanups.add(p),p}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(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{n(e,a)}catch(u){this.log("ERROR","Error in threshold callback",u)}}}},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 n=Math.round(this.getCurrentTimeInView(t));return{inView:t.inView,viewable:t.viewableFired,timeInViewMs:n,refreshIndex:t.refreshIndex}}getEndpoint(){return this.config.endpoint}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=lt[t]??(e==="ERROR"?m.ERROR:m.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||L(),t)try{let n=new URL(t);this.pageUrl=n.origin+n.pathname}catch{this.pageUrl=t}else this.pageUrl="";Ve(),this.enable()}handleAuctionInit(e){if(this.isDuplicate("auctionInit",e))return;this.log("DEBUG","auctionInit",e);let t=e.auctionId||"";t&&(this.auctionBidderOutcomes.delete(t),this.getOrCreateAuctionOutcomes(t)),this.enqueue(m.AUCTION_START,"auctionStart",{auctionId:t,transactionId:e.transactionId||""})}handleAuctionEnd(e){if(this.isDuplicate("auctionEnd",e))return;this.log("DEBUG","auctionEnd",e);let t=e.auctionId||"",n=t?this.auctionBidderOutcomes.get(t):void 0,r=n?Array.from(n.values()):[];t&&this.auctionBidderOutcomes.delete(t),this.enqueue(m.AUCTION_END,"auctionEnd",{auctionId:t,transactionId:e.transactionId||"",bidderOutcomes:r})}handleBidRequested(e){if(this.isDuplicate("bidRequested",e))return;this.log("DEBUG","bidRequested",e);let t=e.auctionId||"",n=e.bidderCode||e.bidder||"";if(!t||!n)return;let r=this.getOrCreateAuctionOutcomes(t);Array.isArray(e.bids)&&e.bids.forEach(s=>{let o=s.adUnitCode||"",d=Object.keys(s.mediaTypes||{}),a=d.length>0?d[0]:s.mediaType||"banner",u=`${n}:${o}`;r.has(u)||r.set(u,{bidder:n,adUnitCode:o,mediaType:a,outcome:D.BIDDER_OUTCOME_NO_RESPONSE,latencyMs:0})})}handleBidResponse(e){if(this.isDuplicate("bidResponse",e))return;this.log("DEBUG","bidResponse",e);let t=e.auctionId||"",n=e.bidderCode||e.bidder||"",r=e.adUnitCode||"",s=Number.isFinite(e.originalCpm)?e.originalCpm:Number.isFinite(e.cpm)?e.cpm:0,o=Number.isFinite(e.timeToRespond)?e.timeToRespond:0,d=Object.keys(e.mediaTypes||{}),a=e.mediaType||(e.mediaTypes?.video?"video":d.length>0?d[0]:"banner");if(t&&n){let u=this.getOrCreateAuctionOutcomes(t),h=`${n}:${r}`,b=u.get(h),f=s>0?D.BIDDER_OUTCOME_BID:D.BIDDER_OUTCOME_NO_BID;b?(b.outcome=f,b.latencyMs=o,a&&(b.mediaType=a)):u.set(h,{bidder:n,adUnitCode:r,mediaType:a,outcome:f,latencyMs:o})}s>0&&this.enqueue(m.BID_RESPONSE,"bidResponse",{auctionId:t,transactionId:e.transactionId||"",adUnitCode:r,bid:{bidder:n,cpm:s,currency:e.originalCurrency??e.currency??"USD",...O(e),dealId:e.dealId||"",mediaType:a,latencyMs:o,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){let r=n.auctionId||"",s=n.bidderCode||n.bidder||"",o=n.adUnitCode||"",d=Number.isFinite(n.timeout)?n.timeout:0;if(r&&s){let a=this.getOrCreateAuctionOutcomes(r),u=`${s}:${o}`,h=a.get(u);h?(h.outcome=D.BIDDER_OUTCOME_TIMEOUT,d>0&&(h.latencyMs=d)):a.set(u,{bidder:s,adUnitCode:o,mediaType:"banner",outcome:D.BIDDER_OUTCOME_TIMEOUT,latencyMs:d})}}}handleBidWon(e){if(this.isDuplicate("bidWon",e))return;this.log("DEBUG","bidWon",e);let t=e.auctionId||"",n=e.transactionId||"",r=e.adUnitCode||e.adId||"",s=Object.keys(e.mediaTypes||{}),o=e.mediaType||(e.mediaTypes?.video?"video":s.length>0?s[0]:"banner"),d={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",...O(e),dealId:e.dealId||"",mediaType:o,latencyMs:Number.isFinite(e.timeToRespond)?e.timeToRespond:0,advertiserDomain:e.meta?.advertiserDomains?.[0]||"",creativeId:e.creativeId||""};if(r){let a={bidTrace:d,auctionId:t,transactionId:n,adUnitCode:r,rawBid:e,timestamp:Date.now()};this.cachedWinningBids.set(r,a),e.adId&&e.adId!==r&&this.cachedWinningBids.set(e.adId,a),t&&(this.cachedWinningBids.set(`${t}:${r}`,a),e.adId&&e.adId!==r&&this.cachedWinningBids.set(`${t}:${e.adId}`,a)),this.pruneCachedWinningBids()}this.enqueue(m.BID_WIN,"bidWon",{auctionId:t,transactionId:n,adUnitCode:r,bid:d})}handleNoBid(e){if(this.isDuplicate("noBid",e))return;this.log("DEBUG","noBid",e);let t=e.auctionId||"",n=e.bidderCode||e.bidder||"",r=e.adUnitCode||"";if(t&&n){let s=this.getOrCreateAuctionOutcomes(t),o=`${n}:${r}`,d=s.get(o);d?d.outcome===D.BIDDER_OUTCOME_NO_RESPONSE&&(d.outcome=D.BIDDER_OUTCOME_NO_BID):s.set(o,{bidder:n,adUnitCode:r,mediaType:"banner",outcome:D.BIDDER_OUTCOME_NO_BID,latencyMs:0})}}handleAdRenderFailed(e){if(this.isDuplicate("adRenderFailed",e))return;this.log("DEBUG","adRenderFailed",e);let t=e.bid||{};this.enqueue(m.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||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||"",u=(r&&d?this.getCachedBid(`${r}:${d}`):void 0)||(r&&a?this.getCachedBid(`${r}:${a}`):void 0)||(d?this.getCachedBid(d):void 0)||(a?this.getCachedBid(a):void 0),h=o==="video"||t.mediaType==="video"||t.mediaTypes?.video!==void 0||u?.bidTrace?.mediaType==="video"||u?.rawBid?.mediaType==="video"||n&&this.slotViewabilityRecords.get(n)?.mediaType==="video",b=h?"video":o||u?.bidTrace?.mediaType||"banner",f={bidder:t.bidderCode||t.bidder||u?.bidTrace?.bidder||"",cpm:Number.isFinite(t.originalCpm)?t.originalCpm:Number.isFinite(t.cpm)?t.cpm:u?.bidTrace?.cpm??0,currency:t.originalCurrency??t.currency??u?.bidTrace?.currency??"USD",...O(t).width?O(t):u?.bidTrace?{width:u.bidTrace.width,height:u.bidTrace.height}:O(t),dealId:t.dealId||u?.bidTrace?.dealId||"",mediaType:b,latencyMs:Number.isFinite(t.timeToRespond)?t.timeToRespond:u?.bidTrace?.latencyMs??0,advertiserDomain:t.meta?.advertiserDomains?.[0]||u?.bidTrace?.advertiserDomain||"",creativeId:t.creativeId||u?.bidTrace?.creativeId||""},T=r||u?.auctionId||"",v=s||u?.transactionId||"",I=n?this.slotViewabilityRecords.get(n):void 0,B=I&&T&&I.auctionId&&I.auctionId!==T;if(!!(n&&I&&B)){this.flushSlotTimeInView(n);let E=(this.slotRefreshIndices.get(n)??(I?I.refreshIndex:0))+1;this.slotRefreshIndices.set(n,E),this.slotLastAuctionIds.set(n,T),I&&(I.refreshIndex=E,I.auctionId=T,I.transactionId=v,I.bidPayload=f,I.viewableFired=!1,I.accumulatedTimeInViewMs=0),this.enqueue(m.REFRESH,"refresh",{auctionId:T,transactionId:v,adUnitCode:n,bid:f,metadata:{refresh_index:String(E)}})}else n&&(T&&this.slotLastAuctionIds.set(n,T),this.slotRefreshIndices.has(n)||this.slotRefreshIndices.set(n,0));let w=n?this.slotRefreshIndices.get(n)??(I?I.refreshIndex:0):0;if(h?this.log("DEBUG",`adRenderSucceeded received for video ad unit ${n||"unknown"}: suppressing IMPRESSION until verified video lifecycle event`):n&&this.hasImpressionEmitted(n,w,T,f.creativeId)||(n&&this.markImpressionEmitted(n,w,T,f.creativeId),this.enqueue(m.IMPRESSION,"impression",{auctionId:T,transactionId:v,adUnitCode:n,bid:f,metadata:{refresh_index:String(w)}})),this.config.viewabilityEnabled&&typeof document<"u"){let E=null,p=n||e.adId||t.adId;if(p&&(E=document.getElementById(p)),!E&&typeof window<"u"&&window.googletag?.pubads)try{let c=window.googletag.pubads().getSlots();for(let y of c)if((y.getAdUnitPath?.()===n||y.getSlotElementId?.()===n)&&(E=document.getElementById(y.getSlotElementId()),E))break}catch{}if(!E&&p)try{for(let c of Array.from(document.querySelectorAll("[data-ad-slot]")))if(c.getAttribute("data-ad-slot")===p){E=c;break}}catch{}E&&this.observeSlot(E,n||p,{adUnitCode:n,auctionId:T,transactionId:v,mediaType:b,bid:f,refreshIndex:w,emitRefreshEvent:!1})}}isDuplicate(e,t){return this.deduper.isDuplicate(e,t)}enqueue(e,t,n,r){if(!this.isEnabled||!this.shouldSample(e,r))return;Ve();let s={eventId:L(),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),n.bidderOutcomes&&Array.isArray(n.bidderOutcomes)&&(s.bidderOutcomes=n.bidderOutcomes);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));let d=gt(o);Object.keys(d).length>0&&(s.metadata=d),this.queue.push(s),this.queue.length>z&&this.queue.splice(0,this.queue.length-z),this.queue.length>=nt?this.flush():ft.has(e)&&!this.immediateFlushScheduled&&(this.immediateFlushScheduled=!0,setTimeout(()=>{this.immediateFlushScheduled=!1,this.flush()},0))}shouldSample(e,t){return e===m.ERROR?(this.errorCount++,this.errorCount>rt?!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>z&&this.queue.splice(0,this.queue.length-z))}drainBatch(){if(this.queue.length===0||!this.config.endpoint)return null;let e=typeof window<"u"?window.location.hostname:"",t=n=>({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:e,events:n});for(;;){if(this.queue.length===0)return null;let n=this.queue,r=j.encode(t(n)).finish();for(;n.length>1&&r.byteLength>ae;)n=n.slice(0,Math.floor(n.length/2)),r=j.encode(t(n)).finish();if(r.byteLength>ae){let[s]=this.queue.splice(0,1);this.log("WARN",`Dropping oversized event ${s?.eventName||s?.eventId} (${r.byteLength} bytes exceeds the ${ae}-byte cap on its own)`);continue}return this.queue=this.queue.slice(n.length),{url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:r,events:n}}}sendFetch(e,t=!1,n,r=!1){let s={method:"POST",headers:{"Content-Type":Pe},body:e.encoded};t&&(s.keepalive=!0),fetch(e.url,s).then(d=>{if(d.ok)r||(this.consecutiveSendFailures=0,this.nextSendAllowedAt=0),n&&n();else{if(this.log("WARN",`Failed to send batch: HTTP ${d.status}`),d.status>=400&&d.status<500&&d.status!==429&&d.status!==408){this.log("WARN",`Dropping batch due to non-retryable client error HTTP ${d.status}`);return}r||this.handleSendFailure(e.events)}}).catch(d=>{this.log("ERROR","Failed to send batch",d),r||this.handleSendFailure(e.events)});let o=typeof globalThis<"u"?globalThis.process:void 0;if(o&&typeof o._tickCallback=="function")try{o._tickCallback()}catch{}}handleSendFailure(e){this.consecutiveSendFailures++;let t=Math.min(ke*2**(this.consecutiveSendFailures-1),st);this.nextSendAllowedAt=Date.now()+t,this.consecutiveSendFailures<=ot?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:Pe});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()}pendingKeyPrefix(){return`${Y}${encodeURIComponent(this.config.propertyId)}_`}persistBatch(e){try{if(typeof localStorage>"u"||!this.config.propertyId)return null;let t=0;for(let r=0;r<localStorage.length;r++){let s=localStorage.key(r);s&&s.startsWith(Y)&&t++}if(t>=at)return null;let n=`${this.pendingKeyPrefix()}${Date.now()}_${Math.floor(Math.random()*1e6)}`;return localStorage.setItem(n,mt(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 Array.from(this.persistedBatchKeys))this.removePersistedBatch(e)},ut))}resendPersistedBatches(){try{if(typeof localStorage>"u"||!this.config.endpoint||!this.config.propertyId)return;let e=this.pendingKeyPrefix(),t=[],n=[];for(let r=0;r<localStorage.length;r++){let s=localStorage.key(r);!s||!s.startsWith(Y)||(s.startsWith(e)?t.push(s):Tt(s)&&n.push(s))}for(let r of n)try{localStorage.removeItem(r)}catch{}for(let r of t){let s=null;try{s=localStorage.getItem(r),localStorage.removeItem(r)}catch{continue}if(!s)continue;let o=parseInt(r.slice(e.length),10);if(!Number.isFinite(o)||Date.now()-o>ct)continue;let d;try{d=bt(s)}catch{continue}d.byteLength!==0&&(this.log("DEBUG",`Resending persisted exit batch (${d.byteLength} bytes)`),this.sendFetch({url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:d,events:[]},!1,void 0,!0))}}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 Rt=je(()=>{qe();var Ke="https://by.bidkernel.io/t",Bt=window._bidkernelPbjsGlobal||"pbjs";fe(Bt,{endpoint:Ke});window.bidkernelPrebidAnalytics={...window.bidkernelPrebidAnalytics,register:(i,e)=>fe(i,{endpoint:Ke,...e}),attachVideoPlayer:(i,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.attachVideoPlayer?t.attachVideoPlayer(i,e):()=>{}},attachImaAdsManager:(i,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.attachImaAdsManager?t.attachImaAdsManager(i,e):()=>{}},recordImpression:(i,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.recordImpression?t.recordImpression(i,e):!1}}});return Rt();})();
1
+ "use strict";var bidkernelPrebidAnalyticsBundle=(()=>{var x=(i,e)=>()=>(i&&(e=i(i=0)),e);var tt=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports);function rt(){if(typeof window<"u"){let i=window;return i.__bidkernelLogListeners||(i.__bidkernelLogListeners=new Set),i.__bidkernelLogListeners}return nt}function ot(i){if((i<0||!Number.isFinite(i))&&(i=0),i<1e3)return`${i.toFixed(2)}ms`;let e=i/1e3;if(e<60)return`${e.toFixed(2)}s`;let t=Math.floor(e/60);return t<60?`${t}m ${(e%60).toFixed(2)}s`:`${Math.floor(t/60)}h ${t%60}m ${(e%60).toFixed(2)}s`}function W(i){if(typeof i=="string"){let e=i.toUpperCase();if(e==="DEBUG"||e==="INFO"||e==="WARN"||e==="ERROR")return e}return A.INFO}function ie(i){return new te(i)}var A,ve,O,it,nt,te,Te=x(()=>{"use strict";A={DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",ERROR:"ERROR"},ve={[A.DEBUG]:10,[A.INFO]:20,[A.WARN]:30,[A.ERROR]:40},O={badge:"color: #2dd4bf; font-weight: bold",badgeWarn:"background: #f59e0b; color: #fff; padding: 2px 4px; border-radius: 3px; font-weight: bold",badgeError:"background: #ef4444; color: #fff; padding: 2px 4px; border-radius: 3px; font-weight: bold",dim:"color: #6b7280",event:"color: #38bdf8; font-weight: bold",eventWarn:"color: #f59e0b; font-weight: bold",eventError:"color: #ef4444; font-weight: bold",reset:"color: inherit"},it=0,nt=new Set;te=class i{_prefix;_level;_loadedAt;_now;_console;_customFormatTime;_listeners=new Set;constructor(e={}){this._prefix=e.prefix??"[bidkernel]",this._level=W(e.logLevel??A.INFO),this._now=e.now,this._console=e.console,this._customFormatTime=e.formatTime,e.onLog&&this._listeners.add(e.onLog),this._loadedAt=e.loadedAt??(this._now?this._now():typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now())}get prefix(){return this._prefix}set prefix(e){this._prefix=e}get logLevel(){return this._level}set logLevel(e){this._level=W(e)}getLevel(){return this._level}setLevel(e){this._level=W(e)}getPrefix(){return this._prefix}setPrefix(e){this._prefix=e}resetTiming(e){this._loadedAt=e??(this._now?this._now():typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now())}getLoadedAt(){return this._loadedAt}addListener(e){return this._listeners.add(e),()=>{this._listeners.delete(e)}}removeListener(e){this._listeners.delete(e)}isEnabled(e){let t=W(e);return(ve[t]??20)>=(ve[this._level]??20)}formatTime(e){return this._customFormatTime?this._customFormatTime(e):ot(e)}_getConsole(){if(this._console)return this._console;if(typeof console<"u")return console}_getElapsed(){let e=this._now?this._now():typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now();return Math.max(0,e-this._loadedAt)}_dispatchRecord(e){for(let n of this._listeners)try{n(e)}catch{}let t=rt();for(let n of t)if(!this._listeners.has(n))try{n(e)}catch{}if(typeof window<"u"&&typeof window.dispatchEvent=="function")try{window.dispatchEvent(new CustomEvent("__bidkernel_log__",{detail:e}))}catch{}}log(e,t,...n){let r=W(e);if(!this.isEnabled(r))return;let o=this._getElapsed(),s=this.formatTime(o),d=Date.now(),l={id:`bk_log_${d}_${++it}`,timestamp:d,elapsedMs:o,level:r,prefix:this._prefix,message:t,args:n,data:n.length===1?n[0]:n.length>1?n:void 0};this._dispatchRecord(l);let u=this._getConsole();if(!u)return;let y=O.badge,f=O.event;r===A.WARN?(y=O.badgeWarn,f=O.eventWarn):r===A.ERROR&&(y=O.badgeError,f=O.eventError);let v=`%c${this._prefix}%c ${s} %c${t}%c`,T=[y,O.dim,f,O.reset],p=[v,...T];switch(n.length>0&&p.push(...n),r){case A.DEBUG:typeof u.log=="function"?u.log(...p):typeof u.debug=="function"&&u.debug(...p);break;case A.INFO:typeof u.info=="function"?u.info(...p):typeof u.log=="function"&&u.log(...p);break;case A.WARN:typeof u.warn=="function"?u.warn(...p):typeof u.log=="function"&&u.log(...p);break;case A.ERROR:typeof u.error=="function"?u.error(...p):typeof u.log=="function"&&u.log(...p);break;default:typeof u.log=="function"&&u.log(...p);break}}debug(e,...t){this.log(A.DEBUG,e,...t)}info(e,...t){this.log(A.INFO,e,...t)}warn(e,...t){this.log(A.WARN,e,...t)}error(e,...t){this.log(A.ERROR,e,...t)}logEvent(e){e&&(e.data!==void 0?this.log(e.level,e.eventName,e.data):this.log(e.level,e.eventName))}child(e,t={}){let n=this._prefix;if(e){let r=e.startsWith("[")&&e.endsWith("]")?e:`[${e}]`;n=`${this._prefix}${r}`}return new i({prefix:n,logLevel:t.logLevel??this._level,loadedAt:t.loadedAt??this._loadedAt,now:t.now??this._now,console:t.console??this._console,formatTime:t.formatTime??this._customFormatTime,...t})}withPrefix(e){return new i({prefix:e,logLevel:this._level,loadedAt:this._loadedAt,now:this._now,console:this._console,formatTime:this._customFormatTime})}}});function we(){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 G(i,e,t){for(let o=0;o<28;o=o+7){let s=i>>>o,d=!(!(s>>>7)&&e==0),a=(d?s|128:s)&255;if(t.push(a),!d)return}let n=i>>>28&15|(e&7)<<4,r=e>>3!=0;if(t.push((r?n|128:n)&255),!!r){for(let o=3;o<31;o=o+7){let s=e>>>o,d=!!(s>>>7),a=(d?s|128:s)&255;if(t.push(a),!d)return}t.push(e>>>31&1)}}function ne(i){let e=i[0]==="-";e&&(i=i.slice(1));let t=1e6,n=0,r=0;function o(s,d){let a=Number(i.slice(s,d));r*=t,n=n*t+a,n>=H&&(r=r+(n/H|0),n=n%H)}return o(-24,-18),o(-18,-12),o(-12,-6),o(-6),e?Re(n,r):oe(n,r)}function Ae(i,e){let t=oe(i,e),n=t.hi&2147483648;n&&(t=Re(t.lo,t.hi));let r=re(t.lo,t.hi);return n?"-"+r:r}function re(i,e){if({lo:i,hi:e}=st(i,e),e<=2097151)return String(H*e+i);let t=i&16777215,n=(i>>>24|e<<8)&16777215,r=e>>16&65535,o=t+n*6777216+r*6710656,s=n+r*8147497,d=r*2,a=1e7;return o>=a&&(s+=Math.floor(o/a),o%=a),s>=a&&(d+=Math.floor(s/a),s%=a),d.toString()+Ee(s)+Ee(o)}function st(i,e){return{lo:i>>>0,hi:e>>>0}}function oe(i,e){return{lo:i|0,hi:e|0}}function Re(i,e){return e=~e,i?i=~i+1:e+=1,oe(i,e)}function se(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 _e(){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 H,Ee,de=x(()=>{"use strict";H=4294967296;Ee=i=>{let e=String(i);return"0000000".slice(e.length)+e}});function dt(){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"),o=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(s){let d=typeof s=="bigint"?s:BigInt(s);if(d>n||d<t)throw new Error(`invalid int64: ${s}`);return d},uParse(s){let d=typeof s=="bigint"?s:BigInt(s);if(d>o||d<r)throw new Error(`invalid uint64: ${s}`);return d},enc(s){return i.setBigInt64(0,this.parse(s),!0),{lo:i.getInt32(0,!0),hi:i.getInt32(4,!0)}},uEnc(s){return i.setBigInt64(0,this.uParse(s),!0),{lo:i.getInt32(0,!0),hi:i.getInt32(4,!0)}},dec(s,d){return i.setInt32(0,s,!0),i.setInt32(4,d,!0),i.getBigInt64(0,!0)},uDec(s,d){return i.setInt32(0,s,!0),i.setInt32(4,d,!0),i.getBigUint64(0,!0)}}}return{zero:"0",supported:!1,parse(t){return typeof t!="string"&&(t=t.toString()),Be(t),t},uParse(t){return typeof t!="string"&&(t=t.toString()),xe(t),t},enc(t){return typeof t!="string"&&(t=t.toString()),Be(t),ne(t)},uEnc(t){return typeof t!="string"&&(t=t.toString()),xe(t),ne(t)},dec(t,n){return Ae(t,n)},uDec(t,n){return re(t,n)}}}function Be(i){if(!/^-?[0-9]+$/.test(i))throw new Error("invalid int64: "+i)}function xe(i){if(!/^[0-9]+$/.test(i))throw new Error("invalid uint64: "+i)}var C,Ce=x(()=>{"use strict";de();C=dt()});function ce(){if(globalThis[ae]==null){let i=new globalThis.TextEncoder,e=new globalThis.TextDecoder;globalThis[ae]={encodeUtf8(t){return i.encode(t)},decodeUtf8(t){return e.decode(t)},checkUtf8(t){try{return encodeURIComponent(t),!0}catch{return!1}}}}return globalThis[ae]}var ae,le=x(()=>{"use strict";ae=Symbol.for("@bufbuild/protobuf/text-encoding")});function ue(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>ut||i<ft)throw new Error("invalid int32: "+i)}function Se(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>lt||i<0)throw new Error("invalid uint32: "+i)}function ht(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>at||i<ct))throw new Error("invalid float32: "+i)}var L,at,ct,lt,ut,ft,M,B,De=x(()=>{"use strict";de();Ce();le();(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"})(L||(L={}));at=34028234663852886e22,ct=-34028234663852886e22,lt=4294967295,ut=2147483647,ft=-2147483648,M=class{constructor(e=ce().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(Se(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return ue(e),se(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){ht(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){Se(e);let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),this.raw(t)}sfixed32(e){ue(e);let t=new Uint8Array(4);return new DataView(t.buffer).setInt32(0,e,!0),this.raw(t)}sint32(e){return ue(e),e=(e<<1^e>>31)>>>0,se(e,this.buf),this}sfixed64(e){let t=new Uint8Array(8),n=new DataView(t.buffer),r=C.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=C.uEnc(e);return n.setInt32(0,r.lo,!0),n.setInt32(4,r.hi,!0),this.raw(t)}int64(e){let t=C.enc(e);return G(t.lo,t.hi,this.buf),this}sint64(e){let t=C.enc(e),n=t.hi>>31,r=t.lo<<1^n,o=(t.hi<<1|t.lo>>>31)^n;return G(r,o,this.buf),this}uint64(e){let t=C.uEnc(e);return G(t.lo,t.hi,this.buf),this}},B=class{constructor(e,t=ce().decodeUtf8){this.decodeUtf8=t,this.varint64=we,this.uint32=_e,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 L.Varint:for(;this.buf[this.pos++]&128;);break;case L.Bit64:this.pos+=4;case L.Bit32:this.pos+=4;break;case L.LengthDelimited:let r=this.uint32();this.pos+=r;break;case L.StartGroup:for(;;){let[o,s]=this.tag();if(s===L.EndGroup){if(t!==void 0&&o!==t)throw new Error("invalid end group tag");break}this.skip(s,o)}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 C.dec(...this.varint64())}uint64(){return C.uDec(...this.varint64())}sint64(){let[e,t]=this.varint64(),n=-(e&1);return e=(e>>>1|(t&1)<<31)^n,t=t>>>1^n,C.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 C.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return C.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 Oe=x(()=>{"use strict"});var Le=x(()=>{"use strict"});var Me=x(()=>{"use strict"});var ke=x(()=>{"use strict";De();Oe();le();Le();Me()});function Ue(){return{propertyId:"",pageviewId:"",sessionId:"",pageUrl:"",country:"",region:"",deviceType:"",userId:"",domain:"",events:[],browser:"",deviceManufacturer:"",deviceModel:"",city:"",postalCode:""}}function Pe(){return{timestampMs:0,type:0,eventName:"",auctionId:"",transactionId:"",adUnitCode:"",bid:void 0,namespace:"",eventId:"",metadata:{},viewableDurationMs:void 0,bidderOutcomes:[]}}function Ne(){return{key:"",value:""}}function Ve(){return{bidder:"",adUnitCode:"",mediaType:"",outcome:0,latencyMs:0}}function Fe(){return{bidder:"",cpm:0,currency:"",width:0,height:0,dealId:"",mediaType:"",latencyMs:0,advertiserDomain:"",creativeId:""}}var b,S,Y,j,fe,z,X,$e=x(()=>{"use strict";ke();b={TRACE_EVENT_TYPE_UNSPECIFIED:0,AUCTION_START:1,AUCTION_END:2,BID_RESPONSE:3,BID_WIN:4,IMPRESSION:5,VIEWABLE:6,TIME_IN_VIEW:7,REFRESH:8,ERROR:9,SLOT_DEFINED:10,SLOT_DESTROYED:11,CLICK:12,AD_RENDER_FAILED:13,UNRECOGNIZED:-1},S={BIDDER_OUTCOME_UNSPECIFIED:0,BIDDER_OUTCOME_BID:1,BIDDER_OUTCOME_NO_BID:2,BIDDER_OUTCOME_TIMEOUT:3,BIDDER_OUTCOME_ERROR:4,BIDDER_OUTCOME_NO_RESPONSE:5,UNRECOGNIZED:-1};Y={encode(i,e=new M){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)j.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 B?i:new B(i),n=e===void 0?t.len:t.pos+e,r=Ue();for(;t.pos<n;){let o=t.uint32();switch(o>>>3){case 1:{if(o!==10)break;r.propertyId=t.string();continue}case 2:{if(o!==18)break;r.pageviewId=t.string();continue}case 3:{if(o!==26)break;r.sessionId=t.string();continue}case 4:{if(o!==34)break;r.pageUrl=t.string();continue}case 5:{if(o!==42)break;r.country=t.string();continue}case 6:{if(o!==50)break;r.region=t.string();continue}case 7:{if(o!==58)break;r.deviceType=t.string();continue}case 8:{if(o!==66)break;r.userId=t.string();continue}case 9:{if(o!==74)break;r.domain=t.string();continue}case 10:{if(o!==82)break;let s=j.decode(t,t.uint32());s!==void 0&&r.events.push(s);continue}case 11:{if(o!==90)break;r.browser=t.string();continue}case 12:{if(o!==98)break;r.deviceManufacturer=t.string();continue}case 13:{if(o!==106)break;r.deviceModel=t.string();continue}case 14:{if(o!==114)break;r.city=t.string();continue}case 15:{if(o!==122)break;r.postalCode=t.string();continue}}if((o&7)===4||o===0)break;t.skip(o&7)}return r},create(i){return Y.fromPartial(i??{})},fromPartial(i){let e=Ue();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=>j.fromPartial(t))||[],e.browser=i.browser??"",e.deviceManufacturer=i.deviceManufacturer??"",e.deviceModel=i.deviceModel??"",e.city=i.city??"",e.postalCode=i.postalCode??"",e}};j={encode(i,e=new M){if(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])=>{fe.encode({key:t,value:n},e.uint32(82).fork()).join()}),i.viewableDurationMs!==void 0&&e.uint32(89).double(i.viewableDurationMs),i.bidderOutcomes!==void 0&&i.bidderOutcomes.length!==0)for(let t of i.bidderOutcomes)z.encode(t,e.uint32(98).fork()).join();return e},decode(i,e){let t=i instanceof B?i:new B(i),n=e===void 0?t.len:t.pos+e,r=Pe();for(;t.pos<n;){let o=t.uint32();switch(o>>>3){case 1:{if(o!==9)break;r.timestampMs=t.double();continue}case 2:{if(o!==16)break;r.type=t.int32();continue}case 3:{if(o!==26)break;r.eventName=t.string();continue}case 4:{if(o!==34)break;r.auctionId=t.string();continue}case 5:{if(o!==42)break;r.transactionId=t.string();continue}case 6:{if(o!==50)break;r.adUnitCode=t.string();continue}case 7:{if(o!==58)break;r.bid=X.decode(t,t.uint32());continue}case 8:{if(o!==66)break;r.namespace=t.string();continue}case 9:{if(o!==74)break;r.eventId=t.string();continue}case 10:{if(o!==82)break;let s=fe.decode(t,t.uint32());s.value!==void 0&&(r.metadata[s.key]=s.value);continue}case 11:{if(o!==89)break;r.viewableDurationMs=t.double();continue}case 12:{if(o!==98)break;let s=z.decode(t,t.uint32());s!==void 0&&r.bidderOutcomes.push(s);continue}}if((o&7)===4||o===0)break;t.skip(o&7)}return r},create(i){return j.fromPartial(i??{})},fromPartial(i){let e=Pe();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.bidderOutcomes=i.bidderOutcomes?.map(t=>z.fromPartial(t))||[],e}};fe={encode(i,e=new M){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 B?i:new B(i),n=e===void 0?t.len:t.pos+e,r=Ne();for(;t.pos<n;){let o=t.uint32();switch(o>>>3){case 1:{if(o!==10)break;r.key=t.string();continue}case 2:{if(o!==18)break;r.value=t.string();continue}}if((o&7)===4||o===0)break;t.skip(o&7)}return r},create(i){return fe.fromPartial(i??{})},fromPartial(i){let e=Ne();return e.key=i.key??"",e.value=i.value??"",e}};z={encode(i,e=new M){return i.bidder!==void 0&&i.bidder!==""&&e.uint32(10).string(i.bidder),i.adUnitCode!==void 0&&i.adUnitCode!==""&&e.uint32(18).string(i.adUnitCode),i.mediaType!==void 0&&i.mediaType!==""&&e.uint32(26).string(i.mediaType),i.outcome!==void 0&&i.outcome!==0&&e.uint32(32).int32(i.outcome),i.latencyMs!==void 0&&i.latencyMs!==0&&e.uint32(41).double(i.latencyMs),e},decode(i,e){let t=i instanceof B?i:new B(i),n=e===void 0?t.len:t.pos+e,r=Ve();for(;t.pos<n;){let o=t.uint32();switch(o>>>3){case 1:{if(o!==10)break;r.bidder=t.string();continue}case 2:{if(o!==18)break;r.adUnitCode=t.string();continue}case 3:{if(o!==26)break;r.mediaType=t.string();continue}case 4:{if(o!==32)break;r.outcome=t.int32();continue}case 5:{if(o!==41)break;r.latencyMs=t.double();continue}}if((o&7)===4||o===0)break;t.skip(o&7)}return r},create(i){return z.fromPartial(i??{})},fromPartial(i){let e=Ve();return e.bidder=i.bidder??"",e.adUnitCode=i.adUnitCode??"",e.mediaType=i.mediaType??"",e.outcome=i.outcome??0,e.latencyMs=i.latencyMs??0,e}};X={encode(i,e=new M){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 B?i:new B(i),n=e===void 0?t.len:t.pos+e,r=Fe();for(;t.pos<n;){let o=t.uint32();switch(o>>>3){case 1:{if(o!==10)break;r.bidder=t.string();continue}case 2:{if(o!==17)break;r.cpm=t.double();continue}case 3:{if(o!==26)break;r.currency=t.string();continue}case 4:{if(o!==32)break;r.width=t.int32();continue}case 5:{if(o!==40)break;r.height=t.int32();continue}case 6:{if(o!==50)break;r.dealId=t.string();continue}case 7:{if(o!==58)break;r.mediaType=t.string();continue}case 8:{if(o!==65)break;r.latencyMs=t.double();continue}case 9:{if(o!==74)break;r.advertiserDomain=t.string();continue}case 10:{if(o!==82)break;r.creativeId=t.string();continue}}if((o&7)===4||o===0)break;t.skip(o&7)}return r},create(i){return X.fromPartial(i??{})},fromPartial(i){let e=Fe();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 F(){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 xt(i){let e="";for(let n=0;n<i.length;n+=8192)e+=String.fromCharCode(...i.subarray(n,n+8192));return btoa(e)}function Ct(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 St(i){if(!i)return!1;let e;try{e=new URL(i)}catch{return!1}return e.username||e.password?!1:e.protocol==="https:"?!0:e.protocol==="http:"?e.hostname==="localhost"||e.hostname==="127.0.0.1"||e.hostname==="[::1]":!1}function Dt(i){let e={},t=0;for(let n of Object.keys(i)){if(t>=It)break;let r=i[n];if(r==null)continue;let o=String(r);e[n]=o.length>qe?`${o.slice(0,qe)}...[truncated]`:o,t++}return e}function Ot(i){let e=i.slice(J.length).split("_");return e.length===2&&/^\d+$/.test(e[0])}function Lt(i,e){if(!i||!e)return!1;try{return new URL(i).origin===new URL(e).origin}catch{return!1}}function je(){let i=Date.now();q=i;try{typeof localStorage<"u"&&localStorage.setItem(ee,i.toString())}catch{}}function Mt(){let i=Date.now();try{if(typeof localStorage<"u"){let e=localStorage.getItem(He),t=localStorage.getItem(ee),n=t&&parseInt(t,10)||0;if(e&&n&&i-n<=Ge)return localStorage.setItem(ee,i.toString()),e;let r=F();return localStorage.setItem(He,r),localStorage.setItem(ee,i.toString()),r}}catch{}return Z&&q&&i-q<=Ge?(q=i,Z):(Z=F(),q=i,Z)}function h(i){return String(i??"").replace(/%/g,"%25").replace(/:/g,"%3A")}function kt(i,e){switch(i){case"auctionInit":return`auctionInit:${h(e?.auctionId)}`;case"auctionEnd":return`auctionEnd:${h(e?.auctionId)}`;case"bidRequested":{let t=Array.isArray(e?.bids)?e.bids.map(n=>h(n?.bidId||n?.transactionId||n?.adUnitCode)).join(","):"";return`bidRequested:${h(e?.auctionId)}:${h(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:${h(t.auctionId)}:${h(t.adUnitCode)}:${h(t.bidderCode||t.bidder)}:${h(n)}:${h(r)}`}case"bidTimeout":return"bidTimeout:"+(Array.isArray(e)?e:e?[e]:[]).map(n=>`${h(n?.auctionId)}:${h(n?.bidderCode||n?.bidder)}:${h(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:${h(t.auctionId)}:${h(t.adUnitCode)}:${h(t.bidderCode||t.bidder)}:${h(n)}:${h(r)}`}case"noBid":return`noBid:${h(e?.auctionId)}:${h(e?.adUnitCode)}:${h(e?.bidderCode||e?.bidder)}:${h(e?.bidId||e?.transactionId)}`;case"adRenderFailed":{let t=e?.bid||{};return`adRenderFailed:${h(t.auctionId||e?.auctionId)}:${h(t.adUnitCode||e?.adUnitCode)}:${h(t.bidderCode||t.bidder||e?.bidderCode||e?.bidder)}:${h(e?.reason)}:${h(e?.message)}`}case"adRenderSucceeded":{let t=e?.bid||e||{},n=t.creativeId||t.adId||e?.adId||"",r=t.originalCpm??t.cpm??"";return`adRenderSucceeded:${h(t.auctionId||e?.auctionId)}:${h(t.adUnitCode||e?.adUnitCode)}:${h(t.bidderCode||t.bidder)}:${h(n)}:${h(r)}`}case"setTargeting":return`setTargeting:${Object.keys(e||{}).sort().map(h).join(",")}`;case"auctionDebug":return`auctionDebug:${h(e?.type)}:${h(String(e?.arguments?.[0]??"").slice(0,50))}`;default:return""}}function k(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 ze(i){if(i)try{let e=i.prototype;if(e&&typeof e.getAdsManager=="function"&&!e.getAdsManager.__bidkernelHooked){let t=e.getAdsManager,n=function(...r){let o=t.apply(this,r);if(o)for(let s of V.getActiveInstances())try{s.attachImaAdsManager(o)}catch{}return o};n.__bidkernelHooked=!0,e.getAdsManager=n}}catch{}}function Xe(i){if(i)try{let e=i.prototype||i;if(e&&typeof e.init=="function"&&!e.init.__bidkernelHooked){let t=e.init,n=function(...r){for(let o of V.getActiveInstances())try{o.attachImaAdsManager(this)}catch{}return t.apply(this,r)};n.__bidkernelHooked=!0,e.init=n}if(e&&typeof e.start=="function"&&!e.start.__bidkernelHooked){let t=e.start,n=function(...r){for(let o of V.getActiveInstances())try{o.attachImaAdsManager(this)}catch{}return t.apply(this,r)};n.__bidkernelHooked=!0,e.start=n}}catch{}}function Ye(i){if(i)try{let e=i.prototype;if(!e)return;if(typeof e.addEventListener=="function"&&!e.addEventListener.__bidkernelHooked){let t=e.addEventListener,n=function(r,o,...s){if((r==="adsManagerLoaded"||r===(this?.AdsManagerLoadedEvent?.Type?.ADS_MANAGER_LOADED||"adsManagerLoaded"))&&typeof o=="function"){let d=pe.get(o);return d||(d=function(a){if(a&&typeof a.getAdsManager=="function"&&!a.getAdsManager.__bidkernelHooked){let l=a.getAdsManager;a.getAdsManager=function(...u){let y=l.apply(this,u);if(y)for(let f of V.getActiveInstances())try{f.attachImaAdsManager(y)}catch{}return y},a.getAdsManager.__bidkernelHooked=!0}return o.apply(this,arguments)},pe.set(o,d)),t.call(this,r,d,...s)}return t.call(this,r,o,...s)};n.__bidkernelHooked=!0,e.addEventListener=n}if(typeof e.removeEventListener=="function"&&!e.removeEventListener.__bidkernelHooked){let t=e.removeEventListener,n=function(r,o,...s){let d=typeof o=="function"?pe.get(o):void 0;return t.call(this,r,d||o,...s)};n.__bidkernelHooked=!0,e.removeEventListener=n}}catch{}}function K(i){if(!(!i||typeof i!="object"))try{i.AdsManagerLoadedEvent&&ze(i.AdsManagerLoadedEvent);let e=Object.getOwnPropertyDescriptor(i,"AdsManagerLoadedEvent");if(!e||e.configurable){let r=i.AdsManagerLoadedEvent;try{Object.defineProperty(i,"AdsManagerLoadedEvent",{configurable:!0,enumerable:!0,get(){return r},set(o){r=o,ze(o)}})}catch{}}i.AdsLoader&&Ye(i.AdsLoader);let t=Object.getOwnPropertyDescriptor(i,"AdsLoader");if(!t||t.configurable){let r=i.AdsLoader;try{Object.defineProperty(i,"AdsLoader",{configurable:!0,enumerable:!0,get(){return r},set(o){r=o,Ye(o)}})}catch{}}i.AdsManager&&Xe(i.AdsManager);let n=Object.getOwnPropertyDescriptor(i,"AdsManager");if(!n||n.configurable){let r=i.AdsManager;try{Object.defineProperty(i,"AdsManager",{configurable:!0,enumerable:!0,get(){return r},set(o){r=o,Xe(o)}})}catch{}}}catch{}}function me(){if(typeof window>"u")return;let i=window;if(i.google?.ima&&K(i.google.ima),i.google&&typeof i.google=="object"){let t=Object.getOwnPropertyDescriptor(i.google,"ima");if(!t||t.configurable){let n=i.google.ima;try{Object.defineProperty(i.google,"ima",{configurable:!0,enumerable:!0,get(){return n},set(r){n=r,K(r)}})}catch{}}}let e=Object.getOwnPropertyDescriptor(i,"google");if(!e||e.configurable){let t=i.google;try{Object.defineProperty(i,"google",{configurable:!0,enumerable:!0,get(){return t},set(n){if(t=n,t&&typeof t=="object"){t.ima&&K(t.ima);let r=Object.getOwnPropertyDescriptor(t,"ima");if(!r||r.configurable){let o=t.ima;try{Object.defineProperty(t,"ima",{configurable:!0,enumerable:!0,get(){return o},set(s){o=s,K(s)}})}catch{}}}}})}catch{}}}function $(i,e=!0){if(!i)return null;if(Array.isArray(i)){let t=i.find(n=>n?.provider==="bidkernel")??(e?i.find(n=>n&&typeof n=="object"&&n.provider===void 0):void 0);return t?$(t,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 Ut(i){if(!i)return null;if(i._bidkernelAnalyticsConfig){let e=$(i._bidkernelAnalyticsConfig);if(e)return e}if(i.bidkernelPrebidAnalytics){let e=i.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 be(i="pbjs",e){let t=typeof window<"u"?window:{};t[i]=t[i]||{};let n=t[i],r=s=>{let d=t._bidkernelPrebidAnalytics,a=d?.getEndpoint?.()||"",l={pbjsGlobalName:i,...e,...s};if(a&&!Lt(l.endpoint||"",a)&&(ye.warn(`Ignoring analytics endpoint change to ${l.endpoint||"(empty)"}: this page is pinned to ${a}. Reload to change the ingest endpoint.`),l.endpoint=a),d)try{d.disable()}catch(y){ye.warn("Failed to disable previous analytics instance:",y)}let u=new V(l);return u.enable(),t._bidkernelPrebidAnalytics=u,u},o=()=>{try{n.adapterManager&&typeof n.adapterManager.registerAnalyticsAdapter=="function"&&n.adapterManager.registerAnalyticsAdapter({adapter:{enableAnalytics:d=>{let a=$(d,!Array.isArray(d));a&&r(a)},disableAnalytics:()=>{t._bidkernelPrebidAnalytics&&t._bidkernelPrebidAnalytics.disable()}},code:"bidkernel"});let s=Ut(t);s&&(s.propertyId||e?.propertyId)&&r(s)}catch(s){ye.warn("Failed to register standard Prebid analytics adapter:",s)}};n.adapterManager&&typeof n.adapterManager.registerAnalyticsAdapter=="function"?o():(n.que=n.que||[],n.que.push(o))}var yt,We,gt,Q,mt,bt,he,qe,It,Ke,J,vt,Tt,Et,wt,At,N,Rt,_t,Bt,He,ee,Ge,Z,q,ge,pe,V,ye,Qe=x(()=>{"use strict";Te();$e();yt=20,We=1e4,gt=50,Q=200,mt=300*1e3,bt=10,he=32*1024,qe=1024,It=16,Ke="text/plain",J="_bidkernel_pending_",vt=20,Tt=7200*1e3,Et=1e4,wt={auctionStart:b.AUCTION_START,auctionEnd:b.AUCTION_END,bidResponse:b.BID_RESPONSE,bidWin:b.BID_WIN,adRenderFailed:b.AD_RENDER_FAILED,click:b.CLICK,impression:b.IMPRESSION,refresh:b.REFRESH,timeInView:b.TIME_IN_VIEW,viewable:b.VIEWABLE},At=new Set([b.IMPRESSION,b.BID_WIN,b.CLICK]),N=1800*1e3,Rt=200,_t=1e3,Bt=50,He="_bidkernel_session",ee="_bidkernel_session_ts",Ge=1800*1e3,Z=null,q=0;ge=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=kt(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}};pe=new WeakMap;typeof window<"u"&&me();V=class i{static activeInstances=new Set;static getActiveInstances(){return i.activeInstances}static initImaInterception(){me()}config;queue=[];errorCount=0;flushTimer=null;boundFlushBeacon;boundVisibilityChange;isEnabled=!1;boundPbjsHandlers=[];pageUrl="";deduper=new ge;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;auctionBidderOutcomes=new Map;logger;constructor(e){let t=e.endpoint||"",n=!t||St(t)?t:"";this.config={endpoint:n,propertyId:e.propertyId||"",pageviewId:e.pageviewId||F(),sessionId:e.sessionId||Mt(),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.logger=ie({prefix:"[bidkernel][prebid-analytics]",logLevel:this.config.logLevel}),t&&!n&&this.log("ERROR",`Rejected untrusted analytics endpoint ${t}: must be an absolute https:// URL without embedded credentials. Events will not be transmitted.`),this.boundFlushBeacon=()=>{this.flushAllSlotsTimeInView(),this.flushBeacon()},this.boundVisibilityChange=()=>this.handleVisibilityChange()}enable(){if(!this.isEnabled){if(this.isEnabled=!0,i.activeInstances.add(this),this.logger.setLevel(this.config.logLevel),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,o]of n)t.onEvent(r,o),this.boundPbjsHandlers.push({event:r,handler:o})}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 o={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 s of r){if(!s)continue;let d=s.eventType||s.event||s.name,a=s.args!==void 0?s.args:s.data!==void 0?s.data:s,l=o[d];l&&l(a)}}}}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(),We),this.resendPersistedBatches(),me(),window.google?.ima&&K(window.google.ima)}}}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)}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.auctionBidderOutcomes.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(b.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 a of i.activeInstances)if(a!==this&&a.elementToSlotId.has(t.target)){a.handleIntersection([t]);break}continue}let r=this.slotViewabilityRecords.get(n);if(!r)continue;let o=t.isIntersecting&&(t.intersectionRatio===void 0||t.intersectionRatio>=.5),s=typeof document>"u"||document.visibilityState==="visible",d=typeof performance<"u"&&performance.now?performance.now():Date.now();if(o){if(!r.inView&&(r.inView=!0,s)){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(b.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 o=this.getCurrentTimeInView(e);if(o>=n.thresholdMs){n.fired=!0;try{n.callback(e.slotId,o)}catch(s){this.log("ERROR","Error in threshold listener callback",s)}}}},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(b.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 o=t||n?.adUnitCode||(r?r.id:"")||F(),s=this.slotViewabilityRecords.get(o);if(s){if(n?.refreshIndex===void 0||n.refreshIndex>s.refreshIndex){this.flushSlotTimeInView(o);let a=n?.refreshIndex!==void 0?n.refreshIndex:(this.slotRefreshIndices.get(o)??s.refreshIndex)+1;this.slotRefreshIndices.set(o,a),n?.emitRefreshEvent!==!1&&this.enqueue(b.REFRESH,"refresh",{auctionId:n?.auctionId||s.auctionId,transactionId:n?.transactionId||s.transactionId,adUnitCode:o,bid:n?.bid??s.bidPayload,metadata:{...n?.metadata,refresh_index:String(a)}}),s.dwellTimer&&(clearTimeout(s.dwellTimer),s.dwellTimer=null,s.dwellStartedAt=null);for(let u of s.thresholdListeners)u.fired=!1,u.timer&&(clearTimeout(u.timer),u.timer=null);s.viewableFired=!1,s.accumulatedTimeInViewMs=0;let l=typeof performance<"u"&&performance.now?performance.now():Date.now();if(s.lastEnteredViewAt=s.inView?l:null,s.refreshIndex=a,s.auctionId=n?.auctionId||s.auctionId,s.transactionId=n?.transactionId||s.transactionId,s.mediaType=n?.mediaType||s.mediaType||"banner",s.bidPayload=n?.bid!==void 0?n.bid:s.bidPayload,s.metadata=n?.metadata??s.metadata,s.inView&&(typeof document>"u"||document.visibilityState==="visible")){let u=s.mediaType==="video"?2e3:1e3;s.dwellStartedAt=l,s.dwellTimer=setTimeout(()=>{this.handleDwellComplete(s)},u),this.scheduleThresholdTimers(s)}}else s.auctionId=n?.auctionId||s.auctionId,s.transactionId=n?.transactionId||s.transactionId,s.mediaType=n?.mediaType||s.mediaType,n?.bid!==void 0&&(s.bidPayload=n.bid),n?.metadata!==void 0&&(s.metadata=n.metadata);n?.auctionId&&this.slotLastAuctionIds.set(o,n.auctionId),r&&(s.element&&s.element!==r&&this.intersectionObserver&&(this.intersectionObserver.unobserve(s.element),this.elementToSlotId.delete(s.element)),s.element=r,this.elementToSlotId.set(r,o),this.intersectionObserver?.observe(r))}else{let d=n?.refreshIndex??this.slotRefreshIndices.get(o)??0;this.slotRefreshIndices.set(o,d),n?.auctionId&&this.slotLastAuctionIds.set(o,n.auctionId);let a=this.pendingThresholdListeners.get(o)||new Set;this.pendingThresholdListeners.delete(o);let l={slotId:o,element:r,adUnitCode:n?.adUnitCode||o,auctionId:n?.auctionId||"",transactionId:n?.transactionId||"",mediaType:n?.mediaType||"banner",bidPayload:n?.bid,metadata:n?.metadata,refreshIndex:d,inView:!1,lastEnteredViewAt:null,accumulatedTimeInViewMs:0,viewableFired:!1,dwellTimer:null,dwellStartedAt:null,thresholdListeners:a};this.slotViewabilityRecords.set(o,l),r&&(this.elementToSlotId.set(r,o),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.slotLastAuctionIds.delete(e),this.pendingThresholdListeners.delete(e);let t=`${h(e)}:`;for(let r of Array.from(this.slotEmittedImpressionKeys))(r===e||r.startsWith(t))&&this.slotEmittedImpressionKeys.delete(r);let n=this.cachedWinningBids.get(e);n&&this.deleteCachedBidEntry(n)}getCachedBid(e){let t=this.cachedWinningBids.get(e);if(t){if(Date.now()-t.timestamp>N){this.deleteCachedBidEntry(t);return}return t}}deleteCachedBidEntry(e){for(let[t,n]of Array.from(this.cachedWinningBids))n===e&&this.cachedWinningBids.delete(t)}pruneCachedWinningBids(){let e=Date.now();for(let[t,n]of Array.from(this.cachedWinningBids))e-n.timestamp>N&&this.cachedWinningBids.delete(t);for(;this.cachedWinningBids.size>Rt;){let t=this.cachedWinningBids.keys().next();if(t.done)break;this.cachedWinningBids.delete(t.value)}}findCachedWinningBid(e){let t=Date.now(),n=s=>this.hasImpressionEmitted(s.adUnitCode,void 0,s.auctionId,s.bidTrace.creativeId);if(e?.creativeId||e?.adId){for(let s of Array.from(this.cachedWinningBids.values()))if(!(t-s.timestamp>N)&&(e.creativeId&&(s.bidTrace.creativeId===e.creativeId||s.rawBid?.creativeId===e.creativeId)||e.adId&&(s.rawBid?.adId===e.adId||s.adUnitCode===e.adId)))return s}let r;if(e?.mediaType){for(let d of Array.from(this.cachedWinningBids.values())){if(t-d.timestamp>N)continue;(d.bidTrace.mediaType===e.mediaType||d.rawBid?.mediaType===e.mediaType||e.mediaType==="video"&&d.rawBid?.mediaTypes?.video!==void 0)&&(n(d)||(!r||d.timestamp<r.timestamp)&&(r=d))}if(r)return r;let s;for(let d of Array.from(this.cachedWinningBids.values())){if(t-d.timestamp>N)continue;(d.bidTrace.mediaType===e.mediaType||d.rawBid?.mediaType===e.mediaType||e.mediaType==="video"&&d.rawBid?.mediaTypes?.video!==void 0)&&(!s||d.timestamp>s.timestamp)&&(s=d)}if(s)return s}for(let s of Array.from(this.cachedWinningBids.values()))t-s.timestamp>N||n(s)||(!r||s.timestamp>r.timestamp)&&(r=s);if(r)return r;let o;for(let s of Array.from(this.cachedWinningBids.values()))t-s.timestamp>N||(!o||s.timestamp>o.timestamp)&&(o=s);return o}addImpressionKey(e){if(!this.slotEmittedImpressionKeys.has(e)){for(;this.slotEmittedImpressionKeys.size>=_t;){let t=this.slotEmittedImpressionKeys.values().next();if(t.done)break;this.slotEmittedImpressionKeys.delete(t.value)}this.slotEmittedImpressionKeys.add(e)}}getOrCreateAuctionOutcomes(e){let t=this.auctionBidderOutcomes.get(e);for(t||(t=new Map,this.auctionBidderOutcomes.set(e,t));this.auctionBidderOutcomes.size>Bt;){let n=this.auctionBidderOutcomes.keys().next();if(n.done||n.value===e)break;this.auctionBidderOutcomes.delete(n.value)}return t}hasImpressionEmitted(e,t,n,r){let o=t??this.slotRefreshIndices.get(e)??0,s=`${h(e)}:${o}`;return r?n?this.slotEmittedImpressionKeys.has(`${s}:auc:${h(n)}:${h(r)}`)||this.slotEmittedImpressionKeys.has(`${s}:${h(r)}`):this.slotEmittedImpressionKeys.has(`${s}:${h(r)}`):n?this.slotEmittedImpressionKeys.has(`${s}:auc:${h(n)}`):this.slotEmittedImpressionKeys.has(s)}markImpressionEmitted(e,t,n,r){let o=`${h(e)}:${t}`;this.addImpressionKey(o),r&&this.addImpressionKey(`${o}:${h(r)}`),n&&(this.addImpressionKey(`${o}:auc:${h(n)}`),r&&this.addImpressionKey(`${o}:auc:${h(n)}:${h(r)}`))}recordImpression(e,t){if(!this.isEnabled)return!1;let n=e||t?.adUnitCode||"",r=t?.adUnitCode||n,o=(t?.auctionId&&n?this.getCachedBid(`${t.auctionId}:${n}`):void 0)||(t?.auctionId&&r?this.getCachedBid(`${t.auctionId}:${r}`):void 0)||(n?this.getCachedBid(n):void 0)||(r?this.getCachedBid(r):void 0),s=t?.bid||o?.rawBid||{},d=t?.auctionId||s.auctionId||o?.auctionId||"",a=t?.transactionId||s.transactionId||o?.transactionId||"",l=s.creativeId||o?.bidTrace?.creativeId||t?.bid?.creativeId||"",u=t?.mediaType||s.mediaType||o?.bidTrace?.mediaType||"banner",y=n||r,f=(n?this.slotViewabilityRecords.get(n):void 0)||(r?this.slotViewabilityRecords.get(r):void 0),v=y?this.slotLastAuctionIds.get(y)||(f?f.auctionId:void 0):void 0,T=!!(y&&d&&v&&v!==d&&t?.refreshIndex===void 0),p={bidder:s.bidderCode||s.bidder||o?.bidTrace?.bidder||"",cpm:Number.isFinite(s.originalCpm)?s.originalCpm:Number.isFinite(s.cpm)?s.cpm:o?.bidTrace?.cpm??0,currency:s.originalCurrency??s.currency??o?.bidTrace?.currency??"USD",...k(s).width?k(s):o?.bidTrace?{width:o.bidTrace.width,height:o.bidTrace.height}:k(s),dealId:s.dealId||o?.bidTrace?.dealId||"",mediaType:u,latencyMs:Number.isFinite(s.timeToRespond)?s.timeToRespond:o?.bidTrace?.latencyMs??0,advertiserDomain:s.meta?.advertiserDomains?.[0]||o?.bidTrace?.advertiserDomain||"",creativeId:s.creativeId||o?.bidTrace?.creativeId||""};if(T&&y){this.flushSlotTimeInView(y);let w=(this.slotRefreshIndices.get(y)??(f?f.refreshIndex:0))+1;this.slotRefreshIndices.set(y,w),this.slotLastAuctionIds.set(y,d),f&&(f.refreshIndex=w,f.auctionId=d,f.transactionId=a,f.bidPayload=p,f.viewableFired=!1,f.accumulatedTimeInViewMs=0),this.enqueue(b.REFRESH,"refresh",{auctionId:d,transactionId:a,adUnitCode:y,bid:p,metadata:{...t?.metadata,refresh_index:String(w)}})}else y&&(d&&this.slotLastAuctionIds.set(y,d),this.slotRefreshIndices.has(y)||this.slotRefreshIndices.set(y,0));let _=t?.refreshIndex??(n?this.slotRefreshIndices.get(n)??(r?this.slotRefreshIndices.get(r):void 0)??(f?f.refreshIndex:0):0);return n&&this.hasImpressionEmitted(n,_,d,l)||r&&r!==n&&this.hasImpressionEmitted(r,_,d,l)?(this.log("DEBUG",`Impression already emitted for slot ${n||r} in cycle ${_}`),!1):(n&&this.markImpressionEmitted(n,_,d,l),r&&r!==n&&this.markImpressionEmitted(r,_,d,l),this.enqueue(b.IMPRESSION,"impression",{auctionId:d,transactionId:a,adUnitCode:r,bid:p,metadata:{...t?.metadata,refresh_index:String(_)}}),f&&(!f.bidPayload&&p&&(f.bidPayload=p),!f.auctionId&&d&&(f.auctionId=d),!f.transactionId&&a&&(f.transactionId=a)),!0)}attachImaAdsManager(e,t){if(!e||typeof e.addEventListener!="function")return this.log("WARN","Invalid AdsManager passed to attachImaAdsManager"),()=>{};if(!e.__bidkernelAttachedInstances)try{Object.defineProperty(e,"__bidkernelAttachedInstances",{value:new Set,configurable:!0,writable:!0})}catch{e.__bidkernelAttachedInstances=new Set}if(e.__bidkernelAttachedInstances.has(this))return()=>{};e.__bidkernelAttachedInstances.add(this);let n=t?.slotId||t?.adUnitCode||"video",r=t?.adUnitCode||n,o=t?.auctionId||"",s=t?.transactionId||"",d=g=>{let c=(o?this.getCachedBid(`${o}:${r}`):void 0)||(o&&n!==r?this.getCachedBid(`${o}:${n}`):void 0)||(r!=="video"?this.getCachedBid(r):void 0)||(n!==r&&n!=="video"?this.getCachedBid(n):void 0);return c||(c=this.findCachedWinningBid({creativeId:g?.creativeId,adId:g?.adId,mediaType:"video"})),c},a=!1,l=g=>{a=!0,this.log("DEBUG","IMA AdEvent.STARTED / IMPRESSION received",g);let c=typeof g?.getAd=="function"?g.getAd():g?.ad,m={};c&&(m.creativeId=(typeof c.getCreativeId=="function"?c.getCreativeId():c.creativeId)||"",m.adId=(typeof c.getAdId=="function"?c.getAdId():c.id)||"",m.title=(typeof c.getTitle=="function"?c.getTitle():c.title)||"",m.duration=typeof c.getDuration=="function"?c.getDuration():c.duration,m.advertiserName=typeof c.getAdvertiserName=="function"?c.getAdvertiserName():"");let I=d(m),R=t?.slotId&&t.slotId!=="video"?t.slotId:t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:I?.adUnitCode||t?.slotId||t?.adUnitCode||"video",D=t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:I?.adUnitCode||R,P=o||I?.auctionId||"",Je=s||I?.transactionId||"",Ie={...I?.rawBid||t?.bid,mediaType:"video",creativeId:m.creativeId||I?.bidTrace?.creativeId||t?.bid?.creativeId||""};if(this.recordImpression(R,{adUnitCode:D,auctionId:P,transactionId:Je,mediaType:"video",bid:Ie,metadata:{...t?.metadata,media_type:"video",...m.title?{ad_title:m.title}:{},...Number.isFinite(m.duration)?{ad_duration_s:String(m.duration)}:{}}})&&t?.onImpression)try{t.onImpression(R,{ad:c,bid:Ie})}catch(et){this.log("ERROR","Error in onImpression callback",et)}},u=g=>{if(this.log("DEBUG",`IMA AdEvent milestone: ${g}`),t?.onMilestone)try{t.onMilestone(g,n)}catch(c){this.log("ERROR","Error in onMilestone callback",c)}},y=g=>{this.log("DEBUG","IMA AdEvent.CLICK received",g);let c=d(),m=t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:c?.adUnitCode||n;this.enqueue(b.CLICK,"click",{auctionId:o||c?.auctionId,transactionId:s||c?.transactionId,adUnitCode:m,bid:c?.bidTrace||t?.bid,metadata:{...t?.metadata,media_type:"video"}})},f=g=>{this.log("WARN","IMA AdErrorEvent received",g);let c=typeof g?.getError=="function"?g.getError():g?.error||g,m=(c&&typeof c.getMessage=="function"?c.getMessage():c?.message)||String(c||"IMA ad error"),I=(c&&typeof c.getErrorCode=="function"?c.getErrorCode():c?.code)||"",R=d(),D=t?.adUnitCode&&t.adUnitCode!=="video"?t.adUnitCode:R?.adUnitCode||n;if(this.enqueue(b.AD_RENDER_FAILED,"adRenderFailed",{auctionId:o||R?.auctionId,transactionId:s||R?.transactionId,adUnitCode:D,bid:R?.bidTrace||t?.bid,metadata:{...t?.metadata,reason:a?"ima_playback_error":"ima_ad_error",playback_phase:a?"post_start":"pre_start",message:m,...I?{ima_error_code:String(I)}:{}},error:typeof c=="object"?c:new Error(m)}),t?.onError)try{t.onError(c)}catch(P){this.log("ERROR","Error in onError callback",P)}},v=typeof window<"u"?window.google?.ima:void 0,T=v?.AdEvent?.Type||{},p=v?.AdErrorEvent?.Type||{},_=[{type:T.STARTED||"started",handler:l},{type:T.IMPRESSION||"impression",handler:l},{type:T.FIRST_QUARTILE||"firstQuartile",handler:()=>u("firstQuartile")},{type:T.MIDPOINT||"midpoint",handler:()=>u("midpoint")},{type:T.THIRD_QUARTILE||"thirdQuartile",handler:()=>u("thirdQuartile")},{type:T.COMPLETE||"complete",handler:()=>u("complete")},{type:T.CLICK||"click",handler:y},{type:p.AD_ERROR||"adError",handler:f}],U=new Set,w=[];for(let g of _)U.has(g.type)||(U.add(g.type),w.push(g));for(let{type:g,handler:c}of w)try{e.addEventListener(g,c)}catch{}let E=()=>{e.__bidkernelAttachedInstances?.delete(this);for(let{type:g,handler:c}of w)try{e.removeEventListener(g,c)}catch{}this.videoDetachCleanups.delete(E)};return this.videoDetachCleanups.add(E),E}attachVideoPlayer(e,t){if(!e)return this.log("WARN","attachVideoPlayer called with null/undefined target"),()=>{};let n=null;if(typeof e=="string"){if(typeof document<"u")try{n=document.querySelector(e)||document.getElementById(e)}catch{n=document.getElementById(e)}}else if(typeof HTMLElement<"u"&&e instanceof HTMLElement)n=e;else if(e&&typeof e=="object"&&e.nodeType===1)n=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"&&(n=e)}let r=t?.slotId||t?.adUnitCode||(n?n.id:"")||"video",o=t?.adUnitCode||r,s=t?.auctionId||"",d=t?.transactionId||"",a=()=>(s?this.getCachedBid(`${s}:${o}`):void 0)||(s&&r!==o?this.getCachedBid(`${s}:${r}`):void 0)||this.getCachedBid(o)||(r!==o?this.getCachedBid(r):void 0),l=null;n&&(n.tagName&&n.tagName.toLowerCase()==="video"?l=n:l=n.querySelector("video"));let u={q1:!1,q2:!1,q3:!1,q4:!1},y=c=>{let m=c||l||(n?.querySelector?n.querySelector("video"):null),I=a(),R={...I?.rawBid||t?.bid,mediaType:"video"};if(this.recordImpression(r,{adUnitCode:o,auctionId:s||I?.auctionId,transactionId:d||I?.transactionId,mediaType:"video",bid:R,metadata:{...t?.metadata,media_type:"video",...m&&Number.isFinite(m.duration)?{video_duration_s:String(Math.round(m.duration))}:{}}})&&t?.onImpression)try{t.onImpression(r,{element:m||n,bid:R})}catch(P){this.log("ERROR","Error in onImpression callback",P)}},f=c=>{this.log("DEBUG","HTML5 video playing event received");let m=c?.target instanceof HTMLVideoElement?c.target:l;y(m)},v=c=>{let m=c?.target instanceof HTMLVideoElement?c.target:l;if(m&&m.currentTime>0&&(y(m),Number.isFinite(m.duration)&&m.duration>0)){let I=m.currentTime/m.duration;I>=.25&&!u.q1&&(u.q1=!0,t?.onMilestone?.("firstQuartile",r)),I>=.5&&!u.q2&&(u.q2=!0,t?.onMilestone?.("midpoint",r)),I>=.75&&!u.q3&&(u.q3=!0,t?.onMilestone?.("thirdQuartile",r))}},T=()=>{u.q4||(u.q4=!0,t?.onMilestone?.("complete",r))},p=c=>{let I=(c?.target instanceof HTMLVideoElement?c.target:l)?.error||l?.error,R=a(),D=I?`HTML5 video error code ${I.code}: ${I.message}`:"Video playback error";if(this.log("WARN",D),this.enqueue(b.AD_RENDER_FAILED,"adRenderFailed",{auctionId:s||R?.auctionId,transactionId:d||R?.transactionId,adUnitCode:o,bid:R?.bidTrace||t?.bid,metadata:{...t?.metadata,reason:"html5_video_error",message:D,...I?.code?{video_error_code:String(I.code)}:{}},error:I?new Error(D):void 0}),t?.onError)try{t.onError(I)}catch(P){this.log("ERROR","Error in onError callback",P)}},_=c=>{c.addEventListener("playing",f),c.addEventListener("play",f),c.addEventListener("timeupdate",v),c.addEventListener("ended",T),c.addEventListener("error",p)},U=c=>{c.removeEventListener("playing",f),c.removeEventListener("play",f),c.removeEventListener("timeupdate",v),c.removeEventListener("ended",T),c.removeEventListener("error",p)},w=null;n&&n!==l&&(n.addEventListener("playing",f,!0),n.addEventListener("play",f,!0),n.addEventListener("timeupdate",v,!0),n.addEventListener("ended",T,!0),n.addEventListener("error",p,!0)),l&&_(l),n&&n.tagName?.toLowerCase()!=="video"&&typeof MutationObserver<"u"&&(w=new MutationObserver(()=>{let c=n.querySelector("video");c&&c!==l&&(l&&U(l),l=c,l&&_(l))}),w.observe(n,{childList:!0,subtree:!0}));let E=a();t?.trackViewability!==!1&&n&&this.observeSlot(n,r,{adUnitCode:o,auctionId:s||E?.auctionId,transactionId:d||E?.transactionId,mediaType:"video",bid:E?.bidTrace||t?.bid,metadata:t?.metadata,emitRefreshEvent:!1});let g=()=>{w&&(w.disconnect(),w=null),n&&n!==l&&(n.removeEventListener("playing",f,!0),n.removeEventListener("play",f,!0),n.removeEventListener("timeupdate",v,!0),n.removeEventListener("ended",T,!0),n.removeEventListener("error",p,!0)),l&&U(l),this.videoDetachCleanups.delete(g)};return this.videoDetachCleanups.add(g),g}onTimeInViewThreshold(e,t,n){let r={thresholdMs:t,callback:n,timer:null,fired:!1},o=this.slotViewabilityRecords.get(e);if(o){o.thresholdListeners.add(r);let s=this.getCurrentTimeInView(o);if(s>=t){r.fired=!0;try{n(e,s)}catch(d){this.log("ERROR","Error in threshold callback",d)}}else if(o.inView&&(typeof document>"u"||document.visibilityState==="visible")){let d=t-s;r.timer=setTimeout(()=>{if(r.timer=null,!r.fired&&o.inView&&(typeof document>"u"||document.visibilityState==="visible")){let a=this.getCurrentTimeInView(o);if(a>=t){r.fired=!0;try{n(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),o&&o.thresholdListeners.delete(r);let s=this.pendingThresholdListeners.get(e);s&&s.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}}getEndpoint(){return this.config.endpoint}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=wt[t]??(e==="ERROR"?b.ERROR:b.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||F(),t)try{let n=new URL(t);this.pageUrl=n.origin+n.pathname}catch{this.pageUrl=t}else this.pageUrl="";this.logger.resetTiming(),je(),this.enable()}handleAuctionInit(e){if(this.isDuplicate("auctionInit",e))return;this.log("DEBUG","auctionInit",e);let t=e.auctionId||"";t&&(this.auctionBidderOutcomes.delete(t),this.getOrCreateAuctionOutcomes(t)),this.enqueue(b.AUCTION_START,"auctionStart",{auctionId:t,transactionId:e.transactionId||""})}handleAuctionEnd(e){if(this.isDuplicate("auctionEnd",e))return;this.log("DEBUG","auctionEnd",e);let t=e.auctionId||"",n=t?this.auctionBidderOutcomes.get(t):void 0,r=n?Array.from(n.values()):[];t&&this.auctionBidderOutcomes.delete(t),this.enqueue(b.AUCTION_END,"auctionEnd",{auctionId:t,transactionId:e.transactionId||"",bidderOutcomes:r})}handleBidRequested(e){if(this.isDuplicate("bidRequested",e))return;this.log("DEBUG","bidRequested",e);let t=e.auctionId||"",n=e.bidderCode||e.bidder||"";if(!t||!n)return;let r=this.getOrCreateAuctionOutcomes(t);Array.isArray(e.bids)&&e.bids.forEach(o=>{let s=o.adUnitCode||"",d=Object.keys(o.mediaTypes||{}),a=d.length>0?d[0]:o.mediaType||"banner",l=`${n}:${s}`;r.has(l)||r.set(l,{bidder:n,adUnitCode:s,mediaType:a,outcome:S.BIDDER_OUTCOME_NO_RESPONSE,latencyMs:0})})}handleBidResponse(e){if(this.isDuplicate("bidResponse",e))return;this.log("DEBUG","bidResponse",e);let t=e.auctionId||"",n=e.bidderCode||e.bidder||"",r=e.adUnitCode||"",o=Number.isFinite(e.originalCpm)?e.originalCpm:Number.isFinite(e.cpm)?e.cpm:0,s=Number.isFinite(e.timeToRespond)?e.timeToRespond:0,d=Object.keys(e.mediaTypes||{}),a=e.mediaType||(e.mediaTypes?.video?"video":d.length>0?d[0]:"banner");if(t&&n){let l=this.getOrCreateAuctionOutcomes(t),u=`${n}:${r}`,y=l.get(u),f=o>0?S.BIDDER_OUTCOME_BID:S.BIDDER_OUTCOME_NO_BID;y?(y.outcome=f,y.latencyMs=s,a&&(y.mediaType=a)):l.set(u,{bidder:n,adUnitCode:r,mediaType:a,outcome:f,latencyMs:s})}o>0&&this.enqueue(b.BID_RESPONSE,"bidResponse",{auctionId:t,transactionId:e.transactionId||"",adUnitCode:r,bid:{bidder:n,cpm:o,currency:e.originalCurrency??e.currency??"USD",...k(e),dealId:e.dealId||"",mediaType:a,latencyMs:s,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){let r=n.auctionId||"",o=n.bidderCode||n.bidder||"",s=n.adUnitCode||"",d=Number.isFinite(n.timeout)?n.timeout:0;if(r&&o){let a=this.getOrCreateAuctionOutcomes(r),l=`${o}:${s}`,u=a.get(l);u?(u.outcome=S.BIDDER_OUTCOME_TIMEOUT,d>0&&(u.latencyMs=d)):a.set(l,{bidder:o,adUnitCode:s,mediaType:"banner",outcome:S.BIDDER_OUTCOME_TIMEOUT,latencyMs:d})}}}handleBidWon(e){if(this.isDuplicate("bidWon",e))return;this.log("DEBUG","bidWon",e);let t=e.auctionId||"",n=e.transactionId||"",r=e.adUnitCode||e.adId||"",o=Object.keys(e.mediaTypes||{}),s=e.mediaType||(e.mediaTypes?.video?"video":o.length>0?o[0]:"banner"),d={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",...k(e),dealId:e.dealId||"",mediaType:s,latencyMs:Number.isFinite(e.timeToRespond)?e.timeToRespond:0,advertiserDomain:e.meta?.advertiserDomains?.[0]||"",creativeId:e.creativeId||""};if(r){let a={bidTrace:d,auctionId:t,transactionId:n,adUnitCode:r,rawBid:e,timestamp:Date.now()};this.cachedWinningBids.set(r,a),e.adId&&e.adId!==r&&this.cachedWinningBids.set(e.adId,a),t&&(this.cachedWinningBids.set(`${t}:${r}`,a),e.adId&&e.adId!==r&&this.cachedWinningBids.set(`${t}:${e.adId}`,a)),this.pruneCachedWinningBids()}this.enqueue(b.BID_WIN,"bidWon",{auctionId:t,transactionId:n,adUnitCode:r,bid:d})}handleNoBid(e){if(this.isDuplicate("noBid",e))return;this.log("DEBUG","noBid",e);let t=e.auctionId||"",n=e.bidderCode||e.bidder||"",r=e.adUnitCode||"";if(t&&n){let o=this.getOrCreateAuctionOutcomes(t),s=`${n}:${r}`,d=o.get(s);d?d.outcome===S.BIDDER_OUTCOME_NO_RESPONSE&&(d.outcome=S.BIDDER_OUTCOME_NO_BID):o.set(s,{bidder:n,adUnitCode:r,mediaType:"banner",outcome:S.BIDDER_OUTCOME_NO_BID,latencyMs:0})}}handleAdRenderFailed(e){if(this.isDuplicate("adRenderFailed",e))return;this.log("DEBUG","adRenderFailed",e);let t=e.bid||{};this.enqueue(b.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||e.adId||t.adId||"",r=t.auctionId||e.auctionId||"",o=t.transactionId||e.transactionId||"",s=t.mediaType||"banner",d=e.adUnitCode||t.adUnitCode||"",a=e.adId||t.adId||"",l=(r&&d?this.getCachedBid(`${r}:${d}`):void 0)||(r&&a?this.getCachedBid(`${r}:${a}`):void 0)||(d?this.getCachedBid(d):void 0)||(a?this.getCachedBid(a):void 0),u=s==="video"||t.mediaType==="video"||t.mediaTypes?.video!==void 0||l?.bidTrace?.mediaType==="video"||l?.rawBid?.mediaType==="video"||n&&this.slotViewabilityRecords.get(n)?.mediaType==="video",y=u?"video":s||l?.bidTrace?.mediaType||"banner",f={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",...k(t).width?k(t):l?.bidTrace?{width:l.bidTrace.width,height:l.bidTrace.height}:k(t),dealId:t.dealId||l?.bidTrace?.dealId||"",mediaType:y,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||""},v=r||l?.auctionId||"",T=o||l?.transactionId||"",p=n?this.slotViewabilityRecords.get(n):void 0,_=p&&v&&p.auctionId&&p.auctionId!==v;if(!!(n&&p&&_)){this.flushSlotTimeInView(n);let E=(this.slotRefreshIndices.get(n)??(p?p.refreshIndex:0))+1;this.slotRefreshIndices.set(n,E),this.slotLastAuctionIds.set(n,v),p&&(p.refreshIndex=E,p.auctionId=v,p.transactionId=T,p.bidPayload=f,p.viewableFired=!1,p.accumulatedTimeInViewMs=0),this.enqueue(b.REFRESH,"refresh",{auctionId:v,transactionId:T,adUnitCode:n,bid:f,metadata:{refresh_index:String(E)}})}else n&&(v&&this.slotLastAuctionIds.set(n,v),this.slotRefreshIndices.has(n)||this.slotRefreshIndices.set(n,0));let w=n?this.slotRefreshIndices.get(n)??(p?p.refreshIndex:0):0;if(u?this.log("DEBUG",`adRenderSucceeded received for video ad unit ${n||"unknown"}: suppressing IMPRESSION until verified video lifecycle event`):n&&this.hasImpressionEmitted(n,w,v,f.creativeId)||(n&&this.markImpressionEmitted(n,w,v,f.creativeId),this.enqueue(b.IMPRESSION,"impression",{auctionId:v,transactionId:T,adUnitCode:n,bid:f,metadata:{refresh_index:String(w)}})),this.config.viewabilityEnabled&&typeof document<"u"){let E=null,g=n||e.adId||t.adId;if(g&&(E=document.getElementById(g)),!E&&typeof window<"u"&&window.googletag?.pubads)try{let c=window.googletag.pubads().getSlots();for(let m of c)if((m.getAdUnitPath?.()===n||m.getSlotElementId?.()===n)&&(E=document.getElementById(m.getSlotElementId()),E))break}catch{}if(!E&&g)try{for(let c of Array.from(document.querySelectorAll("[data-ad-slot]")))if(c.getAttribute("data-ad-slot")===g){E=c;break}}catch{}E&&this.observeSlot(E,n||g,{adUnitCode:n,auctionId:v,transactionId:T,mediaType:y,bid:f,refreshIndex:w,emitRefreshEvent:!1})}}isDuplicate(e,t){return this.deduper.isDuplicate(e,t)}enqueue(e,t,n,r){if(!this.isEnabled||!this.shouldSample(e,r))return;je();let o={eventId:F(),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&&(o.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&&(o.viewableDurationMs=Number.isFinite(n.viewableDurationMs)?n.viewableDurationMs:0),n.bidderOutcomes&&Array.isArray(n.bidderOutcomes)&&(o.bidderOutcomes=n.bidderOutcomes);let s={...n.metadata};n.error!==void 0&&n.error!==null&&(s.error=typeof n.error=="object"&&n.error.message?String(n.error.message):String(n.error)),n.gpid&&(s.gpid=String(n.gpid)),n.refreshIndex!==void 0&&s.refresh_index===void 0&&(s.refresh_index=String(n.refreshIndex));let d=Dt(s);Object.keys(d).length>0&&(o.metadata=d),this.queue.push(o),this.queue.length>Q&&this.queue.splice(0,this.queue.length-Q),this.queue.length>=yt?this.flush():At.has(e)&&!this.immediateFlushScheduled&&(this.immediateFlushScheduled=!0,setTimeout(()=>{this.immediateFlushScheduled=!1,this.flush()},0))}shouldSample(e,t){return e===b.ERROR?(this.errorCount++,this.errorCount>gt?!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=typeof window<"u"?window.location.hostname:"",t=n=>({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:e,events:n});for(;;){if(this.queue.length===0)return null;let n=this.queue,r=Y.encode(t(n)).finish();for(;n.length>1&&r.byteLength>he;)n=n.slice(0,Math.floor(n.length/2)),r=Y.encode(t(n)).finish();if(r.byteLength>he){let[o]=this.queue.splice(0,1);this.log("WARN",`Dropping oversized event ${o?.eventName||o?.eventId} (${r.byteLength} bytes exceeds the ${he}-byte cap on its own)`);continue}return this.queue=this.queue.slice(n.length),{url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:r,events:n}}}sendFetch(e,t=!1,n,r=!1){let o={method:"POST",headers:{"Content-Type":Ke},body:e.encoded};t&&(o.keepalive=!0),fetch(e.url,o).then(d=>{if(d.ok)r||(this.consecutiveSendFailures=0,this.nextSendAllowedAt=0),n&&n();else{if(this.log("WARN",`Failed to send batch: HTTP ${d.status}`),d.status>=400&&d.status<500&&d.status!==429&&d.status!==408){this.log("WARN",`Dropping batch due to non-retryable client error HTTP ${d.status}`);return}r||this.handleSendFailure(e.events)}}).catch(d=>{this.log("ERROR","Failed to send batch",d),r||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(We*2**(this.consecutiveSendFailures-1),mt);this.nextSendAllowedAt=Date.now()+t,this.consecutiveSendFailures<=bt?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:Ke});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()}pendingKeyPrefix(){return`${J}${encodeURIComponent(this.config.propertyId)}_`}persistBatch(e){try{if(typeof localStorage>"u"||!this.config.propertyId)return null;let t=0;for(let r=0;r<localStorage.length;r++){let o=localStorage.key(r);o&&o.startsWith(J)&&t++}if(t>=vt)return null;let n=`${this.pendingKeyPrefix()}${Date.now()}_${Math.floor(Math.random()*1e6)}`;return localStorage.setItem(n,xt(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 Array.from(this.persistedBatchKeys))this.removePersistedBatch(e)},Et))}resendPersistedBatches(){try{if(typeof localStorage>"u"||!this.config.endpoint||!this.config.propertyId)return;let e=this.pendingKeyPrefix(),t=[],n=[];for(let r=0;r<localStorage.length;r++){let o=localStorage.key(r);!o||!o.startsWith(J)||(o.startsWith(e)?t.push(o):Ot(o)&&n.push(o))}for(let r of n)try{localStorage.removeItem(r)}catch{}for(let r of t){let o=null;try{o=localStorage.getItem(r),localStorage.removeItem(r)}catch{continue}if(!o)continue;let s=parseInt(r.slice(e.length),10);if(!Number.isFinite(s)||Date.now()-s>Tt)continue;let d;try{d=Ct(o)}catch{continue}d.byteLength!==0&&(this.log("DEBUG",`Resending persisted exit batch (${d.byteLength} bytes)`),this.sendFetch({url:`${this.config.endpoint}/${this.config.propertyId}`,encoded:d,events:[]},!1,void 0,!0))}}catch{}}log(e,t,...n){this.logger.log(e,t,...n)}},ye=ie({prefix:"[bidkernel]",logLevel:"INFO"})});var Nt=tt(()=>{Qe();var Ze="https://by.bidkernel.io/t",Pt=window._bidkernelPbjsGlobal||"pbjs";be(Pt,{endpoint:Ze});window.bidkernelPrebidAnalytics={...window.bidkernelPrebidAnalytics,register:(i,e)=>be(i,{endpoint:Ze,...e}),attachVideoPlayer:(i,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.attachVideoPlayer?t.attachVideoPlayer(i,e):()=>{}},attachImaAdsManager:(i,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.attachImaAdsManager?t.attachImaAdsManager(i,e):()=>{}},recordImpression:(i,e)=>{let t=window._bidkernelPrebidAnalytics;return t?.recordImpression?t.recordImpression(i,e):!1}}});return Nt();})();
package/dist/index.d.mts CHANGED
@@ -169,6 +169,7 @@ declare class BidkernelPrebidAnalytics {
169
169
  private cachedWinningBids;
170
170
  private videoDetachCleanups;
171
171
  private auctionBidderOutcomes;
172
+ private logger;
172
173
  constructor(config: AnalyticsConfig);
173
174
  enable(): void;
174
175
  disable(): void;
package/dist/index.d.ts CHANGED
@@ -169,6 +169,7 @@ declare class BidkernelPrebidAnalytics {
169
169
  private cachedWinningBids;
170
170
  private videoDetachCleanups;
171
171
  private auctionBidderOutcomes;
172
+ private logger;
172
173
  constructor(config: AnalyticsConfig);
173
174
  enable(): void;
174
175
  disable(): void;
package/dist/index.js CHANGED
@@ -31,6 +31,292 @@ __export(src_exports, {
31
31
  });
32
32
  module.exports = __toCommonJS(src_exports);
33
33
 
34
+ // ../logger/src/index.ts
35
+ var LogLevel = {
36
+ DEBUG: "DEBUG",
37
+ INFO: "INFO",
38
+ WARN: "WARN",
39
+ ERROR: "ERROR"
40
+ };
41
+ var LOG_LEVEL_MAP = {
42
+ [LogLevel.DEBUG]: 10,
43
+ [LogLevel.INFO]: 20,
44
+ [LogLevel.WARN]: 30,
45
+ [LogLevel.ERROR]: 40
46
+ };
47
+ var COLORS = {
48
+ badge: "color: #2dd4bf; font-weight: bold",
49
+ // teal - [ads] badge
50
+ badgeWarn: "background: #f59e0b; color: #fff; padding: 2px 4px; border-radius: 3px; font-weight: bold",
51
+ // amber - [ads] badge (warning)
52
+ badgeError: "background: #ef4444; color: #fff; padding: 2px 4px; border-radius: 3px; font-weight: bold",
53
+ // red - [ads] badge (error)
54
+ dim: "color: #6b7280",
55
+ // gray - timestamp
56
+ event: "color: #38bdf8; font-weight: bold",
57
+ // blue - event name
58
+ eventWarn: "color: #f59e0b; font-weight: bold",
59
+ // amber - event name (warning)
60
+ eventError: "color: #ef4444; font-weight: bold",
61
+ // red - event name (error)
62
+ reset: "color: inherit"
63
+ // back to default
64
+ };
65
+ var logCounter = 0;
66
+ var localGlobalListeners = /* @__PURE__ */ new Set();
67
+ function getGlobalListeners() {
68
+ if (typeof window !== "undefined") {
69
+ const win = window;
70
+ if (!win.__bidkernelLogListeners) {
71
+ win.__bidkernelLogListeners = /* @__PURE__ */ new Set();
72
+ }
73
+ return win.__bidkernelLogListeners;
74
+ }
75
+ return localGlobalListeners;
76
+ }
77
+ function formatTime(ms) {
78
+ if (ms < 0 || !Number.isFinite(ms)) ms = 0;
79
+ if (ms < 1e3) return `${ms.toFixed(2)}ms`;
80
+ const s = ms / 1e3;
81
+ if (s < 60) return `${s.toFixed(2)}s`;
82
+ const m = Math.floor(s / 60);
83
+ if (m < 60) return `${m}m ${(s % 60).toFixed(2)}s`;
84
+ const h = Math.floor(m / 60);
85
+ return `${h}h ${m % 60}m ${(s % 60).toFixed(2)}s`;
86
+ }
87
+ function normalizeLogLevel(level) {
88
+ if (typeof level === "string") {
89
+ const upper = level.toUpperCase();
90
+ if (upper === "DEBUG" || upper === "INFO" || upper === "WARN" || upper === "ERROR") {
91
+ return upper;
92
+ }
93
+ }
94
+ return LogLevel.INFO;
95
+ }
96
+ var Logger = class _Logger {
97
+ _prefix;
98
+ _level;
99
+ _loadedAt;
100
+ _now;
101
+ _console;
102
+ _customFormatTime;
103
+ _listeners = /* @__PURE__ */ new Set();
104
+ constructor(options = {}) {
105
+ this._prefix = options.prefix ?? "[bidkernel]";
106
+ this._level = normalizeLogLevel(options.logLevel ?? LogLevel.INFO);
107
+ this._now = options.now;
108
+ this._console = options.console;
109
+ this._customFormatTime = options.formatTime;
110
+ if (options.onLog) {
111
+ this._listeners.add(options.onLog);
112
+ }
113
+ this._loadedAt = options.loadedAt ?? (this._now ? this._now() : typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now());
114
+ }
115
+ get prefix() {
116
+ return this._prefix;
117
+ }
118
+ set prefix(val) {
119
+ this._prefix = val;
120
+ }
121
+ get logLevel() {
122
+ return this._level;
123
+ }
124
+ set logLevel(val) {
125
+ this._level = normalizeLogLevel(val);
126
+ }
127
+ getLevel() {
128
+ return this._level;
129
+ }
130
+ setLevel(level) {
131
+ this._level = normalizeLogLevel(level);
132
+ }
133
+ getPrefix() {
134
+ return this._prefix;
135
+ }
136
+ setPrefix(prefix) {
137
+ this._prefix = prefix;
138
+ }
139
+ resetTiming(loadedAt) {
140
+ this._loadedAt = loadedAt ?? (this._now ? this._now() : typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now());
141
+ }
142
+ getLoadedAt() {
143
+ return this._loadedAt;
144
+ }
145
+ addListener(listener) {
146
+ this._listeners.add(listener);
147
+ return () => {
148
+ this._listeners.delete(listener);
149
+ };
150
+ }
151
+ removeListener(listener) {
152
+ this._listeners.delete(listener);
153
+ }
154
+ isEnabled(level) {
155
+ const target = normalizeLogLevel(level);
156
+ return (LOG_LEVEL_MAP[target] ?? 20) >= (LOG_LEVEL_MAP[this._level] ?? 20);
157
+ }
158
+ formatTime(ms) {
159
+ if (this._customFormatTime) {
160
+ return this._customFormatTime(ms);
161
+ }
162
+ return formatTime(ms);
163
+ }
164
+ _getConsole() {
165
+ if (this._console) return this._console;
166
+ if (typeof console !== "undefined") return console;
167
+ return void 0;
168
+ }
169
+ _getElapsed() {
170
+ const current = this._now ? this._now() : typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
171
+ return Math.max(0, current - this._loadedAt);
172
+ }
173
+ _dispatchRecord(record) {
174
+ for (const l of this._listeners) {
175
+ try {
176
+ l(record);
177
+ } catch {
178
+ }
179
+ }
180
+ const globalListeners = getGlobalListeners();
181
+ for (const gl of globalListeners) {
182
+ if (!this._listeners.has(gl)) {
183
+ try {
184
+ gl(record);
185
+ } catch {
186
+ }
187
+ }
188
+ }
189
+ if (typeof window !== "undefined" && typeof window.dispatchEvent === "function") {
190
+ try {
191
+ window.dispatchEvent(new CustomEvent("__bidkernel_log__", { detail: record }));
192
+ } catch {
193
+ }
194
+ }
195
+ }
196
+ log(level, nameOrMsg, ...args) {
197
+ const normLevel = normalizeLogLevel(level);
198
+ if (!this.isEnabled(normLevel)) {
199
+ return;
200
+ }
201
+ const elapsed = this._getElapsed();
202
+ const formattedTimeStr = this.formatTime(elapsed);
203
+ const nowEpoch = Date.now();
204
+ const recordId = `bk_log_${nowEpoch}_${++logCounter}`;
205
+ const record = {
206
+ id: recordId,
207
+ timestamp: nowEpoch,
208
+ elapsedMs: elapsed,
209
+ level: normLevel,
210
+ prefix: this._prefix,
211
+ message: nameOrMsg,
212
+ args,
213
+ data: args.length === 1 ? args[0] : args.length > 1 ? args : void 0
214
+ };
215
+ this._dispatchRecord(record);
216
+ const c = this._getConsole();
217
+ if (!c) return;
218
+ let badgeStyle = COLORS.badge;
219
+ let eventStyle = COLORS.event;
220
+ if (normLevel === LogLevel.WARN) {
221
+ badgeStyle = COLORS.badgeWarn;
222
+ eventStyle = COLORS.eventWarn;
223
+ } else if (normLevel === LogLevel.ERROR) {
224
+ badgeStyle = COLORS.badgeError;
225
+ eventStyle = COLORS.eventError;
226
+ }
227
+ const fmt = `%c${this._prefix}%c ${formattedTimeStr} %c${nameOrMsg}%c`;
228
+ const styles = [badgeStyle, COLORS.dim, eventStyle, COLORS.reset];
229
+ const callArgs = [fmt, ...styles];
230
+ if (args.length > 0) {
231
+ callArgs.push(...args);
232
+ }
233
+ switch (normLevel) {
234
+ case LogLevel.DEBUG:
235
+ if (typeof c.log === "function") {
236
+ c.log(...callArgs);
237
+ } else if (typeof c.debug === "function") {
238
+ c.debug(...callArgs);
239
+ }
240
+ break;
241
+ case LogLevel.INFO:
242
+ if (typeof c.info === "function") {
243
+ c.info(...callArgs);
244
+ } else if (typeof c.log === "function") {
245
+ c.log(...callArgs);
246
+ }
247
+ break;
248
+ case LogLevel.WARN:
249
+ if (typeof c.warn === "function") {
250
+ c.warn(...callArgs);
251
+ } else if (typeof c.log === "function") {
252
+ c.log(...callArgs);
253
+ }
254
+ break;
255
+ case LogLevel.ERROR:
256
+ if (typeof c.error === "function") {
257
+ c.error(...callArgs);
258
+ } else if (typeof c.log === "function") {
259
+ c.log(...callArgs);
260
+ }
261
+ break;
262
+ default:
263
+ if (typeof c.log === "function") {
264
+ c.log(...callArgs);
265
+ }
266
+ break;
267
+ }
268
+ }
269
+ debug(nameOrMsg, ...args) {
270
+ this.log(LogLevel.DEBUG, nameOrMsg, ...args);
271
+ }
272
+ info(nameOrMsg, ...args) {
273
+ this.log(LogLevel.INFO, nameOrMsg, ...args);
274
+ }
275
+ warn(nameOrMsg, ...args) {
276
+ this.log(LogLevel.WARN, nameOrMsg, ...args);
277
+ }
278
+ error(nameOrMsg, ...args) {
279
+ this.log(LogLevel.ERROR, nameOrMsg, ...args);
280
+ }
281
+ logEvent(event) {
282
+ if (!event) return;
283
+ if (event.data !== void 0) {
284
+ this.log(event.level, event.eventName, event.data);
285
+ } else {
286
+ this.log(event.level, event.eventName);
287
+ }
288
+ }
289
+ child(subNamespace, options = {}) {
290
+ let childPrefix = this._prefix;
291
+ if (subNamespace) {
292
+ const formattedSub = subNamespace.startsWith("[") && subNamespace.endsWith("]") ? subNamespace : `[${subNamespace}]`;
293
+ childPrefix = `${this._prefix}${formattedSub}`;
294
+ }
295
+ return new _Logger({
296
+ prefix: childPrefix,
297
+ logLevel: options.logLevel ?? this._level,
298
+ loadedAt: options.loadedAt ?? this._loadedAt,
299
+ now: options.now ?? this._now,
300
+ console: options.console ?? this._console,
301
+ formatTime: options.formatTime ?? this._customFormatTime,
302
+ ...options
303
+ });
304
+ }
305
+ withPrefix(prefix) {
306
+ return new _Logger({
307
+ prefix,
308
+ logLevel: this._level,
309
+ loadedAt: this._loadedAt,
310
+ now: this._now,
311
+ console: this._console,
312
+ formatTime: this._customFormatTime
313
+ });
314
+ }
315
+ };
316
+ function createLogger(options) {
317
+ return new Logger(options);
318
+ }
319
+
34
320
  // ../../protogen/trace_event.ts
35
321
  var import_wire = require("@bufbuild/protobuf/wire");
36
322
  var TraceEventType = {
@@ -1294,6 +1580,7 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
1294
1580
  videoDetachCleanups = /* @__PURE__ */ new Set();
1295
1581
  // Compacted bidder participation map per auction: auctionId -> Map<`${bidder}:${adUnitCode}`, BidderOutcomeEntry>
1296
1582
  auctionBidderOutcomes = /* @__PURE__ */ new Map();
1583
+ logger;
1297
1584
  constructor(config) {
1298
1585
  const requestedEndpoint = config.endpoint || "";
1299
1586
  const endpoint = !requestedEndpoint || isTrustedEndpoint(requestedEndpoint) ? requestedEndpoint : "";
@@ -1314,6 +1601,10 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
1314
1601
  pbjsGlobalName: config.pbjsGlobalName || "pbjs",
1315
1602
  attachPbjsListeners: config.attachPbjsListeners ?? true
1316
1603
  };
1604
+ this.logger = createLogger({
1605
+ prefix: "[bidkernel][prebid-analytics]",
1606
+ logLevel: this.config.logLevel
1607
+ });
1317
1608
  if (requestedEndpoint && !endpoint) {
1318
1609
  this.log(
1319
1610
  "ERROR",
@@ -1330,6 +1621,7 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
1330
1621
  if (this.isEnabled) return;
1331
1622
  this.isEnabled = true;
1332
1623
  _BidkernelPrebidAnalytics.activeInstances.add(this);
1624
+ this.logger.setLevel(this.config.logLevel);
1333
1625
  if (!this.config.endpoint) {
1334
1626
  this.log("WARN", "Endpoint is empty. Analytics events will not be transmitted.");
1335
1627
  }
@@ -2615,6 +2907,7 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
2615
2907
  } else {
2616
2908
  this.pageUrl = "";
2617
2909
  }
2910
+ this.logger.resetTiming();
2618
2911
  extendSession();
2619
2912
  this.enable();
2620
2913
  }
@@ -3294,25 +3587,13 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
3294
3587
  }
3295
3588
  }
3296
3589
  log(level, msg, ...args) {
3297
- const levels = { DEBUG: 10, INFO: 20, WARN: 30, ERROR: 40 };
3298
- if (levels[level] < levels[this.config.logLevel]) return;
3299
- const prefix = `[bidkernel][prebid-analytics][${level}]`;
3300
- switch (level) {
3301
- case "DEBUG":
3302
- console.debug(prefix, msg, ...args);
3303
- break;
3304
- case "INFO":
3305
- console.info(prefix, msg, ...args);
3306
- break;
3307
- case "WARN":
3308
- console.warn(prefix, msg, ...args);
3309
- break;
3310
- case "ERROR":
3311
- console.error(prefix, msg, ...args);
3312
- break;
3313
- }
3590
+ this.logger.log(level, msg, ...args);
3314
3591
  }
3315
3592
  };
3593
+ var defaultLogger = createLogger({
3594
+ prefix: "[bidkernel]",
3595
+ logLevel: "INFO"
3596
+ });
3316
3597
  function extractAnalyticsOptions(config, allowProviderless = true) {
3317
3598
  if (!config) return null;
3318
3599
  if (Array.isArray(config)) {
@@ -3369,8 +3650,8 @@ function registerPrebidAnalytics(pbjsGlobalName = "pbjs", defaults) {
3369
3650
  ...options
3370
3651
  };
3371
3652
  if (pinnedEndpoint && !sameEndpointOrigin(merged.endpoint || "", pinnedEndpoint)) {
3372
- console.warn(
3373
- `[bidkernel] Ignoring analytics endpoint change to ${merged.endpoint || "(empty)"}: this page is pinned to ${pinnedEndpoint}. Reload to change the ingest endpoint.`
3653
+ defaultLogger.warn(
3654
+ `Ignoring analytics endpoint change to ${merged.endpoint || "(empty)"}: this page is pinned to ${pinnedEndpoint}. Reload to change the ingest endpoint.`
3374
3655
  );
3375
3656
  merged.endpoint = pinnedEndpoint;
3376
3657
  }
@@ -3378,7 +3659,7 @@ function registerPrebidAnalytics(pbjsGlobalName = "pbjs", defaults) {
3378
3659
  try {
3379
3660
  previous.disable();
3380
3661
  } catch (e) {
3381
- console.warn("[bidkernel] Failed to disable previous analytics instance:", e);
3662
+ defaultLogger.warn("Failed to disable previous analytics instance:", e);
3382
3663
  }
3383
3664
  }
3384
3665
  const analytics = new BidkernelPrebidAnalytics(merged);
@@ -3411,7 +3692,7 @@ function registerPrebidAnalytics(pbjsGlobalName = "pbjs", defaults) {
3411
3692
  enableInstance(stashed);
3412
3693
  }
3413
3694
  } catch (e) {
3414
- console.warn("[bidkernel] Failed to register standard Prebid analytics adapter:", e);
3695
+ defaultLogger.warn("Failed to register standard Prebid analytics adapter:", e);
3415
3696
  }
3416
3697
  };
3417
3698
  if (pbjs.adapterManager && typeof pbjs.adapterManager.registerAnalyticsAdapter === "function") {
package/dist/index.mjs CHANGED
@@ -1,3 +1,289 @@
1
+ // ../logger/src/index.ts
2
+ var LogLevel = {
3
+ DEBUG: "DEBUG",
4
+ INFO: "INFO",
5
+ WARN: "WARN",
6
+ ERROR: "ERROR"
7
+ };
8
+ var LOG_LEVEL_MAP = {
9
+ [LogLevel.DEBUG]: 10,
10
+ [LogLevel.INFO]: 20,
11
+ [LogLevel.WARN]: 30,
12
+ [LogLevel.ERROR]: 40
13
+ };
14
+ var COLORS = {
15
+ badge: "color: #2dd4bf; font-weight: bold",
16
+ // teal - [ads] badge
17
+ badgeWarn: "background: #f59e0b; color: #fff; padding: 2px 4px; border-radius: 3px; font-weight: bold",
18
+ // amber - [ads] badge (warning)
19
+ badgeError: "background: #ef4444; color: #fff; padding: 2px 4px; border-radius: 3px; font-weight: bold",
20
+ // red - [ads] badge (error)
21
+ dim: "color: #6b7280",
22
+ // gray - timestamp
23
+ event: "color: #38bdf8; font-weight: bold",
24
+ // blue - event name
25
+ eventWarn: "color: #f59e0b; font-weight: bold",
26
+ // amber - event name (warning)
27
+ eventError: "color: #ef4444; font-weight: bold",
28
+ // red - event name (error)
29
+ reset: "color: inherit"
30
+ // back to default
31
+ };
32
+ var logCounter = 0;
33
+ var localGlobalListeners = /* @__PURE__ */ new Set();
34
+ function getGlobalListeners() {
35
+ if (typeof window !== "undefined") {
36
+ const win = window;
37
+ if (!win.__bidkernelLogListeners) {
38
+ win.__bidkernelLogListeners = /* @__PURE__ */ new Set();
39
+ }
40
+ return win.__bidkernelLogListeners;
41
+ }
42
+ return localGlobalListeners;
43
+ }
44
+ function formatTime(ms) {
45
+ if (ms < 0 || !Number.isFinite(ms)) ms = 0;
46
+ if (ms < 1e3) return `${ms.toFixed(2)}ms`;
47
+ const s = ms / 1e3;
48
+ if (s < 60) return `${s.toFixed(2)}s`;
49
+ const m = Math.floor(s / 60);
50
+ if (m < 60) return `${m}m ${(s % 60).toFixed(2)}s`;
51
+ const h = Math.floor(m / 60);
52
+ return `${h}h ${m % 60}m ${(s % 60).toFixed(2)}s`;
53
+ }
54
+ function normalizeLogLevel(level) {
55
+ if (typeof level === "string") {
56
+ const upper = level.toUpperCase();
57
+ if (upper === "DEBUG" || upper === "INFO" || upper === "WARN" || upper === "ERROR") {
58
+ return upper;
59
+ }
60
+ }
61
+ return LogLevel.INFO;
62
+ }
63
+ var Logger = class _Logger {
64
+ _prefix;
65
+ _level;
66
+ _loadedAt;
67
+ _now;
68
+ _console;
69
+ _customFormatTime;
70
+ _listeners = /* @__PURE__ */ new Set();
71
+ constructor(options = {}) {
72
+ this._prefix = options.prefix ?? "[bidkernel]";
73
+ this._level = normalizeLogLevel(options.logLevel ?? LogLevel.INFO);
74
+ this._now = options.now;
75
+ this._console = options.console;
76
+ this._customFormatTime = options.formatTime;
77
+ if (options.onLog) {
78
+ this._listeners.add(options.onLog);
79
+ }
80
+ this._loadedAt = options.loadedAt ?? (this._now ? this._now() : typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now());
81
+ }
82
+ get prefix() {
83
+ return this._prefix;
84
+ }
85
+ set prefix(val) {
86
+ this._prefix = val;
87
+ }
88
+ get logLevel() {
89
+ return this._level;
90
+ }
91
+ set logLevel(val) {
92
+ this._level = normalizeLogLevel(val);
93
+ }
94
+ getLevel() {
95
+ return this._level;
96
+ }
97
+ setLevel(level) {
98
+ this._level = normalizeLogLevel(level);
99
+ }
100
+ getPrefix() {
101
+ return this._prefix;
102
+ }
103
+ setPrefix(prefix) {
104
+ this._prefix = prefix;
105
+ }
106
+ resetTiming(loadedAt) {
107
+ this._loadedAt = loadedAt ?? (this._now ? this._now() : typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now());
108
+ }
109
+ getLoadedAt() {
110
+ return this._loadedAt;
111
+ }
112
+ addListener(listener) {
113
+ this._listeners.add(listener);
114
+ return () => {
115
+ this._listeners.delete(listener);
116
+ };
117
+ }
118
+ removeListener(listener) {
119
+ this._listeners.delete(listener);
120
+ }
121
+ isEnabled(level) {
122
+ const target = normalizeLogLevel(level);
123
+ return (LOG_LEVEL_MAP[target] ?? 20) >= (LOG_LEVEL_MAP[this._level] ?? 20);
124
+ }
125
+ formatTime(ms) {
126
+ if (this._customFormatTime) {
127
+ return this._customFormatTime(ms);
128
+ }
129
+ return formatTime(ms);
130
+ }
131
+ _getConsole() {
132
+ if (this._console) return this._console;
133
+ if (typeof console !== "undefined") return console;
134
+ return void 0;
135
+ }
136
+ _getElapsed() {
137
+ const current = this._now ? this._now() : typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
138
+ return Math.max(0, current - this._loadedAt);
139
+ }
140
+ _dispatchRecord(record) {
141
+ for (const l of this._listeners) {
142
+ try {
143
+ l(record);
144
+ } catch {
145
+ }
146
+ }
147
+ const globalListeners = getGlobalListeners();
148
+ for (const gl of globalListeners) {
149
+ if (!this._listeners.has(gl)) {
150
+ try {
151
+ gl(record);
152
+ } catch {
153
+ }
154
+ }
155
+ }
156
+ if (typeof window !== "undefined" && typeof window.dispatchEvent === "function") {
157
+ try {
158
+ window.dispatchEvent(new CustomEvent("__bidkernel_log__", { detail: record }));
159
+ } catch {
160
+ }
161
+ }
162
+ }
163
+ log(level, nameOrMsg, ...args) {
164
+ const normLevel = normalizeLogLevel(level);
165
+ if (!this.isEnabled(normLevel)) {
166
+ return;
167
+ }
168
+ const elapsed = this._getElapsed();
169
+ const formattedTimeStr = this.formatTime(elapsed);
170
+ const nowEpoch = Date.now();
171
+ const recordId = `bk_log_${nowEpoch}_${++logCounter}`;
172
+ const record = {
173
+ id: recordId,
174
+ timestamp: nowEpoch,
175
+ elapsedMs: elapsed,
176
+ level: normLevel,
177
+ prefix: this._prefix,
178
+ message: nameOrMsg,
179
+ args,
180
+ data: args.length === 1 ? args[0] : args.length > 1 ? args : void 0
181
+ };
182
+ this._dispatchRecord(record);
183
+ const c = this._getConsole();
184
+ if (!c) return;
185
+ let badgeStyle = COLORS.badge;
186
+ let eventStyle = COLORS.event;
187
+ if (normLevel === LogLevel.WARN) {
188
+ badgeStyle = COLORS.badgeWarn;
189
+ eventStyle = COLORS.eventWarn;
190
+ } else if (normLevel === LogLevel.ERROR) {
191
+ badgeStyle = COLORS.badgeError;
192
+ eventStyle = COLORS.eventError;
193
+ }
194
+ const fmt = `%c${this._prefix}%c ${formattedTimeStr} %c${nameOrMsg}%c`;
195
+ const styles = [badgeStyle, COLORS.dim, eventStyle, COLORS.reset];
196
+ const callArgs = [fmt, ...styles];
197
+ if (args.length > 0) {
198
+ callArgs.push(...args);
199
+ }
200
+ switch (normLevel) {
201
+ case LogLevel.DEBUG:
202
+ if (typeof c.log === "function") {
203
+ c.log(...callArgs);
204
+ } else if (typeof c.debug === "function") {
205
+ c.debug(...callArgs);
206
+ }
207
+ break;
208
+ case LogLevel.INFO:
209
+ if (typeof c.info === "function") {
210
+ c.info(...callArgs);
211
+ } else if (typeof c.log === "function") {
212
+ c.log(...callArgs);
213
+ }
214
+ break;
215
+ case LogLevel.WARN:
216
+ if (typeof c.warn === "function") {
217
+ c.warn(...callArgs);
218
+ } else if (typeof c.log === "function") {
219
+ c.log(...callArgs);
220
+ }
221
+ break;
222
+ case LogLevel.ERROR:
223
+ if (typeof c.error === "function") {
224
+ c.error(...callArgs);
225
+ } else if (typeof c.log === "function") {
226
+ c.log(...callArgs);
227
+ }
228
+ break;
229
+ default:
230
+ if (typeof c.log === "function") {
231
+ c.log(...callArgs);
232
+ }
233
+ break;
234
+ }
235
+ }
236
+ debug(nameOrMsg, ...args) {
237
+ this.log(LogLevel.DEBUG, nameOrMsg, ...args);
238
+ }
239
+ info(nameOrMsg, ...args) {
240
+ this.log(LogLevel.INFO, nameOrMsg, ...args);
241
+ }
242
+ warn(nameOrMsg, ...args) {
243
+ this.log(LogLevel.WARN, nameOrMsg, ...args);
244
+ }
245
+ error(nameOrMsg, ...args) {
246
+ this.log(LogLevel.ERROR, nameOrMsg, ...args);
247
+ }
248
+ logEvent(event) {
249
+ if (!event) return;
250
+ if (event.data !== void 0) {
251
+ this.log(event.level, event.eventName, event.data);
252
+ } else {
253
+ this.log(event.level, event.eventName);
254
+ }
255
+ }
256
+ child(subNamespace, options = {}) {
257
+ let childPrefix = this._prefix;
258
+ if (subNamespace) {
259
+ const formattedSub = subNamespace.startsWith("[") && subNamespace.endsWith("]") ? subNamespace : `[${subNamespace}]`;
260
+ childPrefix = `${this._prefix}${formattedSub}`;
261
+ }
262
+ return new _Logger({
263
+ prefix: childPrefix,
264
+ logLevel: options.logLevel ?? this._level,
265
+ loadedAt: options.loadedAt ?? this._loadedAt,
266
+ now: options.now ?? this._now,
267
+ console: options.console ?? this._console,
268
+ formatTime: options.formatTime ?? this._customFormatTime,
269
+ ...options
270
+ });
271
+ }
272
+ withPrefix(prefix) {
273
+ return new _Logger({
274
+ prefix,
275
+ logLevel: this._level,
276
+ loadedAt: this._loadedAt,
277
+ now: this._now,
278
+ console: this._console,
279
+ formatTime: this._customFormatTime
280
+ });
281
+ }
282
+ };
283
+ function createLogger(options) {
284
+ return new Logger(options);
285
+ }
286
+
1
287
  // ../../protogen/trace_event.ts
2
288
  import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
3
289
  var TraceEventType = {
@@ -1261,6 +1547,7 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
1261
1547
  videoDetachCleanups = /* @__PURE__ */ new Set();
1262
1548
  // Compacted bidder participation map per auction: auctionId -> Map<`${bidder}:${adUnitCode}`, BidderOutcomeEntry>
1263
1549
  auctionBidderOutcomes = /* @__PURE__ */ new Map();
1550
+ logger;
1264
1551
  constructor(config) {
1265
1552
  const requestedEndpoint = config.endpoint || "";
1266
1553
  const endpoint = !requestedEndpoint || isTrustedEndpoint(requestedEndpoint) ? requestedEndpoint : "";
@@ -1281,6 +1568,10 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
1281
1568
  pbjsGlobalName: config.pbjsGlobalName || "pbjs",
1282
1569
  attachPbjsListeners: config.attachPbjsListeners ?? true
1283
1570
  };
1571
+ this.logger = createLogger({
1572
+ prefix: "[bidkernel][prebid-analytics]",
1573
+ logLevel: this.config.logLevel
1574
+ });
1284
1575
  if (requestedEndpoint && !endpoint) {
1285
1576
  this.log(
1286
1577
  "ERROR",
@@ -1297,6 +1588,7 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
1297
1588
  if (this.isEnabled) return;
1298
1589
  this.isEnabled = true;
1299
1590
  _BidkernelPrebidAnalytics.activeInstances.add(this);
1591
+ this.logger.setLevel(this.config.logLevel);
1300
1592
  if (!this.config.endpoint) {
1301
1593
  this.log("WARN", "Endpoint is empty. Analytics events will not be transmitted.");
1302
1594
  }
@@ -2582,6 +2874,7 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
2582
2874
  } else {
2583
2875
  this.pageUrl = "";
2584
2876
  }
2877
+ this.logger.resetTiming();
2585
2878
  extendSession();
2586
2879
  this.enable();
2587
2880
  }
@@ -3261,25 +3554,13 @@ var BidkernelPrebidAnalytics = class _BidkernelPrebidAnalytics {
3261
3554
  }
3262
3555
  }
3263
3556
  log(level, msg, ...args) {
3264
- const levels = { DEBUG: 10, INFO: 20, WARN: 30, ERROR: 40 };
3265
- if (levels[level] < levels[this.config.logLevel]) return;
3266
- const prefix = `[bidkernel][prebid-analytics][${level}]`;
3267
- switch (level) {
3268
- case "DEBUG":
3269
- console.debug(prefix, msg, ...args);
3270
- break;
3271
- case "INFO":
3272
- console.info(prefix, msg, ...args);
3273
- break;
3274
- case "WARN":
3275
- console.warn(prefix, msg, ...args);
3276
- break;
3277
- case "ERROR":
3278
- console.error(prefix, msg, ...args);
3279
- break;
3280
- }
3557
+ this.logger.log(level, msg, ...args);
3281
3558
  }
3282
3559
  };
3560
+ var defaultLogger = createLogger({
3561
+ prefix: "[bidkernel]",
3562
+ logLevel: "INFO"
3563
+ });
3283
3564
  function extractAnalyticsOptions(config, allowProviderless = true) {
3284
3565
  if (!config) return null;
3285
3566
  if (Array.isArray(config)) {
@@ -3336,8 +3617,8 @@ function registerPrebidAnalytics(pbjsGlobalName = "pbjs", defaults) {
3336
3617
  ...options
3337
3618
  };
3338
3619
  if (pinnedEndpoint && !sameEndpointOrigin(merged.endpoint || "", pinnedEndpoint)) {
3339
- console.warn(
3340
- `[bidkernel] Ignoring analytics endpoint change to ${merged.endpoint || "(empty)"}: this page is pinned to ${pinnedEndpoint}. Reload to change the ingest endpoint.`
3620
+ defaultLogger.warn(
3621
+ `Ignoring analytics endpoint change to ${merged.endpoint || "(empty)"}: this page is pinned to ${pinnedEndpoint}. Reload to change the ingest endpoint.`
3341
3622
  );
3342
3623
  merged.endpoint = pinnedEndpoint;
3343
3624
  }
@@ -3345,7 +3626,7 @@ function registerPrebidAnalytics(pbjsGlobalName = "pbjs", defaults) {
3345
3626
  try {
3346
3627
  previous.disable();
3347
3628
  } catch (e) {
3348
- console.warn("[bidkernel] Failed to disable previous analytics instance:", e);
3629
+ defaultLogger.warn("Failed to disable previous analytics instance:", e);
3349
3630
  }
3350
3631
  }
3351
3632
  const analytics = new BidkernelPrebidAnalytics(merged);
@@ -3378,7 +3659,7 @@ function registerPrebidAnalytics(pbjsGlobalName = "pbjs", defaults) {
3378
3659
  enableInstance(stashed);
3379
3660
  }
3380
3661
  } catch (e) {
3381
- console.warn("[bidkernel] Failed to register standard Prebid analytics adapter:", e);
3662
+ defaultLogger.warn("Failed to register standard Prebid analytics adapter:", e);
3382
3663
  }
3383
3664
  };
3384
3665
  if (pbjs.adapterManager && typeof pbjs.adapterManager.registerAnalyticsAdapter === "function") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bidkernel/analytics",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Bidkernel auction analytics: a standalone Prebid.js analytics adapter, plus TypeScript bindings for the Bidkernel ad SDK.",
5
5
  "keywords": [
6
6
  "advertising",
@@ -55,6 +55,7 @@
55
55
  "@bufbuild/protobuf": "^2.11.0"
56
56
  },
57
57
  "devDependencies": {
58
+ "@bidkernel/logger": "^0.1.0",
58
59
  "happy-dom": "^20.11.1",
59
60
  "tsup": "^8.5.0",
60
61
  "typescript": "^5.9.3",