@akross/artemis-ads-sdk 3.5.2 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ads-core/AdsManager.d.ts.map +1 -1
- package/dist/ads-core/util/index.d.ts +0 -1
- package/dist/ads-core/util/index.d.ts.map +1 -1
- package/dist/akross-ads-sdk.esm.js +1 -1
- package/dist/akross-ads-sdk.iife.js +1 -1
- package/dist/akross-ads-sdk.min.js +1 -1
- package/dist/akross-ads-sdk.umd.js +1 -1
- package/dist/core/network/ServicesAds.d.ts +0 -1
- package/dist/core/network/ServicesAds.d.ts.map +1 -1
- package/dist/events/AAEventsCallbackHelper.d.ts +6 -2
- package/dist/events/AAEventsCallbackHelper.d.ts.map +1 -1
- package/dist/modules/poll/AASurveyOverlay.d.ts +1 -0
- package/dist/modules/poll/AASurveyOverlay.d.ts.map +1 -1
- package/dist/modules/rv/programmatic/AARewardedVideo.d.ts.map +1 -1
- package/dist/modules/rv/vast/AAVastPlayer.d.ts +2 -2
- package/dist/modules/rv/vast/AAVastPlayer.d.ts.map +1 -1
- package/dist/modules/rv/vast/AAVastPlayerUI.d.ts +1 -0
- package/dist/modules/rv/vast/AAVastPlayerUI.d.ts.map +1 -1
- package/dist/types/models/AACampaignConfig.d.ts +1 -0
- package/dist/types/models/AACampaignConfig.d.ts.map +1 -1
- package/dist/types/models/AAContent.d.ts +15 -0
- package/dist/types/models/AAContent.d.ts.map +1 -1
- package/dist/types/models/AAMedia.d.ts +1 -1
- package/dist/types/models/AAMedia.d.ts.map +1 -1
- package/dist/types/models/AAMediaTypes.d.ts +1 -2
- package/dist/types/models/AAMediaTypes.d.ts.map +1 -1
- package/dist/utils/AAMediaResultHelper.d.ts +7 -3
- package/dist/utils/AAMediaResultHelper.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/ads-core/util/AAMediaTypeValidator.d.ts +0 -27
- package/dist/ads-core/util/AAMediaTypeValidator.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdsManager.d.ts","sourceRoot":"","sources":["../../src/ads-core/AdsManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdsManager.d.ts","sourceRoot":"","sources":["../../src/ads-core/AdsManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,UAAU,EAAsB,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AASjF,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe;IAS1D,eAAe,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,MAAU,EAChB,WAAW,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACvC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC;IAmFf,WAAW,CACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAiCH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsClH,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;WAsCvF,aAAa,IAAI,MAAM;CAItC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ads-core/util/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ads-core/util/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
class e{static applyDefaults(e){return{timeout:5e3,debug:!1,...e}}static hasBaseUrl(e){return!!(e.baseUrl&&e.baseUrl.trim().length>0)}static hasArtemisAppId(e){return!!(e.artemisAdsAppId&&e.artemisAdsAppId.trim().length>0)}static getArtemisAppId(e,t){return e.artemisAdsAppId||t||""}static isValid(e){return this.hasBaseUrl(e)&&this.hasArtemisAppId(e)}static getPrimaryColor(e,t="#007bff"){return e.primaryColor||t}static isValidColor(e){return!!e&&/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(e)}}class t{constructor(e){this.userId=e.userId,this.advertisingId=e.advertisingId,Object.keys(e||{}).forEach(t=>{t in this||(this[t]=e[t])})}hasAdvertisingId(){return!!(this.advertisingId&&this.advertisingId.trim().length>0)}getAdvertisingId(e){return this.advertisingId||e||""}setAdvertisingId(e){this.advertisingId=e}clearAdvertisingId(){this.advertisingId=null}isValid(){return!!(this.userId&&this.userId.trim().length>0)}getUserId(e){return this.userId||e||""}hasCompleteData(){return this.isValid()&&this.hasAdvertisingId()}}class r{constructor(e){this.params=e.params,this.type=e.type,Object.keys(e).forEach(t=>{"params"!==t&&"type"!==t&&(this[t]=e[t])})}findParamByKey(e){return this.params?.find(t=>t.key===e)?.value}findAdUnitId(){return this.findParamByKey("adUnitId")??""}findVastTag(){return this.findParamByKey("tag")??""}findTimeout(){const e=this.findParamByKey("timeout");return e?parseInt(e,10):void 0}}var i,s,n;function a(e){return[s.BANNER,s.VAST,s.VPAID,s.PROGRAMMATIC_V2,s.SURVEY_V2,s.TYPE_GOOGLE_RV,s.TYPE_GOOGLE_RI,s.TYPE_MAX_RV,s.TYPE_KWAI_RV,s.TYPE_FALLBACK].includes(e)}!function(e){e.SUCCESS="SUCCESS",e.ERROR="ERROR",e.EMPTY="EMPTY"}(i||(i={})),function(e){e.BANNER="image",e.VAST="vast",e.VPAID="vpaid",e.PROGRAMMATIC_V2="programatica_v2",e.SURVEY_V2="survey_v2",e.TYPE_GOOGLE_RV="GAM_RV",e.TYPE_GOOGLE_RI="GAM_RI",e.TYPE_MAX_RV="MAX_RV",e.TYPE_KWAI_RV="KWAI_RV",e.TYPE_FALLBACK="fallback",e.PROGRAMMATIC="programatica",e.PROGRAMMATIC_ADMOB_RB="google-admob-rv",e.PROGRAMMATIC_MAX_RV="max-rv",e.UNKNOWN=""}(s||(s={})),function(e){e[e.REWARDED=11]="REWARDED",e[e.REWARDED_REDIRECTED=12]="REWARDED_REDIRECTED",e[e.MEDIA_WATCHED=13]="MEDIA_WATCHED",e[e.SKIPPED=20]="SKIPPED",e[e.ERROR=21]="ERROR",e[e.CONNECTION_ERROR=22]="CONNECTION_ERROR",e[e.NO_FILL=23]="NO_FILL",e[e.CANCELED=24]="CANCELED",e[e.POLL_WRONG_ANSWER=25]="POLL_WRONG_ANSWER"}(n||(n={}));class o{constructor(e,t){this.description=e,this.cause=t}}class d{constructor(e){this.waterfall=e.waterfall?e.waterfall.map(e=>new r(e)):void 0}hasWaterfall(){return!!(this.waterfall&&this.waterfall.length>0)}getInfo(){return this.hasWaterfall()?`Waterfall com ${this.waterfall.length} anúncios`:"Conteúdo programático vazio"}}class l{constructor(e){this.url=e.url,this.adBlock=e.adBlock}hasUrl(){return!(!this.url||!this.url.trim())}hasAdBlock(){return!(!this.adBlock||!this.adBlock.trim())}}class c{constructor(e){this.url=e.url,this.programmatic=e.programmatic?new d(e.programmatic):void 0,this.infoPrimary=e.infoPrimary,this.infoSecondary=e.infoSecondary,this.survey=e.survey?new l(e.survey):void 0}hasUrl(){return!(!this.url||!this.url.trim())}isProgrammatic(){return!(!this.programmatic||!this.programmatic.hasWaterfall())}isSurvey(){return!(!this.survey||!this.survey.hasUrl())}getInfo(){return this.hasUrl()?`URL: ${this.url}`:this.isProgrammatic()?this.programmatic.getInfo():this.isSurvey()?`Survey: ${this.survey.url}`:"Conteúdo vazio"}}class g{constructor(e){this.type=e.type,this.title=e.title,this.description=e.description,this.buttons=e.buttons||[],this.url=e.url,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}isExternal(){return"EXTERNAL"===this.type}hasUrl(){return!(!this.url||!this.url.trim())}hasButtons(){return this.buttons.length>0}getInfo(){return`${this.title}: ${this.description}`}}class h{constructor(e){this.media=e.media,this.result=e.result,this.error=e.error,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}isSuccess(){return this.result===n.REWARDED||this.result===n.REWARDED_REDIRECTED}isSkipped(){return this.result===n.SKIPPED}hasError(){return this.result===n.ERROR||!!this.error}getErrorMessage(){return this.error?this.error.description||this.error.cause||"Erro desconhecido":"Sem erro"}getInfo(){return this.isSuccess()?"Anúncio visualizado com sucesso":this.isSkipped()?"Anúncio pulado":this.hasError()?`Erro: ${this.getErrorMessage()}`:"Resultado desconhecido"}}const u={REWARDED:"Benefício adiquirido com sucesso",NOT_REWARDED:"Você precisa assistir o anúncio até o fim para obter o benefício",REDIRECT_ERROR:"Você não tem nenhum aplicativo instalado para abrir uma página na web",ERROR:"Ocorreu um erro ao exibir o anúncio. Por favor, tente novamente",CONNECTION_ERROR:"Ocorreu um erro ao exibir o anúncio. Por favor, verifique sua conexão e tente novamente",NO_FILL:"Não foi possível encontrar uma publicidade no momento. Por favor, tente novamente",VAST_BACK:"Para obter o prêmio é necessário assistir o vídeo até o final"};class m{constructor(e=!1){this.debugMode=e}debug(e,...t){this.debugMode}info(e,...t){}warn(e,...t){}error(e,...t){}}class p{constructor(){}interceptRequest(e){const t=me.getCustomHeaders();if(t){const r=new Headers(e.headers);Object.entries(t).forEach(([e,t])=>{r.set(e,t)}),e.headers=r}const r=new Headers(e.headers);return r.set("Content-Type","application/json"),r.set("Accept","application/json"),e.headers=r,e}interceptResponse(e){return e}}class E{constructor(e){this.fetchConfig=e}async fetchWithConfig(e,t={}){const{baseUrl:r,restInterceptor:i}=this.fetchConfig;i&&(t=i.interceptRequest(t));const s=new URL(e,r).toString();return fetch(s,{...t})}async requestCampaign(e,t,r,i){const s=`campaign/v3/${e}?size=${r}${i?`&t=${i}`:""}`,n=await this.fetchWithConfig(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(`Failed to request campaign: ${n.statusText}`);return 204==n.status?{}:n.json()}async sendTracking(e,t,r,i,s,n){const a=`tracker?e=${e}&c=${t??""}&u=${r}&requestId=${i}${s?`&m=${s}`:""}${n?`&s=${n}`:""}`,o=await this.fetchWithConfig(a,{method:"POST"});if(!o.ok)throw new Error(`Failed to send tracking: ${o.statusText}`)}async sendVastTracking(e,t,r,i,s,n,a="aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2FydGVtaXMtcHJkLWZpbGVzLXN0YXRpYy5tb2JpY2FyZS5jb20uYnIvc3RhdGljL2UuZ2lm"){const o=`tracker/vast/${e}?type=${t}&campaignUuid=${r??""}&userId=${i}&requestId=${s}${n?`&mediaUuid=${n}`:""}&url=${a}`,d=await this.fetchWithConfig(o,{method:"GET"});if(!d.ok)throw new Error(`Failed to send VAST tracking: ${d.statusText}`)}async checkConnectivity(e="https://access-network.akross.com.br"){const t=Math.round(1e4*Math.random()),r=await this.fetchWithConfig(`${e}?rand=${t}`,{method:"GET"});if(!r.ok)throw new Error(`Failed to check connectivity: ${r.statusText}`);return r}async sendParsedVastTrackingEvent(e){const t=await this.fetchWithConfig(e,{method:"GET"});if(!t.ok)throw new Error(`Failed to send parsed VAST tracking event: ${t.statusText}`)}}class v{constructor(){}createFetchConfig(e,t,r=!1,i=!0){return{baseUrl:e,timeout:t,debugMode:r,restInterceptor:i?new p:null}}init(e="",t=5,r=!1,i=!0){let s=e;if(""===s){const e=me.getConfig();s=e?.baseUrl||"https://internal-artemis-837746407.us-east-1.elb.amazonaws.com/adserver/"}return this.createFetchConfig(s,t,r,i)}getArtemisAdsService(e=30,t=!1,r=!0){const i=this.init("",e,t,r);return new E(i)}}const w="impression",y="click",f="complete",R="prog-wtfl-start",I="prog-conn-error",A="prog-fallback-req",S="prog-ad-error",b="prog-ad-no-fill",M="prog-skipped",D="ad-error",C="start",L="firstQuartile",k="midpoint",T="thirdQuartile",O="skipped";class P{constructor(){this.logger=new m(me.getDebugMode()),this.apiFactory=new v}async sendEvent(e,t,r,i,s){await this.requestEvent(e,t,r,i,s)}async sendVastEvent(e,t,r,i,s){await this.requestEvent(e,t,r,i,s,!0)}async requestEvent(e,t,r,i,s,n=!1){const a=me.getUserData(),o=a?.userId;if(o)try{const a=me.getDebugMode(),d=this.apiFactory.getArtemisAdsService(3,a);n?await d.sendVastTracking(e,e,t,o,r,i):await d.sendTracking(e,t,o,r,i,s),this.logger.debug(`Event sent successfully: ${e} for campaign ${t}`)}catch(e){this.logger.warn("Error sending tracking event:",e)}else this.logger.error("Error sending tracking event: User id is null")}async sendAdClickEvent(e,t,r){await this.sendEvent(y,e,t,r)}async sendCampaignsImpressionEvent(e,t){for(const r of t)await this.sendEvent(w,r.campaignUuid,e)}async sendMultiCampaignSingleMediaImpressionEvent(e,t){for(const r of t)r.mainData?.media&&r.mainData.media.length>0&&await this.sendEvent(w,r.campaignUuid,e,r.mainData.media[0].uuid)}async sendImpressedEvent(e,t,r){await this.sendEvent(w,e,t,r)}async sendCompleteEvent(e,t,r,i){await this.sendEvent(f,e,t,r,i)}async sendEventFromUrl(e){try{const t=me.getDebugMode(),r=this.apiFactory.getArtemisAdsService(3,t);await r.sendParsedVastTrackingEvent(e),this.logger.debug("Parsed VAST tracking event sent successfully")}catch(e){this.logger.warn("Error sending tracking event from URL:",e)}}async sendVpaidStartEvent(e,t,r){await this.sendEvent(C,e,t,r)}async sendFirstQuartileEvent(e,t,r){await this.sendEvent(L,e,t,r)}async sendMidpointEvent(e,t,r){await this.sendEvent(k,e,t,r)}async sendThirdQuartileEvent(e,t,r){await this.sendEvent(T,e,t,r)}async sendSkippedEvent(e,t,r){await this.sendEvent(O,e,t,r)}async sendAdErrorEvent(e,t,r){await this.sendEvent(D,e,t,r)}async sendAdNoFillEvent(e,t,r){await this.sendEvent(b,e,t,r)}async sendWaterfallStartEvent(e,t,r){await this.sendEvent(R,e,t,r)}async sendProgConnectionError(e,t,r){await this.sendEvent(I,e,t,r)}async sendProgFallbackReq(e,t,r){await this.sendEvent(A,e,t,r)}async sendProgError(e,t,r){await this.sendEvent(S,e,t,r)}async sendProgSkipped(e,t,r){await this.sendEvent(M,e,t,r)}async sendVastImpressionEvent(e,t,r){await this.sendVastEvent(w,e,t,r)}async sendParsedVastTrackingEvent(e){await this.sendEventFromUrl(e)}}function _(){return new P}const V=P,x=_;var N;!function(e){e.IMPRESSION="IMPRESSION",e.VAST_IMPRESSION="VAST_IMPRESSION",e.START="START",e.FIRST_QUARTILE="FIRST_QUARTILE",e.MIDPOINT="MIDPOINT",e.THIRD_QUARTILE="THIRD_QUARTILE",e.COMPLETE="COMPLETE",e.ERROR="ERROR",e.SKIPPED="SKIPPED",e.NO_FILL="NO_FILL",e.PROGRAMMATIC_ERROR="PROGRAMMATIC_ERROR",e.PROGRAMMATIC_SKIPPED="PROGRAMMATIC_SKIPPED",e.PROGRAMMATIC_WATERFALL_START="PROGRAMMATIC_WATERFALL_START",e.PROGRAMMATIC_CONNECTION_ERROR="PROGRAMMATIC_CONNECTION_ERROR",e.PROGRAMMATIC_FALLBACK_REQ="PROGRAMMATIC_FALLBACK_REQ"}(N||(N={}));class U{constructor(e){this.sentEvents=new Set,this.config=e,this.logger=new m(me.getDebugMode()),this.eventsHelper=new P}sendEventCallback(e,t){switch(this.sentEvents.has(e)&&this.logger.debug(`Event ${e} already sent, skipping`),this.sentEvents.add(e),this.logger.debug(`Sending event: ${e} for media: ${t.title}`),e){case N.IMPRESSION:this.onAdImpression(t);break;case N.VAST_IMPRESSION:this.onVastAdImpression(t);break;case N.START:this.onAdStarted(t);break;case N.FIRST_QUARTILE:this.onFirstQuartile(t);break;case N.MIDPOINT:this.onMidpoint(t);break;case N.THIRD_QUARTILE:this.onThirdQuartile(t);break;case N.COMPLETE:this.onAdComplete(t);break;case N.ERROR:this.onAdError(t);break;case N.SKIPPED:this.onAdSkipped(t);break;case N.NO_FILL:this.onProgrammaticNoFill(t);break;case N.PROGRAMMATIC_ERROR:this.onProgrammaticAdError(t);break;case N.PROGRAMMATIC_SKIPPED:this.onProgrammaticSkipped(t);break;case N.PROGRAMMATIC_WATERFALL_START:this.onProgrammaticStart(t);break;case N.PROGRAMMATIC_CONNECTION_ERROR:this.onProgrammaticConnectionError(t);break;case N.PROGRAMMATIC_FALLBACK_REQ:this.onProgrammaticFallbackReq(t);break;default:this.logger.warn(`Unknown event: ${e}`)}}finishWithResult(e,t,r){const i=new h({media:e,result:t});switch(t){case n.REWARDED:if(this.logger.debug(`Checking mediasLeft: ${e.mediasLeft} (type: ${typeof e.mediasLeft})`),(e.mediasLeft||0)>1)this.logger.debug(`Setting result to MEDIA_WATCHED because mediasLeft (${e.mediasLeft}) > 1`),i.result=n.MEDIA_WATCHED;else if(this.logger.debug(`Keeping result as REWARDED because mediasLeft (${e.mediasLeft}) <= 1`),"EXTERNAL"===e.success?.type)try{e.success.url&&(window.open(e.success.url,"_blank"),i.result=n.REWARDED_REDIRECTED)}catch(e){i.error=new o(u.REDIRECT_ERROR),i.result=n.ERROR}break;case n.SKIPPED:i.error=new o(u.NOT_REWARDED);break;case n.ERROR:i.error=new o(u.ERROR,r);break;case n.NO_FILL:i.error=new o(u.NO_FILL,"NO_FILL");break;case n.CONNECTION_ERROR:i.error=new o(u.CONNECTION_ERROR,"CONNECTION_ERROR");break;case n.CANCELED:case n.REWARDED_REDIRECTED:break;default:this.logger.warn(`Unknown result: ${t}`)}return i}onVastAdImpression(e){this.canSendLocalEvents(e)||this.eventsHelper.sendVastImpressionEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdImpression(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendImpressedEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdStarted(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendVpaidStartEvent(e.campaignId||"",e.requestId||"",e.uuid)}onFirstQuartile(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendFirstQuartileEvent(e.campaignId||"",e.requestId||"",e.uuid)}onMidpoint(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendMidpointEvent(e.campaignId||"",e.requestId||"",e.uuid)}onThirdQuartile(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendThirdQuartileEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdComplete(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendCompleteEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdSkipped(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendSkippedEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdError(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendAdErrorEvent(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticNoFill(e){this.eventsHelper.sendAdNoFillEvent(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticStart(e){this.eventsHelper.sendWaterfallStartEvent(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticConnectionError(e,t){this.eventsHelper.sendProgConnectionError(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticFallbackReq(e){this.eventsHelper.sendProgFallbackReq(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticAdError(e,t){this.eventsHelper.sendProgError(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticSkipped(e){this.eventsHelper.sendProgSkipped(e.campaignId||"",e.requestId||"",e.uuid)}canSendLocalEvents(e){switch(e.type){case s.VAST:case s.VPAID:return!e.proxy;default:return!0}}clearSentEvents(){this.sentEvents.clear()}hasEventBeenSent(e){return this.sentEvents.has(e)}}function W(e){return new U(e)}const F=1e3;function H(){return new Promise((e,t)=>{if(window.googletag)return void e();if(document.getElementById("gpt-script"))setTimeout(()=>{window.googletag?e():t(new Error("GPT script exists but not loaded"))},F);else{const r=document.createElement("script");r.src="https://www.googletagservices.com/tag/js/gpt.js",r.id="gpt-script",r.async=!0,r.onload=()=>{setTimeout(()=>{window.googletag?e():t(new Error("GPT script failed to initialize"))},F)},r.onerror=e=>{t(e)},document.head.appendChild(r)}})}function B(){return new Promise((e,t)=>{if(window.google&&window.google.ima)return void e();if(document.getElementById("ima-script"))setTimeout(()=>{window.google&&window.google.ima?e():t(new Error("IMA SDK script exists but not loaded"))},F);else{const r=document.createElement("script");r.src="https://imasdk.googleapis.com/js/sdkloader/ima3.js",r.id="ima-script",r.async=!0,r.onload=()=>{setTimeout(()=>{window.google&&window.google.ima?e():t(new Error("IMA SDK failed to initialize"))},F)},r.onerror=e=>{t(e)},document.head.appendChild(r)}})}class z{constructor(e){this.modalElement=null,this.videoElement=null,this.videoContainer=null,this.closeButton=null,this.logger=e}createModal(){try{if(this.cleanup(),this.modalElement=document.createElement("div"),this.modalElement.innerHTML='\n <style>\n .modal {\n display: block;\n position: fixed;\n z-index: 1;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.4);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modalDialog {\n background-color: black;\n border-radius: 8px;\n position: relative;\n width: 100%;\n max-width: 90vw;\n aspect-ratio: 16 / 9;\n overflow: hidden;\n }\n\n .content-video-vast {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .closeButton {\n display: flex;\n position: absolute;\n top: 10px;\n right: 10px;\n background-color: rgba(0, 0, 0, 0.8);\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n font-size: 0;\n transition: all 0.2s ease;\n z-index: 10;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n\n .closeButton::before,\n .closeButton::after {\n content: \'\';\n position: absolute;\n width: 20px;\n height: 2px;\n background-color: white;\n border-radius: 1px;\n }\n\n .closeButton::before {\n transform: rotate(45deg);\n }\n\n .closeButton::after {\n transform: rotate(-45deg);\n }\n\n .closeButton:hover {\n background-color: rgba(0, 0, 0, 0.9);\n }\n\n .ima-ad-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 0;\n }\n\n .ima-video-element {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n z-index: 1;\n }\n\n .ima-video-element:focus {\n outline: none;\n }\n\n .ima-video-element:hover {\n cursor: pointer;\n }\n </style>\n <div id="modal" class="modal">\n <div class="modalDialog">\n <div id="content-video-vast" class="content-video-vast">\n <video id="ima-video-element" class="ima-video-element" autoplay playsinline></video>\n <div id="ima-ad-container" class="ima-ad-container"></div>\n </div>\n <button type="button" class="closeButton" id="close-modal"></button>\n </div>\n </div>\n ',document.body.appendChild(this.modalElement),this.videoElement=this.modalElement.querySelector("#ima-video-element"),this.videoContainer=this.modalElement.querySelector(".content-video-vast"),this.closeButton=this.modalElement.querySelector("#close-modal"),!this.videoElement)throw new Error("Video element not found");return this.logger.debug("Modal created successfully"),this.videoElement}catch(e){throw this.logger.error("Error creating modal:",e),e}}getVideoElement(){return this.videoElement}getVideoContainer(){return this.videoContainer}getAdContainer(){return this.modalElement?this.modalElement.querySelector("#ima-ad-container"):null}setCloseCallback(e){this.closeButton&&this.closeButton.addEventListener("click",e)}close(){this.modalElement&&(this.modalElement.style.display="none")}remove(){this.modalElement&&(document.body.removeChild(this.modalElement),this.modalElement=null)}showVideo(){this.videoElement&&(this.videoElement.style.display="block",this.videoElement.style.visibility="visible",this.logger.debug("Video made visible"))}cleanup(){try{this.closeButton&&(this.closeButton.remove(),this.closeButton=null),this.videoElement&&(this.videoElement=null),this.videoContainer&&(this.videoContainer.remove(),this.videoContainer=null),this.modalElement&&(this.modalElement.remove(),this.modalElement=null),this.logger.debug("UI cleaned up successfully")}catch(e){this.logger.error("Error cleaning up UI:",e)}}}class G{static show(){if(this.isVisible)return;const e=me.getConfig(),t=e?.primaryColor||"#007bff",r=document.createElement("div");r.id=this.OVERLAY_ID,r.innerHTML=`\n <style>\n #${this.OVERLAY_ID} {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n z-index: 9999;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n margin: 0;\n padding: 0;\n }\n \n #${this.OVERLAY_ID} .loading-content {\n text-align: center;\n color: white;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n \n #${this.OVERLAY_ID} .spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top: 4px solid ${t};\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n flex-shrink: 0;\n }\n \n #${this.OVERLAY_ID} .loading-text {\n font-size: 16px;\n font-weight: 500;\n margin: 0;\n line-height: 1.2;\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n </style>\n <div class="loading-content">\n <div class="spinner"></div>\n <p class="loading-text">Carregando Publicidade</p>\n </div>\n `,document.body.appendChild(r),this.isVisible=!0}static hide(){const e=document.getElementById(this.OVERLAY_ID);e&&(e.remove(),this.isVisible=!1)}static isShowing(){return this.isVisible}static forceHide(){const e=document.getElementById(this.OVERLAY_ID);e&&e.remove(),this.isVisible=!1}}G.OVERLAY_ID="akross-loading-overlay",G.isVisible=!1;class K{constructor(e={}){this.adCompleted=!1,this.resolvePlayerExecution=null,this.videoElement=null,this.adContainer=null,this.adDisplayContainer=null,this.adsLoader=null,this.adManager=null,this.config=e,this.logger=new m(me.getDebugMode());const t=me.getUserData(),r=me.getDebugMode();this.mediaResultHelper=new U({userId:t?.userId||"",debug:r}),this.ui=new z(this.logger)}async start(e){this.logger.debug("Starting VAST player for media:",e.title),G.show();try{return this.currentMedia=e,this.logger.debug("Using IMA SDK for VAST"),await this.executeWithIMA()}catch(e){return this.logger.error("Error starting VAST player:",e),this.createErrorResult(e)}}async executeWithIMA(){try{if(this.logger.debug("Executing VAST with IMA SDK:",this.currentMedia.title),!window.google||!window.google.ima||!window.google.ima.AdsLoader){this.logger.debug("IMA SDK not available, loading...");try{await B(),this.logger.debug("IMA SDK loaded successfully")}catch(e){throw this.logger.error("Failed to load IMA SDK:",e),new Error(`Failed to load IMA SDK: ${e instanceof Error?e.message:"Unknown error"}`)}}const e=this.config.imaConfig||{locale:"pt-BR",vastLoadTimeout:1e4,vpaidMode:window.google.ima.ImaSdkSettings.VpaidMode.ENABLED,continuousPlayback:!0};window.google.ima.settings.setVpaidMode(e.vpaidMode),window.google.ima.settings.setLocale(e.locale),this.logger.debug("IMA SDK configured successfully"),this.createModal(),await this.setupIMA();const t=this.prepareAdTagUrl();return await this.requestAds(t),this.logger.debug("VAST ad executed successfully with IMA SDK"),await this.waitForAdResult()}catch(e){return this.logger.error("Error executing with IMA SDK:",e),this.finishWithResult(n.ERROR)}}async waitForAdResult(){return new Promise(e=>{this.resolvePlayerExecution=e})}finishWithResult(e){this.logger.debug("Finishing VAST player with result:",e),G.hide();const t=this.mediaResultHelper.finishWithResult(this.currentMedia,e);return this.resolvePlayerExecution&&(this.resolvePlayerExecution(t),this.resolvePlayerExecution=null),this.cleanup(),t}createErrorResult(e){return new h({media:this.currentMedia,result:n.ERROR,error:new o(u.ERROR,e instanceof Error?e.message:"Unknown error")})}createModal(){try{this.videoElement=this.ui.createModal(),this.ui.setCloseCallback(()=>{this.finishWithResult(n.SKIPPED)})}catch(e){throw this.logger.error("Error creating modal:",e),e}}prepareAdTagUrl(){if(!this.currentMedia.content?.url)throw this.logger.error("Media content URL not found"),new Error("Media content URL not found");return this.currentMedia.content.url}async setupIMA(){try{if(!this.videoElement)throw new Error("Video element not found");if(this.adContainer=this.ui.getAdContainer(),!this.adContainer)throw new Error("Ad container not found");this.ui.showVideo(),this.adDisplayContainer=new window.google.ima.AdDisplayContainer(this.adContainer,this.videoElement),this.adDisplayContainer.initialize(),this.adsLoader=new window.google.ima.AdsLoader(this.adDisplayContainer),this.setupIMAEvents(),this.logger.debug("IMA SDK setup completed")}catch(e){throw this.logger.error("Error setting up IMA SDK:",e),e}}setupIMAEvents(){this.adsLoader&&(this.adsLoader.addEventListener(window.google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,e=>{if(this.logger.debug("AdsManager loaded"),this.adManager=e.getAdsManager(this.videoElement),this.adManager){const e=this.videoElement?.clientWidth||640,t=this.videoElement?.clientHeight||480;this.logger.debug(`Initializing ad with dimensions: ${e}x${t}`),this.setupAdManagerEvents(),this.adManager.init(e,t,window.google.ima.ViewMode.NORMAL),this.adManager.start(),this.logger.debug("Ad started successfully"),setTimeout(()=>{this.ui.showVideo()},100)}}),this.adsLoader.addEventListener(window.google.ima.AdErrorEvent.Type.AD_ERROR,e=>{this.logger.error("Ad error:",e.getError()),this.finishWithResult(n.ERROR)}))}setupAdManagerEvents(){this.adManager&&(this.adManager.addEventListener(window.google.ima.AdEvent.Type.LOADED,()=>{this.logger.debug("Ad loaded"),G.hide(),this.sendVastImpressionEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.STARTED,()=>{this.logger.debug("Ad started"),this.sendVpaidStartEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.FIRST_QUARTILE,()=>{this.logger.debug("Ad first quartile"),this.sendFirstQuartileEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.MIDPOINT,()=>{this.logger.debug("Ad midpoint"),this.sendMidpointEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.THIRD_QUARTILE,()=>{this.logger.debug("Ad third quartile"),this.sendThirdQuartileEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.COMPLETE,()=>{this.logger.debug("Ad completed"),this.sendCompleteEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.ALL_ADS_COMPLETED,()=>{setTimeout(()=>{this.logger.debug("All ads completed"),this.adCompleted=!0,this.sendCompleteEvent(),this.finishWithResult(n.REWARDED)},2e3)}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.CLICK,()=>{this.logger.debug("Ad clicked"),this.sendClickThroughEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.SKIPPED,()=>{this.logger.debug("Ad skipped"),this.sendSkippedEvent(),this.finishWithResult(n.SKIPPED)}))}async requestAds(e){try{if(!this.adsLoader)throw new Error("AdsLoader not initialized");const t=new window.google.ima.AdsRequest;t.adTagUrl=e,this.logger.debug("Requesting ads with URL:",e),this.adsLoader.requestAds(t),this.logger.debug("Ads requested successfully")}catch(e){throw this.logger.error("Error requesting ads:",e),e}}sendVastImpressionEvent(){this.mediaResultHelper.sendEventCallback(N.VAST_IMPRESSION,this.currentMedia)}sendVpaidStartEvent(){this.mediaResultHelper.sendEventCallback(N.START,this.currentMedia)}sendFirstQuartileEvent(){this.mediaResultHelper.sendEventCallback(N.FIRST_QUARTILE,this.currentMedia)}sendMidpointEvent(){this.mediaResultHelper.sendEventCallback(N.MIDPOINT,this.currentMedia)}sendThirdQuartileEvent(){this.mediaResultHelper.sendEventCallback(N.THIRD_QUARTILE,this.currentMedia)}sendCompleteEvent(){this.mediaResultHelper.sendEventCallback(N.COMPLETE,this.currentMedia)}sendClickThroughEvent(){this.mediaResultHelper.sendEventCallback(N.IMPRESSION,this.currentMedia)}sendSkippedEvent(){this.mediaResultHelper.sendEventCallback(N.SKIPPED,this.currentMedia)}sendAdErrorEvent(){this.mediaResultHelper.sendEventCallback(N.ERROR,this.currentMedia)}cleanup(){this.logger.debug("Cleaning up VAST player"),this.adManager&&(this.adManager.destroy(),this.adManager=null),this.adsLoader&&(this.adsLoader.destroy(),this.adsLoader=null),this.adDisplayContainer&&(this.adDisplayContainer.destroy(),this.adDisplayContainer=null),this.ui.cleanup(),this.adContainer=null,this.mediaResultHelper.clearSentEvents(),this.adCompleted=!1,this.resolvePlayerExecution=null}destroy(){this.logger.debug("Destroying VAST player"),this.cleanup()}}function $(e){return new K(e)}var q;!function(e){e.NO_FILL="NO_FILL",e.CONNECTION_ERROR="CONNECTION_ERROR",e.AD_FAILED="AD_FAILED",e.REWARDED="REWARDED",e.SKIPPED="SKIPPED"}(q||(q={}));class j{constructor(){this.steps=[]}addStep(e,t){this.steps.push({result:e,errorMessage:t})}getWaterfallSummary(){return this.steps.map(e=>`${e.result}`).join(", ")||"No results"}getDetailedWaterfallSummary(){return this.steps.map(e=>{switch(e.result){case q.AD_FAILED:return"AD_FAILED"+(e.errorMessage?`(${e.errorMessage})`:"");case q.NO_FILL:return"NO_FILL";case q.CONNECTION_ERROR:return"CONNECTION_ERROR";case q.REWARDED:return"REWARDED";case q.SKIPPED:return"SKIPPED";default:return e.result}}).join(" | ")}findMainResult(){return this.steps.some(e=>e.result===q.REWARDED)?q.REWARDED:this.steps.some(e=>e.result===q.SKIPPED)?q.SKIPPED:this.steps.some(e=>e.result===q.NO_FILL)?q.NO_FILL:this.steps.some(e=>e.result===q.AD_FAILED)?q.AD_FAILED:q.CONNECTION_ERROR}clear(){this.steps=[]}getSteps(){return[...this.steps]}getStepCount(){return this.steps.length}}function Y(){return new j}class Q{constructor(e){this.isLoaded=!1,this.isDestroyed=!1,this.loadTimeout=null,this.rewardedSlot=null,this.rewardPayload=null,this.resolvePromise=null,this.eventListeners={rewardedSlotReady:null,rewardedSlotClosed:null,rewardedSlotGranted:null,slotRenderEnded:null},this.config=e,this.logger=new m(me.getDebugMode())}async loadAd(){return this.isDestroyed?(this.logger.warn("Wrapper already destroyed"),{result:q.AD_FAILED,errorMessage:"Wrapper destroyed"}):(this.logger.debug("Loading GAM Rewarded Video:",this.config.adUnitId),new Promise(e=>{this.resolvePromise=e,this.initGooglePublisherTag().then(()=>{if(!this.isDestroyed)return this.renderRewardedAd();e({result:q.AD_FAILED,errorMessage:"Wrapper destroyed"})}).catch(t=>{this.logger.error("Error loading GAM RV:",t),e({result:q.AD_FAILED,errorMessage:t instanceof Error?t.message:"Unknown error"})})}))}async initGooglePublisherTag(){if("undefined"==typeof window)throw new Error("Window object not available");if(!window.googletag){window.googletag=window.googletag||{cmd:[]};try{await H(),this.logger.debug("GPT script ready")}catch(e){throw this.logger.error("Failed to load GPT script:",e),new Error(`Failed to load Google Publisher Tag: ${e instanceof Error?e.message:"Unknown error"}`)}}}async renderRewardedAd(){return new Promise((e,t)=>{this.loadTimeout=setTimeout(()=>{this.isDestroyed||(this.logger.error("GAM RV load timeout"),this.resolvePromise?.({result:q.CONNECTION_ERROR,errorMessage:"Load timeout"}),this.removeEventListeners(),t(new Error("Load timeout")))},this.config.timeout);try{window.googletag.cmd.push(()=>{this.isDestroyed||(this.rewardedSlot=window.googletag.defineOutOfPageSlot(this.config.adUnitId,window.googletag.enums.OutOfPageFormat.REWARDED),this.rewardedSlot?(this.rewardedSlot.addService(window.googletag.pubads()),this.addCampaignParams(),this.addEventListeners(),window.googletag.enableServices(),window.googletag.display(this.rewardedSlot),e()):(this.logger.error("Rewarded ads are not supported on this page"),this.resolvePromise?.({result:q.AD_FAILED,errorMessage:"Rewarded ads not supported"}),this.removeEventListeners(),t(new Error("Rewarded ads not supported"))))})}catch(e){this.logger.error("Error in renderRewardedAd:",e),this.resolvePromise?.({result:q.AD_FAILED,errorMessage:e instanceof Error?e.message:"Unknown error"}),this.removeEventListeners(),t(e)}})}addCampaignParams(){this.rewardedSlot&&this.config.campaignParams&&(this.config.campaignParams.mediaId&&this.rewardedSlot.setTargeting("a_media_id",this.config.campaignParams.mediaId),this.config.campaignParams.campaignId&&this.rewardedSlot.setTargeting("a_campaign_id",this.config.campaignParams.campaignId),this.config.campaignParams.zoneId&&this.rewardedSlot.setTargeting("a_zone_id",this.config.campaignParams.zoneId),this.config.campaignParams.requestId&&this.rewardedSlot.setTargeting("a_request_id",this.config.campaignParams.requestId))}addEventListeners(){this.logger.debug("Adding GAM RV event listeners"),this.eventListeners.rewardedSlotReady||(this.eventListeners.rewardedSlotReady=e=>{this.isDestroyed||(this.logger.debug("Rewarded ad slot is ready"),history.pushState(null,"Google Rewarded Video","#goog_rewarded"),G.hide(),e.makeRewardedVisible(),this.logger.debug("Rewarded ad is active"))},window.googletag.pubads().addEventListener("rewardedSlotReady",this.eventListeners.rewardedSlotReady)),this.eventListeners.rewardedSlotClosed||(this.eventListeners.rewardedSlotClosed=()=>{this.isDestroyed||(this.logger.debug("Rewarded ad closed"),this.resolvePromise?.({result:q.SKIPPED,errorMessage:void 0}),this.dismissRewardedAd())},window.googletag.pubads().addEventListener("rewardedSlotClosed",this.eventListeners.rewardedSlotClosed)),this.eventListeners.rewardedSlotGranted||(this.eventListeners.rewardedSlotGranted=e=>{this.isDestroyed||(this.logger.debug("User rewarded"),this.resolvePromise?.({result:q.REWARDED,errorMessage:void 0}),this.dismissRewardedAd())},window.googletag.pubads().addEventListener("rewardedSlotGranted",this.eventListeners.rewardedSlotGranted)),this.eventListeners.slotRenderEnded||(this.eventListeners.slotRenderEnded=e=>{this.isDestroyed||(this.loadTimeout&&(clearTimeout(this.loadTimeout),this.loadTimeout=null),e.slot===this.rewardedSlot&&e.isEmpty&&(this.logger.debug("No ad returned for rewarded ad slot"),this.resolvePromise?.({result:q.NO_FILL,errorMessage:"No ad returned"}),this.dismissRewardedAd()))},window.googletag.pubads().addEventListener("slotRenderEnded",this.eventListeners.slotRenderEnded))}removeEventListeners(){this.logger.debug("Removing GAM RV event listeners"),this.eventListeners.rewardedSlotReady&&(window.googletag.pubads().removeEventListener("rewardedSlotReady",this.eventListeners.rewardedSlotReady),this.eventListeners.rewardedSlotReady=null),this.eventListeners.rewardedSlotClosed&&(window.googletag.pubads().removeEventListener("rewardedSlotClosed",this.eventListeners.rewardedSlotClosed),this.eventListeners.rewardedSlotClosed=null),this.eventListeners.rewardedSlotGranted&&(window.googletag.pubads().removeEventListener("rewardedSlotGranted",this.eventListeners.rewardedSlotGranted),this.eventListeners.rewardedSlotGranted=null),this.eventListeners.slotRenderEnded&&(window.googletag.pubads().removeEventListener("slotRenderEnded",this.eventListeners.slotRenderEnded),this.eventListeners.slotRenderEnded=null)}dismissRewardedAd(){this.rewardPayload&&(this.rewardPayload=null),this.logger.debug("Rewarded ad has been closed"),this.rewardedSlot&&window.googletag.destroySlots([this.rewardedSlot]),this.removeEventListeners()}destroy(){this.isDestroyed||(this.logger.debug("Destroying GAM RV wrapper"),this.loadTimeout&&(clearTimeout(this.loadTimeout),this.loadTimeout=null),this.removeEventListeners(),this.rewardedSlot&&window.googletag&&window.googletag.destroySlots([this.rewardedSlot]),this.isDestroyed=!0,this.isLoaded=!1,this.rewardedSlot=null,this.rewardPayload=null)}isAdLoaded(){return this.isLoaded}}function J(e){return new Q(e)}class X{constructor(e={}){this.currentMedia=null,this.config=e,this.logger=new m(me.getDebugMode());const t=me.getUserData(),r=me.getDebugMode();this.mediaResultHelper=new U({userId:t?.userId||"",debug:r}),this.waterfallTracker=new j}async start(e){this.logger.debug("Starting programmatic player for media:",e.title),G.show();try{this.currentMedia=e,this.waterfallTracker.clear(),this.mediaResultHelper.sendEventCallback(N.PROGRAMMATIC_WATERFALL_START,e);const t=e.content?.programmatic?.waterfall;return t&&0!==t.length?await this.executeWaterfall(t):(this.logger.error("Empty or null waterfall"),this.mediaResultHelper.sendEventCallback(N.PROGRAMMATIC_ERROR,e),G.hide(),this.createErrorResult("Empty or null waterfall"))}catch(e){throw this.logger.error("Error in start method:",e),G.hide(),e}}async executeWaterfall(e){this.logger.debug("Executing waterfall with",e.length,"steps");for(let t=0;t<e.length;t++){const r=e[t];this.logger.debug(`Loading ad ${t+1} of ${e.length}: ${r.type}`);try{const e=await this.loadAd(r,t);if(e instanceof h)return this.logger.debug("Fallback executed, returning result directly"),e;if(e.result===q.REWARDED)return this.logger.debug("Ad rewarded successfully"),this.mediaResultHelper.sendEventCallback(N.COMPLETE,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.REWARDED);if(e.result===q.SKIPPED)return this.logger.debug("Ad skipped"),this.mediaResultHelper.sendEventCallback(N.PROGRAMMATIC_SKIPPED,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.SKIPPED);this.waterfallTracker.addStep(e.result,e.errorMessage),this.logger.debug(`Ad ${t+1} failed: ${e.errorMessage}, trying next`)}catch(e){this.logger.error(`Error loading ad ${t+1}:`,e),this.waterfallTracker.addStep(q.AD_FAILED,e instanceof Error?e.message:"Unknown error")}}return this.logger.debug("No more ads to load in waterfall. Summary:",this.waterfallTracker.getDetailedWaterfallSummary()),G.hide(),await this.sendProgResultEvent()}async loadAd(e,t){const r=e.type,i=e.findTimeout()||this.config.loadTimeout||1e4;switch(this.logger.debug(`Loading ad type: ${r}`),r){case s.TYPE_GOOGLE_RV:return await this.loadGAMRewardedVideo(e.findAdUnitId(),i);case s.TYPE_FALLBACK:return await this.loadVideoFallback(e.findVastTag());default:return this.logger.warn(`Ad type ${r} not supported in web`),{result:q.AD_FAILED,errorMessage:`Ad type ${r} not supported`}}}async loadGAMRewardedVideo(e,t){try{if(this.logger.debug("Loading GAM Rewarded Video"),!e)return this.logger.error("Ad unit ID not found for GAM RV"),{result:q.AD_FAILED,errorMessage:"Ad unit ID not found"};const r=this.buildCampaignParams(),i=me.getDebugMode(),s=new Q({adUnitId:e,timeout:t,campaignParams:r,debug:i});return await this.loadGAMRewardedVideoWithWrapper(s)}catch(e){return this.logger.error("Error loading GAM RV:",e),{result:q.AD_FAILED,errorMessage:e instanceof Error?e.message:"Unknown error"}}}async loadGAMRewardedVideoWithWrapper(e){try{const t=await e.loadAd(),r=t.result;switch(r){case q.REWARDED:this.logger.debug("GAM RV rewarded"),this.mediaResultHelper.sendEventCallback(N.COMPLETE,this.currentMedia);break;case q.SKIPPED:this.logger.debug("GAM RV dismissed"),this.mediaResultHelper.sendEventCallback(N.PROGRAMMATIC_SKIPPED,this.currentMedia);break;case q.NO_FILL:this.logger.debug("GAM RV no fill"),this.waterfallTracker.addStep(q.NO_FILL);break;case q.CONNECTION_ERROR:this.logger.error("GAM RV connection error:",t.errorMessage),this.waterfallTracker.addStep(q.CONNECTION_ERROR,t.errorMessage);break;case q.AD_FAILED:default:this.logger.error("GAM RV failed:",t.errorMessage),this.waterfallTracker.addStep(q.AD_FAILED,t.errorMessage)}return{result:r,errorMessage:t.errorMessage}}catch(e){return this.logger.error("Error loading GAM RV:",e),{result:q.AD_FAILED,errorMessage:e instanceof Error?e.message:"Unknown error"}}}async loadVideoFallback(e){try{this.logger.debug("Loading fallback VAST"),this.mediaResultHelper.sendEventCallback(N.PROGRAMMATIC_FALLBACK_REQ,this.currentMedia),this.sendProgResultEvent();const t=JSON.parse(JSON.stringify(this.currentMedia));t.type=s.VAST,t.content={url:e};const r=new te(t);return await r.click()}catch(e){return this.logger.error("Error loading fallback:",e),new h({media:this.currentMedia,result:n.ERROR,error:new o(u.ERROR,e instanceof Error?e.message:"Unknown error")})}}createErrorResult(e){return new h({media:this.currentMedia,result:n.ERROR,error:new o(u.ERROR,e instanceof Error?e.message:"Unknown error")})}async sendProgResultEvent(){switch(this.waterfallTracker.findMainResult()){case q.NO_FILL:return this.logger.debug("Waterfall completed with NO_FILL"),this.mediaResultHelper.sendEventCallback(N.NO_FILL,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.NO_FILL);case q.AD_FAILED:const e=`Waterfall failed: ${this.waterfallTracker.getDetailedWaterfallSummary()}`;return this.logger.error("Waterfall",e),this.mediaResultHelper.sendEventCallback(N.PROGRAMMATIC_ERROR,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.ERROR,e);case q.CONNECTION_ERROR:return this.logger.debug("Waterfall completed with CONNECTION_ERROR"),this.mediaResultHelper.sendEventCallback(N.PROGRAMMATIC_CONNECTION_ERROR,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.CONNECTION_ERROR,"Connection Error");case q.REWARDED:return this.mediaResultHelper.finishWithResult(this.currentMedia,n.REWARDED);case q.SKIPPED:return this.mediaResultHelper.finishWithResult(this.currentMedia,n.SKIPPED)}}buildCampaignParams(){const e={};return this.currentMedia?.uuid&&(e.mediaId=this.currentMedia.uuid),this.currentMedia?.campaignId&&(e.campaignId=this.currentMedia.campaignId),this.currentMedia?.zoneId&&(e.zoneId=this.currentMedia.zoneId),this.currentMedia?.requestId&&(e.requestId=this.currentMedia.requestId),e}destroy(){this.logger.debug("Destroying AARewardedVideo"),G.hide(),this.currentMedia=null,this.waterfallTracker.clear()}}function Z(e){return new X(e)}class ee{constructor(e){this.overlayElement=null,this.iframeElement=null,this.loadingElement=null,this.errorElement=null,this.retryButton=null,this.closeButton=null,this.isSurveyCompleted=!1,this.isSurveyClosed=!1,this.media=e;const t=me.getDebugMode();this.logger=new m(t)}async start(){try{return this.logger.debug("Starting survey overlay for media:",this.media.title),"survey_v2"!==this.media.type?(this.logger.error("Unsupported media type:",this.media.type),new h({media:this.media,result:n.ERROR,error:new o("Unsupported media type")})):this.media.content?.survey?.url?(this.createOverlay(),this.setupEventListeners(),this.loadSurvey(),new Promise(e=>{this.onResultCallback=e})):(this.logger.error("Survey URL not found"),new h({media:this.media,result:n.ERROR,error:new o("Survey URL not found")}))}catch(e){return this.logger.error("Error starting survey overlay:",e),new h({media:this.media,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}createOverlay(){this.overlayElement=document.createElement("div"),this.overlayElement.innerHTML=`\n <style>${ee.OVERLAY_CSS}</style>\n <div class="aa-survey-overlay">\n <div class="aa-survey-dialog">\n <div class="aa-survey-content">\n <iframe class="aa-survey-iframe"></iframe>\n <div class="aa-survey-loading" style="display: none;">\n <div style="width: 40px; height: 40px; border: 4px solid #f3f3f3; border-top: 4px solid #007bff; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto 16px;"></div>\n <div style="color: #666; font-size: 14px;">Carregando pesquisa...</div>\n </div>\n <div class="aa-survey-error" style="display: none;">\n <div style="font-size: 48px; margin-bottom: 16px;">⚠️</div>\n <div class="aa-survey-error-message" style="font-size: 16px; color: #666; margin-bottom: 24px;"></div>\n <button style="background-color: #007bff; color: white; border: none; padding: 12px 24px; border-radius: 4px; cursor: pointer; font-size: 14px; transition: background-color 0.2s ease;">Tentar Novamente</button>\n </div>\n </div>\n <button type="button" class="closeButton"></button>\n </div>\n </div>\n `,document.body.appendChild(this.overlayElement),this.iframeElement=this.overlayElement.querySelector(".aa-survey-iframe"),this.loadingElement=this.overlayElement.querySelector(".aa-survey-loading"),this.errorElement=this.overlayElement.querySelector(".aa-survey-error"),this.retryButton=this.overlayElement.querySelector('button[style*="Tentar Novamente"]'),this.closeButton=this.overlayElement.querySelector(".closeButton"),this.applyPrimaryColor(),this.logger.debug("Survey overlay created")}applyPrimaryColor(){const t=me.getConfig(),r=t?e.getPrimaryColor(t,"#007bff"):"#007bff";if(this.loadingElement){const e=this.loadingElement.querySelector('div[style*="border-top"]');e&&(e.style.borderTop=`4px solid ${r}`)}this.retryButton&&(this.retryButton.style.backgroundColor=r,this.retryButton.addEventListener("mouseenter",()=>{this.retryButton.style.backgroundColor=this.darkenColor(r,10)}),this.retryButton.addEventListener("mouseleave",()=>{this.retryButton.style.backgroundColor=r}))}setupEventListeners(){this.retryButton&&this.retryButton.addEventListener("click",()=>{this.hideErrorInterface(),this.loadSurvey()}),this.closeButton&&this.closeButton.addEventListener("click",()=>{this.executeBackButtonLogic()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&this.executeBackButtonLogic()}),this.overlayElement&&this.overlayElement.addEventListener("click",e=>{e.target===this.overlayElement&&this.executeBackButtonLogic()})}loadSurvey(){this.iframeElement&&this.media.content?.survey?.url?(this.logger.debug("Loading survey from URL:",this.media.content.survey.url),this.hideErrorInterface(),this.showLoading(),this.iframeElement.src=this.media.content.survey.url,this.iframeElement.onload=()=>{this.hideLoading(),setTimeout(()=>{this.injectSurveyBridge()},100)},this.iframeElement.onerror=()=>{this.hideLoading(),this.showErrorInterface("Erro ao carregar a pesquisa")}):this.showErrorInterface("URL da pesquisa não encontrada")}injectSurveyBridge(){try{this.setupMessageListener(),this.attemptScriptInjection()}catch(e){this.logger.error("Error setting up survey bridge:",e)}}setupMessageListener(){const e=e=>{const{data:t}=e;t&&"akross-survey"===t.source&&(this.logger.debug("Survey message received from iframe:",t),this.handleSurveyMessage(t))};window.addEventListener("message",e),this._messageHandler=e}attemptScriptInjection(){const e=this.createSurveyBridgeScript(),t=()=>{try{if(!this.iframeElement?.contentWindow)return!1;const t=this.iframeElement.contentDocument||this.iframeElement.contentWindow.document;if(t&&"complete"===t.readyState){const r=t.createElement("script");return r.textContent=e,t.head.appendChild(r),!0}return"function"==typeof this.iframeElement.contentWindow.eval&&(this.iframeElement.contentWindow.eval(e),!0)}catch(e){return!1}};t()||setTimeout(()=>{t()||setTimeout(()=>{t()||setTimeout(()=>{t()},1e3)},500)},200)}createSurveyBridgeScript(){return"\n (function() {\n // Função notifyHost para compatibilidade com SurveyJS\n window.notifyHost = function(eventName, payload) {\n const message = {\n source: 'akross-survey',\n type: eventName,\n payload,\n ts: Date.now()\n };\n\n // 1) iOS WKWebView\n try {\n if (window.webkit?.messageHandlers?.surveyBridge) {\n window.webkit.messageHandlers.surveyBridge.postMessage(message);\n return;\n }\n } catch (error) {\n console.error('❌ NotifyHost: Erro iOS WKWebView:', error);\n }\n\n // 2) Android WebView (via addJavascriptInterface)\n try {\n if (window.AndroidSurveyBridge?.postMessage) {\n // Em Android é comum aceitar string; envie JSON serializado\n window.AndroidSurveyBridge.postMessage(JSON.stringify(message));\n return;\n }\n } catch (error) {\n console.error('❌ NotifyHost: Erro Android WebView:', error);\n }\n\n // 3) Web (iFrame → janela hospedeira)\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(message, '*');\n }\n };\n })();\n "}getSurveyBridgeScript(){return this.createSurveyBridgeScript()}testCommunication(){if(this.logger.debug("Testing communication with iframe"),this.iframeElement?.contentWindow){const e={source:"akross-survey-test",type:"communication_test",payload:{timestamp:Date.now()}};this.iframeElement.contentWindow.postMessage(e,"*")}}handleSurveyMessage(e){try{switch(this.logger.debug("Survey message received:",e),e.type){case"survey_complete":this.handleSurveyComplete(e.payload);break;case"survey_save":this.handleSurveySave(e.payload);break;case"survey_closed":this.handleSurveyClose();break;case"survey_started":this.handleSurveyStarted(e.payload);break;case"survey_progress":this.handleSurveyProgress(e.payload);break;default:this.logger.warn("Unknown message type:",e.type)}}catch(e){this.logger.error("Error processing survey message:",e)}}processPayload(e,t,r){if(this.logger.debug(`${t} with payload:`,e),e){const i=r(e);this.logger.debug(`${t} data:`,i)}}handleSurveyComplete(e){this.processPayload(e,"🎉 Survey Complete Handler",e=>({answers:e.answers,timeSpent:e.timeSpent,completed:e.completed})),this.isSurveyCompleted=!0}handleSurveySave(e){this.processPayload(e,"💾 Survey Save Handler",e=>({progress:e.progress,answers:e.answers,timestamp:(new Date).toISOString()}))}handleSurveyClose(){this.logger.debug("Survey close requested. Completed:",this.isSurveyCompleted),this.isSurveyClosed=!0,this.executeBackButtonLogic()}handleSurveyStarted(e){this.processPayload(e,"🚀 Survey Started Handler",e=>({surveyId:e.surveyId,timestamp:(new Date).toISOString(),userAgent:navigator.userAgent}))}handleSurveyProgress(e){this.processPayload(e,"📊 Survey Progress Handler",e=>({progress:e.progress,currentPage:e.currentPage,totalPages:e.totalPages,timestamp:(new Date).toISOString()}))}executeBackButtonLogic(){this.isSurveyCompleted?this.finishWithResult(n.REWARDED):this.finishWithResult(n.CANCELED)}finishWithResult(e){if(this.logger.debug("Finishing survey overlay with result:",e),this.cleanup(),this.onResultCallback){const t=new h({media:this.media,result:e});this.onResultCallback(t)}}setElementVisibility(e,t,r="block"){e&&(e.style.display=t?r:"none")}showErrorInterface(e="Erro ao carregar a pesquisa"){if(this.errorElement){const t=this.errorElement.querySelector(".aa-survey-error-message");t&&(t.textContent=e),this.setElementVisibility(this.errorElement,!0,"flex")}this.setElementVisibility(this.iframeElement,!1),this.hideLoading()}hideErrorInterface(){this.setElementVisibility(this.errorElement,!1),this.setElementVisibility(this.iframeElement,!0)}showLoading(){this.setElementVisibility(this.loadingElement,!0)}hideLoading(){this.setElementVisibility(this.loadingElement,!1)}darkenColor(e,t){const r=parseInt(e.replace("#",""),16),i=Math.round(2.55*t),s=(r>>16)-i,n=(r>>8&255)-i,a=(255&r)-i;return"#"+(16777216+65536*(s<255?s<1?0:s:255)+256*(n<255?n<1?0:n:255)+(a<255?a<1?0:a:255)).toString(16).slice(1)}cleanup(){this._messageHandler&&(window.removeEventListener("message",this._messageHandler),this._messageHandler=null),this.overlayElement&&this.overlayElement.parentNode&&this.overlayElement.parentNode.removeChild(this.overlayElement),this.overlayElement=null,this.iframeElement=null,this.loadingElement=null,this.errorElement=null,this.retryButton=null,this.closeButton=null}}ee.OVERLAY_CSS="\n .aa-survey-overlay {\n display: block;\n position: fixed;\n z-index: 1;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.4);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .aa-survey-dialog {\n background-color: white;\n border-radius: 8px;\n position: relative;\n width: 100%;\n max-width: 95vw;\n height: 95vh;\n overflow: hidden;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n }\n\n .aa-survey-content {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .aa-survey-iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n\n .aa-survey-loading {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n z-index: 10;\n }\n\n .aa-survey-error {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n display: none;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 20px;\n }\n\n .closeButton {\n display: flex;\n position: absolute;\n top: 10px;\n right: 10px;\n background-color: rgba(0, 0, 0, 0.8);\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n font-size: 0;\n transition: all 0.2s ease;\n z-index: 10;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n\n .closeButton::before,\n .closeButton::after {\n content: '';\n position: absolute;\n width: 20px;\n height: 2px;\n background-color: white;\n border-radius: 1px;\n }\n\n .closeButton::before {\n transform: rotate(45deg);\n }\n\n .closeButton::after {\n transform: rotate(-45deg);\n }\n\n .closeButton:hover {\n background-color: rgba(0, 0, 0, 0.9);\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n ";class te{constructor(e){this.uuid=e.uuid,this.type=e.type,this.title=e.title,this.viewed=e.viewed,this.campaignId=e.campaignId,this.campaignName=e.campaignName,this.requestId=e.requestId,this.zoneId=e.zoneId,this.mediasLeft=e.mediasLeft,this.layout=e.layout,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.content&&(this.content=new c(e.content)),e.success&&(this.success=new g(e.success))}async click(){const e=me.getDebugMode(),t=new m(e);try{const e=me.getUserData();if(!e?.userId)return t.error("Error executing media click: user id is null"),new h({media:this,result:n.ERROR,error:new o("User ID is required")});switch(this.type){case s.VPAID:case s.VAST:if(this.content?.url)return await this.executeVastMedia(e.userId);break;case s.PROGRAMMATIC_V2:return await this.executeProgrammaticV2Media(e.userId);case s.SURVEY_V2:return await this.executeSurveyV2Media(e.userId);default:return t.warn(`Unsupported media type: ${this.type}`),new h({media:this,result:n.ERROR,error:new o(`Unsupported media type: ${this.type}`)})}return new h({media:this,result:n.ERROR,error:new o("Media execution failed")})}catch(e){return t.error("Error executing media click:",e),new h({media:this,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}async executeVastMedia(e){const t=me.getDebugMode(),r=new m(t);r.debug("Executing VAST media:",this.title);try{const e=new K,t=await e.start(this);return r.debug("VAST execution completed:",t.result),t}catch(e){return r.error("Error in executeVastMedia:",e),new h({media:this,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}async executeProgrammaticV2Media(e){const t=me.getDebugMode();new m(t).debug("Executing Programmatic V2 media:",this.title);const r=new X,i=await r.start(this);return new h(i)}async executeSurveyV2Media(e){const t=me.getDebugMode(),r=new m(t);r.debug("Executing Survey V2 media:",this.title);try{const e=new ee(this),t=await e.start();return r.debug("Survey V2 execution completed:",t.result),t}catch(e){return r.error("Error in executeSurveyV2Media:",e),new h({media:this,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}}class re{constructor(e){this.layout=e.layout,this.success=e.success,this.media=e.media||[],Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),this.media=this.media.map(e=>new te(e))}getUnviewedMedia(){return this.media.filter(e=>!e.viewed)}getMediaByType(e){return this.media.filter(t=>t.type===e)}hasAvailableMedia(){return this.getUnviewedMedia().length>0}getMediaCount(){return this.media.length}}class ie{constructor(e){this.name=e.name,this.description=e.description,this.value=e.value,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}hasDescription(){return!(!this.description||!this.description.trim())}hasValue(){return!!this.value}getInfo(){return this.hasDescription()?`${this.name}: ${this.description}`:this.name}}class se{constructor(e){this.campaignUuid=e.campaignUuid,this.campaignName=e.campaignName,this.layout=e.layout,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.mainData&&(this.mainData=new re(e.mainData)),this.benefitOffers=(e.benefitOffers||[]).map(e=>new ie(e))}getUnviewedMedia(){return this.mainData?.media?.filter(e=>!e.viewed)||[]}getMediaByType(e){return this.mainData?.media?.filter(t=>t.type===e)||[]}hasAvailableMedia(){return this.getUnviewedMedia().length>0}}class ne{constructor(e){this.uuid=e.uuid,this.name=e.name,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}isValid(){return!(!this.uuid||!this.name)}getInfo(){return`${this.name} (${this.uuid})`}}class ae{constructor(e){this.requestId=e.requestId,this.campaigns=e.campaigns||[],Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.zone&&(this.zone=new ne(e.zone)),this.campaigns=this.campaigns.map(e=>new se(e))}getCampaignsWithAvailableMedia(){return this.campaigns.filter(e=>e.hasAvailableMedia())}getAllMedia(){return this.campaigns.flatMap(e=>e.mainData?.media||[])}getMediaByType(e){return this.campaigns.flatMap(t=>t.getMediaByType(e))}}class oe{constructor(e){this.responseStatus=e.responseStatus,this.error=e.error,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.campaignResponse&&(this.campaignResponse=new ae(e.campaignResponse))}isSuccess(){return this.responseStatus===i.SUCCESS}isEmpty(){return this.responseStatus===i.EMPTY}hasError(){return this.responseStatus===i.ERROR}getCampaigns(){return this.campaignResponse?.campaigns||[]}getAllMedia(){return this.campaignResponse?.getAllMedia()||[]}}class de{constructor(e){this.userId=e.userId,this.context=e.context,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}addContext(e,t){this.context||(this.context={}),this.context[e]=t}getContext(e){return this.context?.[e]}hasContext(){return!!(this.context&&Object.keys(this.context).length>0)}}class le{constructor(e){this.image=e.image,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}hasValidImage(){return!!(this.image&&this.image.trim().length>0)}getImageUrl(e){return this.hasValidImage()?this.image:e||""}isAbsoluteUrl(){return this.image.startsWith("http://")||this.image.startsWith("https://")}}class ce{constructor(e){this.primaryColor=e.primaryColor,this.secondaryColor=e.secondaryColor,this.title=e.title,this.primaryInformation=e.primaryInformation,this.secondaryInformation=e.secondaryInformation,this.enableCountdown=e.enableCountdown||!1,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.header&&(this.header=new le(e.header))}getPrimaryColorHex(){return this.primaryColor.startsWith("#")?this.primaryColor:`#${this.primaryColor}`}getSecondaryColorHex(){return this.secondaryColor.startsWith("#")?this.secondaryColor:`#${this.secondaryColor}`}isValid(){return!!(this.primaryColor&&this.secondaryColor&&this.title&&this.header)}}const ge="@AkrossAds:SDK_CONFIG",he="@Dataads:USER_DATA",ue="@Dataads:CUSTOM_HEADERS";class me{static saveConfig(e){localStorage.setItem(ge,JSON.stringify(e))}static getConfig(){const e=localStorage.getItem(ge);return e?JSON.parse(e):null}static updateConfig(e){const t=this.getConfig();if(t){const r={...t,...e};this.saveConfig(r)}}static deleteConfig(){localStorage.removeItem(ge)}static saveUserData(e,r=null){const i=new t({userId:e,advertisingId:r});localStorage.setItem(he,JSON.stringify(i))}static getUserData(){const e=localStorage.getItem(he);return e?JSON.parse(e):null}static removeUserData(){localStorage.removeItem(he)}static getDebugMode(){const e=this.getConfig();return e?.debug||!1}static setDebugMode(e){this.updateConfig({debug:e})}static getCustomHeaders(){const e=localStorage.getItem(ue);return e?JSON.parse(e):null}static saveCustomHeaders(e){localStorage.setItem(ue,JSON.stringify(e))}static removeCustomHeaders(){localStorage.removeItem(ue)}static clearAll(){localStorage.removeItem(ge),localStorage.removeItem(he),localStorage.removeItem(ue)}}function pe(){if("undefined"!=typeof __VERSION__)return __VERSION__;if("undefined"!=typeof process&&process.env?.npm_package_version)return process.env.npm_package_version;try{return"3.5.1"}catch(e){return"unknown"}}function Ee(){const e=pe(),t="undefined"!=typeof process&&process.env;return{version:e,isDevelopment:!!t&&"development"===process.env.NODE_ENV,isProduction:!t||"production"===process.env.NODE_ENV,buildTime:(new Date).toISOString()}}const ve=pe(),we=Ee();class ye{constructor(){this.isInitialized=!1,this.config=null,this.logger=new m(me.getDebugMode())}getIsInitialized(){return this.isInitialized}async initialize(t){return new Promise(async(r,i)=>{try{if(this.isInitialized)return this.logger.warn("SDK já foi inicializado"),r();this.logger=new m(me.getDebugMode()),this.config=e.applyDefaults(t),this.logger.info("Inicializando SDK..."),me.saveConfig(t),await this.preloadScripts(),this.isInitialized=!0,this.logger.info("SDK inicializado com sucesso!"),r()}catch(e){this.logger.error("Erro ao inicializar SDK:",e),i(e)}})}async setUserId(e,t){return new Promise(async(r,i)=>{if(!this.isInitialized)return this.logger.error("SDK não foi inicializado"),i(new Error("SDK não foi inicializado"));try{this.logger.debug("Definindo userId:",e),me.saveUserData(e,t),this.logger.info("UserId definido com sucesso"),r()}catch(e){this.logger.error("Erro ao definir userId:",e),i(e)}})}async getUserId(){return new Promise(async(e,t)=>{if(!this.isInitialized)return this.logger.error("SDK não foi inicializado"),t(new Error("SDK não foi inicializado"));try{const t=me.getUserData();e(t?.userId||"")}catch(e){this.logger.error("Erro ao obter userId:",e),t(e)}})}async getUserData(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{return me.getUserData()}catch(e){throw this.logger.error("Erro ao obter dados do usuário:",e),e}}async setCustomHeaders(e){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{me.saveCustomHeaders(e),this.logger.info("Headers customizados definidos com sucesso")}catch(e){throw this.logger.error("Erro ao definir headers customizados:",e),e}}async removeCustomHeaders(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{me.removeCustomHeaders(),this.logger.info("Headers customizados removidos com sucesso")}catch(e){throw this.logger.error("Erro ao remover headers customizados:",e),e}}async getCustomHeaders(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{return me.getCustomHeaders()}catch(e){throw this.logger.error("Erro ao obter headers customizados:",e),e}}getConfig(){return this.config}async clearAll(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{me.clearAll(),this.isInitialized=!1,this.config=null,this.logger.info("Todas as configurações foram limpas")}catch(e){throw this.logger.error("Erro ao limpar configurações:",e),e}}async preloadScripts(){try{window.google&&window.google.ima&&window.google.ima.AdsLoader||await B(),window.googletag||await H()}catch(e){this.logger.warn("Erro ao pré-carregar scripts (não crítico):",e)}}getDebugInfo(){return{isInitialized:this.isInitialized,debugMode:me.getDebugMode(),config:this.config,userData:me.getUserData(),customHeaders:me.getCustomHeaders(),scriptsLoaded:{ima:!!(window.google&&window.google.ima&&window.google.ima.AdsLoader),gpt:!!window.googletag},version:Ee()}}}class fe{static filterSupportedCampaigns(e){return e.filter(e=>{const t=e.mainData.media.some(t=>!this.isMediaSupported(t.type,e));if(t){const t=e.mainData.media.filter(t=>!this.isMediaSupported(t.type,e)).map(e=>e.type).filter((e,t,r)=>r.indexOf(e)===t);this.logger.debug(`Campanha '${e.campaignName}' (ID: ${e.campaignUuid}) foi filtrada por conter mídias não suportadas: ${t.join(", ")}`)}return!t})}static filterMediaInCampaigns(e){return e.map(e=>{const t=e.mainData.media.filter(t=>this.isMediaSupported(t.type,e));if(t.length!==e.mainData.media.length){const r=e.mainData.media.length-t.length,i=e.mainData.media.filter(t=>!this.isMediaSupported(t.type,e)).map(e=>e.type).filter((e,t,r)=>r.indexOf(e)===t);this.logger.debug(`Campanha '${e.campaignName}': ${r} mídia(s) não suportada(s) foram removidas: ${i.join(", ")}`)}return{...e,mainData:{...e.mainData,media:t}}})}static filterCampaignsAndMedia(e){const t=this.filterSupportedCampaigns(e);return this.filterMediaInCampaigns(t)}static getFilteringStats(e,t){const r=e.length,i=t.length,s=r-i,n=e.reduce((e,t)=>e+t.mainData.media.length,0),a=t.reduce((e,t)=>e+t.mainData.media.length,0),o=n-a;let d=`Filtragem de mídia concluída: ${i}/${r} campanhas mantidas`;return s>0&&(d+=`, ${s} removidas`),d+=` | ${a}/${n} mídias mantidas`,o>0&&(d+=`, ${o} removidas`),d}static getMediaTypeDistribution(e){const t={};return e.forEach(e=>{e.mainData.media.forEach(e=>{t[e.type]=(t[e.type]||0)+1})}),t}static getUnsupportedMediaTypes(e){const t=[];return e.forEach(e=>{e.mainData.media.forEach(r=>{this.isMediaSupported(r.type,e)||t.includes(r.type)||t.push(r.type)})}),t}static hasSupportedMedia(e){return e.mainData.media.some(t=>this.isMediaSupported(t.type,e))}static countSupportedMedia(e){return e.mainData.media.filter(t=>this.isMediaSupported(t.type,e)).length}static countUnsupportedMedia(e){return e.mainData.media.filter(t=>!this.isMediaSupported(t.type,e)).length}static isMediaSupported(e,t){return!!a(e)&&(e!==s.PROGRAMMATIC_V2||!t||this.isWaterfallSupported(t))}static isWaterfallSupported(e){const t=e.mainData.media.find(e=>e.type===s.PROGRAMMATIC_V2);if(!t)return!0;const r=t.content?.programmatic?.waterfall;if(!r||0===r.length)return!0;const i=this.getWaterfallTypes();return r.every(e=>i.includes(e.type))}static getWaterfallTypes(){return[s.TYPE_GOOGLE_RV,s.TYPE_GOOGLE_RI,s.TYPE_MAX_RV,s.TYPE_KWAI_RV,s.TYPE_FALLBACK]}static setDebugMode(e){this.logger=new m(me.getDebugMode())}static getCampaignInfo(e){const t=e.mainData.media.filter(t=>this.isMediaSupported(t.type,e)),r=t.map(e=>e.type).filter((e,t,r)=>r.indexOf(e)===t),i=e.mainData.media.filter(t=>!this.isMediaSupported(t.type,e)).map(e=>e.type).filter((e,t,r)=>r.indexOf(e)===t);return{campaignName:e.campaignName,campaignUuid:e.campaignUuid,totalMedia:e.mainData.media.length,supportedMedia:t.length,unsupportedMedia:e.mainData.media.length-t.length,supportedTypes:r,unsupportedTypes:i,hasSupportedMedia:t.length>0}}}fe.logger=new m(!1);class Re{constructor(){this.cachedDeviceInfo=null,this.logger=new m(me.getDebugMode())}async getDeviceContext(){if(this.cachedDeviceInfo)return this.cachedDeviceInfo;try{const e={},t=me.getConfig();t?.appId&&(e.appId=t.appId),t?.appVersion&&(e.appVersion=t.appVersion),e.deviceId=this.getDeviceId(),e.sdkVersion=this.getSdkVersion(),e.brand=this.getBrowserBrand(),e.hardware=this.getHardwareInfo(),e.manufacturer=this.getManufacturer(),e.model=this.getModel(),e.product=this.getProduct(),e.osVersion=this.getOSVersion(),e.os="WEB",e.eventDate=Date.now().toString(),e.userAgent=navigator.userAgent,e.language=navigator.language,e.platform=navigator.platform,e.screenWidth=screen.width.toString(),e.screenHeight=screen.height.toString(),e.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone;const[r,i]=await Promise.allSettled([this.getLocation(),this.getAdId()]);return"fulfilled"===r.status&&r.value&&(e.lat=r.value.latitude.toString(),e.long=r.value.longitude.toString()),"fulfilled"===i.status&&i.value&&(e.adId=i.value),this.cachedDeviceInfo=e,e}catch(e){return this.logger.error("Error getting device context:",e),this.getFallbackContext()}}getSdkVersion(){return pe()}clearCache(){this.cachedDeviceInfo=null}getBrowserInfo(){return{userAgent:navigator.userAgent,language:navigator.language,platform:navigator.platform,cookieEnabled:navigator.cookieEnabled.toString(),onLine:navigator.onLine.toString()}}getScreenInfo(){return{screenWidth:screen.width.toString(),screenHeight:screen.height.toString(),screenColorDepth:screen.colorDepth.toString(),screenPixelDepth:screen.pixelDepth.toString(),availWidth:screen.availWidth.toString(),availHeight:screen.availHeight.toString()}}getFallbackContext(){return{deviceId:"unknown",sdkVersion:this.getSdkVersion(),os:"WEB",eventDate:Date.now().toString()}}getDeviceId(){const e="akross_device_id";let t=localStorage.getItem(e);return t||(t=this.generateDeviceFingerprint(),localStorage.setItem(e,t)),t}generateDeviceFingerprint(){const e=document.createElement("canvas"),t=e.getContext("2d");t&&(t.textBaseline="top",t.font="14px Arial",t.fillText("Akross Device ID",2,2));const r=[navigator.userAgent,navigator.language,screen.width+"x"+screen.height,(new Date).getTimezoneOffset(),e.toDataURL()].join("|");return btoa(r).substring(0,16)}getBrowserBrand(){const e=navigator.userAgent;return e.includes("Chrome")?"Google":e.includes("Firefox")?"Mozilla":e.includes("Safari")?"Apple":e.includes("Edge")?"Microsoft":"Unknown"}getHardwareInfo(){return navigator.hardwareConcurrency?`CPU Cores: ${navigator.hardwareConcurrency}`:"Unknown"}getManufacturer(){const e=navigator.userAgent;return e.includes("Windows")?"Microsoft":e.includes("Mac")?"Apple":e.includes("Linux")?"Linux":"Unknown"}getModel(){const e=navigator.userAgent;return e.includes("Mobile")?"Mobile Device":e.includes("Tablet")?"Tablet":"Desktop"}getProduct(){return navigator.platform||"Unknown"}getOSVersion(){const e=navigator.userAgent.match(/(Windows|Mac|Linux|Android|iOS)\s+([\d.]+)/);return e?e[2]:"Unknown"}async getLocation(){return new Promise(e=>{navigator.geolocation?navigator.permissions?.query({name:"geolocation"}).then(t=>{"granted"===t.state?navigator.geolocation.getCurrentPosition(t=>{e({latitude:t.coords.latitude,longitude:t.coords.longitude})},()=>e(null),{timeout:5e3,enableHighAccuracy:!1}):e(null)}).catch(()=>{e(null)}):e(null)})}async getAdId(){return null}}let Ie=null;class Ae{constructor(e,t,r=!1){this.logger=new m(me.getDebugMode()),this.eventsHelper=new P}async requestCampaign(e,t=1,r,s){const n=new oe({responseStatus:i.ERROR});if("undefined"==typeof window||!window.AkrossAds)return this.logger.warn("SDK não foi inicializado"),n;{const e=window.AkrossAds.getInstance();if(!e||!e.isInitialized())return this.logger.warn("SDK não foi inicializado"),n}const a=me.getUserData();if(!a?.userId)return this.logger.error("Erro ao obter campanha: userId está vazio"),n;try{const o=(Ie||(Ie=new Re),Ie),d={...await o.getDeviceContext(),...r},l=new de({userId:a.userId,context:d}),c=(new v).getArtemisAdsService(30,!1,!0),g=await c.requestCampaign(e,l,t,s);if(g&&g.campaigns&&g.campaigns.length>0){const e=fe.filterCampaignsAndMedia(g.campaigns);if(e.length>0){e.forEach(e=>{const t=e.mainData.media.filter(e=>!e.viewed).length;e.mainData.media.forEach(r=>{r.campaignId=e.campaignUuid,r.campaignName=e.campaignName,r.requestId=g.requestId,r.zoneId=g.zone.uuid,r.success=e.mainData.success,r.mediasLeft=t,r.layout=e.mainData.layout})});const t=new ae({...g,campaigns:e});n.campaignResponse=t,n.responseStatus=i.SUCCESS;const r=fe.getFilteringStats(g.campaigns,e);this.logger.debug("Filtragem de mídia:",r)}else this.logger.debug("Todas as campanhas foram filtradas por conter mídias não suportadas"),n.responseStatus=i.EMPTY}else n.responseStatus=i.EMPTY}catch(e){n.error=e instanceof Error?e:new Error("Erro desconhecido"),n.responseStatus=i.ERROR,this.logger.error("Erro ao obter campanha:",e)}return n}async bannerClick(e,t,r,i){try{const s=me.getUserData();if(!s?.userId)return void this.logger.error("Erro ao abrir URL: userId está vazio");const n=new URL(e);n.searchParams.has("userId")||n.searchParams.set("userId",s.userId),n.searchParams.has("campaignId")||n.searchParams.set("campaignId",t);const a=(new v).getArtemisAdsService(30,!1,!0);await a.sendTracking("click",t,s.userId,r,i,"banner"),window.open(n.toString(),"_blank")}catch(e){this.logger.error("Erro ao abrir URL:",e)}}async sendEvent(e,t,r,i,s){return new Promise(async(n,a)=>{try{if("undefined"==typeof window||!window.AkrossAds)return this.logger.error("SDK não foi inicializado"),a(new Error("SDK não foi inicializado"));{const e=window.AkrossAds.getInstance();if(!e||!e.isInitialized())return this.logger.error("SDK não foi inicializado"),a(new Error("SDK não foi inicializado"))}const o=me.getUserData();if(!o?.userId)return this.logger.error("UserId não encontrado"),a(new Error("UserId não encontrado"));this.logger.debug("Enviando evento:",{event:e,campaignId:t,trackingId:r,mediaId:i,source:s}),await this.eventsHelper.sendEvent(e,t,r,i,s),this.logger.info("Evento enviado com sucesso"),n()}catch(e){this.logger.error("Erro ao enviar evento:",e),a(e)}})}async sendCampaignsImpressionEvent(e,t){return new Promise(async(r,i)=>{try{if("undefined"==typeof window||!window.AkrossAds)return this.logger.error("SDK não foi inicializado"),i(new Error("SDK não foi inicializado"));{const e=window.AkrossAds.getInstance();if(!e||!e.isInitialized())return this.logger.error("SDK não foi inicializado"),i(new Error("SDK não foi inicializado"))}const s=me.getUserData();if(!s?.userId)return this.logger.error("UserId não encontrado"),i(new Error("UserId não encontrado"));this.logger.debug("Enviando evento de impressão para campanhas:",{trackingId:e,campaignsCount:t.length}),await this.eventsHelper.sendCampaignsImpressionEvent(e,t),this.logger.info("Eventos de impressão enviados com sucesso"),r()}catch(e){this.logger.error("Erro ao enviar eventos de impressão:",e),i(e)}})}static getSdkVersion(){return pe()}}class Se{constructor(e){if(this.logger=new m(me.getDebugMode()),"string"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Elemento não encontrado: ${e}`);this.containerElement=t}else this.containerElement=e;this.imageElement=document.createElement("img"),this.imageElement.style.display="block",this.containerElement.innerHTML=""}setClickListener(e){this.clickListener=e}setSuccessListener(e){this.successListener=e}setErrorListener(e){this.errorListener=e}async loadZone(e,t){try{const r=me.getUserData();if(!r?.userId)return this.logger.error("Erro ao carregar banner: userId está vazio"),void this.errorListener?.onError();const i=new Ae,n=await i.requestCampaign(e,1,void 0,t);if(!n.campaignResponse?.campaigns?.length)return this.logger.error("Nenhuma campanha encontrada para a zona:",e),void this.errorListener?.onError();const a=n.campaignResponse.campaigns[0].mainData.media[0];if(a.type!==s.BANNER)return this.logger.error("Tipo de mídia não suportado para banner:",a.type),void this.errorListener?.onError();this.containerElement.appendChild(this.imageElement),await this.loadBanner(a)}catch(e){this.logger.error("Erro ao carregar banner:",e),this.errorListener?.onError()}}async loadBanner(e){try{if(!e.content?.url)return this.logger.error("Erro ao carregar banner: URL da imagem não encontrada"),void this.errorListener?.onError();this.containerElement.appendChild(this.imageElement),await this.loadImage(e.content.url,e)}catch(e){this.logger.error("Erro ao carregar banner:",e),this.errorListener?.onError()}}async loadImage(e,t){try{const r=me.getUserData();if(!r?.userId)return this.logger.error("Erro ao carregar banner: userId não encontrado nas preferences"),this.removeImageFromDOM(),void this.errorListener?.onError();const i=r.userId,s=await fetch(e,{method:"GET",mode:"cors",cache:"default"});if(!s.ok)return this.logger.error(`Erro ao carregar imagem: ${s.status} ${s.statusText}`),this.removeImageFromDOM(),void this.errorListener?.onError();const n=await s.blob(),a=URL.createObjectURL(n);this.imageElement.src=a,this.imageElement.alt=t.title||"Banner",this.imageElement.onload=()=>{this.applyOptimizedFit()},this.imageElement.onerror=()=>{this.logger.error("Erro ao carregar imagem: falha no carregamento da imagem"),this.removeImageFromDOM(),this.errorListener?.onError()};(new P).sendImpressedEvent(t.campaignId,t.requestId,t.uuid),this.successListener?.onSuccess(t.analytics?.impression),this.setupClickHandler(t,i)}catch(e){this.logger.error("Erro ao carregar imagem:",e),this.removeImageFromDOM(),this.errorListener?.onError()}}removeImageFromDOM(){try{this.imageElement&&this.imageElement.parentNode&&this.imageElement.parentNode.removeChild(this.imageElement)}catch(e){this.logger.error("Erro ao remover imagem do DOM:",e)}}applyOptimizedFit(){try{this.containerElement.style.display="flex",this.containerElement.style.alignItems="center",this.containerElement.style.justifyContent="center",this.imageElement.style.maxWidth="100%",this.imageElement.style.maxHeight="100%",this.imageElement.style.objectFit="contain",this.imageElement.style.objectPosition="center",this.logger.debug("Fit simples aplicado com flexbox")}catch(e){this.logger.error("Erro ao aplicar fit simples:",e),this.imageElement.style.width="100%",this.imageElement.style.height="auto",this.imageElement.style.objectFit="contain"}}setupClickHandler(e,t){const r=e.externalUrl?.url||e.success?.url;r&&(this.imageElement.style.cursor="pointer",this.imageElement.addEventListener("click",()=>{this.clickListener?.onClick(e.analytics?.click),this.executeBannerClick(r,e,t)}))}async executeBannerClick(e,t,r){try{const r=t.campaignId||t.campaignUuid;if(!r)return void this.logger.error("Erro ao executar clique: campaignId não encontrado na mídia");(new P).sendAdClickEvent(r,t.requestId,t.uuid),window.open(e,"_blank","noopener,noreferrer")}catch(e){this.logger.error("Erro ao executar clique do banner:",e)}}destroy(){this.campaignCall&&(this.campaignCall=void 0),this.imageElement.removeEventListener("click",()=>{}),this.containerElement&&(this.containerElement.innerHTML="")}}class be{constructor(e){this.config={timeout:1e4,debug:!1,...e},this.logger=new m(this.config.debug),this.sdkManager=new ye,this.adsManager=new Ae(this.config.appId,this.config.appVersion,this.config.debug),me.setDebugMode(this.config.debug||!1),this.logger.debug("Debug mode salvo via PreferencesUtil:",this.config.debug||!1),this.logger.info("SDK Akross Artemis Ads criado"),this.logger.debug("Configuração:",this.config)}async initialize(){return this.sdkManager.initialize(this.config)}isInitialized(){return this.sdkManager.getIsInitialized()}async setUserId(e,t){return this.sdkManager.setUserId(e,t)}async getUserId(){return this.sdkManager.getUserId()}async getUserData(){return this.sdkManager.getUserData()}async setCustomHeaders(e){return this.sdkManager.setCustomHeaders(e)}async removeCustomHeaders(){return this.sdkManager.removeCustomHeaders()}async getCustomHeaders(){return this.sdkManager.getCustomHeaders()}getConfig(){return this.sdkManager.getConfig()}async clearAll(){return this.sdkManager.clearAll()}getDebugInfo(){return this.sdkManager.getDebugInfo()}getVersion(){return pe()}getVersionInfo(){return Ee()}async sendEvent(e,t,r,i,s){return this.adsManager.sendEvent(e,t,r,i,s)}async sendCampaignsImpressionEvent(e,t){return this.adsManager.sendCampaignsImpressionEvent(e,t)}async requestCampaign(e,t,r,i){return this.logger.debug("Solicitando campanhas para zona:",e),this.adsManager.requestCampaign(e,t||1,r,i)}async bannerClick(e,t,r,i){return this.logger.debug("Processando clique em banner:",{campaignId:t,mediaId:i}),this.adsManager.bannerClick(e,t,r,i)}}let Me=null;async function De(e){return Me||(Me=new be(e),await Me.initialize(),Me)}function Ce(){return Me}function Le(){Me&&(Me.clearAll(),Me=null,"undefined"!=typeof window&&delete window.AkrossAds)}"undefined"!=typeof window&&(window.AkrossAds={init:De,getInstance:Ce,destroy:Le,SDK:be,AAManager:ye,AdsManager:Ae,VERSION:ve,VERSION_INFO:we,getVersion:pe,getVersionInfo:Ee,AAMedia:te,AACampaign:se,AACampaignResponse:ae,AACampaignResult:oe,AAZone:ne,AAMainData:re,AAContent:c,AASuccess:g,AABenefitOffer:ie,AAAdWatchResult:h,AAVastPlayer:K,AARewardedVideoHandler:X,AAEventsCallbackHelper:P,AARvEventsCallbackHelper:V,AAMediaResultHelper:U,PreferencesUtil:me,GlobalLoadingOverlay:G,ArtemisAdsBannerLoader:Se});export{h as AAAdWatchResult,ie as AABenefitOffer,se as AACampaign,r as AACampaignConfig,de as AACampaignRequest,ae as AACampaignResponse,i as AACampaignResponseStatus,oe as AACampaignResult,c as AAContent,o as AAError,P as AAEventsCallbackHelper,le as AAHeader,ce as AALayout,re as AAMainData,ye as AAManager,te as AAMedia,n as AAMediaPlayResult,U as AAMediaResultHelper,s as AAMediaTypes,d as AAProgrammatic,X as AARewardedVideo,V as AARvEventsCallbackHelper,g as AASuccess,l as AASurveyV2,K as AAVastPlayer,N as AAVastTrackingEvents,ne as AAZone,Ae as AdsManager,be as AkrossAdsSDK,Se as ArtemisAdsBannerLoader,y as CLICK_EVENT,e as ConfigUtils,D as ERROR_EVENT,u as ERROR_MESSAGES,Q as GAMRewardedVideoWrapper,w as IMPRESSION_EVENT,m as Logger,b as NO_FILL_EVENT,S as PROGRAMMATIC_ERROR,A as PROGRAMMATIC_FALLBACK_REQ,M as PROGRAMMATIC_SKIPPED,I as PROG_CONN_ERROR_EVENT,me as PreferencesUtil,q as StepResult,t as UserDataCache,ve as VERSION,we as VERSION_INFO,f as VPAID_COMPLETE_EVENT,L as VPAID_FIRST_QUARTILE_EVENT,k as VPAID_MIDPOINT_EVENT,O as VPAID_SKIPPED_EVENT,C as VPAID_START_EVENT,T as VPAID_THIRD_QUARTILE_EVENT,R as WATERFALL_START_EVENT,j as WaterfallResultHelper,_ as createAAEventsCallbackHelper,W as createAAMediaResultHelper,Z as createAARewardedVideoHandler,x as createAARvEventsCallbackHelper,$ as createAAVastPlayer,J as createGAMRewardedVideoWrapper,Y as createWaterfallResultHelper,Le as destroy,Ce as getInstance,pe as getVersion,Ee as getVersionInfo,De as init,a as isMediaTypeSupported,H as loadGPTScript,B as loadIMAScript};
|
|
1
|
+
class e{static applyDefaults(e){return{timeout:5e3,debug:!1,...e}}static hasBaseUrl(e){return!!(e.baseUrl&&e.baseUrl.trim().length>0)}static hasArtemisAppId(e){return!!(e.artemisAdsAppId&&e.artemisAdsAppId.trim().length>0)}static getArtemisAppId(e,t){return e.artemisAdsAppId||t||""}static isValid(e){return this.hasBaseUrl(e)&&this.hasArtemisAppId(e)}static getPrimaryColor(e,t="#007bff"){return e.primaryColor||t}static isValidColor(e){return!!e&&/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(e)}}class t{constructor(e){this.userId=e.userId,this.advertisingId=e.advertisingId,Object.keys(e||{}).forEach(t=>{t in this||(this[t]=e[t])})}hasAdvertisingId(){return!!(this.advertisingId&&this.advertisingId.trim().length>0)}getAdvertisingId(e){return this.advertisingId||e||""}setAdvertisingId(e){this.advertisingId=e}clearAdvertisingId(){this.advertisingId=null}isValid(){return!!(this.userId&&this.userId.trim().length>0)}getUserId(e){return this.userId||e||""}hasCompleteData(){return this.isValid()&&this.hasAdvertisingId()}}class r{constructor(e){this.params=e.params,this.type=e.type,Object.keys(e).forEach(t=>{"params"!==t&&"type"!==t&&(this[t]=e[t])})}findParamByKey(e){return this.params?.find(t=>t.key===e)?.value}findAdUnitId(){return this.findParamByKey("adUnitId")??""}findVastTag(){return this.findParamByKey("tag")??""}findEventSuffix(){return this.findParamByKey("eventSuffix")??""}findTimeout(){const e=this.findParamByKey("timeout");return e?parseInt(e,10):void 0}}var i,s,n;function a(e){return[s.BANNER,s.VIDEO_V2,s.PROGRAMMATIC_V2,s.SURVEY_V2,s.TYPE_GOOGLE_RV,s.TYPE_GOOGLE_RI,s.TYPE_MAX_RV,s.TYPE_KWAI_RV,s.TYPE_FALLBACK].includes(e)}!function(e){e.SUCCESS="SUCCESS",e.ERROR="ERROR",e.EMPTY="EMPTY"}(i||(i={})),function(e){e.BANNER="image",e.VIDEO_V2="video_v2",e.PROGRAMMATIC_V2="programatica_v2",e.SURVEY_V2="survey_v2",e.TYPE_GOOGLE_RV="GAM_RV",e.TYPE_GOOGLE_RI="GAM_RI",e.TYPE_MAX_RV="MAX_RV",e.TYPE_KWAI_RV="KWAI_RV",e.TYPE_FALLBACK="fallback",e.PROGRAMMATIC="programatica",e.PROGRAMMATIC_ADMOB_RB="google-admob-rv",e.PROGRAMMATIC_MAX_RV="max-rv",e.UNKNOWN=""}(s||(s={})),function(e){e[e.REWARDED=11]="REWARDED",e[e.REWARDED_REDIRECTED=12]="REWARDED_REDIRECTED",e[e.MEDIA_WATCHED=13]="MEDIA_WATCHED",e[e.SKIPPED=20]="SKIPPED",e[e.ERROR=21]="ERROR",e[e.CONNECTION_ERROR=22]="CONNECTION_ERROR",e[e.NO_FILL=23]="NO_FILL",e[e.CANCELED=24]="CANCELED",e[e.POLL_WRONG_ANSWER=25]="POLL_WRONG_ANSWER"}(n||(n={}));class o{constructor(e,t){this.description=e,this.cause=t}}class d{constructor(e){this.type=e.type,this.url=e.url,this.originalContent=e.originalContent,this.proxy=e.proxy,this.skipEnabled=e.skipEnabled,this.skipSeconds=e.skipSeconds,this.videoId=e.videoId,this.eventSuffix=e.eventSuffix}hasUrl(){return!(!this.url||!this.url.trim())}hasType(){return!(!this.type||!this.type.trim())}isSupportedType(){return["IN_HOUSE","VAST","VPAID"].includes(this.type?.toUpperCase())}}class l{constructor(e){this.waterfall=e.waterfall?e.waterfall.map(e=>new r(e)):void 0}hasWaterfall(){return!!(this.waterfall&&this.waterfall.length>0)}getInfo(){return this.hasWaterfall()?`Waterfall com ${this.waterfall.length} anúncios`:"Conteúdo programático vazio"}}class c{constructor(e){this.url=e.url,this.adBlock=e.adBlock}hasUrl(){return!(!this.url||!this.url.trim())}hasAdBlock(){return!(!this.adBlock||!this.adBlock.trim())}}class h{constructor(e){this.url=e.url,this.programmatic=e.programmatic?new l(e.programmatic):void 0,this.video=e.video?new d(e.video):void 0,this.infoPrimary=e.infoPrimary,this.infoSecondary=e.infoSecondary,this.survey=e.survey?new c(e.survey):void 0}hasUrl(){return!(!this.url||!this.url.trim())}isProgrammatic(){return!(!this.programmatic||!this.programmatic.hasWaterfall())}isSurvey(){return!(!this.survey||!this.survey.hasUrl())}getInfo(){return this.hasUrl()?`URL: ${this.url}`:this.isProgrammatic()?this.programmatic.getInfo():this.isSurvey()?`Survey: ${this.survey.url}`:"Conteúdo vazio"}}class g{constructor(e){this.type=e.type,this.title=e.title,this.description=e.description,this.buttons=e.buttons||[],this.url=e.url,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}isExternal(){return"EXTERNAL"===this.type}hasUrl(){return!(!this.url||!this.url.trim())}hasButtons(){return this.buttons.length>0}getInfo(){return`${this.title}: ${this.description}`}}class u{constructor(e){this.media=e.media,this.result=e.result,this.error=e.error,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}isSuccess(){return this.result===n.REWARDED||this.result===n.REWARDED_REDIRECTED}isSkipped(){return this.result===n.SKIPPED}hasError(){return this.result===n.ERROR||!!this.error}getErrorMessage(){return this.error?this.error.description||this.error.cause||"Erro desconhecido":"Sem erro"}getInfo(){return this.isSuccess()?"Anúncio visualizado com sucesso":this.isSkipped()?"Anúncio pulado":this.hasError()?`Erro: ${this.getErrorMessage()}`:"Resultado desconhecido"}}const m={REWARDED:"Benefício adiquirido com sucesso",NOT_REWARDED:"Você precisa assistir o anúncio até o fim para obter o benefício",REDIRECT_ERROR:"Você não tem nenhum aplicativo instalado para abrir uma página na web",ERROR:"Ocorreu um erro ao exibir o anúncio. Por favor, tente novamente",CONNECTION_ERROR:"Ocorreu um erro ao exibir o anúncio. Por favor, verifique sua conexão e tente novamente",NO_FILL:"Não foi possível encontrar uma publicidade no momento. Por favor, tente novamente",VAST_BACK:"Para obter o prêmio é necessário assistir o vídeo até o final"};class p{constructor(e=!1){this.debugMode=e}debug(e,...t){this.debugMode}info(e,...t){}warn(e,...t){}error(e,...t){}}class E{constructor(){}interceptRequest(e){const t=ye.getCustomHeaders();if(t){const r=new Headers(e.headers);Object.entries(t).forEach(([e,t])=>{r.set(e,t)}),e.headers=r}const r=new Headers(e.headers);return r.set("Content-Type","application/json"),r.set("Accept","application/json"),e.headers=r,e}interceptResponse(e){return e}}class v{constructor(e){this.fetchConfig=e}async fetchWithConfig(e,t={}){const{baseUrl:r,restInterceptor:i}=this.fetchConfig;i&&(t=i.interceptRequest(t));const s=new URL(e,r).toString();return fetch(s,{...t})}async requestCampaign(e,t,r,i){const s=`campaign/v3/${e}?size=${r}${i?`&t=${i}`:""}`,n=await this.fetchWithConfig(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(`Failed to request campaign: ${n.statusText}`);return 204==n.status?{}:n.json()}async sendTracking(e,t,r,i,s,n){const a=`tracker?e=${e}&c=${t??""}&u=${r}&requestId=${i}${s?`&m=${s}`:""}${n?`&s=${n}`:""}`,o=await this.fetchWithConfig(a,{method:"POST",keepalive:!0});if(!o.ok)throw new Error(`Failed to send tracking: ${o.statusText}`)}async checkConnectivity(e="https://access-network.akross.com.br"){const t=Math.round(1e4*Math.random()),r=await this.fetchWithConfig(`${e}?rand=${t}`,{method:"GET"});if(!r.ok)throw new Error(`Failed to check connectivity: ${r.statusText}`);return r}async sendParsedVastTrackingEvent(e){const t=await this.fetchWithConfig(e,{method:"GET",keepalive:!0});if(!t.ok)throw new Error(`Failed to send parsed VAST tracking event: ${t.statusText}`)}}class w{constructor(){}createFetchConfig(e,t,r=!1,i=!0){return{baseUrl:e,timeout:t,debugMode:r,restInterceptor:i?new E:null}}init(e="",t=5,r=!1,i=!0){let s=e;if(""===s){const e=ye.getConfig();s=e?.baseUrl||"https://internal-artemis-837746407.us-east-1.elb.amazonaws.com/adserver/"}return this.createFetchConfig(s,t,r,i)}getArtemisAdsService(e=30,t=!1,r=!0){const i=this.init("",e,t,r);return new v(i)}}const y="impression",f="click",R="complete",A="prog-wtfl-start",I="prog-conn-error",b="prog-fallback-req",S="prog-ad-error",C="prog-ad-no-fill",D="prog-skipped",M="ad-error",L="start",k="firstQuartile",O="midpoint",T="thirdQuartile",P="skipped";class _{constructor(){this.logger=new p(ye.getDebugMode()),this.apiFactory=new w}async sendEvent(e,t,r,i,s){await this.requestEvent(e,t,r,i,s)}async requestEvent(e,t,r,i,s){const n=ye.getUserData(),a=n?.userId;if(a)try{const n=ye.getDebugMode(),o=this.apiFactory.getArtemisAdsService(3,n);await o.sendTracking(e,t,a,r,i,s),this.logger.debug(`Event sent successfully: ${e} for campaign ${t}`)}catch(e){this.logger.warn("Error sending tracking event:",e)}else this.logger.error("Error sending tracking event: User id is null")}async sendAdClickEvent(e,t,r){await this.sendEvent(f,e,t,r)}async sendCampaignsImpressionEvent(e,t){for(const r of t)await this.sendEvent(y,r.campaignUuid,e)}async sendMultiCampaignSingleMediaImpressionEvent(e,t){for(const r of t)r.mainData?.media&&r.mainData.media.length>0&&await this.sendEvent(y,r.campaignUuid,e,r.mainData.media[0].uuid)}async sendImpressedEvent(e,t,r){await this.sendEvent(y,e,t,r)}async sendCompleteEvent(e,t,r,i){await this.sendEvent(R,e,t,r,i)}async sendAllAdsCompletedEvent(e,t,r,i){await this.sendEvent("all-ads-completed"+(i?`${i}`:""),e,t,r)}async sendAdCompletedEvent(e,t,r){await this.sendEvent("ad-completed",e,t,r)}async sendEventFromUrl(e){try{const t=ye.getDebugMode(),r=this.apiFactory.getArtemisAdsService(3,t);await r.sendParsedVastTrackingEvent(e),this.logger.debug("Parsed VAST tracking event sent successfully")}catch(e){this.logger.warn("Error sending tracking event from URL:",e)}}async sendVpaidStartEvent(e,t,r){await this.sendEvent(L,e,t,r)}async sendFirstQuartileEvent(e,t,r){await this.sendEvent(k,e,t,r)}async sendMidpointEvent(e,t,r){await this.sendEvent(O,e,t,r)}async sendThirdQuartileEvent(e,t,r){await this.sendEvent(T,e,t,r)}async sendSkippedEvent(e,t,r){await this.sendEvent(P,e,t,r)}async sendAdErrorEvent(e,t,r){await this.sendEvent(M,e,t,r)}async sendAdNoFillEvent(e,t,r){await this.sendEvent(C,e,t,r)}async sendWaterfallStartEvent(e,t,r){await this.sendEvent(A,e,t,r)}async sendProgConnectionError(e,t,r){await this.sendEvent(I,e,t,r)}async sendProgFallbackReq(e,t,r){await this.sendEvent(b,e,t,r)}async sendProgError(e,t,r){await this.sendEvent(S,e,t,r)}async sendProgSkipped(e,t,r){await this.sendEvent(D,e,t,r)}async sendClickThroughEvent(e,t,r){await this.sendEvent("clickthrough",e,t,r)}async sendParsedVastTrackingEvent(e){await this.sendEventFromUrl(e)}}function x(){return new _}const V=_,N=x;var U;!function(e){e.IMPRESSION="IMPRESSION",e.CLICKTHROUGH="CLICKTHROUGH",e.START="START",e.FIRST_QUARTILE="FIRST_QUARTILE",e.MIDPOINT="MIDPOINT",e.THIRD_QUARTILE="THIRD_QUARTILE",e.COMPLETE="COMPLETE",e.ERROR="ERROR",e.SKIPPED="SKIPPED",e.NO_FILL="NO_FILL",e.PROGRAMMATIC_ERROR="PROGRAMMATIC_ERROR",e.PROGRAMMATIC_SKIPPED="PROGRAMMATIC_SKIPPED",e.PROGRAMMATIC_WATERFALL_START="PROGRAMMATIC_WATERFALL_START",e.PROGRAMMATIC_CONNECTION_ERROR="PROGRAMMATIC_CONNECTION_ERROR",e.PROGRAMMATIC_FALLBACK_REQ="PROGRAMMATIC_FALLBACK_REQ",e.AD_COMPLETED="AD_COMPLETED",e.ALL_ADS_COMPLETED="ALL_ADS_COMPLETED"}(U||(U={}));class H{constructor(e){this.sentEvents=new Set,this.config=e,this.logger=new p(ye.getDebugMode()),this.eventsHelper=new _}sendEventCallback(e,t){switch(this.sentEvents.has(e)&&this.logger.debug(`Event ${e} already sent, skipping`),this.sentEvents.add(e),this.logger.debug(`Sending event: ${e} for media: ${t.title}`),e){case U.IMPRESSION:this.onAdImpression(t);break;case U.START:this.onAdStarted(t);break;case U.FIRST_QUARTILE:this.onFirstQuartile(t);break;case U.MIDPOINT:this.onMidpoint(t);break;case U.THIRD_QUARTILE:this.onThirdQuartile(t);break;case U.COMPLETE:this.onAdComplete(t);break;case U.ERROR:this.onAdError(t);break;case U.SKIPPED:this.onAdSkipped(t);break;case U.NO_FILL:this.onProgrammaticNoFill(t);break;case U.PROGRAMMATIC_ERROR:this.onProgrammaticAdError(t);break;case U.PROGRAMMATIC_SKIPPED:this.onProgrammaticSkipped(t);break;case U.PROGRAMMATIC_WATERFALL_START:this.onProgrammaticStart(t);break;case U.PROGRAMMATIC_CONNECTION_ERROR:this.onProgrammaticConnectionError(t);break;case U.PROGRAMMATIC_FALLBACK_REQ:this.onProgrammaticFallbackReq(t);break;case U.CLICKTHROUGH:this.onClickThrough(t);break;case U.AD_COMPLETED:this.onAdCompleted(t);break;case U.ALL_ADS_COMPLETED:this.onAllAdsCompleted(t);break;default:this.logger.warn(`Unknown event: ${e}`)}}finishWithResult(e,t,r){const i=new u({media:e,result:t});switch(t){case n.REWARDED:if(this.logger.debug(`Checking mediasLeft: ${e.mediasLeft} (type: ${typeof e.mediasLeft})`),(e.mediasLeft||0)>1)this.logger.debug(`Setting result to MEDIA_WATCHED because mediasLeft (${e.mediasLeft}) > 1`),i.result=n.MEDIA_WATCHED;else if(this.logger.debug(`Keeping result as REWARDED because mediasLeft (${e.mediasLeft}) <= 1`),"EXTERNAL"===e.success?.type)try{e.success.url&&(window.open(e.success.url,"_blank"),i.result=n.REWARDED_REDIRECTED)}catch(e){i.error=new o(m.REDIRECT_ERROR),i.result=n.ERROR}break;case n.ERROR:i.error=new o(m.ERROR,r);break;case n.NO_FILL:i.error=new o(m.NO_FILL,"NO_FILL");break;case n.CONNECTION_ERROR:i.error=new o(m.CONNECTION_ERROR,"CONNECTION_ERROR");break;case n.CANCELED:i.error=new o(m.NOT_REWARDED);break;case n.REWARDED_REDIRECTED:break;default:this.logger.warn(`Unknown result: ${t}`)}return i}onAdImpression(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendImpressedEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdStarted(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendVpaidStartEvent(e.campaignId||"",e.requestId||"",e.uuid)}onFirstQuartile(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendFirstQuartileEvent(e.campaignId||"",e.requestId||"",e.uuid)}onMidpoint(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendMidpointEvent(e.campaignId||"",e.requestId||"",e.uuid)}onThirdQuartile(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendThirdQuartileEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdComplete(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendCompleteEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdCompleted(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendAdCompletedEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAllAdsCompleted(e){this.eventsHelper.sendAllAdsCompletedEvent(e.campaignId||"",e.requestId||"",e.uuid,e.content?.video?.eventSuffix)}onAdSkipped(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendSkippedEvent(e.campaignId||"",e.requestId||"",e.uuid)}onAdError(e){this.canSendLocalEvents(e)&&this.eventsHelper.sendAdErrorEvent(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticNoFill(e){this.eventsHelper.sendAdNoFillEvent(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticStart(e){this.eventsHelper.sendWaterfallStartEvent(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticConnectionError(e,t){this.eventsHelper.sendProgConnectionError(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticFallbackReq(e){this.eventsHelper.sendProgFallbackReq(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticAdError(e,t){this.eventsHelper.sendProgError(e.campaignId||"",e.requestId||"",e.uuid)}onProgrammaticSkipped(e){this.eventsHelper.sendProgSkipped(e.campaignId||"",e.requestId||"",e.uuid)}onClickThrough(e){this.eventsHelper.sendClickThroughEvent(e.campaignId||"",e.requestId||"",e.uuid)}canSendLocalEvents(e){if(e.type===s.VIDEO_V2){const t=e.content?.video?.type?.toUpperCase();return"VAST"===t||"VPAID"===t}return!0}clearSentEvents(){this.sentEvents.clear()}hasEventBeenSent(e){return this.sentEvents.has(e)}}function W(e){return new H(e)}const F=1e3;function B(){return new Promise((e,t)=>{if(window.googletag)return void e();if(document.getElementById("gpt-script"))setTimeout(()=>{window.googletag?e():t(new Error("GPT script exists but not loaded"))},F);else{const r=document.createElement("script");r.src="https://www.googletagservices.com/tag/js/gpt.js",r.id="gpt-script",r.async=!0,r.onload=()=>{setTimeout(()=>{window.googletag?e():t(new Error("GPT script failed to initialize"))},F)},r.onerror=e=>{t(e)},document.head.appendChild(r)}})}function z(){return new Promise((e,t)=>{if(window.google&&window.google.ima)return void e();if(document.getElementById("ima-script"))setTimeout(()=>{window.google&&window.google.ima?e():t(new Error("IMA SDK script exists but not loaded"))},F);else{const r=document.createElement("script");r.src="https://imasdk.googleapis.com/js/sdkloader/ima3.js",r.id="ima-script",r.async=!0,r.onload=()=>{setTimeout(()=>{window.google&&window.google.ima?e():t(new Error("IMA SDK failed to initialize"))},F)},r.onerror=e=>{t(e)},document.head.appendChild(r)}})}class K{constructor(e){this.modalElement=null,this.videoElement=null,this.videoContainer=null,this.closeButton=null,this.logger=e}createModal(){try{if(this.cleanup(),this.modalElement=document.createElement("div"),this.modalElement.innerHTML='\n <style>\n .modal {\n display: block;\n position: fixed;\n z-index: 1;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.4);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modalDialog {\n background-color: black;\n border-radius: 8px;\n position: relative;\n width: 100%;\n max-width: 90vw;\n aspect-ratio: 16 / 9;\n overflow: hidden;\n }\n\n .content-video-vast {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .closeButton {\n display: flex;\n position: absolute;\n top: 10px;\n right: 10px;\n background-color: rgba(0, 0, 0, 0.8);\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n font-size: 0;\n transition: all 0.2s ease;\n z-index: 10;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n\n .closeButton::before,\n .closeButton::after {\n content: \'\';\n position: absolute;\n width: 20px;\n height: 2px;\n background-color: white;\n border-radius: 1px;\n }\n\n .closeButton::before {\n transform: rotate(45deg);\n }\n\n .closeButton::after {\n transform: rotate(-45deg);\n }\n\n .closeButton:hover {\n background-color: rgba(0, 0, 0, 0.9);\n }\n\n .ima-ad-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: auto;\n z-index: 2;\n }\n\n .ima-video-element {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n z-index: 1;\n }\n\n .ima-video-element:focus {\n outline: none;\n }\n\n .ima-video-element:hover {\n cursor: pointer;\n }\n </style>\n <div id="modal" class="modal">\n <div class="modalDialog">\n <div id="content-video-vast" class="content-video-vast">\n <video id="ima-video-element" class="ima-video-element" autoplay playsinline></video>\n <div id="ima-ad-container" class="ima-ad-container"></div>\n </div>\n <button type="button" class="closeButton" id="close-modal"></button>\n </div>\n </div>\n ',document.body.appendChild(this.modalElement),this.videoElement=this.modalElement.querySelector("#ima-video-element"),this.videoContainer=this.modalElement.querySelector(".content-video-vast"),this.closeButton=this.modalElement.querySelector("#close-modal"),!this.videoElement)throw new Error("Video element not found");return this.logger.debug("Modal created successfully"),this.videoElement}catch(e){throw this.logger.error("Error creating modal:",e),e}}getVideoElement(){return this.videoElement}getVideoContainer(){return this.videoContainer}getAdContainer(){return this.modalElement?this.modalElement.querySelector("#ima-ad-container"):null}setCloseCallback(e){this.closeButton&&this.closeButton.addEventListener("click",e)}close(){this.modalElement&&(this.modalElement.style.display="none")}hide(){this.modalElement&&(this.modalElement.style.display="none",this.modalElement.style.visibility="hidden",this.logger.debug("Modal hidden (not removed)"))}remove(){this.modalElement&&(document.body.removeChild(this.modalElement),this.modalElement=null)}showVideo(){this.videoElement&&(this.videoElement.style.display="block",this.videoElement.style.visibility="visible",this.logger.debug("Video made visible"))}cleanup(){try{this.closeButton&&(this.closeButton.remove(),this.closeButton=null),this.videoElement&&(this.videoElement=null),this.videoContainer&&(this.videoContainer.remove(),this.videoContainer=null),this.modalElement&&(this.modalElement.remove(),this.modalElement=null),this.logger.debug("UI cleaned up successfully")}catch(e){this.logger.error("Error cleaning up UI:",e)}}}class G{static show(){if(this.isVisible)return;const e=ye.getConfig(),t=e?.primaryColor||"#007bff",r=document.createElement("div");r.id=this.OVERLAY_ID,r.innerHTML=`\n <style>\n #${this.OVERLAY_ID} {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n z-index: 9999;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n margin: 0;\n padding: 0;\n }\n \n #${this.OVERLAY_ID} .loading-content {\n text-align: center;\n color: white;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n \n #${this.OVERLAY_ID} .spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top: 4px solid ${t};\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n flex-shrink: 0;\n }\n \n #${this.OVERLAY_ID} .loading-text {\n font-size: 16px;\n font-weight: 500;\n margin: 0;\n line-height: 1.2;\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n </style>\n <div class="loading-content">\n <div class="spinner"></div>\n <p class="loading-text">Carregando Publicidade</p>\n </div>\n `,document.body.appendChild(r),this.isVisible=!0}static hide(){const e=document.getElementById(this.OVERLAY_ID);e&&(e.remove(),this.isVisible=!1)}static isShowing(){return this.isVisible}static forceHide(){const e=document.getElementById(this.OVERLAY_ID);e&&e.remove(),this.isVisible=!1}}function q(){if("undefined"!=typeof __VERSION__)return __VERSION__;if("undefined"!=typeof process&&process.env?.npm_package_version)return process.env.npm_package_version;try{return"3.6.0"}catch(e){return"unknown"}}function $(){const e=q(),t="undefined"!=typeof process&&process.env;return{version:e,isDevelopment:!!t&&"development"===process.env.NODE_ENV,isProduction:!t||"production"===process.env.NODE_ENV,buildTime:(new Date).toISOString()}}G.OVERLAY_ID="akross-loading-overlay",G.isVisible=!1;const j=q(),Y=$();class Q{constructor(e){this.overlayElement=null,this.iframeElement=null,this.loadingElement=null,this.errorElement=null,this.retryButton=null,this.closeButton=null,this.isSurveyCompleted=!1,this.isSurveyClosed=!1,this.media=e;const t=ye.getDebugMode();this.logger=new p(t),this.mediaResultHelper=new H({userId:ye.getUserData()?.userId||"",debug:t})}async start(){try{return this.logger.debug("Starting survey overlay for media:",this.media.title),"survey_v2"!==this.media.type&&"video_v2"!==this.media.type?(this.logger.error("Unsupported media type:",this.media.type),new u({media:this.media,result:n.ERROR,error:new o("Unsupported media type")})):this.media.content?.survey?.url?(this.createOverlay(),this.setupEventListeners(),this.loadSurvey(),new Promise(e=>{this.onResultCallback=t=>{let r=this.mediaResultHelper.finishWithResult(t.media,t.result);e(r)}})):(this.logger.error("Survey URL not found"),new u({media:this.media,result:n.ERROR,error:new o("Survey URL not found")}))}catch(e){return this.logger.error("Error starting survey overlay:",e),new u({media:this.media,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}createOverlay(){this.overlayElement=document.createElement("div"),this.overlayElement.innerHTML=`\n <style>${Q.OVERLAY_CSS}</style>\n <div class="aa-survey-overlay">\n <div class="aa-survey-dialog">\n <div class="aa-survey-content">\n <iframe class="aa-survey-iframe"></iframe>\n <div class="aa-survey-loading" style="display: none;">\n <div style="width: 40px; height: 40px; border: 4px solid #f3f3f3; border-top: 4px solid #007bff; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto 16px;"></div>\n <div style="color: #666; font-size: 14px;">Carregando pesquisa...</div>\n </div>\n <div class="aa-survey-error" style="display: none;">\n <div style="font-size: 48px; margin-bottom: 16px;">⚠️</div>\n <div class="aa-survey-error-message" style="font-size: 16px; color: #666; margin-bottom: 24px;"></div>\n <button style="background-color: #007bff; color: white; border: none; padding: 12px 24px; border-radius: 4px; cursor: pointer; font-size: 14px; transition: background-color 0.2s ease;">Tentar Novamente</button>\n </div>\n </div>\n <button type="button" class="closeButton"></button>\n </div>\n </div>\n `,document.body.appendChild(this.overlayElement),this.iframeElement=this.overlayElement.querySelector(".aa-survey-iframe"),this.loadingElement=this.overlayElement.querySelector(".aa-survey-loading"),this.errorElement=this.overlayElement.querySelector(".aa-survey-error"),this.retryButton=this.overlayElement.querySelector('button[style*="Tentar Novamente"]'),this.closeButton=this.overlayElement.querySelector(".closeButton"),this.applyPrimaryColor(),this.logger.debug("Survey overlay created")}applyPrimaryColor(){const t=ye.getConfig(),r=t?e.getPrimaryColor(t,"#007bff"):"#007bff";if(this.loadingElement){const e=this.loadingElement.querySelector('div[style*="border-top"]');e&&(e.style.borderTop=`4px solid ${r}`)}this.retryButton&&(this.retryButton.style.backgroundColor=r,this.retryButton.addEventListener("mouseenter",()=>{this.retryButton.style.backgroundColor=this.darkenColor(r,10)}),this.retryButton.addEventListener("mouseleave",()=>{this.retryButton.style.backgroundColor=r}))}setupEventListeners(){this.retryButton&&this.retryButton.addEventListener("click",()=>{this.hideErrorInterface(),this.loadSurvey()}),this.closeButton&&this.closeButton.addEventListener("click",()=>{this.executeBackButtonLogic()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&this.executeBackButtonLogic()}),this.overlayElement&&this.overlayElement.addEventListener("click",e=>{e.target===this.overlayElement&&this.executeBackButtonLogic()})}loadSurvey(){this.iframeElement&&this.media.content?.survey?.url?(this.logger.debug("Loading survey from URL:",this.media.content.survey.url),this.hideErrorInterface(),this.showLoading(),this.iframeElement.src=this.media.content.survey.url,this.iframeElement.onload=()=>{this.hideLoading(),setTimeout(()=>{this.injectSurveyBridge()},100)},this.iframeElement.onerror=()=>{this.hideLoading(),this.showErrorInterface("Erro ao carregar a pesquisa")}):this.showErrorInterface("URL da pesquisa não encontrada")}injectSurveyBridge(){try{this.setupMessageListener(),this.attemptScriptInjection()}catch(e){this.logger.error("Error setting up survey bridge:",e)}}setupMessageListener(){const e=e=>{const{data:t}=e;t&&"akross-survey"===t.source&&(this.logger.debug("Survey message received from iframe:",t),this.handleSurveyMessage(t))};window.addEventListener("message",e),this._messageHandler=e}attemptScriptInjection(){const e=this.createSurveyBridgeScript(),t=()=>{try{if(!this.iframeElement?.contentWindow)return!1;const t=this.iframeElement.contentDocument||this.iframeElement.contentWindow.document;if(t&&"complete"===t.readyState){const r=t.createElement("script");return r.textContent=e,t.head.appendChild(r),!0}return"function"==typeof this.iframeElement.contentWindow.eval&&(this.iframeElement.contentWindow.eval(e),!0)}catch(e){return!1}};t()||setTimeout(()=>{t()||setTimeout(()=>{t()||setTimeout(()=>{t()},1e3)},500)},200)}createSurveyBridgeScript(){return"\n (function() {\n // Função notifyHost para compatibilidade com SurveyJS\n window.notifyHost = function(eventName, payload) {\n const message = {\n source: 'akross-survey',\n type: eventName,\n payload,\n ts: Date.now()\n };\n\n // 1) iOS WKWebView\n try {\n if (window.webkit?.messageHandlers?.surveyBridge) {\n window.webkit.messageHandlers.surveyBridge.postMessage(message);\n return;\n }\n } catch (error) {\n console.error('❌ NotifyHost: Erro iOS WKWebView:', error);\n }\n\n // 2) Android WebView (via addJavascriptInterface)\n try {\n if (window.AndroidSurveyBridge?.postMessage) {\n // Em Android é comum aceitar string; envie JSON serializado\n window.AndroidSurveyBridge.postMessage(JSON.stringify(message));\n return;\n }\n } catch (error) {\n console.error('❌ NotifyHost: Erro Android WebView:', error);\n }\n\n // 3) Web (iFrame → janela hospedeira)\n if (window.parent && window.parent !== window) {\n window.parent.postMessage(message, '*');\n }\n };\n })();\n "}getSurveyBridgeScript(){return this.createSurveyBridgeScript()}testCommunication(){if(this.logger.debug("Testing communication with iframe"),this.iframeElement?.contentWindow){const e={source:"akross-survey-test",type:"communication_test",payload:{timestamp:Date.now()}};this.iframeElement.contentWindow.postMessage(e,"*")}}handleSurveyMessage(e){try{switch(this.logger.debug("Survey message received:",e),e.type){case"survey_complete":this.handleSurveyComplete(e.payload);break;case"survey_save":this.handleSurveySave(e.payload);break;case"survey_closed":this.handleSurveyClose();break;case"survey_started":this.handleSurveyStarted(e.payload);break;case"survey_progress":this.handleSurveyProgress(e.payload);break;default:this.logger.warn("Unknown message type:",e.type)}}catch(e){this.logger.error("Error processing survey message:",e)}}processPayload(e,t,r){if(this.logger.debug(`${t} with payload:`,e),e){const i=r(e);this.logger.debug(`${t} data:`,i)}}handleSurveyComplete(e){this.processPayload(e,"🎉 Survey Complete Handler",e=>({answers:e.answers,timeSpent:e.timeSpent,completed:e.completed})),this.isSurveyCompleted=!0}handleSurveySave(e){this.processPayload(e,"💾 Survey Save Handler",e=>({progress:e.progress,answers:e.answers,timestamp:(new Date).toISOString()}))}handleSurveyClose(){this.logger.debug("Survey close requested. Completed:",this.isSurveyCompleted),this.isSurveyClosed=!0,this.executeBackButtonLogic()}handleSurveyStarted(e){this.processPayload(e,"🚀 Survey Started Handler",e=>({surveyId:e.surveyId,timestamp:(new Date).toISOString(),userAgent:navigator.userAgent}))}handleSurveyProgress(e){this.processPayload(e,"📊 Survey Progress Handler",e=>({progress:e.progress,currentPage:e.currentPage,totalPages:e.totalPages,timestamp:(new Date).toISOString()}))}executeBackButtonLogic(){this.isSurveyCompleted?this.finishWithResult(n.REWARDED):this.finishWithResult(n.CANCELED)}finishWithResult(e){if(this.logger.debug("Finishing survey overlay with result:",e),this.cleanup(),this.onResultCallback){const t=new u({media:this.media,result:e});this.onResultCallback(t)}}setElementVisibility(e,t,r="block"){e&&(e.style.display=t?r:"none")}showErrorInterface(e="Erro ao carregar a pesquisa"){if(this.errorElement){const t=this.errorElement.querySelector(".aa-survey-error-message");t&&(t.textContent=e),this.setElementVisibility(this.errorElement,!0,"flex")}this.setElementVisibility(this.iframeElement,!1),this.hideLoading()}hideErrorInterface(){this.setElementVisibility(this.errorElement,!1),this.setElementVisibility(this.iframeElement,!0)}showLoading(){this.setElementVisibility(this.loadingElement,!0)}hideLoading(){this.setElementVisibility(this.loadingElement,!1)}darkenColor(e,t){const r=parseInt(e.replace("#",""),16),i=Math.round(2.55*t),s=(r>>16)-i,n=(r>>8&255)-i,a=(255&r)-i;return"#"+(16777216+65536*(s<255?s<1?0:s:255)+256*(n<255?n<1?0:n:255)+(a<255?a<1?0:a:255)).toString(16).slice(1)}cleanup(){this._messageHandler&&(window.removeEventListener("message",this._messageHandler),this._messageHandler=null),this.overlayElement&&this.overlayElement.parentNode&&this.overlayElement.parentNode.removeChild(this.overlayElement),this.overlayElement=null,this.iframeElement=null,this.loadingElement=null,this.errorElement=null,this.retryButton=null,this.closeButton=null}}Q.OVERLAY_CSS="\n .aa-survey-overlay {\n display: block;\n position: fixed;\n z-index: 1;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.4);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .aa-survey-dialog {\n background-color: white;\n border-radius: 8px;\n position: relative;\n width: 100%;\n max-width: 95vw;\n height: 95vh;\n overflow: hidden;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n }\n\n .aa-survey-content {\n display: block;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .aa-survey-iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n\n .aa-survey-loading {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n z-index: 10;\n }\n\n .aa-survey-error {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n display: none;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 20px;\n }\n\n .closeButton {\n display: flex;\n position: absolute;\n top: 10px;\n right: 10px;\n background-color: rgba(0, 0, 0, 0.8);\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n font-size: 0;\n transition: all 0.2s ease;\n z-index: 10;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n\n .closeButton::before,\n .closeButton::after {\n content: '';\n position: absolute;\n width: 20px;\n height: 2px;\n background-color: white;\n border-radius: 1px;\n }\n\n .closeButton::before {\n transform: rotate(45deg);\n }\n\n .closeButton::after {\n transform: rotate(-45deg);\n }\n\n .closeButton:hover {\n background-color: rgba(0, 0, 0, 0.9);\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n ";class J{constructor(e={}){this.resolvePlayerExecution=null,this.videoElement=null,this.adContainer=null,this.adDisplayContainer=null,this.adsLoader=null,this.adManager=null,this.config=e,this.logger=new p(ye.getDebugMode());const t=ye.getUserData(),r=ye.getDebugMode();this.mediaResultHelper=new H({userId:t?.userId||"",debug:r}),this.ui=new K(this.logger)}async start(e){this.logger.debug("Starting VAST player for media:",e.title),G.show();try{return this.currentMedia=e,this.logger.debug("Using IMA SDK for VAST"),await this.executeWithIMA()}catch(e){return this.logger.error("Error starting VAST player:",e),this.createErrorResult(e)}}async executeWithIMA(){try{if(this.logger.debug("Executing VAST with IMA SDK:",this.currentMedia.title),!window.google||!window.google.ima||!window.google.ima.AdsLoader){this.logger.debug("IMA SDK not available, loading...");try{await z(),this.logger.debug("IMA SDK loaded successfully")}catch(e){throw this.logger.error("Failed to load IMA SDK:",e),new Error(`Failed to load IMA SDK: ${e instanceof Error?e.message:"Unknown error"}`)}}const e=this.config.imaConfig||{locale:"pt-BR",vastLoadTimeout:1e4,vpaidMode:window.google.ima.ImaSdkSettings.VpaidMode.ENABLED,continuousPlayback:!0};window.google.ima.settings.setVpaidMode(e.vpaidMode),window.google.ima.settings.setLocale(e.locale),this.logger.debug("IMA SDK configured successfully"),this.createModal(),await this.setupIMA();const t=this.prepareAdTagUrl();return await this.requestAds(t),this.logger.debug("VAST ad executed successfully with IMA SDK"),await this.waitForAdResult()}catch(e){return this.logger.error("Error executing with IMA SDK:",e),this.finishWithResult(n.ERROR)}}async waitForAdResult(){return new Promise(e=>{this.resolvePlayerExecution=e})}finishWithResult(e){this.logger.debug("Finishing VAST player with result:",e),G.hide();const t=this.mediaResultHelper.finishWithResult(this.currentMedia,e);return this.resolvePlayerExecution&&(this.resolvePlayerExecution(t),this.resolvePlayerExecution=null),this.cleanup(),t}createErrorResult(e){return new u({media:this.currentMedia,result:n.ERROR,error:new o(m.ERROR,e instanceof Error?e.message:"Unknown error")})}createModal(){try{this.videoElement=this.ui.createModal(),this.ui.setCloseCallback(()=>{this.finishWithResult(n.CANCELED)})}catch(e){throw this.logger.error("Error creating modal:",e),e}}prepareAdTagUrl(){if("video_v2"===this.currentMedia.type){if(!this.currentMedia.content?.video?.url)throw this.logger.error("Video V2 URL not found"),new Error("Video V2 URL not found");return this.currentMedia.content.video.url}if(!this.currentMedia.content?.url)throw this.logger.error("Media content URL not found"),new Error("Media content URL not found");return this.currentMedia.content.url}async setupIMA(){try{if(!this.videoElement)throw new Error("Video element not found");if(this.adContainer=this.ui.getAdContainer(),!this.adContainer)throw new Error("Ad container not found");this.ui.showVideo(),this.adDisplayContainer=new window.google.ima.AdDisplayContainer(this.adContainer,this.videoElement),this.adDisplayContainer.initialize(),this.adsLoader=new window.google.ima.AdsLoader(this.adDisplayContainer),this.setupIMAEvents(),this.logger.debug("IMA SDK setup completed")}catch(e){throw this.logger.error("Error setting up IMA SDK:",e),e}}setupIMAEvents(){this.adsLoader&&(this.adsLoader.addEventListener(window.google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,e=>{if(this.logger.debug("AdsManager loaded"),this.adManager=e.getAdsManager(this.videoElement),this.adManager){const e=this.videoElement?.clientWidth||640,t=this.videoElement?.clientHeight||480;this.logger.debug(`Initializing ad with dimensions: ${e}x${t}`),this.setupAdManagerEvents(),this.adManager.init(e,t,window.google.ima.ViewMode.NORMAL),this.adManager.start(),this.logger.debug("Ad started successfully"),setTimeout(()=>{this.ui.showVideo()},100)}}),this.adsLoader.addEventListener(window.google.ima.AdErrorEvent.Type.AD_ERROR,e=>{this.logger.error("Ad error:",e.getError()),this.finishWithResult(n.ERROR)}))}setupAdManagerEvents(){this.adManager&&(this.adManager.addEventListener(window.google.ima.AdEvent.Type.LOADED,()=>{this.logger.debug("Ad loaded"),G.hide()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.STARTED,()=>{this.logger.debug("Ad started"),this.sendVpaidStartEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.FIRST_QUARTILE,()=>{this.logger.debug("Ad first quartile"),this.sendFirstQuartileEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.MIDPOINT,()=>{this.logger.debug("Ad midpoint"),this.sendMidpointEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.THIRD_QUARTILE,()=>{this.logger.debug("Ad third quartile"),this.sendThirdQuartileEvent()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.COMPLETE,()=>{this.sendCompleteEvent(),this.logger.debug("Ad completed")}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.ALL_ADS_COMPLETED,async()=>{this.logger.debug("All ads completed"),this.sendAllAdsCompletedEvent(),this.ui.hide();const e=this.currentMedia.content?.survey?.hasUrl();if(e){this.logger.debug("Video completed, executing survey");try{const e=new Q(this.currentMedia),t=await e.start();this.resolvePlayerExecution&&(this.resolvePlayerExecution(t),this.resolvePlayerExecution=null)}catch(e){this.logger.error("Error executing survey after video:",e),this.finishWithResult(n.REWARDED)}}else this.finishWithResult(n.REWARDED);setTimeout(()=>{this.ui.cleanup(),this.cleanupResources()},1e3)}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.CLICK,()=>{this.logger.debug("Ad clicked"),this.sendClickThroughEvent(),this.adManager.resume()}),this.adManager.addEventListener(window.google.ima.AdEvent.Type.SKIPPED,()=>{this.logger.debug("Ad skipped"),this.sendSkippedEvent()}))}async requestAds(e){try{if(!this.adsLoader)throw new Error("AdsLoader not initialized");const t=new window.google.ima.AdsRequest;t.adTagUrl=e,this.logger.debug("Requesting ads with URL:",e),this.adsLoader.requestAds(t),this.logger.debug("Ads requested successfully")}catch(e){throw this.logger.error("Error requesting ads:",e),e}}sendVpaidStartEvent(){this.mediaResultHelper.sendEventCallback(U.START,this.currentMedia)}sendFirstQuartileEvent(){this.mediaResultHelper.sendEventCallback(U.FIRST_QUARTILE,this.currentMedia)}sendMidpointEvent(){this.mediaResultHelper.sendEventCallback(U.MIDPOINT,this.currentMedia)}sendThirdQuartileEvent(){this.mediaResultHelper.sendEventCallback(U.THIRD_QUARTILE,this.currentMedia)}sendCompleteEvent(){this.mediaResultHelper.sendEventCallback(U.AD_COMPLETED,this.currentMedia)}sendAllAdsCompletedEvent(){this.mediaResultHelper.sendEventCallback(U.ALL_ADS_COMPLETED,this.currentMedia)}sendClickThroughEvent(){this.mediaResultHelper.sendEventCallback(U.CLICKTHROUGH,this.currentMedia)}sendSkippedEvent(){this.mediaResultHelper.sendEventCallback(U.SKIPPED,this.currentMedia)}sendAdErrorEvent(){this.mediaResultHelper.sendEventCallback(U.ERROR,this.currentMedia)}cleanup(){this.logger.debug("Cleaning up VAST player")}cleanupResources(){this.logger.debug("Cleaning up VAST player resources (UI already cleaned)"),this.mediaResultHelper.clearSentEvents(),this.resolvePlayerExecution=null,this.adContainer=null,this.videoElement=null}destroy(){this.logger.debug("Destroying VAST player"),this.cleanup()}}function X(e){return new J(e)}var Z;!function(e){e.NO_FILL="NO_FILL",e.CONNECTION_ERROR="CONNECTION_ERROR",e.AD_FAILED="AD_FAILED",e.REWARDED="REWARDED",e.SKIPPED="SKIPPED"}(Z||(Z={}));class ee{constructor(){this.steps=[]}addStep(e,t){this.steps.push({result:e,errorMessage:t})}getWaterfallSummary(){return this.steps.map(e=>`${e.result}`).join(", ")||"No results"}getDetailedWaterfallSummary(){return this.steps.map(e=>{switch(e.result){case Z.AD_FAILED:return"AD_FAILED"+(e.errorMessage?`(${e.errorMessage})`:"");case Z.NO_FILL:return"NO_FILL";case Z.CONNECTION_ERROR:return"CONNECTION_ERROR";case Z.REWARDED:return"REWARDED";case Z.SKIPPED:return"SKIPPED";default:return e.result}}).join(" | ")}findMainResult(){return this.steps.some(e=>e.result===Z.REWARDED)?Z.REWARDED:this.steps.some(e=>e.result===Z.SKIPPED)?Z.SKIPPED:this.steps.some(e=>e.result===Z.NO_FILL)?Z.NO_FILL:this.steps.some(e=>e.result===Z.AD_FAILED)?Z.AD_FAILED:Z.CONNECTION_ERROR}clear(){this.steps=[]}getSteps(){return[...this.steps]}getStepCount(){return this.steps.length}}function te(){return new ee}class re{constructor(e){this.isLoaded=!1,this.isDestroyed=!1,this.loadTimeout=null,this.rewardedSlot=null,this.rewardPayload=null,this.resolvePromise=null,this.eventListeners={rewardedSlotReady:null,rewardedSlotClosed:null,rewardedSlotGranted:null,slotRenderEnded:null},this.config=e,this.logger=new p(ye.getDebugMode())}async loadAd(){return this.isDestroyed?(this.logger.warn("Wrapper already destroyed"),{result:Z.AD_FAILED,errorMessage:"Wrapper destroyed"}):(this.logger.debug("Loading GAM Rewarded Video:",this.config.adUnitId),new Promise(e=>{this.resolvePromise=e,this.initGooglePublisherTag().then(()=>{if(!this.isDestroyed)return this.renderRewardedAd();e({result:Z.AD_FAILED,errorMessage:"Wrapper destroyed"})}).catch(t=>{this.logger.error("Error loading GAM RV:",t),e({result:Z.AD_FAILED,errorMessage:t instanceof Error?t.message:"Unknown error"})})}))}async initGooglePublisherTag(){if("undefined"==typeof window)throw new Error("Window object not available");if(!window.googletag){window.googletag=window.googletag||{cmd:[]};try{await B(),this.logger.debug("GPT script ready")}catch(e){throw this.logger.error("Failed to load GPT script:",e),new Error(`Failed to load Google Publisher Tag: ${e instanceof Error?e.message:"Unknown error"}`)}}}async renderRewardedAd(){return new Promise((e,t)=>{this.loadTimeout=setTimeout(()=>{this.isDestroyed||(this.logger.error("GAM RV load timeout"),this.resolvePromise?.({result:Z.CONNECTION_ERROR,errorMessage:"Load timeout"}),this.removeEventListeners(),t(new Error("Load timeout")))},this.config.timeout);try{window.googletag.cmd.push(()=>{this.isDestroyed||(this.rewardedSlot=window.googletag.defineOutOfPageSlot(this.config.adUnitId,window.googletag.enums.OutOfPageFormat.REWARDED),this.rewardedSlot?(this.rewardedSlot.addService(window.googletag.pubads()),this.addCampaignParams(),this.addEventListeners(),window.googletag.enableServices(),window.googletag.display(this.rewardedSlot),e()):(this.logger.error("Rewarded ads are not supported on this page"),this.resolvePromise?.({result:Z.AD_FAILED,errorMessage:"Rewarded ads not supported"}),this.removeEventListeners(),t(new Error("Rewarded ads not supported"))))})}catch(e){this.logger.error("Error in renderRewardedAd:",e),this.resolvePromise?.({result:Z.AD_FAILED,errorMessage:e instanceof Error?e.message:"Unknown error"}),this.removeEventListeners(),t(e)}})}addCampaignParams(){this.rewardedSlot&&this.config.campaignParams&&(this.config.campaignParams.mediaId&&this.rewardedSlot.setTargeting("a_media_id",this.config.campaignParams.mediaId),this.config.campaignParams.campaignId&&this.rewardedSlot.setTargeting("a_campaign_id",this.config.campaignParams.campaignId),this.config.campaignParams.zoneId&&this.rewardedSlot.setTargeting("a_zone_id",this.config.campaignParams.zoneId),this.config.campaignParams.requestId&&this.rewardedSlot.setTargeting("a_request_id",this.config.campaignParams.requestId))}addEventListeners(){this.logger.debug("Adding GAM RV event listeners"),this.eventListeners.rewardedSlotReady||(this.eventListeners.rewardedSlotReady=e=>{this.isDestroyed||(this.logger.debug("Rewarded ad slot is ready"),history.pushState(null,"Google Rewarded Video","#goog_rewarded"),G.hide(),e.makeRewardedVisible(),this.logger.debug("Rewarded ad is active"))},window.googletag.pubads().addEventListener("rewardedSlotReady",this.eventListeners.rewardedSlotReady)),this.eventListeners.rewardedSlotClosed||(this.eventListeners.rewardedSlotClosed=()=>{this.isDestroyed||(this.logger.debug("Rewarded ad closed"),this.resolvePromise?.({result:Z.SKIPPED,errorMessage:void 0}),this.dismissRewardedAd())},window.googletag.pubads().addEventListener("rewardedSlotClosed",this.eventListeners.rewardedSlotClosed)),this.eventListeners.rewardedSlotGranted||(this.eventListeners.rewardedSlotGranted=e=>{this.isDestroyed||(this.logger.debug("User rewarded"),this.resolvePromise?.({result:Z.REWARDED,errorMessage:void 0}),this.dismissRewardedAd())},window.googletag.pubads().addEventListener("rewardedSlotGranted",this.eventListeners.rewardedSlotGranted)),this.eventListeners.slotRenderEnded||(this.eventListeners.slotRenderEnded=e=>{this.isDestroyed||(this.loadTimeout&&(clearTimeout(this.loadTimeout),this.loadTimeout=null),e.slot===this.rewardedSlot&&e.isEmpty&&(this.logger.debug("No ad returned for rewarded ad slot"),this.resolvePromise?.({result:Z.NO_FILL,errorMessage:"No ad returned"}),this.dismissRewardedAd()))},window.googletag.pubads().addEventListener("slotRenderEnded",this.eventListeners.slotRenderEnded))}removeEventListeners(){this.logger.debug("Removing GAM RV event listeners"),this.eventListeners.rewardedSlotReady&&(window.googletag.pubads().removeEventListener("rewardedSlotReady",this.eventListeners.rewardedSlotReady),this.eventListeners.rewardedSlotReady=null),this.eventListeners.rewardedSlotClosed&&(window.googletag.pubads().removeEventListener("rewardedSlotClosed",this.eventListeners.rewardedSlotClosed),this.eventListeners.rewardedSlotClosed=null),this.eventListeners.rewardedSlotGranted&&(window.googletag.pubads().removeEventListener("rewardedSlotGranted",this.eventListeners.rewardedSlotGranted),this.eventListeners.rewardedSlotGranted=null),this.eventListeners.slotRenderEnded&&(window.googletag.pubads().removeEventListener("slotRenderEnded",this.eventListeners.slotRenderEnded),this.eventListeners.slotRenderEnded=null)}dismissRewardedAd(){this.rewardPayload&&(this.rewardPayload=null),this.logger.debug("Rewarded ad has been closed"),this.rewardedSlot&&window.googletag.destroySlots([this.rewardedSlot]),this.removeEventListeners()}destroy(){this.isDestroyed||(this.logger.debug("Destroying GAM RV wrapper"),this.loadTimeout&&(clearTimeout(this.loadTimeout),this.loadTimeout=null),this.removeEventListeners(),this.rewardedSlot&&window.googletag&&window.googletag.destroySlots([this.rewardedSlot]),this.isDestroyed=!0,this.isLoaded=!1,this.rewardedSlot=null,this.rewardPayload=null)}isAdLoaded(){return this.isLoaded}}function ie(e){return new re(e)}class se{constructor(e={}){this.currentMedia=null,this.config=e,this.logger=new p(ye.getDebugMode());const t=ye.getUserData(),r=ye.getDebugMode();this.mediaResultHelper=new H({userId:t?.userId||"",debug:r}),this.waterfallTracker=new ee}async start(e){this.logger.debug("Starting programmatic player for media:",e.title),G.show();try{this.currentMedia=e,this.waterfallTracker.clear(),this.mediaResultHelper.sendEventCallback(U.PROGRAMMATIC_WATERFALL_START,e);const t=e.content?.programmatic?.waterfall;return t&&0!==t.length?await this.executeWaterfall(t):(this.logger.error("Empty or null waterfall"),this.mediaResultHelper.sendEventCallback(U.PROGRAMMATIC_ERROR,e),G.hide(),this.createErrorResult("Empty or null waterfall"))}catch(e){throw this.logger.error("Error in start method:",e),G.hide(),e}}async executeWaterfall(e){this.logger.debug("Executing waterfall with",e.length,"steps");for(let t=0;t<e.length;t++){const r=e[t];this.logger.debug(`Loading ad ${t+1} of ${e.length}: ${r.type}`);try{const e=await this.loadAd(r,t);if(e instanceof u)return this.logger.debug("Fallback executed, returning result directly"),e;if(e.result===Z.REWARDED)return this.logger.debug("Ad rewarded successfully"),this.mediaResultHelper.sendEventCallback(U.COMPLETE,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.REWARDED);if(e.result===Z.SKIPPED)return this.logger.debug("Ad skipped"),this.mediaResultHelper.sendEventCallback(U.PROGRAMMATIC_SKIPPED,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.SKIPPED);this.waterfallTracker.addStep(e.result,e.errorMessage),this.logger.debug(`Ad ${t+1} failed: ${e.errorMessage}, trying next`)}catch(e){this.logger.error(`Error loading ad ${t+1}:`,e),this.waterfallTracker.addStep(Z.AD_FAILED,e instanceof Error?e.message:"Unknown error")}}return this.logger.debug("No more ads to load in waterfall. Summary:",this.waterfallTracker.getDetailedWaterfallSummary()),G.hide(),await this.sendProgResultEvent()}async loadAd(e,t){const r=e.type,i=e.findTimeout()||this.config.loadTimeout||1e4;switch(this.logger.debug(`Loading ad type: ${r}`),r){case s.TYPE_GOOGLE_RV:return await this.loadGAMRewardedVideo(e.findAdUnitId(),i);case s.TYPE_FALLBACK:return await this.loadVideoFallback(e.findVastTag(),e.findEventSuffix());default:return this.logger.warn(`Ad type ${r} not supported in web`),{result:Z.AD_FAILED,errorMessage:`Ad type ${r} not supported`}}}async loadGAMRewardedVideo(e,t){try{if(this.logger.debug("Loading GAM Rewarded Video"),!e)return this.logger.error("Ad unit ID not found for GAM RV"),{result:Z.AD_FAILED,errorMessage:"Ad unit ID not found"};const r=this.buildCampaignParams(),i=ye.getDebugMode(),s=new re({adUnitId:e,timeout:t,campaignParams:r,debug:i});return await this.loadGAMRewardedVideoWithWrapper(s)}catch(e){return this.logger.error("Error loading GAM RV:",e),{result:Z.AD_FAILED,errorMessage:e instanceof Error?e.message:"Unknown error"}}}async loadGAMRewardedVideoWithWrapper(e){try{const t=await e.loadAd();return this.logger.debug("GAM RV result:",t.result),t}catch(e){return this.logger.error("Error loading GAM RV:",e),{result:Z.AD_FAILED,errorMessage:e instanceof Error?e.message:"Unknown error"}}}async loadVideoFallback(e,t){try{this.logger.debug("Loading fallback VIDEO_V2"),this.mediaResultHelper.sendEventCallback(U.PROGRAMMATIC_FALLBACK_REQ,this.currentMedia),this.sendProgResultEvent();const r=JSON.parse(JSON.stringify(this.currentMedia));r.type=s.VIDEO_V2,r.content={video:{type:"IN_HOUSE",url:e,proxy:!1,eventSuffix:t}};const i=new ae(r);return await i.click()}catch(e){return this.logger.error("Error loading fallback:",e),new u({media:this.currentMedia,result:n.ERROR,error:new o(m.ERROR,e instanceof Error?e.message:"Unknown error")})}}createErrorResult(e){return new u({media:this.currentMedia,result:n.ERROR,error:new o(m.ERROR,e instanceof Error?e.message:"Unknown error")})}async sendProgResultEvent(){switch(this.waterfallTracker.findMainResult()){case Z.NO_FILL:return this.logger.debug("Waterfall completed with NO_FILL"),this.mediaResultHelper.sendEventCallback(U.NO_FILL,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.NO_FILL);case Z.AD_FAILED:const e=`Waterfall failed: ${this.waterfallTracker.getDetailedWaterfallSummary()}`;return this.logger.error("Waterfall",e),this.mediaResultHelper.sendEventCallback(U.PROGRAMMATIC_ERROR,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.ERROR,e);case Z.CONNECTION_ERROR:return this.logger.debug("Waterfall completed with CONNECTION_ERROR"),this.mediaResultHelper.sendEventCallback(U.PROGRAMMATIC_CONNECTION_ERROR,this.currentMedia),this.mediaResultHelper.finishWithResult(this.currentMedia,n.CONNECTION_ERROR,"Connection Error");case Z.REWARDED:return this.mediaResultHelper.finishWithResult(this.currentMedia,n.REWARDED);case Z.SKIPPED:return this.mediaResultHelper.finishWithResult(this.currentMedia,n.SKIPPED)}}buildCampaignParams(){const e={};return this.currentMedia?.uuid&&(e.mediaId=this.currentMedia.uuid),this.currentMedia?.campaignId&&(e.campaignId=this.currentMedia.campaignId),this.currentMedia?.zoneId&&(e.zoneId=this.currentMedia.zoneId),this.currentMedia?.requestId&&(e.requestId=this.currentMedia.requestId),e}destroy(){this.logger.debug("Destroying AARewardedVideo"),G.hide(),this.currentMedia=null,this.waterfallTracker.clear()}}function ne(e){return new se(e)}class ae{constructor(e){this.uuid=e.uuid,this.type=e.type,this.title=e.title,this.viewed=e.viewed,this.campaignId=e.campaignId,this.campaignName=e.campaignName,this.requestId=e.requestId,this.zoneId=e.zoneId,this.mediasLeft=e.mediasLeft,this.layout=e.layout,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.content&&(this.content=new h(e.content)),e.success&&(this.success=new g(e.success))}async click(){const e=ye.getDebugMode(),t=new p(e);try{const e=ye.getUserData();if(!e?.userId)return t.error("Error executing media click: user id is null"),new u({media:this,result:n.ERROR,error:new o("User ID is required")});switch(this.type){case s.VIDEO_V2:return await this.executeVideoV2Media(e.userId);case s.PROGRAMMATIC_V2:return await this.executeProgrammaticV2Media(e.userId);case s.SURVEY_V2:return await this.executeSurveyV2Media(e.userId);default:return t.warn(`Unsupported media type: ${this.type}`),new u({media:this,result:n.ERROR,error:new o(`Unsupported media type: ${this.type}`)})}return new u({media:this,result:n.ERROR,error:new o("Media execution failed")})}catch(e){return t.error("Error executing media click:",e),new u({media:this,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}async executeProgrammaticV2Media(e){const t=ye.getDebugMode();new p(t).debug("Executing Programmatic V2 media:",this.title);const r=new se,i=await r.start(this);return new u(i)}async executeVideoV2Media(e){const t=ye.getDebugMode(),r=new p(t);r.debug("Executing Video V2 media:",this.title);try{const e=new J,t=await e.start(this);return r.debug("Video V2 execution completed:",t.result),t}catch(e){return r.error("Error in executeVideoV2Media:",e),new u({media:this,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}async executeSurveyV2Media(e){const t=ye.getDebugMode(),r=new p(t);r.debug("Executing Survey V2 media:",this.title);try{const e=new Q(this),t=await e.start();return r.debug("Survey V2 execution completed:",t.result),t}catch(e){return r.error("Error in executeSurveyV2Media:",e),new u({media:this,result:n.ERROR,error:new o(e instanceof Error?e.message:"Unknown error")})}}}class oe{constructor(e){this.layout=e.layout,this.success=e.success,this.media=e.media||[],Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),this.media=this.media.map(e=>new ae(e))}getUnviewedMedia(){return this.media.filter(e=>!e.viewed)}getMediaByType(e){return this.media.filter(t=>t.type===e)}hasAvailableMedia(){return this.getUnviewedMedia().length>0}getMediaCount(){return this.media.length}}class de{constructor(e){this.name=e.name,this.description=e.description,this.value=e.value,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}hasDescription(){return!(!this.description||!this.description.trim())}hasValue(){return!!this.value}getInfo(){return this.hasDescription()?`${this.name}: ${this.description}`:this.name}}class le{constructor(e){this.campaignUuid=e.campaignUuid,this.campaignName=e.campaignName,this.layout=e.layout,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.mainData&&(this.mainData=new oe(e.mainData)),this.benefitOffers=(e.benefitOffers||[]).map(e=>new de(e))}getUnviewedMedia(){return this.mainData?.media?.filter(e=>!e.viewed)||[]}getMediaByType(e){return this.mainData?.media?.filter(t=>t.type===e)||[]}hasAvailableMedia(){return this.getUnviewedMedia().length>0}}class ce{constructor(e){this.uuid=e.uuid,this.name=e.name,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}isValid(){return!(!this.uuid||!this.name)}getInfo(){return`${this.name} (${this.uuid})`}}class he{constructor(e){this.requestId=e.requestId,this.campaigns=e.campaigns||[],Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.zone&&(this.zone=new ce(e.zone)),this.campaigns=this.campaigns.map(e=>new le(e))}getCampaignsWithAvailableMedia(){return this.campaigns.filter(e=>e.hasAvailableMedia())}getAllMedia(){return this.campaigns.flatMap(e=>e.mainData?.media||[])}getMediaByType(e){return this.campaigns.flatMap(t=>t.getMediaByType(e))}}class ge{constructor(e){this.responseStatus=e.responseStatus,this.error=e.error,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.campaignResponse&&(this.campaignResponse=new he(e.campaignResponse))}isSuccess(){return this.responseStatus===i.SUCCESS}isEmpty(){return this.responseStatus===i.EMPTY}hasError(){return this.responseStatus===i.ERROR}getCampaigns(){return this.campaignResponse?.campaigns||[]}getAllMedia(){return this.campaignResponse?.getAllMedia()||[]}}class ue{constructor(e){this.userId=e.userId,this.context=e.context,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}addContext(e,t){this.context||(this.context={}),this.context[e]=t}getContext(e){return this.context?.[e]}hasContext(){return!!(this.context&&Object.keys(this.context).length>0)}}class me{constructor(e){this.image=e.image,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])})}hasValidImage(){return!!(this.image&&this.image.trim().length>0)}getImageUrl(e){return this.hasValidImage()?this.image:e||""}isAbsoluteUrl(){return this.image.startsWith("http://")||this.image.startsWith("https://")}}class pe{constructor(e){this.primaryColor=e.primaryColor,this.secondaryColor=e.secondaryColor,this.title=e.title,this.primaryInformation=e.primaryInformation,this.secondaryInformation=e.secondaryInformation,this.enableCountdown=e.enableCountdown||!1,Object.keys(e).forEach(t=>{t in this||(this[t]=e[t])}),e.header&&(this.header=new me(e.header))}getPrimaryColorHex(){return this.primaryColor.startsWith("#")?this.primaryColor:`#${this.primaryColor}`}getSecondaryColorHex(){return this.secondaryColor.startsWith("#")?this.secondaryColor:`#${this.secondaryColor}`}isValid(){return!!(this.primaryColor&&this.secondaryColor&&this.title&&this.header)}}const Ee="@AkrossAds:SDK_CONFIG",ve="@Dataads:USER_DATA",we="@Dataads:CUSTOM_HEADERS";class ye{static saveConfig(e){localStorage.setItem(Ee,JSON.stringify(e))}static getConfig(){const e=localStorage.getItem(Ee);return e?JSON.parse(e):null}static updateConfig(e){const t=this.getConfig();if(t){const r={...t,...e};this.saveConfig(r)}}static deleteConfig(){localStorage.removeItem(Ee)}static saveUserData(e,r=null){const i=new t({userId:e,advertisingId:r});localStorage.setItem(ve,JSON.stringify(i))}static getUserData(){const e=localStorage.getItem(ve);return e?JSON.parse(e):null}static removeUserData(){localStorage.removeItem(ve)}static getDebugMode(){const e=this.getConfig();return e?.debug||!1}static setDebugMode(e){this.updateConfig({debug:e})}static getCustomHeaders(){const e=localStorage.getItem(we);return e?JSON.parse(e):null}static saveCustomHeaders(e){localStorage.setItem(we,JSON.stringify(e))}static removeCustomHeaders(){localStorage.removeItem(we)}static clearAll(){localStorage.removeItem(Ee),localStorage.removeItem(ve),localStorage.removeItem(we)}}class fe{constructor(){this.isInitialized=!1,this.config=null,this.logger=new p(ye.getDebugMode())}getIsInitialized(){return this.isInitialized}async initialize(t){return new Promise(async(r,i)=>{try{if(this.isInitialized)return this.logger.warn("SDK já foi inicializado"),r();this.logger=new p(ye.getDebugMode()),this.config=e.applyDefaults(t),this.logger.info("Inicializando SDK..."),ye.saveConfig(t),await this.preloadScripts(),this.isInitialized=!0,this.logger.info("SDK inicializado com sucesso!"),r()}catch(e){this.logger.error("Erro ao inicializar SDK:",e),i(e)}})}async setUserId(e,t){return new Promise(async(r,i)=>{if(!this.isInitialized)return this.logger.error("SDK não foi inicializado"),i(new Error("SDK não foi inicializado"));try{this.logger.debug("Definindo userId:",e),ye.saveUserData(e,t),this.logger.info("UserId definido com sucesso"),r()}catch(e){this.logger.error("Erro ao definir userId:",e),i(e)}})}async getUserId(){return new Promise(async(e,t)=>{if(!this.isInitialized)return this.logger.error("SDK não foi inicializado"),t(new Error("SDK não foi inicializado"));try{const t=ye.getUserData();e(t?.userId||"")}catch(e){this.logger.error("Erro ao obter userId:",e),t(e)}})}async getUserData(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{return ye.getUserData()}catch(e){throw this.logger.error("Erro ao obter dados do usuário:",e),e}}async setCustomHeaders(e){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{ye.saveCustomHeaders(e),this.logger.info("Headers customizados definidos com sucesso")}catch(e){throw this.logger.error("Erro ao definir headers customizados:",e),e}}async removeCustomHeaders(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{ye.removeCustomHeaders(),this.logger.info("Headers customizados removidos com sucesso")}catch(e){throw this.logger.error("Erro ao remover headers customizados:",e),e}}async getCustomHeaders(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{return ye.getCustomHeaders()}catch(e){throw this.logger.error("Erro ao obter headers customizados:",e),e}}getConfig(){return this.config}async clearAll(){if(!this.isInitialized)throw this.logger.error("SDK não foi inicializado"),new Error("SDK não foi inicializado");try{ye.clearAll(),this.isInitialized=!1,this.config=null,this.logger.info("Todas as configurações foram limpas")}catch(e){throw this.logger.error("Erro ao limpar configurações:",e),e}}async preloadScripts(){try{window.google&&window.google.ima&&window.google.ima.AdsLoader||await z(),window.googletag||await B()}catch(e){this.logger.warn("Erro ao pré-carregar scripts (não crítico):",e)}}getDebugInfo(){return{isInitialized:this.isInitialized,debugMode:ye.getDebugMode(),config:this.config,userData:ye.getUserData(),customHeaders:ye.getCustomHeaders(),scriptsLoaded:{ima:!!(window.google&&window.google.ima&&window.google.ima.AdsLoader),gpt:!!window.googletag},version:$()}}}class Re{constructor(){this.cachedDeviceInfo=null,this.logger=new p(ye.getDebugMode())}async getDeviceContext(){if(this.cachedDeviceInfo)return this.cachedDeviceInfo;try{const e={},t=ye.getConfig();t?.appId&&(e.appId=t.appId),t?.appVersion&&(e.appVersion=t.appVersion),e.deviceId=this.getDeviceId(),e.sdkVersion=this.getSdkVersion(),e.brand=this.getBrowserBrand(),e.hardware=this.getHardwareInfo(),e.manufacturer=this.getManufacturer(),e.model=this.getModel(),e.product=this.getProduct(),e.osVersion=this.getOSVersion(),e.os="WEB",e.eventDate=Date.now().toString(),e.userAgent=navigator.userAgent,e.language=navigator.language,e.platform=navigator.platform,e.screenWidth=screen.width.toString(),e.screenHeight=screen.height.toString(),e.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone;const[r,i]=await Promise.allSettled([this.getLocation(),this.getAdId()]);return"fulfilled"===r.status&&r.value&&(e.lat=r.value.latitude.toString(),e.long=r.value.longitude.toString()),"fulfilled"===i.status&&i.value&&(e.adId=i.value),this.cachedDeviceInfo=e,e}catch(e){return this.logger.error("Error getting device context:",e),this.getFallbackContext()}}getSdkVersion(){return q()}clearCache(){this.cachedDeviceInfo=null}getBrowserInfo(){return{userAgent:navigator.userAgent,language:navigator.language,platform:navigator.platform,cookieEnabled:navigator.cookieEnabled.toString(),onLine:navigator.onLine.toString()}}getScreenInfo(){return{screenWidth:screen.width.toString(),screenHeight:screen.height.toString(),screenColorDepth:screen.colorDepth.toString(),screenPixelDepth:screen.pixelDepth.toString(),availWidth:screen.availWidth.toString(),availHeight:screen.availHeight.toString()}}getFallbackContext(){return{deviceId:"unknown",sdkVersion:this.getSdkVersion(),os:"WEB",eventDate:Date.now().toString()}}getDeviceId(){const e="akross_device_id";let t=localStorage.getItem(e);return t||(t=this.generateDeviceFingerprint(),localStorage.setItem(e,t)),t}generateDeviceFingerprint(){const e=document.createElement("canvas"),t=e.getContext("2d");t&&(t.textBaseline="top",t.font="14px Arial",t.fillText("Akross Device ID",2,2));const r=[navigator.userAgent,navigator.language,screen.width+"x"+screen.height,(new Date).getTimezoneOffset(),e.toDataURL()].join("|");return btoa(r).substring(0,16)}getBrowserBrand(){const e=navigator.userAgent;return e.includes("Chrome")?"Google":e.includes("Firefox")?"Mozilla":e.includes("Safari")?"Apple":e.includes("Edge")?"Microsoft":"Unknown"}getHardwareInfo(){return navigator.hardwareConcurrency?`CPU Cores: ${navigator.hardwareConcurrency}`:"Unknown"}getManufacturer(){const e=navigator.userAgent;return e.includes("Windows")?"Microsoft":e.includes("Mac")?"Apple":e.includes("Linux")?"Linux":"Unknown"}getModel(){const e=navigator.userAgent;return e.includes("Mobile")?"Mobile Device":e.includes("Tablet")?"Tablet":"Desktop"}getProduct(){return navigator.platform||"Unknown"}getOSVersion(){const e=navigator.userAgent.match(/(Windows|Mac|Linux|Android|iOS)\s+([\d.]+)/);return e?e[2]:"Unknown"}async getLocation(){return new Promise(e=>{navigator.geolocation?navigator.permissions?.query({name:"geolocation"}).then(t=>{"granted"===t.state?navigator.geolocation.getCurrentPosition(t=>{e({latitude:t.coords.latitude,longitude:t.coords.longitude})},()=>e(null),{timeout:5e3,enableHighAccuracy:!1}):e(null)}).catch(()=>{e(null)}):e(null)})}async getAdId(){return null}}let Ae=null;class Ie{constructor(e,t,r=!1){this.logger=new p(ye.getDebugMode()),this.eventsHelper=new _}async requestCampaign(e,t=1,r,s){const n=new ge({responseStatus:i.ERROR});if("undefined"==typeof window||!window.AkrossAds)return this.logger.warn("SDK não foi inicializado"),n;{const e=window.AkrossAds.getInstance();if(!e||!e.isInitialized())return this.logger.warn("SDK não foi inicializado"),n}const a=ye.getUserData();if(!a?.userId)return this.logger.error("Erro ao obter campanha: userId está vazio"),n;try{const o=(Ae||(Ae=new Re),Ae),d={...await o.getDeviceContext(),...r},l=new ue({userId:a.userId,context:d}),c=(new w).getArtemisAdsService(30,!1,!0),h=await c.requestCampaign(e,l,t,s);if(h&&h.campaigns&&h.campaigns.length>0){h.campaigns.forEach(e=>{const t=e.mainData.media.filter(e=>!e.viewed).length;e.mainData.media.forEach(r=>{r.campaignId=e.campaignUuid,r.campaignName=e.campaignName,r.requestId=h.requestId,r.zoneId=h.zone.uuid,r.success=e.mainData.success,r.mediasLeft=t,r.layout=e.mainData.layout})});const e=new he({...h,campaigns:h.campaigns});n.campaignResponse=e,n.responseStatus=i.SUCCESS}else n.responseStatus=i.EMPTY}catch(e){n.error=e instanceof Error?e:new Error("Erro desconhecido"),n.responseStatus=i.ERROR,this.logger.error("Erro ao obter campanha:",e)}return n}async bannerClick(e,t,r,i){try{const s=ye.getUserData();if(!s?.userId)return void this.logger.error("Erro ao abrir URL: userId está vazio");const n=new URL(e);n.searchParams.has("userId")||n.searchParams.set("userId",s.userId),n.searchParams.has("campaignId")||n.searchParams.set("campaignId",t);const a=(new w).getArtemisAdsService(30,!1,!0);await a.sendTracking("click",t,s.userId,r,i,"banner"),window.open(n.toString(),"_blank")}catch(e){this.logger.error("Erro ao abrir URL:",e)}}async sendEvent(e,t,r,i,s){return new Promise(async(n,a)=>{try{if("undefined"==typeof window||!window.AkrossAds)return this.logger.error("SDK não foi inicializado"),a(new Error("SDK não foi inicializado"));{const e=window.AkrossAds.getInstance();if(!e||!e.isInitialized())return this.logger.error("SDK não foi inicializado"),a(new Error("SDK não foi inicializado"))}const o=ye.getUserData();if(!o?.userId)return this.logger.error("UserId não encontrado"),a(new Error("UserId não encontrado"));this.logger.debug("Enviando evento:",{event:e,campaignId:t,trackingId:r,mediaId:i,source:s}),await this.eventsHelper.sendEvent(e,t,r,i,s),this.logger.info("Evento enviado com sucesso"),n()}catch(e){this.logger.error("Erro ao enviar evento:",e),a(e)}})}async sendCampaignsImpressionEvent(e,t){return new Promise(async(r,i)=>{try{if("undefined"==typeof window||!window.AkrossAds)return this.logger.error("SDK não foi inicializado"),i(new Error("SDK não foi inicializado"));{const e=window.AkrossAds.getInstance();if(!e||!e.isInitialized())return this.logger.error("SDK não foi inicializado"),i(new Error("SDK não foi inicializado"))}const s=ye.getUserData();if(!s?.userId)return this.logger.error("UserId não encontrado"),i(new Error("UserId não encontrado"));this.logger.debug("Enviando evento de impressão para campanhas:",{trackingId:e,campaignsCount:t.length}),await this.eventsHelper.sendCampaignsImpressionEvent(e,t),this.logger.info("Eventos de impressão enviados com sucesso"),r()}catch(e){this.logger.error("Erro ao enviar eventos de impressão:",e),i(e)}})}static getSdkVersion(){return q()}}class be{constructor(e){if(this.logger=new p(ye.getDebugMode()),"string"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Elemento não encontrado: ${e}`);this.containerElement=t}else this.containerElement=e;this.imageElement=document.createElement("img"),this.imageElement.style.display="block",this.containerElement.innerHTML=""}setClickListener(e){this.clickListener=e}setSuccessListener(e){this.successListener=e}setErrorListener(e){this.errorListener=e}async loadZone(e,t){try{const r=ye.getUserData();if(!r?.userId)return this.logger.error("Erro ao carregar banner: userId está vazio"),void this.errorListener?.onError();const i=new Ie,n=await i.requestCampaign(e,1,void 0,t);if(!n.campaignResponse?.campaigns?.length)return this.logger.error("Nenhuma campanha encontrada para a zona:",e),void this.errorListener?.onError();const a=n.campaignResponse.campaigns[0].mainData.media[0];if(a.type!==s.BANNER)return this.logger.error("Tipo de mídia não suportado para banner:",a.type),void this.errorListener?.onError();this.containerElement.appendChild(this.imageElement),await this.loadBanner(a)}catch(e){this.logger.error("Erro ao carregar banner:",e),this.errorListener?.onError()}}async loadBanner(e){try{if(!e.content?.url)return this.logger.error("Erro ao carregar banner: URL da imagem não encontrada"),void this.errorListener?.onError();this.containerElement.appendChild(this.imageElement),await this.loadImage(e.content.url,e)}catch(e){this.logger.error("Erro ao carregar banner:",e),this.errorListener?.onError()}}async loadImage(e,t){try{const r=ye.getUserData();if(!r?.userId)return this.logger.error("Erro ao carregar banner: userId não encontrado nas preferences"),this.removeImageFromDOM(),void this.errorListener?.onError();const i=r.userId,s=await fetch(e,{method:"GET",mode:"cors",cache:"default"});if(!s.ok)return this.logger.error(`Erro ao carregar imagem: ${s.status} ${s.statusText}`),this.removeImageFromDOM(),void this.errorListener?.onError();const n=await s.blob(),a=URL.createObjectURL(n);this.imageElement.src=a,this.imageElement.alt=t.title||"Banner",this.imageElement.onload=()=>{this.applyOptimizedFit()},this.imageElement.onerror=()=>{this.logger.error("Erro ao carregar imagem: falha no carregamento da imagem"),this.removeImageFromDOM(),this.errorListener?.onError()};(new _).sendImpressedEvent(t.campaignId,t.requestId,t.uuid),this.successListener?.onSuccess(t.analytics?.impression),this.setupClickHandler(t,i)}catch(e){this.logger.error("Erro ao carregar imagem:",e),this.removeImageFromDOM(),this.errorListener?.onError()}}removeImageFromDOM(){try{this.imageElement&&this.imageElement.parentNode&&this.imageElement.parentNode.removeChild(this.imageElement)}catch(e){this.logger.error("Erro ao remover imagem do DOM:",e)}}applyOptimizedFit(){try{this.containerElement.style.display="flex",this.containerElement.style.alignItems="center",this.containerElement.style.justifyContent="center",this.imageElement.style.maxWidth="100%",this.imageElement.style.maxHeight="100%",this.imageElement.style.objectFit="contain",this.imageElement.style.objectPosition="center",this.logger.debug("Fit simples aplicado com flexbox")}catch(e){this.logger.error("Erro ao aplicar fit simples:",e),this.imageElement.style.width="100%",this.imageElement.style.height="auto",this.imageElement.style.objectFit="contain"}}setupClickHandler(e,t){const r=e.externalUrl?.url||e.success?.url;r&&(this.imageElement.style.cursor="pointer",this.imageElement.addEventListener("click",()=>{this.clickListener?.onClick(e.analytics?.click),this.executeBannerClick(r,e,t)}))}async executeBannerClick(e,t,r){try{const r=t.campaignId||t.campaignUuid;if(!r)return void this.logger.error("Erro ao executar clique: campaignId não encontrado na mídia");(new _).sendAdClickEvent(r,t.requestId,t.uuid),window.open(e,"_blank","noopener,noreferrer")}catch(e){this.logger.error("Erro ao executar clique do banner:",e)}}destroy(){this.campaignCall&&(this.campaignCall=void 0),this.imageElement.removeEventListener("click",()=>{}),this.containerElement&&(this.containerElement.innerHTML="")}}class Se{constructor(e){this.config={timeout:1e4,debug:!1,...e},this.logger=new p(this.config.debug),this.sdkManager=new fe,this.adsManager=new Ie(this.config.appId,this.config.appVersion,this.config.debug),ye.setDebugMode(this.config.debug||!1),this.logger.debug("Debug mode salvo via PreferencesUtil:",this.config.debug||!1),this.logger.info("SDK Akross Artemis Ads criado"),this.logger.debug("Configuração:",this.config)}async initialize(){return this.sdkManager.initialize(this.config)}isInitialized(){return this.sdkManager.getIsInitialized()}async setUserId(e,t){return this.sdkManager.setUserId(e,t)}async getUserId(){return this.sdkManager.getUserId()}async getUserData(){return this.sdkManager.getUserData()}async setCustomHeaders(e){return this.sdkManager.setCustomHeaders(e)}async removeCustomHeaders(){return this.sdkManager.removeCustomHeaders()}async getCustomHeaders(){return this.sdkManager.getCustomHeaders()}getConfig(){return this.sdkManager.getConfig()}async clearAll(){return this.sdkManager.clearAll()}getDebugInfo(){return this.sdkManager.getDebugInfo()}getVersion(){return q()}getVersionInfo(){return $()}async sendEvent(e,t,r,i,s){return this.adsManager.sendEvent(e,t,r,i,s)}async sendCampaignsImpressionEvent(e,t){return this.adsManager.sendCampaignsImpressionEvent(e,t)}async requestCampaign(e,t,r,i){return this.logger.debug("Solicitando campanhas para zona:",e),this.adsManager.requestCampaign(e,t||1,r,i)}async bannerClick(e,t,r,i){return this.logger.debug("Processando clique em banner:",{campaignId:t,mediaId:i}),this.adsManager.bannerClick(e,t,r,i)}}let Ce=null;async function De(e){return Ce||(Ce=new Se(e),await Ce.initialize(),Ce)}function Me(){return Ce}function Le(){Ce&&(Ce.clearAll(),Ce=null,"undefined"!=typeof window&&delete window.AkrossAds)}"undefined"!=typeof window&&(window.AkrossAds={init:De,getInstance:Me,destroy:Le,SDK:Se,AAManager:fe,AdsManager:Ie,VERSION:j,VERSION_INFO:Y,getVersion:q,getVersionInfo:$,AAMedia:ae,AACampaign:le,AACampaignResponse:he,AACampaignResult:ge,AAZone:ce,AAMainData:oe,AAContent:h,AASuccess:g,AABenefitOffer:de,AAAdWatchResult:u,AAVastPlayer:J,AARewardedVideoHandler:se,AAEventsCallbackHelper:_,AARvEventsCallbackHelper:V,AAMediaResultHelper:H,PreferencesUtil:ye,GlobalLoadingOverlay:G,ArtemisAdsBannerLoader:be});export{u as AAAdWatchResult,de as AABenefitOffer,le as AACampaign,r as AACampaignConfig,ue as AACampaignRequest,he as AACampaignResponse,i as AACampaignResponseStatus,ge as AACampaignResult,h as AAContent,o as AAError,_ as AAEventsCallbackHelper,me as AAHeader,pe as AALayout,oe as AAMainData,fe as AAManager,ae as AAMedia,n as AAMediaPlayResult,H as AAMediaResultHelper,s as AAMediaTypes,l as AAProgrammatic,se as AARewardedVideo,V as AARvEventsCallbackHelper,g as AASuccess,c as AASurveyV2,J as AAVastPlayer,U as AAVastTrackingEvents,ce as AAZone,Ie as AdsManager,Se as AkrossAdsSDK,be as ArtemisAdsBannerLoader,f as CLICK_EVENT,e as ConfigUtils,M as ERROR_EVENT,m as ERROR_MESSAGES,re as GAMRewardedVideoWrapper,y as IMPRESSION_EVENT,p as Logger,C as NO_FILL_EVENT,S as PROGRAMMATIC_ERROR,b as PROGRAMMATIC_FALLBACK_REQ,D as PROGRAMMATIC_SKIPPED,I as PROG_CONN_ERROR_EVENT,ye as PreferencesUtil,Z as StepResult,t as UserDataCache,j as VERSION,Y as VERSION_INFO,R as VPAID_COMPLETE_EVENT,k as VPAID_FIRST_QUARTILE_EVENT,O as VPAID_MIDPOINT_EVENT,P as VPAID_SKIPPED_EVENT,L as VPAID_START_EVENT,T as VPAID_THIRD_QUARTILE_EVENT,A as WATERFALL_START_EVENT,ee as WaterfallResultHelper,x as createAAEventsCallbackHelper,W as createAAMediaResultHelper,ne as createAARewardedVideoHandler,N as createAARvEventsCallbackHelper,X as createAAVastPlayer,ie as createGAMRewardedVideoWrapper,te as createWaterfallResultHelper,Le as destroy,Me as getInstance,q as getVersion,$ as getVersionInfo,De as init,a as isMediaTypeSupported,B as loadGPTScript,z as loadIMAScript};
|