@givefreely/adunit 1.9.2-dev.0 → 1.9.3-dev.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/GiveFreely-background.cjs.js +2 -1
- package/GiveFreely-background.cjs.js.map +1 -0
- package/GiveFreely-background.esm.js +2 -1
- package/GiveFreely-background.esm.js.map +1 -0
- package/GiveFreely-content.cjs.js +2 -1
- package/GiveFreely-content.cjs.js.map +1 -0
- package/GiveFreely-content.esm.js +2 -1
- package/GiveFreely-content.esm.js.map +1 -0
- package/package.json +1 -1
- package/types/GiveFreely-types.d.ts +3 -3
|
@@ -1 +1,2 @@
|
|
|
1
|
-
"use strict";class e{constructor(){this.isLocal=!0}log({level:t,message:r,timestamp:i,data:s,title:a}){const n="debug"===t?"log":t,o=a?`[${a}]`:"";void 0!==s?console[n](`[${i}] - ${e.LOGGER_PREFIX} ${o} ${r}`,s):console[n](`[${i}] - ${e.LOGGER_PREFIX} ${o} ${r}`)}}var t,r;e.LOGGER_PREFIX="[GFAdUnit] -",function(e){e.checkoutPopupShown="CHECKOUT-POPUP-SHOWN",e.checkoutPopupNotShown="CHECKOUT-POPUP-NOT-SHOWN",e.checkoutPopupSupressed="CHECKOUT-POPUP-SUPRESSED",e.checkoutPopupDonation="CHECKOUT-POPUP-DONATION",e.checkoutPopupFailedActivation="CHECKOUT-POPUP-FAILED-ACTIVATION",e.checkoutPopupPurchaseConfirmed="CHECKOUT-POPUP-PURCHASE-CONFIRMED",e.checkoutPopupHealthCheck="CHECKOUT-POPUP-HEALTH-CHECK",e.checkouPopupActivationFailed="CHECKOUT-POPUP-ACTIVATION-FAILED",e.checkoutPopupOfferDetailsClicked="CHECKOUT-POPUP-OFFER-DETAILS-CLICKED",e.checkoutPopupWhyAmISeeingThisClicked="CHECKOUT-POPUP-WHY-AM-I-SEEING-THIS-CLICKED",e.checkoutPopupLooserExtension="CHECKOUT-POPUP-LOOSER-EXTENSION",e.checkoutPopupActiveDomain="CHECKOUT-POPUP-ACTIVE-DOMAIN",e.checkoutPopupSiteMatches="CHECKOUT-POPUP-SITE-MATCHES"}(t||(t={})),function(e){e.adUnitLog="ADUNIT-LOG"}(r||(r={}));class i{constructor(e){this.isLocal=!1,this.gfService=e}log({level:e,message:t,data:i,title:s}){this.gfService.trackEvent(r.adUnitLog,{log:{level:e,message:t,data:i,title:s}})}}const s=["debug","info","warn","error"];class a{constructor(t){this.config={minLevel:t?.minLevel??"debug",enabled:t?.enabled??!1,transports:t?.transports??[new e],title:t?.title??""}}static getInstance(e){return a.instance||(a.instance=new a(e)),a.instance}configure(e){this.config={...this.config,...e}}shouldLog(e){return!!this.config.enabled&&s.indexOf(e)>=s.indexOf(this.config.minLevel)}createLogMessage(e,t,r){return{level:e,version:"1.9.1",message:t,timestamp:(new Date).toISOString(),data:r,title:this.config.title}}log(e,t,r,i){if(!this.shouldLog(e))return;const s=this.createLogMessage(e,t,i);this.config.transports.filter((e=>!r||e.isLocal)).forEach((e=>e.log(s)))}debug(e,t,r=!1){this.log("debug",e,r,t)}info(e,t,r=!1){this.log("info",e,r,t)}warn(e,t,r=!1){this.log("warn",e,r,t)}error(e,t,r=!1){this.log("error",e,r,t)}addTransport(e){this.config.transports.push(e)}clearTransports(){this.config.transports=[]}disable(){this.config.enabled=!1}enable(){this.config.enabled=!0}}const n=3,o=e=>1e3*e;async function c(e,t={},r){const{maxAttempts:i=n,delayFn:s=o}=t;let a=null;for(let t=1;t<=i;t+=1)try{return await e()}catch(e){a=e,t<i&&await new Promise((e=>{setTimeout(e,s(t))}))}if(a&&t.logger&&t.operationName&&t.logger.error(`Operation ${t.operationName} failed after ${i} attempts.`,a),void 0!==r)return r;throw a||new Error("Operation failed after multiple attempts")}const g=chrome;function l(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var h={exports:{}};"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self&&self,function(e){if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");if(globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id)e.exports=globalThis.browser;else{const t="The message port closed before a response was received.",r=e=>{const r={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(r).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class i extends WeakMap{constructor(e,t=void 0){super(t),this.createItem=e}get(e){return this.has(e)||this.set(e,this.createItem(e)),super.get(e)}}const s=(t,r)=>(...i)=>{e.runtime.lastError?t.reject(new Error(e.runtime.lastError.message)):r.singleCallbackArg||i.length<=1&&!1!==r.singleCallbackArg?t.resolve(i[0]):t.resolve(i)},a=e=>1==e?"argument":"arguments",n=(e,t,r)=>new Proxy(t,{apply:(t,i,s)=>r.call(i,e,...s)});let o=Function.call.bind(Object.prototype.hasOwnProperty);const c=(e,t={},r={})=>{let i=Object.create(null),g={has:(t,r)=>r in e||r in i,get(g,l,h){if(l in i)return i[l];if(!(l in e))return;let d=e[l];if("function"==typeof d)if("function"==typeof t[l])d=n(e,e[l],t[l]);else if(o(r,l)){let t=((e,t)=>function(r,...i){if(i.length<t.minArgs)throw new Error(`Expected at least ${t.minArgs} ${a(t.minArgs)} for ${e}(), got ${i.length}`);if(i.length>t.maxArgs)throw new Error(`Expected at most ${t.maxArgs} ${a(t.maxArgs)} for ${e}(), got ${i.length}`);return new Promise(((a,n)=>{if(t.fallbackToNoCallback)try{r[e](...i,s({resolve:a,reject:n},t))}catch(s){console.warn(`${e} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,s),r[e](...i),t.fallbackToNoCallback=!1,t.noCallback=!0,a()}else t.noCallback?(r[e](...i),a()):r[e](...i,s({resolve:a,reject:n},t))}))})(l,r[l]);d=n(e,e[l],t)}else d=d.bind(e);else if("object"==typeof d&&null!==d&&(o(t,l)||o(r,l)))d=c(d,t[l],r[l]);else{if(!o(r,"*"))return Object.defineProperty(i,l,{configurable:!0,enumerable:!0,get:()=>e[l],set(t){e[l]=t}}),d;d=c(d,t[l],r["*"])}return i[l]=d,d},set:(t,r,s,a)=>(r in i?i[r]=s:e[r]=s,!0),defineProperty:(e,t,r)=>Reflect.defineProperty(i,t,r),deleteProperty:(e,t)=>Reflect.deleteProperty(i,t)},l=Object.create(e);return new Proxy(l,g)},g=e=>({addListener(t,r,...i){t.addListener(e.get(r),...i)},hasListener:(t,r)=>t.hasListener(e.get(r)),removeListener(t,r){t.removeListener(e.get(r))}}),l=new i((e=>"function"!=typeof e?e:function(t){const r=c(t,{},{getContent:{minArgs:0,maxArgs:0}});e(r)})),h=new i((e=>"function"!=typeof e?e:function(t,r,i){let s,a,n=!1,o=new Promise((e=>{s=function(t){n=!0,e(t)}}));try{a=e(t,r,s)}catch(e){a=Promise.reject(e)}const c=!0!==a&&((g=a)&&"object"==typeof g&&"function"==typeof g.then);var g;if(!0!==a&&!c&&!n)return!1;return(c?a:o).then((e=>{i(e)}),(e=>{let t;t=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",i({__mozWebExtensionPolyfillReject__:!0,message:t})})).catch((e=>{console.error("Failed to send onMessage rejected reply",e)})),!0})),d=({reject:r,resolve:i},s)=>{e.runtime.lastError?e.runtime.lastError.message===t?i():r(new Error(e.runtime.lastError.message)):s&&s.__mozWebExtensionPolyfillReject__?r(new Error(s.message)):i(s)},m=(e,t,r,...i)=>{if(i.length<t.minArgs)throw new Error(`Expected at least ${t.minArgs} ${a(t.minArgs)} for ${e}(), got ${i.length}`);if(i.length>t.maxArgs)throw new Error(`Expected at most ${t.maxArgs} ${a(t.maxArgs)} for ${e}(), got ${i.length}`);return new Promise(((e,t)=>{const s=d.bind(null,{resolve:e,reject:t});i.push(s),r.sendMessage(...i)}))},u={devtools:{network:{onRequestFinished:g(l)}},runtime:{onMessage:g(h),onMessageExternal:g(h),sendMessage:m.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:m.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},f={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return r.privacy={network:{"*":f},services:{"*":f},websites:{"*":f}},c(e,u,r)};e.exports=r(chrome)}}(h);var d=l(h.exports);class m{constructor(e,t,r,i,s){this.wfSecret=e,this.wfAppId=t,this.deviceUrl=r,this.dataUrl=i,this._logger=s}async getWildfireDevice(){try{const e=await fetch(this.deviceUrl,{method:"POST",body:JSON.stringify({}),headers:{"Content-Type":"application/json","WF-Secret":this.wfSecret,"WF-App-ID":this.wfAppId}});if(e.ok)return e.json();throw new Error(`Failed to fetch Wildfire device from ${this.deviceUrl}. Status ${e.status}. ${e.statusText}`)}catch(e){throw this._logger.error("Failed to fetch the Wildfire device",{err:e}),e}}async getActiveDomains(){try{const e=`${this.dataUrl}/${this.wfAppId}/active-domain/1`,t=await fetch(e);if(t.ok)return t.json();throw new Error(`Failed to fetch active domains from ${e}. Status ${t.status}. ${t.statusText}`)}catch(e){throw this._logger.error("Failed to fetch the active domains",{err:e}),e}}async getStanddownPolicy(){const e=`${this.dataUrl}/${this.wfAppId}/stand-down-policy/1`;try{const t=await fetch(e);if(t.ok)return t.json();throw new Error(`Failed to fetch standdown policy from ${e}. Status ${t.status} ${t.statusText}`)}catch(t){throw this._logger.error("Failed to fetch the standdown policy",{err:t,url:e}),t}}async getMerchantRates(){const e=`${this.dataUrl}/${this.wfAppId}/merchant-rate/1`;try{const t=await fetch(e);if(this._logger.debug("Merchant rates response",{response:t}),!t.ok)throw new Error(`Failed to fetch merchant rates from ${e}. Status ${t.status}. ${t.statusText}`);const r=t.json();return this._logger.debug("Merchant rates",{rates:r}),r}catch(t){throw this._logger.error("Failed to fetch the merchant rates",{err:t,url:e}),t}}}const u="GIVE_FREELY_",f={async get(e){const t=`${u}${e}`;return(await d.storage.local.get(t))[t]||null},async set(e,t){const r=`${u}${e}`;await d.storage.local.set({[r]:t})},async remove(e){const t=Array.isArray(e)?e.map((e=>`${u}${e}`)):`${u}${e}`;await d.storage.local.remove(t)}},A="wfDevice",p="wfDomains",y="wfStanddownPolicy",w="wfStanddownHistory",v="wfMerchantRates";async function x(e,t,r){try{const i=(await b())?.[t];if(i&&i>Date.now())return e.info("Standing down because current affiliate stand down session has not expired"),S(t),!0;await this.refreshCache();const s=await this.getStanddownPolicy();if(I(s,new URL(r).search))return e.info("Standing down because url has affiliate params"),S(t),!0;e.info("No need to stand down.")}catch(t){e.error("Exception produced when trying to determine if it should stand down",t)}return!1}function E(e,t){if(!this.standDownPolicy)return this.logger.warn("Couldnt check affilliation. No stand down policy found"),this.getStanddownPolicy().then((e=>{this.standDownPolicy=e})),!1;const r=e.some((e=>C(this.standDownPolicy,e)))||I(this.standDownPolicy,t);return this.logger.info("Affilliation result:",r),r}const b=async()=>f.get(w),S=async(e,t=1)=>{const r=await b()??{};r[e]=Date.now()+60*t*60*1e3,await f.set(w,r)},C=(e,t)=>{if(!t)return!1;const{Domains:r}=e;return r.some((e=>t.includes(e)))},I=(e,t)=>{if(!t)return!1;const{Params:r}=e;return r.some((e=>t.toLowerCase().includes(`?${e.toLowerCase()}`)))||r.some((e=>t.toLowerCase().includes(`&${e.toLowerCase()}`)))};class T{constructor(e,t,r,i){this.userId=e,this.charityEin=t,this.charityThirdPartyIdentifier=r,this.partnerId=i}toString(){return`userId=${this.encodeUserId(this.userId)},charityEin=${this.charityEin},charityThirdPartyIdentifier=${this.charityThirdPartyIdentifier},partnerId=${this.partnerId}`}encodeUserId(e){return btoa(e).replace(/_/g,"/").replace(/-/g,"+")}}const P="TRACK_EVENT",U="GF_HIDE_POPUP",O="GF_GET_POPUP_CONFIG",k="GF_IS_ACTIVE_DOMAIN",D="GF_SHOULD_STAND_DOWN",_="GF_ACTIVATE_OFFER",F="GF_STORE_SHOPIFY_SHOP_ID",R="GF_GET_DOMAIN_BY_SHOP_ID",$="GF_GET_LANGUAGE_CONTENT",L="shopify_shop_ids",N="gf_last_health_check",G="en",M={async get(e,t,r,i=!1){let s=await f.get(e);const a=s;let n=!1;if(s&&Date.now()<=s.expiration&&!i)return{content:s.content,isStale:n};try{const i=await t();s=await this.set(e,i,r)}catch(e){n=!0}return{content:s?.content??a?.content,isStale:n}},async set(e,t,r){const i={content:t,expiration:Date.now()+1e3*(r??300)};return await f.set(e,i),i},async refresh(e,t,r,i=!1){const s=await this.get(e,t,r,i);if(s.isStale||i)try{const i=await t();if(!i)return{content:s.content,isStale:!0};s.content=i,await this.set(e,s.content,r)}catch(e){return{content:s.content,isStale:!0}}return{content:s.content,isStale:!1}},async clear(e){await f.remove(e)}};class K{constructor(e,t,r,i=21600){if(this.standDownPolicy=null,this.shouldStandDown=x.bind(this),this.hasAffilliation=E.bind(this),!e||!r)throw new Error("WildfireService requires wildfireClient and vanityBaseUrl");this.wildfireClient=e,this.vanityBaseUrl=r.replace(/\/$/,""),this.refreshInterval=i,this.logger=t}async getActiveDomains(e=!1){try{const t=(await M.get(p,(async()=>this.fetchActiveDomains()),this.refreshInterval,e)).content;if(!t)throw Error("Failed to retrieve active domains");return t}catch(e){throw this.logger.error("Failed to get active domains:",e),new Error("Failed to retrieve active domains")}}async getMerchantRates(e,t=!1){try{const r=await M.get(v,(async()=>this.fetchMerchantRates()),this.refreshInterval,t);if(!r.content)throw new Error("Failed to retrieve merchant rates from cache");return r.content[e]}catch(e){throw this.logger.error("Failed to retrieve merchant rates:",e),new Error("Failed to retrieve merchant rates")}}async generateAffiliateUrl(e,t,r,i){if(!e||!t||!i)throw new Error("Missing required parameters for affiliate URL generation");try{const s=await this.getDevice(),a=await this.generateTrackingCode(r,i,s),n=encodeURIComponent(t),o=encodeURIComponent(a);return`${this.vanityBaseUrl}/e?d=${s.DeviceID}&c=${e.ID}&tc=${o}&url=${n}`}catch(e){throw this.logger.error("Failed to generate affiliate URL:",e),new Error("Failed to generate affiliate URL")}}async clearCache(){try{await Promise.all([M.clear(p),M.clear(y),M.clear(v)])}catch(e){throw this.logger.error("Failed to clear cache:",e),new Error("Failed to clear cache")}}async refreshCache(e=!1){try{const[,t]=await Promise.all([M.refresh(p,(()=>this.fetchActiveDomains()),this.refreshInterval,e),M.refresh(y,(()=>this.fetchStanddownPolicy()),this.refreshInterval,e),M.refresh(v,(()=>this.fetchMerchantRates()),this.refreshInterval,e)]);t?.content&&(this.standDownPolicy=t.content)}catch(e){throw this.logger.error("Failed to refresh cache:",e),new Error("Failed to refresh cache")}}async getStanddownPolicy(){try{const e=await M.get(y,(async()=>this.fetchStanddownPolicy()),this.refreshInterval);if(!e.content)throw new Error("Failed to retrieve standdown policy from cache");return this.logger.info("Retrieved standdown policy from cache",e.content),this.standDownPolicy=e.content,this.standDownPolicy}catch(e){throw this.logger.error("Failed to get standdown policy from cache:",e),new Error("Failed to retrieve standdown policy")}}getRetryOptions(e){return{delayFn:e=>1e3*e,maxAttempts:3,logger:this.logger,operationName:e}}async getDevice(){try{const e=await f.get(A);return e?.DeviceID?e:c((()=>this.fetchAndStoreDevice()),this.getRetryOptions("Get Device"))}catch(e){throw this.logger.error("Failed to get device:",e),new Error("Failed to retrieve device information")}}async fetchAndStoreDevice(){const e=await this.wildfireClient.getWildfireDevice();if(!e?.DeviceID)throw new Error("Failed to retrieve device information");return await f.set(A,e),e}async generateTrackingCode(e,t,r){if(!(e?.id&&e?.charity&&e?.charity.ein&&e?.charity.thirdPartyId)){const e=`notregistered-${r.DeviceID}`;return this.logger.info("User not provided. Using GF's default bucket instead.",e),e}return new T(e.id,e.charity.ein,e.charity.thirdPartyId,t).toString()}async fetchActiveDomains(){const e=await c((()=>this.wildfireClient.getActiveDomains()),this.getRetryOptions("Fetch Active Domains"));return this.logger.info("Updated active domains"),e}async fetchStanddownPolicy(){const e=await c((()=>this.wildfireClient.getStanddownPolicy()),this.getRetryOptions("Get Standdown policy"),{Domains:[],LostAttribution:[],Params:[],Serp:[]});return this.logger.info("Updated standdown policy"),e}async fetchMerchantRates(){const e=await c((()=>this.wildfireClient.getMerchantRates()),this.getRetryOptions("Fetch Merchant Rates"),{});return this.logger.debug("Updated Merchant rates"),e}}const H="version",z=()=>String("1.9.1"),j=async(e=!0)=>{const t=await f.get(H),r=await z(),i=t!==r;var s;return e&&i&&await(s=r,f.set(H,s)),i},W="https://cdn.givefreely.com/adunit/behavioral/";class Y{constructor(e){this.partnerApiKey=e,this.partnerConfig=null,this.globalConfig=null,this.PARTNER_CONFIG_STORAGE_KEY="gf_partner_config",this.GLOBAL_CONFIG_STORAGE_KEY="gf_global_config",this.globalConfigRefreshInterval=60,this.partnerConfigRefreshInterval=60}getRetryOptions(){return{delayFn:e=>1e3*e,maxAttempts:3}}async fetchPartnerConfig(){const e=await c((async()=>{const e=await fetch(`${W}${this.partnerApiKey}.json`,{cache:"no-store"});if(!e.ok)throw new Error(`Failed to fetch partner config: ${e.statusText}`);return e.json()}),this.getRetryOptions());if(!e)throw new Error("Failed to fetch or get from cache partner config");return this.partnerConfigRefreshInterval=e.configRefreshInterval||this.partnerConfigRefreshInterval,e}async fetchGlobalConfig(){const e=await c((async()=>{const e=await fetch(`${W}global.json`,{cache:"no-store"});if(!e.ok)throw new Error(`Failed to fetch global config => Status code: ${e.status} .${e.statusText}`);return e.json()}),this.getRetryOptions());if(!e)throw new Error("Failed to fetch or get from cache global config",e);return this.globalConfigRefreshInterval=e.configRefreshInterval||this.globalConfigRefreshInterval,e}async getConfig(e=!1){let t=!1;e&&(t=await j());const[r,i]=await Promise.all([await M.get(this.PARTNER_CONFIG_STORAGE_KEY,this.fetchPartnerConfig.bind(this),this.partnerConfigRefreshInterval,t),await M.get(this.GLOBAL_CONFIG_STORAGE_KEY,this.fetchGlobalConfig.bind(this),this.globalConfigRefreshInterval,t)]);if(!i.content)throw new Error("Global config is required");if(!r.content)throw new Error("Partner config is required");this.partnerConfig=r.content,this.globalConfig=i.content;const s=this.mergeConfigs(JSON.parse(JSON.stringify(this.globalConfig)),JSON.parse(JSON.stringify(this.partnerConfig)));if(!s)throw new Error("Was not able to merge configs");return((e,t,r)=>{const i=[...t.merchantExclusions??[],...r.merchantExclusions??[]];e.merchantExclusions=i})(s,this.globalConfig,this.partnerConfig),s}async clearCache(){await Promise.all([M.clear(this.PARTNER_CONFIG_STORAGE_KEY),M.clear(this.GLOBAL_CONFIG_STORAGE_KEY)]),this.partnerConfig=null,this.globalConfig=null}mergeConfigs(e,t){if(!t)return e;if(!e)return t;const r={...e};return Object.keys(t).forEach((i=>{if(!Object.prototype.hasOwnProperty.call(t,i))return;const s=e[i],a=t[i];void 0!==a&&(Array.isArray(a)?r[i]=[...a]:r[i]=null===a||"object"!=typeof a||null===s||"object"!=typeof s?a:this.mergeConfigs(s,a))})),r}}class B{static register(e,t){this.strategies.set(e,t)}static get(e){return this.strategies.get(e)}static exists(e){return!!function(e){return"object"==typeof e&&null!==e&&"type"in e&&"payload"in e&&"string"==typeof e.type}(e)&&this.strategies.has(e.type)}}B.strategies=new Map;class q{async handle(e,t){const{hostname:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger(),a=await i.getConfig().merchantExclusions,n=await i.getActiveDomains();s.debug("Checking hostname",{hostname:r});try{if(i.healthCheck(),a.some((e=>e.disableDomain&&(r===e.domain||r.endsWith(`.${e.domain}`)))))return s.debug("Hostname is in merchant exclusions",{hostname:r}),{type:k,payload:{isActive:!1,domain:void 0,rates:[]}};if(!n||0===n.length)throw new Error("No active domains");s.debug("Retrieved active domains",{count:n.length});const e=n.find((e=>r===e.Domain||r.endsWith(`.${e.Domain}`)));s.debug("Domain check result",{hostname:r,isActive:!!e});let t=[];if(e?.ID){const r=await i.getMerchantRates(e.Merchant.ID);r&&(s.debug("Retrieved merchant rates",{merchantRates:r}),t=r)}return{type:k,payload:{isActive:!!e,domain:e,rates:t}}}catch(e){return s.error("Error checking domain",{hostname:r,error:e}),{type:k,payload:{isActive:!1,domain:void 0,rates:[]}}}}}class V{async handle(e,t){const{giveFreelyService:r}=t,i=r.getLogger(),s=await r.getCachedConfig();try{return i.debug("Fetching popup config"),{type:O,payload:{config:s}}}catch(e){return i.error("Error fetching popup config",{error:e}),{type:O,payload:{config:null}}}}}class X{async handle(e,t){const{days:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger();try{const e=new Date;return e.setDate(e.getDate()+r),await f.set("popup_hide",{popupHide:e.getTime()}),s.debug("Popup hidden",{days:r,expiry:e}),{type:U,payload:{ack:!0}}}catch(e){return s.error("Error hiding popup",{days:r,error:e}),{type:U,payload:{ack:!1}}}}}class J{async handle(e,t){const{activeDomain:r,url:i}=e.payload,{giveFreelyService:s}=t,a=s.getLogger();a.debug("Checking if we should stand down",{activeDomain:r});try{const e=await s.shouldStandDown(r,i);return{type:D,payload:{result:e}}}catch(e){return a.error("Error checking if we should stand down. Returning false",{activeDomain:r,error:e}),{type:D,payload:{result:!1}}}}}class Z{constructor(e,t,r,i=60){this.track=async(e,t,r,i=!1,s=!1)=>{const a={partner:`adUnit_${this._partnerApiKey}`,eventType:e,eventData:{userId:i?void 0:this._userService?.user?.id,libVersion:z(),wfDeviceId:t,...r}};try{const e=JSON.stringify(a,((e,t)=>t instanceof Error?{name:t.name,message:t.message,stack:t.stack}:t)),t=await this.getEventsUrl();if(await this.shouldBroadcastEvent(e,s)){const r=await fetch(t,{headers:{"Content-Type":"application/json"},method:"POST",body:e,cache:"no-store"});return r.ok?(await this.pushEventToHistory(e),!0):(this._logger.error("Something unexpected happened when dispatching an event",{status:r.status,statusText:r.statusText,event:a},!0),!1)}return this._logger.info("This event has already been broadcasted during the past hour",a,!0),!1}catch(e){return this._logger.error("Something unexpected happened when dispatching a gf event",{error:e,event:a}),!1}},this.getEventsHistory=async()=>{const{GF_AD_EVENT_HISTORY:e}=await g.storage.local.get({GF_AD_EVENT_HISTORY:""}),t=(e=>{const t=new Date;return t.setTime(t.getTime()+60*e*1e3),t.getTime()})(-this._debounceWindowInMinutes),r=(e||[]).filter((e=>e.createdAt>t));return await g.storage.local.set({GF_AD_EVENT_HISTORY:r}),r},this.shouldBroadcastEvent=async(e,t)=>!!t||!(await this.getEventsHistory()).some((t=>t.payload===e)),this.pushEventToHistory=async e=>{const t=await this.getEventsHistory();t.push({createdAt:Date.now(),payload:e}),await g.storage.local.set({GF_AD_EVENT_HISTORY:t})},this._partnerApiKey=e,this._userService=t,this._debounceWindowInMinutes=i,this._logger=a.getInstance({title:"Analytics"}),this._configService=r}async getEventsUrl(){const{eventsUrl:e}=await this._configService.getConfig();return e}}Z.trackEvent=async(e,t,r=!1,i=!1)=>{await async function(e){return new Promise(((t,r)=>{try{const i=i=>chrome.runtime.lastError?r({error:chrome.runtime.lastError,message:e}):t(i);g.runtime.sendMessage(e,i)}catch(e){r(e)}}))}({type:P,payload:{eventType:e,eventData:t,anonymous:r,skipThrottling:i}})};class Q{async handle(e,t){const{eventType:r,eventData:i,anonymous:s,skipThrottling:a}=e.payload,{giveFreelyService:n}=t,o=n.getLogger();o.debug("Broadcasting event",{eventType:r,eventData:i,anonymous:s,skipThrottling:a});try{const e=await n.trackEvent(r,i,s,a);return{type:P,payload:{result:e}}}catch(e){return o.error("Error broadcasting event. Returning false",{eventType:r,eventData:i,error:e}),{type:P,payload:{result:!1}}}}}class ee{async handle(e,r){const{activeDomain:i,originalUrl:s,selectedCharity:a}=e.payload,{giveFreelyService:n}=r,o=n.getLogger();o.debug("Activating offer",{activeDomain:i,selectedCharity:a});try{if(!a?.ein||!a?.thirdPartyId)throw new Error("Missing charity information");const e=await n.initializeWfDeviceId();if(!e)throw new Error("Failed to initialize Wildfire device ID");const t=await n.upsertUser(a,e);o.debug("Upserted user",{currentUser:t}),t||o.info("Failed to create user. Using default bucket's user");const r=await n.generateAffiliateUrl(i,s,t);return o.debug("Generated affiliate URL",{affiliateUrl:r}),(async e=>{const t=g.tabs.getCurrent(),r=await t,i=await g.tabs.create({url:e,openerTabId:r?.id,active:!1,pinned:!0});await(async e=>new Promise((t=>{g.tabs.onUpdated.addListener((async function r(i,s){if(i===e&&"complete"===s.status){if(g.tabs.onUpdated.removeListener(r),!(await g.tabs.get(e)).url)return void t(!1);t(!0)}}))})))(i.id)&&setTimeout((()=>{i?.id&&g.tabs.remove(i.id)}),3e4)})(r),await n.updateStanddownHistory(i.Domain),o.debug("Activated offer",{activeDomain:i,selectedCharity:a}),{type:_,payload:{response:!0}}}catch(e){return o.error("Error activating offer",{activeDomain:i,error:e}),n.trackEvent(t.checkoutPopupFailedActivation,{activeDomain:i,error:e}),{type:_,payload:{response:!1}}}}}var te;!function(e){e[e.Pending=0]="Pending",e[e.Ready=1]="Ready",e[e.Received=2]="Received",e[e.Donated=3]="Donated",e[e.Disqualified=4]="Disqualified"}(te||(te={}));class re{constructor(e,t,r){this.adUnitId=e,this.config=t,this.logger=r}async getAnonymousUserCommissions(e,t){try{const r=new URLSearchParams(t).toString(),i=await fetch(`${this.config.apiConfig.baseUri}/${this.config.apiConfig.getAnonymousUserComissionsPath}?${r}`,{method:"GET",headers:{"Content-Type":"application/json","X-AnonymousUserToken":e}});if(!i.ok)throw new Error(`Failed to fetch commissions. Status code: ${i.status} .${i.statusText}`);return await i.json()}catch(e){throw this.logger.error("[GiveFreelyApiClient] Error fetching anonymous user's commissions:",{error:e}),e}}async createOrUpdateAnonymousUser(e,t){try{const r=await fetch(`${this.config.apiConfig.baseUri}/${this.config.apiConfig.createAnonymousUserPath}?adUnitId=${this.adUnitId}`,{method:"PUT",headers:{"Content-Type":"application/json","X-GF-Platform":"adUnitLibrary","X-AnonymousUserToken":t??""},body:JSON.stringify(e)});if(!r.ok)throw new Error(`Failed to create/update anonymous user. Status code: ${r.status} .${r.statusText}`);this.logger.info("[GiveFreelyApiClient] anonymous user created/updated successfully.");const i=await r.json(),s=r.headers.get("X-AnonymousUserToken");return{resultUser:{...i,charity:{ein:i.selectedCharity,thirdPartyId:i.selectedCharityThirdPartyIdentifier,name:void 0}},resultToken:s}}catch(e){throw this.logger.error("[GiveFreelyApiClient] Error creating anonymous user:",{error:e}),e}}}class ie{constructor(e,t){this.ANONYMOUS_USER_STORAGE_KEY="gf_anonymous_user_info",this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY="gf_anonymous_encrypted_token",this._giveFreelyApiClient=e,this._logger=t,this.user=null}async resetUser(){await f.remove(this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY),await f.remove(this.ANONYMOUS_USER_STORAGE_KEY)}async upsertUser(e,t){let r=await this.fetchUser();try{const i={selectedCharity:e?.ein,selectedCharityThirdPartyIdentifier:e?.thirdPartyId,deviceId:t};if(!await this.shouldCreateOrUpdateUser(r,i))return r;const s=await f.get(this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY),{resultUser:a,resultToken:n}=await this._giveFreelyApiClient.createOrUpdateAnonymousUser(i,s);n&&await f.set(this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY,n),a&&(await f.set(this.ANONYMOUS_USER_STORAGE_KEY,a),r=a)}catch(e){this._logger.error("Error creating/updating anonymous user:",e)}return this.user=r,r}async fetchUser(){const e=await f.get(this.ANONYMOUS_USER_STORAGE_KEY);return this.user=e,e}async shouldCreateOrUpdateUser(e,t){return!e||e.charity?.ein!==t.selectedCharity||e.charity?.thirdPartyId!==t.selectedCharityThirdPartyIdentifier||e.deviceId!==t.deviceId}}const se=e=>{try{return new URL(e),!0}catch{return!1}},ae=new Set,ne=new Set,oe={urls:["<all_urls>"],types:["main_frame"]};class ce{async handle(e,t){const r=e.payload,{giveFreelyService:i}=t,s=i.getLogger();try{const e=L,t=await f.get(e)||[],i=t.findIndex((e=>e.shopId===r.shopId));return i>=0?t[i]=r:t.push(r),await f.set(e,t),s.debug("Stored Shopify shop ID",{shopInfo:r}),{type:F,payload:{success:!0}}}catch(e){return s.error("Error storing Shopify shop ID",{shopInfo:r,error:e}),{type:F,payload:{success:!1}}}}}class ge{async handle(e,t){const{shopId:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger();try{const e=L,t=(await f.get(e)||[]).find((e=>e.shopId===r));return t?(s.debug("Found domain for shop ID",{shopId:r,domain:t.domain}),{type:R,payload:{found:!0,domain:t.domain,shopInfo:t}}):(s.debug("No domain found for shop ID",{shopId:r}),{type:R,payload:{found:!1}})}catch(e){return s.error("Error getting domain for shop ID",{shopId:r,error:e}),{type:R,payload:{found:!1}}}}}class le{constructor(e,t){this.lastCheck=null,this.trackEvent=e,this.logger=t}async initialize(){const e=await f.get(N);e&&(this.lastCheck=e)}getToday(){return(new Date).toISOString().split("T")[0]}async check(){try{const e=this.lastCheck??0,r=this.getToday();(e?new Date(e).toISOString().split("T")[0]:null)!==r&&(this.lastCheck=Date.now(),await f.set(N,this.lastCheck),await this.trackEvent(t.checkoutPopupHealthCheck,{language:chrome.i18n.getUILanguage()}))}catch(e){this.logger.error("Health check failed",{error:e instanceof Error?e.message:"Unknown error"})}}}const he=a.getInstance(),de="countryCode";class me{async handle(e,t){const{lang:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger();s.debug("Getting language strings",{lang:r});try{const e=await i.getLanguage(r);return s.debug("Language strings fetched",{language:e}),{type:$,payload:{translations:e.translations,charities:e.charities}}}catch(e){return s.error("Error getting language strings",{error:e}),{type:$,payload:{translations:null,charities:null}}}}}const ue="https://cdn.givefreely.com/adunit/language",fe=async(e,t,r,i,s=[],a=!1)=>{const n=(s??[]).includes(r)?G:r;e.debug(`Requested lang ${r} and current lang ${n}`);const o=`lang-${G}`,c=await M.get(o,(async()=>(e.debug(`Fetching default language ${G} for partner ${t}`),Ae(t,G))),i||60,a);if(!c.content)throw new Error(`Failed to fetch default language ${G} and no cache version available`);if(G===n)return c.content;const g=`lang-${n}`,l=await M.get(g,(async()=>(e.debug(`Fetching language ${n} for partner ${t}`),Ae(t,n))),i||60,a);if(!l.content)return c.content;const h=we(c.content,l.content);return await M.set(g,h,i||60),h},Ae=async(e,t)=>{const r=`/global-${t}.json`,i=`/${e}/${t}.json`,[s,a]=await Promise.allSettled([pe(`${ue}${r}`),pe(`${ue}${i}`)]);let n,o;"fulfilled"===s.status&&(n=s.value),"fulfilled"===a.status&&(o=a.value);const c=ye(n,o);return{translations:c.translations,charities:c.charities}},pe=async e=>{const t=await fetch(e,{cache:"no-store"});if(!t.ok)throw new Error(`Failed to fetch partner language file ${e}. Status: ${t.status}. Reason: ${t.statusText}`);return t.json()},ye=(e,t)=>({translations:{...e?.translations??{},...t??{}},charities:{...e?.charities??{}}}),we=(e,t)=>({translations:{...e.translations,...t.translations},charities:{...e.charities,...t.charities}});class ve extends Error{constructor(e="Service not initialized"){super(e),this.name="UninitializedServiceError"}}exports.GiveFreelyService=class{constructor(e){this.partnerApiKey=e,this.dependencies={configService:new Y(e)},this.logger=a.getInstance(),this.logger.configure({enabled:!0,title:"Background - GiveFreelyService"}),this.state={initialized:!1,wildfireService:null,partnerFilter:null,config:null,wfDeviceId:null,analytics:null,giveFreelyUserService:null,partnerApiKey:e,healthCheck:null}}assertInitialized(){if(!this.state.initialized)throw new ve}async initialize(e=async()=>(this.logger.debug("Using default partnerFilter."),!0)){if(!this.state.initialized)try{const t=await this.dependencies.configService.getConfig(!0);this.logger.configure({minLevel:t.backgroundMinLogLevel??"error"}),this.logger.info("Initializing GiveFreelyService",{partnerApiKey:this.partnerApiKey});const r=this.createWildfireService(t);this.state.healthCheck=new le(this.trackEvent.bind(this),this.logger),await this.state.healthCheck.initialize();const s=await j();await r.refreshCache(s);const n=new re(this.partnerApiKey,t,this.logger);this.state.giveFreelyUserService=new ie(n,this.logger),await this.state.giveFreelyUserService.fetchUser(),this.state.giveFreelyUserService.user?.id||await this.state.giveFreelyUserService.upsertUser();try{await(async()=>await f.get(de)||(async()=>{he.debug("detecting country");const e={method:"GET",headers:{"Content-Type":"application/json",Authorization:"Basic OTEzOTkxOnFlYmpaWF9DOGNRY0lxSHA4WTVjNGxzU1pRSlM2VW9MMExzTF9tbWs="}};try{const t=await fetch("https://geoip.maxmind.com/geoip/v2.1/country/me",e);if(he.debug("Received geolocation response",{status:t.status}),!t.ok)return void he.error("Failed to get geolocation data",{status:t.status,statusText:t.statusText});const r=await t.json();if(!r)throw new Error("There was an error fetching geoip look up");return await f.set(de,r.country.iso_code),r.country.iso_code}catch(e){return void he.error("Failed to get geolocation data",{error:e})}})())()}catch(e){this.logger.debug("Failed to get geolocation data",{error:e})}this.state.analytics=new Z(this.partnerApiKey,this.state.giveFreelyUserService,this.dependencies.configService),this.logger.addTransport(new i(this)),B.register(k,new q),B.register(O,new V),B.register(U,new X),B.register(D,new J),B.register(P,new Q),B.register(_,new ee),B.register(F,new ce),B.register(R,new ge),B.register($,new me),this.state.wildfireService=r,this.state.partnerFilter=e,this.state.config=t,this.state.initialized=!0,d.webRequest&&(d.webRequest.onBeforeRequest.addListener((e=>{const t=e.getLogger();return({requestId:r,url:i,initiator:s})=>{try{if(ae.has(r)||ne.has(r)||!se(i))return;const{hostname:a,search:n}=new URL(i);if(a.includes("wild.link"))return t.info("Cashback activation request identified, ignoring affiliate check for request"),void ne.add(r);let o;s&&se(s)&&(o=new URL(s).hostname),e.hasAffiliation([a,o],n)&&(t.info("Affiliation found on url, adding request id to track"),ae.add(r))}catch(e){t.error("Error on handleAffiliateOnBeforeRequest",e)}}})(this),oe),d.webRequest.onBeforeRedirect.addListener((e=>{const t=e.getLogger();return async({requestId:r,redirectUrl:i})=>{try{if(!ae.has(r))return;t.info("Attempting to find active domain");const{hostname:s}=new URL(i),a=(await e.getActiveDomains()).find((e=>s===e.Domain||s.endsWith(`.${e.Domain}`)));if(!a)return;t.info("Found active domain. Updating standdown state"),await S(a.Domain)}catch(e){t.error("Error on handleAffiliateOnBeforeRedirect",e)}}})(this),oe),d.webRequest.onCompleted.addListener((()=>{const e=this.getLogger();return({requestId:t})=>{try{ae.has(t)&&(e.info("Tracking request completed. Request Id:",t),ae.delete(t))}catch(t){e.error("Error on handleAffiliateOnCompleted",t)}}})(),oe)),function(e){const t=a.getInstance();g.runtime.onMessage.addListener(((r,i,s)=>{function a(e){s(e)}const n=e(r,0);return n instanceof Promise?(n.then((e=>{e&&a(e)})).catch((e=>{t.warn("Async message callback error:",e)})),!0):n}))}((async(e,t)=>(this.logger.debug("Received message",{type:e.type,payload:e.payload}),this.handleMessage(e)))),t.purgeLanguages&&t.purgeLanguages.length>0&&await Promise.all(t.purgeLanguages.flatMap((e=>[M.clear(`lang-${e}`),M.clear(`global-${e}`)]))),c((async()=>{this.logger.debug("Initializing default language with partner API key",{partnerApiKey:this.partnerApiKey}),await fe(this.logger,this.partnerApiKey,G,t.configRefreshInterval)})),this.logger.info("GiveFreelyService initialized successfully")}catch(e){const t=e instanceof Error?e.message:"Unknown error";throw this.logger.error("Failed to initialize GiveFreelyService",{error:t}),new Error(`Failed to initialize GiveFreelyService: ${t}`)}}getConfig(){return this.assertInitialized(),this.state.config}async getCachedConfig(){return this.state.config=await this.dependencies.configService.getConfig(),this.logger.configure({minLevel:this.state.config.backgroundMinLogLevel??"error"}),this.state.config}async getActiveDomains(){return this.assertInitialized(),this.state.wildfireService.getActiveDomains()}async shouldStandDown(e,t){this.assertInitialized();const r=new URL(t);if(!await this.state.partnerFilter(r.hostname))return this.logger.info("Should standdown due to partner filter."),!0;if(this.getConfig().merchantExclusions.some((t=>t.mutePopups&&e===t.domain)))return this.logger.info("Should standdown due to merchant exclusions"),!0;const i=await this.state.wildfireService.shouldStandDown(this.logger,e,t);return i&&this.logger.info("Should standdown due to vendor policy"),i}hasAffiliation(e,t){if(!this.state.wildfireService)return this.logger.warn("Wildfire service not initialized yet"),!1;const r=this.state.wildfireService.hasAffilliation(e,t);return r&&this.logger.info("Affiliation identified"),r}trackEvent(e,t,r=!1,i=!1){return this.assertInitialized(),this.state.analytics.track(e,this.state.wfDeviceId?.DeviceID,t,r,i)}getLogger(){return this.assertInitialized(),this.logger}async initializeWfDeviceId(){if(this.assertInitialized(),this.state.wfDeviceId=await this.state.wildfireService.getDevice(),!this.state.wfDeviceId)throw new Error("Failed to initialize Wildfire device ID");return this.state.wfDeviceId.DeviceID}getWfDeviceId(){return this.assertInitialized(),this.state.wfDeviceId.DeviceID}upsertUser(e,t){return this.assertInitialized(),this.state.giveFreelyUserService.upsertUser(e,t)}getCurrentUser(){return this.assertInitialized(),this.state.giveFreelyUserService.user}generateAffiliateUrl(e,t,r){return this.assertInitialized(),this.state.wildfireService.generateAffiliateUrl(e,t,r,this.state.partnerApiKey)}updateStanddownHistory(e){return this.assertInitialized(),S(e)}getMerchantRates(e){if(this.assertInitialized(),!this.state.wildfireService)throw new Error("Wildfire service not initialized");return this.state.wildfireService.getMerchantRates(e)}async healthCheck(){this.assertInitialized(),await this.state.healthCheck.check()}async getLanguage(e){return this.assertInitialized(),fe(this.logger,this.state.partnerApiKey,e,this.state.config?.configRefreshInterval,this.state.config?.ignoredLanguages)}async handleMessage(e){this.assertInitialized();const t=B.get(e.type);if(!t)return;const r={giveFreelyService:this};return t.handle(e,r)}createWildfireService(e){this.logger.debug("Initializing wildfire service with config",this.state.config);const t=new m(e.wfSecret,e.wfAppId,e.deviceUrl,e.dataUrl,this.logger);return new K(t,this.logger,e.vanityBaseUrl,e.refreshInterval)}async destroy(){this.logger.info("Destroying GiveFreelyService"),await Promise.all([this.dependencies.configService.clearCache(),this.state.wildfireService?.clearCache(),this.state.giveFreelyUserService?.resetUser()]),this.state.initialized=!1,this.state.wildfireService=null,this.state.partnerFilter=null,this.state.analytics=null,this.state.config=null}},exports.browser=g,exports.isAdUnitMessage=e=>B.exists(e);
|
|
1
|
+
"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var t={exports:{}};"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self&&self,function(e){if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");if(globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id)e.exports=globalThis.browser;else{const t="The message port closed before a response was received.",r=e=>{const r={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(r).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class i extends WeakMap{constructor(e,t=void 0){super(t),this.createItem=e}get(e){return this.has(e)||this.set(e,this.createItem(e)),super.get(e)}}const s=(t,r)=>(...i)=>{e.runtime.lastError?t.reject(new Error(e.runtime.lastError.message)):r.singleCallbackArg||i.length<=1&&!1!==r.singleCallbackArg?t.resolve(i[0]):t.resolve(i)},a=e=>1==e?"argument":"arguments",n=(e,t,r)=>new Proxy(t,{apply:(t,i,s)=>r.call(i,e,...s)});let o=Function.call.bind(Object.prototype.hasOwnProperty);const c=(e,t={},r={})=>{let i=Object.create(null),g={has:(t,r)=>r in e||r in i,get(g,l,h){if(l in i)return i[l];if(!(l in e))return;let d=e[l];if("function"==typeof d)if("function"==typeof t[l])d=n(e,e[l],t[l]);else if(o(r,l)){let t=((e,t)=>function(r,...i){if(i.length<t.minArgs)throw new Error(`Expected at least ${t.minArgs} ${a(t.minArgs)} for ${e}(), got ${i.length}`);if(i.length>t.maxArgs)throw new Error(`Expected at most ${t.maxArgs} ${a(t.maxArgs)} for ${e}(), got ${i.length}`);return new Promise(((a,n)=>{if(t.fallbackToNoCallback)try{r[e](...i,s({resolve:a,reject:n},t))}catch(s){console.warn(`${e} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,s),r[e](...i),t.fallbackToNoCallback=!1,t.noCallback=!0,a()}else t.noCallback?(r[e](...i),a()):r[e](...i,s({resolve:a,reject:n},t))}))})(l,r[l]);d=n(e,e[l],t)}else d=d.bind(e);else if("object"==typeof d&&null!==d&&(o(t,l)||o(r,l)))d=c(d,t[l],r[l]);else{if(!o(r,"*"))return Object.defineProperty(i,l,{configurable:!0,enumerable:!0,get:()=>e[l],set(t){e[l]=t}}),d;d=c(d,t[l],r["*"])}return i[l]=d,d},set:(t,r,s,a)=>(r in i?i[r]=s:e[r]=s,!0),defineProperty:(e,t,r)=>Reflect.defineProperty(i,t,r),deleteProperty:(e,t)=>Reflect.deleteProperty(i,t)},l=Object.create(e);return new Proxy(l,g)},g=e=>({addListener(t,r,...i){t.addListener(e.get(r),...i)},hasListener:(t,r)=>t.hasListener(e.get(r)),removeListener(t,r){t.removeListener(e.get(r))}}),l=new i((e=>"function"!=typeof e?e:function(t){const r=c(t,{},{getContent:{minArgs:0,maxArgs:0}});e(r)})),h=new i((e=>"function"!=typeof e?e:function(t,r,i){let s,a,n=!1,o=new Promise((e=>{s=function(t){n=!0,e(t)}}));try{a=e(t,r,s)}catch(e){a=Promise.reject(e)}const c=!0!==a&&((g=a)&&"object"==typeof g&&"function"==typeof g.then);var g;if(!0!==a&&!c&&!n)return!1;return(c?a:o).then((e=>{i(e)}),(e=>{let t;t=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",i({__mozWebExtensionPolyfillReject__:!0,message:t})})).catch((e=>{console.error("Failed to send onMessage rejected reply",e)})),!0})),d=({reject:r,resolve:i},s)=>{e.runtime.lastError?e.runtime.lastError.message===t?i():r(new Error(e.runtime.lastError.message)):s&&s.__mozWebExtensionPolyfillReject__?r(new Error(s.message)):i(s)},m=(e,t,r,...i)=>{if(i.length<t.minArgs)throw new Error(`Expected at least ${t.minArgs} ${a(t.minArgs)} for ${e}(), got ${i.length}`);if(i.length>t.maxArgs)throw new Error(`Expected at most ${t.maxArgs} ${a(t.maxArgs)} for ${e}(), got ${i.length}`);return new Promise(((e,t)=>{const s=d.bind(null,{resolve:e,reject:t});i.push(s),r.sendMessage(...i)}))},u={devtools:{network:{onRequestFinished:g(l)}},runtime:{onMessage:g(h),onMessageExternal:g(h),sendMessage:m.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:m.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},f={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return r.privacy={network:{"*":f},services:{"*":f},websites:{"*":f}},c(e,u,r)};e.exports=r(chrome)}}(t);var r,i,browser=e(t.exports);class s{constructor(){this.isLocal=!0}log({level:e,message:t,timestamp:r,data:i,title:a}){const n="debug"===e?"log":e,o=a?`[${a}]`:"";void 0!==i?console[n](`[${r}] - ${s.LOGGER_PREFIX} ${o} ${t}`,i):console[n](`[${r}] - ${s.LOGGER_PREFIX} ${o} ${t}`)}}s.LOGGER_PREFIX="[GFAdUnit] -",function(e){e.checkoutPopupShown="CHECKOUT-POPUP-SHOWN",e.checkoutPopupNotShown="CHECKOUT-POPUP-NOT-SHOWN",e.checkoutPopupSupressed="CHECKOUT-POPUP-SUPRESSED",e.checkoutPopupDonation="CHECKOUT-POPUP-DONATION",e.checkoutPopupFailedActivation="CHECKOUT-POPUP-FAILED-ACTIVATION",e.checkoutPopupPurchaseConfirmed="CHECKOUT-POPUP-PURCHASE-CONFIRMED",e.checkoutPopupHealthCheck="CHECKOUT-POPUP-HEALTH-CHECK",e.checkouPopupActivationFailed="CHECKOUT-POPUP-ACTIVATION-FAILED",e.checkoutPopupOfferDetailsClicked="CHECKOUT-POPUP-OFFER-DETAILS-CLICKED",e.checkoutPopupWhyAmISeeingThisClicked="CHECKOUT-POPUP-WHY-AM-I-SEEING-THIS-CLICKED",e.checkoutPopupLooserExtension="CHECKOUT-POPUP-LOOSER-EXTENSION",e.checkoutPopupActiveDomain="CHECKOUT-POPUP-ACTIVE-DOMAIN",e.checkoutPopupSiteMatches="CHECKOUT-POPUP-SITE-MATCHES"}(r||(r={})),function(e){e.adUnitLog="ADUNIT-LOG"}(i||(i={}));class a{constructor(e){this.isLocal=!1,this.gfService=e}log({level:e,message:t,data:r,title:s}){this.gfService.trackEvent(i.adUnitLog,{log:{level:e,message:t,data:r,title:s}})}}const n=["debug","info","warn","error"];class o{constructor(e){this.config={minLevel:e?.minLevel??"debug",enabled:e?.enabled??!1,transports:e?.transports??[new s],title:e?.title??""}}static getInstance(e){return o.instance||(o.instance=new o(e)),o.instance}configure(e){this.config={...this.config,...e}}shouldLog(e){return!!this.config.enabled&&n.indexOf(e)>=n.indexOf(this.config.minLevel)}createLogMessage(e,t,r){return{level:e,version:"1.9.2",message:t,timestamp:(new Date).toISOString(),data:r,title:this.config.title}}log(e,t,r,i){if(!this.shouldLog(e))return;const s=this.createLogMessage(e,t,i);this.config.transports.filter((e=>!r||e.isLocal)).forEach((e=>e.log(s)))}debug(e,t,r=!1){this.log("debug",e,r,t)}info(e,t,r=!1){this.log("info",e,r,t)}warn(e,t,r=!1){this.log("warn",e,r,t)}error(e,t,r=!1){this.log("error",e,r,t)}addTransport(e){this.config.transports.push(e)}clearTransports(){this.config.transports=[]}disable(){this.config.enabled=!1}enable(){this.config.enabled=!0}}const c=3,g=e=>1e3*e;async function l(e,t={},r){const{maxAttempts:i=c,delayFn:s=g}=t;let a=null;for(let t=1;t<=i;t+=1)try{return await e()}catch(e){a=e,t<i&&await new Promise((e=>{setTimeout(e,s(t))}))}if(a&&t.logger&&t.operationName&&t.logger.error(`Operation ${t.operationName} failed after ${i} attempts.`,a),void 0!==r)return r;throw a||new Error("Operation failed after multiple attempts")}const h=browser,d={get:async e=>await h.storage.local.get(e),async set(e){await h.storage.local.set(e)},async remove(e){await h.storage.local.remove(e)}};class m{constructor(e,t,r,i,s){this.wfSecret=e,this.wfAppId=t,this.deviceUrl=r,this.dataUrl=i,this._logger=s}async getWildfireDevice(){try{const e=await fetch(this.deviceUrl,{method:"POST",body:JSON.stringify({}),headers:{"Content-Type":"application/json","WF-Secret":this.wfSecret,"WF-App-ID":this.wfAppId}});if(e.ok)return e.json();throw new Error(`Failed to fetch Wildfire device from ${this.deviceUrl}. Status ${e.status}. ${e.statusText}`)}catch(e){throw this._logger.error("Failed to fetch the Wildfire device",{err:e}),e}}async getActiveDomains(){try{const e=`${this.dataUrl}/${this.wfAppId}/active-domain/1`,t=await fetch(e);if(t.ok)return t.json();throw new Error(`Failed to fetch active domains from ${e}. Status ${t.status}. ${t.statusText}`)}catch(e){throw this._logger.error("Failed to fetch the active domains",{err:e}),e}}async getStanddownPolicy(){const e=`${this.dataUrl}/${this.wfAppId}/stand-down-policy/1`;try{const t=await fetch(e);if(t.ok)return t.json();throw new Error(`Failed to fetch standdown policy from ${e}. Status ${t.status} ${t.statusText}`)}catch(t){throw this._logger.error("Failed to fetch the standdown policy",{err:t,url:e}),t}}async getMerchantRates(){const e=`${this.dataUrl}/${this.wfAppId}/merchant-rate/1`;try{const t=await fetch(e);if(this._logger.debug("Merchant rates response",{response:t}),!t.ok)throw new Error(`Failed to fetch merchant rates from ${e}. Status ${t.status}. ${t.statusText}`);const r=t.json();return this._logger.debug("Merchant rates",{rates:r}),r}catch(t){throw this._logger.error("Failed to fetch the merchant rates",{err:t,url:e}),t}}}const u="GIVE_FREELY_",f={async get(e){const t=`${u}${e}`;return(await browser.storage.local.get(t))[t]||null},async set(e,t){const r=`${u}${e}`;await browser.storage.local.set({[r]:t})},async remove(e){const t=Array.isArray(e)?e.map((e=>`${u}${e}`)):`${u}${e}`;await browser.storage.local.remove(t)}},A="wfDevice",p="wfDomains",y="wfStanddownPolicy",w="wfStanddownHistory",v="wfMerchantRates";async function x(e,t,r){try{const i=(await b())?.[t];if(i&&i>Date.now())return e.info("Standing down because current affiliate stand down session has not expired"),S(t),!0;await this.refreshCache();const s=await this.getStanddownPolicy();if(I(s,new URL(r).search))return e.info("Standing down because url has affiliate params"),S(t),!0;e.info("No need to stand down.")}catch(t){e.error("Exception produced when trying to determine if it should stand down",t)}return!1}function E(e,t){if(!this.standDownPolicy)return this.logger.warn("Couldnt check affilliation. No stand down policy found"),this.getStanddownPolicy().then((e=>{this.standDownPolicy=e})),!1;const r=e.some((e=>C(this.standDownPolicy,e)))||I(this.standDownPolicy,t);return this.logger.info("Affilliation result:",r),r}const b=async()=>f.get(w),S=async(e,t=1)=>{const r=await b()??{};r[e]=Date.now()+60*t*60*1e3,await f.set(w,r)},C=(e,t)=>{if(!t)return!1;const{Domains:r}=e;return r.some((e=>t.includes(e)))},I=(e,t)=>{if(!t)return!1;const{Params:r}=e;return r.some((e=>t.toLowerCase().includes(`?${e.toLowerCase()}`)))||r.some((e=>t.toLowerCase().includes(`&${e.toLowerCase()}`)))};class T{constructor(e,t,r,i){this.userId=e,this.charityEin=t,this.charityThirdPartyIdentifier=r,this.partnerId=i}toString(){return`userId=${this.encodeUserId(this.userId)},charityEin=${this.charityEin},charityThirdPartyIdentifier=${this.charityThirdPartyIdentifier},partnerId=${this.partnerId}`}encodeUserId(e){return btoa(e).replace(/_/g,"/").replace(/-/g,"+")}}const P="TRACK_EVENT",U="GF_HIDE_POPUP",O="GF_GET_POPUP_CONFIG",k="GF_IS_ACTIVE_DOMAIN",D="GF_SHOULD_STAND_DOWN",_="GF_ACTIVATE_OFFER",F="GF_STORE_SHOPIFY_SHOP_ID",R="GF_GET_DOMAIN_BY_SHOP_ID",$="GF_GET_LANGUAGE_CONTENT",L="shopify_shop_ids",N="gf_last_health_check",G="en",M=o.getInstance(),K={async get(e,t,r,i=!1){let s=await f.get(e);const a=s;let n=!1;if(s&&Date.now()<=s.expiration&&!i)return{content:s.content,isStale:n};try{const i=await t();s=await this.set(e,i,r)}catch(e){M.error("Error getting cached value",{error:e}),n=!0}return{content:s?.content??a?.content,isStale:n}},async set(e,t,r){const i={content:t,expiration:Date.now()+1e3*(r??300)};return await f.set(e,i),i},async refresh(e,t,r,i=!1){const s=await this.get(e,t,r,i);if(s.isStale||i)try{const i=await t();if(!i)return{content:s.content,isStale:!0};s.content=i,await this.set(e,s.content,r)}catch(e){return M.error("Error refreshing cached value",{error:e}),{content:s.content,isStale:!0}}return{content:s.content,isStale:!1}},async clear(e){await f.remove(e)}};class H{constructor(e,t,r,i=21600){if(this.standDownPolicy=null,this.shouldStandDown=x.bind(this),this.hasAffilliation=E.bind(this),!e||!r)throw new Error("WildfireService requires wildfireClient and vanityBaseUrl");this.wildfireClient=e,this.vanityBaseUrl=r.replace(/\/$/,""),this.refreshInterval=i,this.logger=t}async getActiveDomains(e=!1){try{const t=(await K.get(p,(async()=>this.fetchActiveDomains()),this.refreshInterval,e)).content;if(!t)throw Error("Failed to retrieve active domains");return t}catch(e){throw this.logger.error("Failed to get active domains:",e),new Error("Failed to retrieve active domains")}}async getMerchantRates(e,t=!1){try{const r=await K.get(v,(async()=>this.fetchMerchantRates()),this.refreshInterval,t);if(!r.content)throw new Error("Failed to retrieve merchant rates from cache");return r.content[e]}catch(e){throw this.logger.error("Failed to retrieve merchant rates:",e),new Error("Failed to retrieve merchant rates")}}async generateAffiliateUrl(e,t,r,i){if(!e||!t||!i)throw new Error("Missing required parameters for affiliate URL generation");try{const s=await this.getDevice(),a=await this.generateTrackingCode(r,i,s),n=encodeURIComponent(t),o=encodeURIComponent(a);return`${this.vanityBaseUrl}/e?d=${s.DeviceID}&c=${e.ID}&tc=${o}&url=${n}`}catch(e){throw this.logger.error("Failed to generate affiliate URL:",e),new Error("Failed to generate affiliate URL")}}async clearCache(){try{await Promise.all([K.clear(p),K.clear(y),K.clear(v)])}catch(e){throw this.logger.error("Failed to clear cache:",e),new Error("Failed to clear cache")}}async refreshCache(e=!1){try{const[,t]=await Promise.all([K.refresh(p,(()=>this.fetchActiveDomains()),this.refreshInterval,e),K.refresh(y,(()=>this.fetchStanddownPolicy()),this.refreshInterval,e),K.refresh(v,(()=>this.fetchMerchantRates()),this.refreshInterval,e)]);t?.content&&(this.standDownPolicy=t.content)}catch(e){throw this.logger.error("Failed to refresh cache:",e),new Error("Failed to refresh cache")}}async getStanddownPolicy(){try{const e=await K.get(y,(async()=>this.fetchStanddownPolicy()),this.refreshInterval);if(!e.content)throw new Error("Failed to retrieve standdown policy from cache");return this.logger.info("Retrieved standdown policy from cache",e.content),this.standDownPolicy=e.content,this.standDownPolicy}catch(e){throw this.logger.error("Failed to get standdown policy from cache:",e),new Error("Failed to retrieve standdown policy")}}getRetryOptions(e){return{delayFn:e=>1e3*e,maxAttempts:3,logger:this.logger,operationName:e}}async getDevice(){try{const e=await f.get(A);return e?.DeviceID?e:l((()=>this.fetchAndStoreDevice()),this.getRetryOptions("Get Device"))}catch(e){throw this.logger.error("Failed to get device:",e),new Error("Failed to retrieve device information")}}async fetchAndStoreDevice(){const e=await this.wildfireClient.getWildfireDevice();if(!e?.DeviceID)throw new Error("Failed to retrieve device information");return await f.set(A,e),e}async generateTrackingCode(e,t,r){if(!(e?.id&&e?.charity&&e?.charity.ein&&e?.charity.thirdPartyId)){const e=`notregistered-${r.DeviceID}`;return this.logger.info("User not provided. Using GF's default bucket instead.",e),e}return new T(e.id,e.charity.ein,e.charity.thirdPartyId,t).toString()}async fetchActiveDomains(){const e=await l((()=>this.wildfireClient.getActiveDomains()),this.getRetryOptions("Fetch Active Domains"));return this.logger.info("Updated active domains"),e}async fetchStanddownPolicy(){const e=await l((()=>this.wildfireClient.getStanddownPolicy()),this.getRetryOptions("Get Standdown policy"),{Domains:[],LostAttribution:[],Params:[],Serp:[]});return this.logger.info("Updated standdown policy"),e}async fetchMerchantRates(){const e=await l((()=>this.wildfireClient.getMerchantRates()),this.getRetryOptions("Fetch Merchant Rates"),{});return this.logger.debug("Updated Merchant rates"),e}}const z="version",j=()=>String("1.9.2"),W=async(e=!0)=>{const t=await f.get(z),r=await j(),i=t!==r;var s;return e&&i&&await(s=r,f.set(z,s)),i},Y="https://cdn.givefreely.com/adunit/behavioral/";class B{constructor(e){this.partnerApiKey=e,this.partnerConfig=null,this.globalConfig=null,this.PARTNER_CONFIG_STORAGE_KEY="gf_partner_config",this.GLOBAL_CONFIG_STORAGE_KEY="gf_global_config",this.globalConfigRefreshInterval=60,this.partnerConfigRefreshInterval=60}getRetryOptions(){return{delayFn:e=>1e3*e,maxAttempts:3}}async fetchPartnerConfig(){const e=await l((async()=>{const e=await fetch(`${Y}${this.partnerApiKey}.json`,{cache:"no-store"});if(!e.ok)throw new Error(`Failed to fetch partner config: ${e.statusText}`);return e.json()}),this.getRetryOptions());if(!e)throw new Error("Failed to fetch or get from cache partner config");return this.partnerConfigRefreshInterval=e.configRefreshInterval||this.partnerConfigRefreshInterval,e}async fetchGlobalConfig(){const e=await l((async()=>{const e=await fetch(`${Y}global.json`,{cache:"no-store"});if(!e.ok)throw new Error(`Failed to fetch global config => Status code: ${e.status} .${e.statusText}`);return e.json()}),this.getRetryOptions());if(!e)throw new Error("Failed to fetch or get from cache global config",e);return this.globalConfigRefreshInterval=e.configRefreshInterval||this.globalConfigRefreshInterval,e}async getConfig(e=!1){let t=!1;e&&(t=await W());const[r,i]=await Promise.all([await K.get(this.PARTNER_CONFIG_STORAGE_KEY,this.fetchPartnerConfig.bind(this),this.partnerConfigRefreshInterval,t),await K.get(this.GLOBAL_CONFIG_STORAGE_KEY,this.fetchGlobalConfig.bind(this),this.globalConfigRefreshInterval,t)]);if(!i.content)throw new Error("Global config is required");if(!r.content)throw new Error("Partner config is required");this.partnerConfig=r.content,this.globalConfig=i.content;const s=this.mergeConfigs(JSON.parse(JSON.stringify(this.globalConfig)),JSON.parse(JSON.stringify(this.partnerConfig)));if(!s)throw new Error("Was not able to merge configs");return((e,t,r)=>{const i=[...t.merchantExclusions??[],...r.merchantExclusions??[]];e.merchantExclusions=i})(s,this.globalConfig,this.partnerConfig),s}async clearCache(){await Promise.all([K.clear(this.PARTNER_CONFIG_STORAGE_KEY),K.clear(this.GLOBAL_CONFIG_STORAGE_KEY)]),this.partnerConfig=null,this.globalConfig=null}mergeConfigs(e,t){if(!t)return e;if(!e)return t;const r={...e};return Object.keys(t).forEach((i=>{if(!Object.prototype.hasOwnProperty.call(t,i))return;const s=e[i],a=t[i];void 0!==a&&(Array.isArray(a)?r[i]=[...a]:r[i]=null===a||"object"!=typeof a||null===s||"object"!=typeof s?a:this.mergeConfigs(s,a))})),r}}class q{static register(e,t){this.strategies.set(e,t)}static get(e){return this.strategies.get(e)}static exists(e){return!!function(e){return"object"==typeof e&&null!==e&&"type"in e&&"payload"in e&&"string"==typeof e.type}(e)&&this.strategies.has(e.type)}}q.strategies=new Map;class V{async handle(e,t){const{hostname:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger(),a=await i.getConfig().merchantExclusions,n=await i.getActiveDomains();s.debug("Checking hostname",{hostname:r});try{if(i.healthCheck(),a.some((e=>e.disableDomain&&(r===e.domain||r.endsWith(`.${e.domain}`)))))return s.debug("Hostname is in merchant exclusions",{hostname:r}),{type:k,payload:{isActive:!1,domain:void 0,rates:[]}};if(!n||0===n.length)throw new Error("No active domains");s.debug("Retrieved active domains",{count:n.length});const e=n.find((e=>r===e.Domain||r.endsWith(`.${e.Domain}`)));s.debug("Domain check result",{hostname:r,isActive:!!e});let t=[];if(e?.ID){const r=await i.getMerchantRates(e.Merchant.ID);r&&(s.debug("Retrieved merchant rates",{merchantRates:r}),t=r)}return{type:k,payload:{isActive:!!e,domain:e,rates:t}}}catch(e){return s.error("Error checking domain",{hostname:r,error:e}),{type:k,payload:{isActive:!1,domain:void 0,rates:[]}}}}}class X{async handle(e,t){const{giveFreelyService:r}=t,i=r.getLogger(),s=await r.getCachedConfig();try{return i.debug("Fetching popup config"),{type:O,payload:{config:s}}}catch(e){return i.error("Error fetching popup config",{error:e}),{type:O,payload:{config:null}}}}}class J{async handle(e,t){const{days:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger();try{const e=new Date;return e.setDate(e.getDate()+r),await f.set("popup_hide",{popupHide:e.getTime()}),s.debug("Popup hidden",{days:r,expiry:e}),{type:U,payload:{ack:!0}}}catch(e){return s.error("Error hiding popup",{days:r,error:e}),{type:U,payload:{ack:!1}}}}}class Z{async handle(e,t){const{activeDomain:r,url:i}=e.payload,{giveFreelyService:s}=t,a=s.getLogger();a.debug("Checking if we should stand down",{activeDomain:r});try{const e=await s.shouldStandDown(r,i);return{type:D,payload:{result:e}}}catch(e){return a.error("Error checking if we should stand down. Returning false",{activeDomain:r,error:e}),{type:D,payload:{result:!1}}}}}class Q{constructor(e,t,r,i=60){this.track=async(e,t,r,i=!1,s=!1)=>{const a={partner:`adUnit_${this._partnerApiKey}`,eventType:e,eventData:{userId:i?void 0:this._userService?.user?.id,libVersion:j(),wfDeviceId:t,...r}};try{const e=JSON.stringify(a,((e,t)=>t instanceof Error?{name:t.name,message:t.message,stack:t.stack}:t)),t=await this.getEventsUrl();if(await this.shouldBroadcastEvent(e,s)){const r=await fetch(t,{headers:{"Content-Type":"application/json"},method:"POST",body:e,cache:"no-store"});return r.ok?(await this.pushEventToHistory(e),!0):(this._logger.error("Something unexpected happened when dispatching an event",{status:r.status,statusText:r.statusText,event:a},!0),!1)}return this._logger.info("This event has already been broadcasted during the past hour",a,!0),!1}catch(e){return this._logger.error("Something unexpected happened when dispatching a gf event",{error:e,event:a}),!1}},this.getEventsHistory=async()=>{const e=(await d.get(["GF_AD_EVENT_HISTORY"])).GF_AD_EVENT_HISTORY,t=(e=>{const t=new Date;return t.setTime(t.getTime()+60*e*1e3),t.getTime()})(-this._debounceWindowInMinutes),r=(e||[]).filter((e=>e.createdAt>t));return await d.set({GF_AD_EVENT_HISTORY:r}),r},this.shouldBroadcastEvent=async(e,t)=>!!t||!(await this.getEventsHistory()).some((t=>t.payload===e)),this.pushEventToHistory=async e=>{const t=await this.getEventsHistory();t.push({createdAt:Date.now(),payload:e}),await d.set({GF_AD_EVENT_HISTORY:t})},this._partnerApiKey=e,this._userService=t,this._debounceWindowInMinutes=i,this._logger=o.getInstance({title:"Analytics"}),this._configService=r}async getEventsUrl(){const{eventsUrl:e}=await this._configService.getConfig();return e}}Q.trackEvent=async(e,t,r=!1,i=!1)=>{await async function(e){return await h.runtime.sendMessage(e)}({type:P,payload:{eventType:e,eventData:t,anonymous:r,skipThrottling:i}})};class ee{async handle(e,t){const{eventType:r,eventData:i,anonymous:s,skipThrottling:a}=e.payload,{giveFreelyService:n}=t,o=n.getLogger();o.debug("Broadcasting event",{eventType:r,eventData:i,anonymous:s,skipThrottling:a});try{const e=await n.trackEvent(r,i,s,a);return{type:P,payload:{result:e}}}catch(e){return o.error("Error broadcasting event. Returning false",{eventType:r,eventData:i,error:e}),{type:P,payload:{result:!1}}}}}class te{async handle(e,t){const{activeDomain:i,originalUrl:s,selectedCharity:a}=e.payload,{giveFreelyService:n}=t,o=n.getLogger();o.debug("Activating offer",{activeDomain:i,selectedCharity:a});try{if(!a?.ein||!a?.thirdPartyId)throw new Error("Missing charity information");const e=await n.initializeWfDeviceId();if(!e)throw new Error("Failed to initialize Wildfire device ID");const t=await n.upsertUser(a,e);o.debug("Upserted user",{currentUser:t}),t||o.info("Failed to create user. Using default bucket's user");const r=await n.generateAffiliateUrl(i,s,t);return o.debug("Generated affiliate URL",{affiliateUrl:r}),(async e=>{const t=h.tabs.getCurrent(),r=await t,i=await h.tabs.create({url:e,openerTabId:r?.id,active:!1,pinned:!0});await(async e=>new Promise((t=>{h.tabs.onUpdated.addListener((async function r(i,s){if(i===e&&"complete"===s.status){if(h.tabs.onUpdated.removeListener(r),!(await h.tabs.get(e)).url)return void t(!1);t(!0)}}))})))(i.id)&&setTimeout((()=>{i?.id&&h.tabs.remove(i.id)}),3e4)})(r),await n.updateStanddownHistory(i.Domain),o.debug("Activated offer",{activeDomain:i,selectedCharity:a}),{type:_,payload:{response:!0}}}catch(e){return o.error("Error activating offer",{activeDomain:i,error:e}),n.trackEvent(r.checkoutPopupFailedActivation,{activeDomain:i,error:e}),{type:_,payload:{response:!1}}}}}var re;!function(e){e[e.Pending=0]="Pending",e[e.Ready=1]="Ready",e[e.Received=2]="Received",e[e.Donated=3]="Donated",e[e.Disqualified=4]="Disqualified"}(re||(re={}));class ie{constructor(e,t,r){this.adUnitId=e,this.config=t,this.logger=r}async getAnonymousUserCommissions(e,t){try{const r=new URLSearchParams(t).toString(),i=await fetch(`${this.config.apiConfig.baseUri}/${this.config.apiConfig.getAnonymousUserComissionsPath}?${r}`,{method:"GET",headers:{"Content-Type":"application/json","X-AnonymousUserToken":e}});if(!i.ok)throw new Error(`Failed to fetch commissions. Status code: ${i.status} .${i.statusText}`);return await i.json()}catch(e){throw this.logger.error("[GiveFreelyApiClient] Error fetching anonymous user's commissions:",{error:e}),e}}async createOrUpdateAnonymousUser(e,t){try{const r=await fetch(`${this.config.apiConfig.baseUri}/${this.config.apiConfig.createAnonymousUserPath}?adUnitId=${this.adUnitId}`,{method:"PUT",headers:{"Content-Type":"application/json","X-GF-Platform":"adUnitLibrary","X-AnonymousUserToken":t??""},body:JSON.stringify(e)});if(!r.ok)throw new Error(`Failed to create/update anonymous user. Status code: ${r.status} .${r.statusText}`);this.logger.info("[GiveFreelyApiClient] anonymous user created/updated successfully.");const i=await r.json(),s=r.headers.get("X-AnonymousUserToken");return{resultUser:{...i,charity:{ein:i.selectedCharity,thirdPartyId:i.selectedCharityThirdPartyIdentifier,name:void 0}},resultToken:s}}catch(e){throw this.logger.error("[GiveFreelyApiClient] Error creating anonymous user:",{error:e}),e}}}class se{constructor(e,t){this.ANONYMOUS_USER_STORAGE_KEY="gf_anonymous_user_info",this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY="gf_anonymous_encrypted_token",this._giveFreelyApiClient=e,this._logger=t,this.user=null}async resetUser(){await f.remove(this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY),await f.remove(this.ANONYMOUS_USER_STORAGE_KEY)}async upsertUser(e,t){let r=await this.fetchUser();try{const i={selectedCharity:e?.ein,selectedCharityThirdPartyIdentifier:e?.thirdPartyId,deviceId:t};if(!await this.shouldCreateOrUpdateUser(r,i))return r;const s=await f.get(this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY),{resultUser:a,resultToken:n}=await this._giveFreelyApiClient.createOrUpdateAnonymousUser(i,s);n&&await f.set(this.ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY,n),a&&(await f.set(this.ANONYMOUS_USER_STORAGE_KEY,a),r=a)}catch(e){this._logger.error("Error creating/updating anonymous user:",e)}return this.user=r,r}async fetchUser(){const e=await f.get(this.ANONYMOUS_USER_STORAGE_KEY);return this.user=e,e}async shouldCreateOrUpdateUser(e,t){return!e||e.charity?.ein!==t.selectedCharity||e.charity?.thirdPartyId!==t.selectedCharityThirdPartyIdentifier||e.deviceId!==t.deviceId}}const ae=e=>{try{return new URL(e),!0}catch{return!1}},ne=new Set,oe=new Set,ce={urls:["<all_urls>"],types:["main_frame"]};class ge{async handle(e,t){const r=e.payload,{giveFreelyService:i}=t,s=i.getLogger();try{const e=L,t=await f.get(e)||[],i=t.findIndex((e=>e.shopId===r.shopId));return i>=0?t[i]=r:t.push(r),await f.set(e,t),s.debug("Stored Shopify shop ID",{shopInfo:r}),{type:F,payload:{success:!0}}}catch(e){return s.error("Error storing Shopify shop ID",{shopInfo:r,error:e}),{type:F,payload:{success:!1}}}}}class le{async handle(e,t){const{shopId:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger();try{const e=L,t=(await f.get(e)||[]).find((e=>e.shopId===r));return t?(s.debug("Found domain for shop ID",{shopId:r,domain:t.domain}),{type:R,payload:{found:!0,domain:t.domain,shopInfo:t}}):(s.debug("No domain found for shop ID",{shopId:r}),{type:R,payload:{found:!1}})}catch(e){return s.error("Error getting domain for shop ID",{shopId:r,error:e}),{type:R,payload:{found:!1}}}}}class he{constructor(e,t){this.lastCheck=null,this.trackEvent=e,this.logger=t}async initialize(){const e=await f.get(N);e&&(this.lastCheck=e)}getToday(){return(new Date).toISOString().split("T")[0]}async check(){try{const e=this.lastCheck??0,t=this.getToday();(e?new Date(e).toISOString().split("T")[0]:null)!==t&&(this.lastCheck=Date.now(),await f.set(N,this.lastCheck),await this.trackEvent(r.checkoutPopupHealthCheck,{language:browser.i18n.getUILanguage()}))}catch(e){this.logger.error("Health check failed",{error:e instanceof Error?e.message:"Unknown error"})}}}const de=o.getInstance(),me="countryCode";class ue{async handle(e,t){const{lang:r}=e.payload,{giveFreelyService:i}=t,s=i.getLogger();s.debug("Getting language strings",{lang:r});try{const e=await i.getLanguage(r);return s.debug("Language strings fetched",{language:e}),{type:$,payload:{translations:e.translations,charities:e.charities}}}catch(e){return s.error("Error getting language strings",{error:e}),{type:$,payload:{translations:null,charities:null}}}}}const fe="https://cdn.givefreely.com/adunit/language",Ae=async(e,t,r,i,s=[],a=!1)=>{const n=(s??[]).includes(r)?G:r;e.debug(`Requested lang ${r} and current lang ${n}`);const o=`lang-${G}`,c=await K.get(o,(async()=>(e.debug(`Fetching default language ${G} for partner ${t}`),pe(t,G))),i||60,a);if(!c.content)throw new Error(`Failed to fetch default language ${G} and no cache version available`);if(G===n)return c.content;const g=`lang-${n}`,l=await K.get(g,(async()=>(e.debug(`Fetching language ${n} for partner ${t}`),pe(t,n))),i||60,a);if(!l.content)return c.content;const h=ve(c.content,l.content);return await K.set(g,h,i||60),h},pe=async(e,t)=>{const r=`/global-${t}.json`,i=`/${e}/${t}.json`,[s,a]=await Promise.allSettled([ye(`${fe}${r}`),ye(`${fe}${i}`)]);let n,o;"fulfilled"===s.status&&(n=s.value),"fulfilled"===a.status&&(o=a.value);const c=we(n,o);return{translations:c.translations,charities:c.charities}},ye=async e=>{const t=await fetch(e,{cache:"no-store"});if(!t.ok)throw new Error(`Failed to fetch partner language file ${e}. Status: ${t.status}. Reason: ${t.statusText}`);return t.json()},we=(e,t)=>({translations:{...e?.translations??{},...t??{}},charities:{...e?.charities??{}}}),ve=(e,t)=>({translations:{...e.translations,...t.translations},charities:{...e.charities,...t.charities}});class xe extends Error{constructor(e="Service not initialized"){super(e),this.name="UninitializedServiceError"}}exports.GiveFreelyService=class{constructor(e){this.partnerApiKey=e,this.dependencies={configService:new B(e)},this.logger=o.getInstance(),this.logger.configure({enabled:!0,title:"Background - GiveFreelyService"}),this.state={initialized:!1,wildfireService:null,partnerFilter:null,config:null,wfDeviceId:null,analytics:null,giveFreelyUserService:null,partnerApiKey:e,healthCheck:null}}assertInitialized(){if(!this.state.initialized)throw new xe}async initialize(e=async()=>(this.logger.debug("Using default partnerFilter."),!0)){if(!this.state.initialized)try{const t=await this.dependencies.configService.getConfig(!0);this.logger.configure({minLevel:t.backgroundMinLogLevel??"error"}),this.logger.info("Initializing GiveFreelyService",{partnerApiKey:this.partnerApiKey});const r=this.createWildfireService(t);this.state.healthCheck=new he(this.trackEvent.bind(this),this.logger),await this.state.healthCheck.initialize();const i=await W();await r.refreshCache(i);const s=new ie(this.partnerApiKey,t,this.logger);this.state.giveFreelyUserService=new se(s,this.logger),await this.state.giveFreelyUserService.fetchUser(),this.state.giveFreelyUserService.user?.id||await this.state.giveFreelyUserService.upsertUser();try{await(async()=>await f.get(me)||(async()=>{de.debug("detecting country");const e={method:"GET",headers:{"Content-Type":"application/json",Authorization:"Basic OTEzOTkxOnFlYmpaWF9DOGNRY0lxSHA4WTVjNGxzU1pRSlM2VW9MMExzTF9tbWs="}};try{const t=await fetch("https://geoip.maxmind.com/geoip/v2.1/country/me",e);if(de.debug("Received geolocation response",{status:t.status}),!t.ok)return void de.error("Failed to get geolocation data",{status:t.status,statusText:t.statusText});const r=await t.json();if(!r)throw new Error("There was an error fetching geoip look up");return await f.set(me,r.country.iso_code),r.country.iso_code}catch(e){return void de.error("Failed to get geolocation data",{error:e})}})())()}catch(e){this.logger.debug("Failed to get geolocation data",{error:e})}this.state.analytics=new Q(this.partnerApiKey,this.state.giveFreelyUserService,this.dependencies.configService),this.logger.addTransport(new a(this)),q.register(k,new V),q.register(O,new X),q.register(U,new J),q.register(D,new Z),q.register(P,new ee),q.register(_,new te),q.register(F,new ge),q.register(R,new le),q.register($,new ue),this.state.wildfireService=r,this.state.partnerFilter=e,this.state.config=t,this.state.initialized=!0,browser.webRequest&&(browser.webRequest.onBeforeRequest.addListener((e=>{const t=e.getLogger();return({requestId:r,url:i,initiator:s})=>{try{if(ne.has(r)||oe.has(r)||!ae(i))return;const{hostname:a,search:n}=new URL(i);if(a.includes("wild.link"))return t.info("Cashback activation request identified, ignoring affiliate check for request"),void oe.add(r);let o;s&&ae(s)&&(o=new URL(s).hostname),e.hasAffiliation([a,o],n)&&(t.info("Affiliation found on url, adding request id to track"),ne.add(r))}catch(e){t.error("Error on handleAffiliateOnBeforeRequest",e)}}})(this),ce),browser.webRequest.onBeforeRedirect.addListener((e=>{const t=e.getLogger();return async({requestId:r,redirectUrl:i})=>{try{if(!ne.has(r))return;t.info("Attempting to find active domain");const{hostname:s}=new URL(i),a=(await e.getActiveDomains()).find((e=>s===e.Domain||s.endsWith(`.${e.Domain}`)));if(!a)return;t.info("Found active domain. Updating standdown state"),await S(a.Domain)}catch(e){t.error("Error on handleAffiliateOnBeforeRedirect",e)}}})(this),ce),browser.webRequest.onCompleted.addListener((()=>{const e=this.getLogger();return({requestId:t})=>{try{ne.has(t)&&(e.info("Tracking request completed. Request Id:",t),ne.delete(t))}catch(t){e.error("Error on handleAffiliateOnCompleted",t)}}})(),ce)),function(e){const t=o.getInstance();h.runtime.onMessage.addListener(((r,i,s)=>{function a(e){s(e)}const n=e(r,0);return n instanceof Promise?(n.then((e=>{e&&a(e)})).catch((e=>{t.warn("Async message callback error:",e)})),!0):!0===n||void 0}))}((async(e,t)=>(this.logger.debug("Received message",{type:e.type,payload:e.payload}),this.handleMessage(e)))),t.purgeLanguages&&t.purgeLanguages.length>0&&await Promise.all(t.purgeLanguages.flatMap((e=>[K.clear(`lang-${e}`),K.clear(`global-${e}`)]))),l((async()=>{this.logger.debug("Initializing default language with partner API key",{partnerApiKey:this.partnerApiKey}),await Ae(this.logger,this.partnerApiKey,G,t.configRefreshInterval)})),this.logger.info("GiveFreelyService initialized successfully")}catch(e){const t=e instanceof Error?e.message:"Unknown error";throw this.logger.error("Failed to initialize GiveFreelyService",{error:t}),new Error(`Failed to initialize GiveFreelyService: ${t}`)}}getConfig(){return this.assertInitialized(),this.state.config}async getCachedConfig(){return this.state.config=await this.dependencies.configService.getConfig(),this.logger.configure({minLevel:this.state.config.backgroundMinLogLevel??"error"}),this.state.config}async getActiveDomains(){return this.assertInitialized(),this.state.wildfireService.getActiveDomains()}async shouldStandDown(e,t){this.assertInitialized();const r=new URL(t);if(!await this.state.partnerFilter(r.hostname))return this.logger.info("Should standdown due to partner filter."),!0;if(this.getConfig().merchantExclusions.some((t=>t.mutePopups&&e===t.domain)))return this.logger.info("Should standdown due to merchant exclusions"),!0;const i=await this.state.wildfireService.shouldStandDown(this.logger,e,t);return i&&this.logger.info("Should standdown due to vendor policy"),i}hasAffiliation(e,t){if(!this.state.wildfireService)return this.logger.warn("Wildfire service not initialized yet"),!1;const r=this.state.wildfireService.hasAffilliation(e,t);return r&&this.logger.info("Affiliation identified"),r}trackEvent(e,t,r=!1,i=!1){return this.assertInitialized(),this.state.analytics.track(e,this.state.wfDeviceId?.DeviceID,t,r,i)}getLogger(){return this.assertInitialized(),this.logger}async initializeWfDeviceId(){if(this.assertInitialized(),this.state.wfDeviceId=await this.state.wildfireService.getDevice(),!this.state.wfDeviceId)throw new Error("Failed to initialize Wildfire device ID");return this.state.wfDeviceId.DeviceID}getWfDeviceId(){return this.assertInitialized(),this.state.wfDeviceId.DeviceID}upsertUser(e,t){return this.assertInitialized(),this.state.giveFreelyUserService.upsertUser(e,t)}getCurrentUser(){return this.assertInitialized(),this.state.giveFreelyUserService.user}generateAffiliateUrl(e,t,r){return this.assertInitialized(),this.state.wildfireService.generateAffiliateUrl(e,t,r,this.state.partnerApiKey)}updateStanddownHistory(e){return this.assertInitialized(),S(e)}getMerchantRates(e){if(this.assertInitialized(),!this.state.wildfireService)throw new Error("Wildfire service not initialized");return this.state.wildfireService.getMerchantRates(e)}async healthCheck(){this.assertInitialized(),await this.state.healthCheck.check()}async getLanguage(e){return this.assertInitialized(),Ae(this.logger,this.state.partnerApiKey,e,this.state.config?.configRefreshInterval,this.state.config?.ignoredLanguages)}async handleMessage(e){this.assertInitialized();const t=q.get(e.type);if(!t)return;const r={giveFreelyService:this};return t.handle(e,r)}createWildfireService(e){this.logger.debug("Initializing wildfire service with config",this.state.config);const t=new m(e.wfSecret,e.wfAppId,e.deviceUrl,e.dataUrl,this.logger);return new H(t,this.logger,e.vanityBaseUrl,e.refreshInterval)}async destroy(){this.logger.info("Destroying GiveFreelyService"),await Promise.all([this.dependencies.configService.clearCache(),this.state.wildfireService?.clearCache(),this.state.giveFreelyUserService?.resetUser()]),this.state.initialized=!1,this.state.wildfireService=null,this.state.partnerFilter=null,this.state.analytics=null,this.state.config=null}},exports.browser=browser,exports.isAdUnitMessage=e=>q.exists(e);
|
|
2
|
+
//# sourceMappingURL=GiveFreely-background.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GiveFreely-background.cjs.js","sources":["../../node_modules/.pnpm/webextension-polyfill@0.12.0/node_modules/webextension-polyfill/dist/browser-polyfill.js","../../src/shared/analytics/types.ts","../../src/shared/utils/logger/transports/console.transport.ts","../../src/shared/utils/logger/transports/analytics.transport.ts","../../src/shared/utils/logger/logger.ts","../../src/shared/utils/retry.ts","../../src/shared/browser.ts","../../src/shared/vendors/wildfire/wildfireClient.ts","../../src/shared/utils/storage.ts","../../src/shared/vendors/wildfire/constants.ts","../../src/shared/vendors/wildfire/standdown.ts","../../src/shared/vendors/wildfire/trackingCode.ts","../../src/shared/constants.ts","../../src/shared/utils/cache.ts","../../src/shared/vendors/wildfire/wildfireService.ts","../../src/shared/config/giveFreelyConfigAdapters.ts","../../src/shared/utils/current-version.ts","../../src/shared/config/giveFreelyConfig.ts","../../src/background/strategies/MessageStrategy.ts","../../src/shared/utils.ts","../../src/background/strategies/IsActiveDomainStrategy.ts","../../src/background/strategies/GetPopupConfigStrategy.ts","../../src/background/strategies/HidePopupStrategy.ts","../../src/background/strategies/shouldStandDownStrategy.ts","../../src/shared/analytics/index.ts","../../src/shared/utils/add-time.ts","../../src/background/strategies/trackEventStrategy.ts","../../src/background/strategies/ActivateOfferStrategy.ts","../../src/shared/vendors/givefreely/giveFreelyApiClient.ts","../../src/shared/vendors/givefreely/giveFreelyUserService.ts","../../src/shared/utils/is-valid-url.ts","../../src/background/listeners/handleAffiliateStandDown.ts","../../src/background/filters/affiliateWebFilter.ts","../../src/background/strategies/StoreShopifyShopIdStrategy.ts","../../src/background/strategies/GetDomainByShopIdStrategy.ts","../../src/shared/analytics/healthCheck.ts","../../src/shared/services/geolocation.ts","../../src/background/strategies/GetLanguageContentStrategy.ts","../../src/shared/i18n/index.ts","../../src/background/giveFreelyService.ts","../../src/background/utils/isAdunitMessage.ts"],"sourcesContent":["(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(\"webextension-polyfill\", [\"module\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod);\n global.browser = mod.exports;\n }\n})(typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : this, function (module) {\n /* webextension-polyfill - v0.12.0 - Tue May 14 2024 18:01:29 */\n /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */\n /* vim: set sts=2 sw=2 et tw=80: */\n /* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n \"use strict\";\n\n if (!(globalThis.chrome && globalThis.chrome.runtime && globalThis.chrome.runtime.id)) {\n throw new Error(\"This script should only be loaded in a browser extension.\");\n }\n if (!(globalThis.browser && globalThis.browser.runtime && globalThis.browser.runtime.id)) {\n const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = \"The message port closed before a response was received.\";\n\n // Wrapping the bulk of this polyfill in a one-time-use function is a minor\n // optimization for Firefox. Since Spidermonkey does not fully parse the\n // contents of a function until the first time it's called, and since it will\n // never actually need to be called, this allows the polyfill to be included\n // in Firefox nearly for free.\n const wrapAPIs = extensionAPIs => {\n // NOTE: apiMetadata is associated to the content of the api-metadata.json file\n // at build time by replacing the following \"include\" with the content of the\n // JSON file.\n const apiMetadata = {\n \"alarms\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"clearAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"bookmarks\": {\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getChildren\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getRecent\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getSubTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTree\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"browserAction\": {\n \"disable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"enable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"getBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"openPopup\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"browsingData\": {\n \"remove\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"removeCache\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCookies\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeDownloads\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFormData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeHistory\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeLocalStorage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePasswords\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePluginData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"settings\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"commands\": {\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"contextMenus\": {\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"cookies\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAllCookieStores\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"devtools\": {\n \"inspectedWindow\": {\n \"eval\": {\n \"minArgs\": 1,\n \"maxArgs\": 2,\n \"singleCallbackArg\": false\n }\n },\n \"panels\": {\n \"create\": {\n \"minArgs\": 3,\n \"maxArgs\": 3,\n \"singleCallbackArg\": true\n },\n \"elements\": {\n \"createSidebarPane\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n }\n }\n },\n \"downloads\": {\n \"cancel\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"download\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"erase\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFileIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"open\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"pause\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFile\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"resume\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"extension\": {\n \"isAllowedFileSchemeAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"isAllowedIncognitoAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"history\": {\n \"addUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"deleteRange\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getVisits\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"i18n\": {\n \"detectLanguage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAcceptLanguages\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"identity\": {\n \"launchWebAuthFlow\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"idle\": {\n \"queryState\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"management\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setEnabled\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"uninstallSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"notifications\": {\n \"clear\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPermissionLevel\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"pageAction\": {\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"hide\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"permissions\": {\n \"contains\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"request\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"runtime\": {\n \"getBackgroundPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPlatformInfo\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"openOptionsPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"requestUpdateCheck\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"sendMessage\": {\n \"minArgs\": 1,\n \"maxArgs\": 3\n },\n \"sendNativeMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"setUninstallURL\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"sessions\": {\n \"getDevices\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getRecentlyClosed\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"restore\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"storage\": {\n \"local\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"managed\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"sync\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n }\n },\n \"tabs\": {\n \"captureVisibleTab\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"detectLanguage\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"discard\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"duplicate\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"executeScript\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getZoom\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getZoomSettings\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"goBack\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"goForward\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"highlight\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"insertCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"query\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"reload\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"sendMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 3\n },\n \"setZoom\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"setZoomSettings\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"update\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n }\n },\n \"topSites\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"webNavigation\": {\n \"getAllFrames\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFrame\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"webRequest\": {\n \"handlerBehaviorChanged\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"windows\": {\n \"create\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getLastFocused\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n }\n };\n if (Object.keys(apiMetadata).length === 0) {\n throw new Error(\"api-metadata.json has not been included in browser-polyfill\");\n }\n\n /**\n * A WeakMap subclass which creates and stores a value for any key which does\n * not exist when accessed, but behaves exactly as an ordinary WeakMap\n * otherwise.\n *\n * @param {function} createItem\n * A function which will be called in order to create the value for any\n * key which does not exist, the first time it is accessed. The\n * function receives, as its only argument, the key being created.\n */\n class DefaultWeakMap extends WeakMap {\n constructor(createItem, items = undefined) {\n super(items);\n this.createItem = createItem;\n }\n get(key) {\n if (!this.has(key)) {\n this.set(key, this.createItem(key));\n }\n return super.get(key);\n }\n }\n\n /**\n * Returns true if the given object is an object with a `then` method, and can\n * therefore be assumed to behave as a Promise.\n *\n * @param {*} value The value to test.\n * @returns {boolean} True if the value is thenable.\n */\n const isThenable = value => {\n return value && typeof value === \"object\" && typeof value.then === \"function\";\n };\n\n /**\n * Creates and returns a function which, when called, will resolve or reject\n * the given promise based on how it is called:\n *\n * - If, when called, `chrome.runtime.lastError` contains a non-null object,\n * the promise is rejected with that value.\n * - If the function is called with exactly one argument, the promise is\n * resolved to that value.\n * - Otherwise, the promise is resolved to an array containing all of the\n * function's arguments.\n *\n * @param {object} promise\n * An object containing the resolution and rejection functions of a\n * promise.\n * @param {function} promise.resolve\n * The promise's resolution function.\n * @param {function} promise.reject\n * The promise's rejection function.\n * @param {object} metadata\n * Metadata about the wrapped method which has created the callback.\n * @param {boolean} metadata.singleCallbackArg\n * Whether or not the promise is resolved with only the first\n * argument of the callback, alternatively an array of all the\n * callback arguments is resolved. By default, if the callback\n * function is invoked with only a single argument, that will be\n * resolved to the promise, while all arguments will be resolved as\n * an array if multiple are given.\n *\n * @returns {function}\n * The generated callback function.\n */\n const makeCallback = (promise, metadata) => {\n return (...callbackArgs) => {\n if (extensionAPIs.runtime.lastError) {\n promise.reject(new Error(extensionAPIs.runtime.lastError.message));\n } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) {\n promise.resolve(callbackArgs[0]);\n } else {\n promise.resolve(callbackArgs);\n }\n };\n };\n const pluralizeArguments = numArgs => numArgs == 1 ? \"argument\" : \"arguments\";\n\n /**\n * Creates a wrapper function for a method with the given name and metadata.\n *\n * @param {string} name\n * The name of the method which is being wrapped.\n * @param {object} metadata\n * Metadata about the method being wrapped.\n * @param {integer} metadata.minArgs\n * The minimum number of arguments which must be passed to the\n * function. If called with fewer than this number of arguments, the\n * wrapper will raise an exception.\n * @param {integer} metadata.maxArgs\n * The maximum number of arguments which may be passed to the\n * function. If called with more than this number of arguments, the\n * wrapper will raise an exception.\n * @param {boolean} metadata.singleCallbackArg\n * Whether or not the promise is resolved with only the first\n * argument of the callback, alternatively an array of all the\n * callback arguments is resolved. By default, if the callback\n * function is invoked with only a single argument, that will be\n * resolved to the promise, while all arguments will be resolved as\n * an array if multiple are given.\n *\n * @returns {function(object, ...*)}\n * The generated wrapper function.\n */\n const wrapAsyncFunction = (name, metadata) => {\n return function asyncFunctionWrapper(target, ...args) {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n return new Promise((resolve, reject) => {\n if (metadata.fallbackToNoCallback) {\n // This API method has currently no callback on Chrome, but it return a promise on Firefox,\n // and so the polyfill will try to call it with a callback first, and it will fallback\n // to not passing the callback if the first call fails.\n try {\n target[name](...args, makeCallback({\n resolve,\n reject\n }, metadata));\n } catch (cbError) {\n console.warn(`${name} API method doesn't seem to support the callback parameter, ` + \"falling back to call it without a callback: \", cbError);\n target[name](...args);\n\n // Update the API method metadata, so that the next API calls will not try to\n // use the unsupported callback anymore.\n metadata.fallbackToNoCallback = false;\n metadata.noCallback = true;\n resolve();\n }\n } else if (metadata.noCallback) {\n target[name](...args);\n resolve();\n } else {\n target[name](...args, makeCallback({\n resolve,\n reject\n }, metadata));\n }\n });\n };\n };\n\n /**\n * Wraps an existing method of the target object, so that calls to it are\n * intercepted by the given wrapper function. The wrapper function receives,\n * as its first argument, the original `target` object, followed by each of\n * the arguments passed to the original method.\n *\n * @param {object} target\n * The original target object that the wrapped method belongs to.\n * @param {function} method\n * The method being wrapped. This is used as the target of the Proxy\n * object which is created to wrap the method.\n * @param {function} wrapper\n * The wrapper function which is called in place of a direct invocation\n * of the wrapped method.\n *\n * @returns {Proxy<function>}\n * A Proxy object for the given method, which invokes the given wrapper\n * method in its place.\n */\n const wrapMethod = (target, method, wrapper) => {\n return new Proxy(method, {\n apply(targetMethod, thisObj, args) {\n return wrapper.call(thisObj, target, ...args);\n }\n });\n };\n let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);\n\n /**\n * Wraps an object in a Proxy which intercepts and wraps certain methods\n * based on the given `wrappers` and `metadata` objects.\n *\n * @param {object} target\n * The target object to wrap.\n *\n * @param {object} [wrappers = {}]\n * An object tree containing wrapper functions for special cases. Any\n * function present in this object tree is called in place of the\n * method in the same location in the `target` object tree. These\n * wrapper methods are invoked as described in {@see wrapMethod}.\n *\n * @param {object} [metadata = {}]\n * An object tree containing metadata used to automatically generate\n * Promise-based wrapper functions for asynchronous. Any function in\n * the `target` object tree which has a corresponding metadata object\n * in the same location in the `metadata` tree is replaced with an\n * automatically-generated wrapper function, as described in\n * {@see wrapAsyncFunction}\n *\n * @returns {Proxy<object>}\n */\n const wrapObject = (target, wrappers = {}, metadata = {}) => {\n let cache = Object.create(null);\n let handlers = {\n has(proxyTarget, prop) {\n return prop in target || prop in cache;\n },\n get(proxyTarget, prop, receiver) {\n if (prop in cache) {\n return cache[prop];\n }\n if (!(prop in target)) {\n return undefined;\n }\n let value = target[prop];\n if (typeof value === \"function\") {\n // This is a method on the underlying object. Check if we need to do\n // any wrapping.\n\n if (typeof wrappers[prop] === \"function\") {\n // We have a special-case wrapper for this method.\n value = wrapMethod(target, target[prop], wrappers[prop]);\n } else if (hasOwnProperty(metadata, prop)) {\n // This is an async method that we have metadata for. Create a\n // Promise wrapper for it.\n let wrapper = wrapAsyncFunction(prop, metadata[prop]);\n value = wrapMethod(target, target[prop], wrapper);\n } else {\n // This is a method that we don't know or care about. Return the\n // original method, bound to the underlying object.\n value = value.bind(target);\n }\n } else if (typeof value === \"object\" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) {\n // This is an object that we need to do some wrapping for the children\n // of. Create a sub-object wrapper for it with the appropriate child\n // metadata.\n value = wrapObject(value, wrappers[prop], metadata[prop]);\n } else if (hasOwnProperty(metadata, \"*\")) {\n // Wrap all properties in * namespace.\n value = wrapObject(value, wrappers[prop], metadata[\"*\"]);\n } else {\n // We don't need to do any wrapping for this property,\n // so just forward all access to the underlying object.\n Object.defineProperty(cache, prop, {\n configurable: true,\n enumerable: true,\n get() {\n return target[prop];\n },\n set(value) {\n target[prop] = value;\n }\n });\n return value;\n }\n cache[prop] = value;\n return value;\n },\n set(proxyTarget, prop, value, receiver) {\n if (prop in cache) {\n cache[prop] = value;\n } else {\n target[prop] = value;\n }\n return true;\n },\n defineProperty(proxyTarget, prop, desc) {\n return Reflect.defineProperty(cache, prop, desc);\n },\n deleteProperty(proxyTarget, prop) {\n return Reflect.deleteProperty(cache, prop);\n }\n };\n\n // Per contract of the Proxy API, the \"get\" proxy handler must return the\n // original value of the target if that value is declared read-only and\n // non-configurable. For this reason, we create an object with the\n // prototype set to `target` instead of using `target` directly.\n // Otherwise we cannot return a custom object for APIs that\n // are declared read-only and non-configurable, such as `chrome.devtools`.\n //\n // The proxy handlers themselves will still use the original `target`\n // instead of the `proxyTarget`, so that the methods and properties are\n // dereferenced via the original targets.\n let proxyTarget = Object.create(target);\n return new Proxy(proxyTarget, handlers);\n };\n\n /**\n * Creates a set of wrapper functions for an event object, which handles\n * wrapping of listener functions that those messages are passed.\n *\n * A single wrapper is created for each listener function, and stored in a\n * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener`\n * retrieve the original wrapper, so that attempts to remove a\n * previously-added listener work as expected.\n *\n * @param {DefaultWeakMap<function, function>} wrapperMap\n * A DefaultWeakMap object which will create the appropriate wrapper\n * for a given listener function when one does not exist, and retrieve\n * an existing one when it does.\n *\n * @returns {object}\n */\n const wrapEvent = wrapperMap => ({\n addListener(target, listener, ...args) {\n target.addListener(wrapperMap.get(listener), ...args);\n },\n hasListener(target, listener) {\n return target.hasListener(wrapperMap.get(listener));\n },\n removeListener(target, listener) {\n target.removeListener(wrapperMap.get(listener));\n }\n });\n const onRequestFinishedWrappers = new DefaultWeakMap(listener => {\n if (typeof listener !== \"function\") {\n return listener;\n }\n\n /**\n * Wraps an onRequestFinished listener function so that it will return a\n * `getContent()` property which returns a `Promise` rather than using a\n * callback API.\n *\n * @param {object} req\n * The HAR entry object representing the network request.\n */\n return function onRequestFinished(req) {\n const wrappedReq = wrapObject(req, {} /* wrappers */, {\n getContent: {\n minArgs: 0,\n maxArgs: 0\n }\n });\n listener(wrappedReq);\n };\n });\n const onMessageWrappers = new DefaultWeakMap(listener => {\n if (typeof listener !== \"function\") {\n return listener;\n }\n\n /**\n * Wraps a message listener function so that it may send responses based on\n * its return value, rather than by returning a sentinel value and calling a\n * callback. If the listener function returns a Promise, the response is\n * sent when the promise either resolves or rejects.\n *\n * @param {*} message\n * The message sent by the other end of the channel.\n * @param {object} sender\n * Details about the sender of the message.\n * @param {function(*)} sendResponse\n * A callback which, when called with an arbitrary argument, sends\n * that value as a response.\n * @returns {boolean}\n * True if the wrapped listener returned a Promise, which will later\n * yield a response. False otherwise.\n */\n return function onMessage(message, sender, sendResponse) {\n let didCallSendResponse = false;\n let wrappedSendResponse;\n let sendResponsePromise = new Promise(resolve => {\n wrappedSendResponse = function (response) {\n didCallSendResponse = true;\n resolve(response);\n };\n });\n let result;\n try {\n result = listener(message, sender, wrappedSendResponse);\n } catch (err) {\n result = Promise.reject(err);\n }\n const isResultThenable = result !== true && isThenable(result);\n\n // If the listener didn't returned true or a Promise, or called\n // wrappedSendResponse synchronously, we can exit earlier\n // because there will be no response sent from this listener.\n if (result !== true && !isResultThenable && !didCallSendResponse) {\n return false;\n }\n\n // A small helper to send the message if the promise resolves\n // and an error if the promise rejects (a wrapped sendMessage has\n // to translate the message into a resolved promise or a rejected\n // promise).\n const sendPromisedResult = promise => {\n promise.then(msg => {\n // send the message value.\n sendResponse(msg);\n }, error => {\n // Send a JSON representation of the error if the rejected value\n // is an instance of error, or the object itself otherwise.\n let message;\n if (error && (error instanceof Error || typeof error.message === \"string\")) {\n message = error.message;\n } else {\n message = \"An unexpected error occurred\";\n }\n sendResponse({\n __mozWebExtensionPolyfillReject__: true,\n message\n });\n }).catch(err => {\n // Print an error on the console if unable to send the response.\n console.error(\"Failed to send onMessage rejected reply\", err);\n });\n };\n\n // If the listener returned a Promise, send the resolved value as a\n // result, otherwise wait the promise related to the wrappedSendResponse\n // callback to resolve and send it as a response.\n if (isResultThenable) {\n sendPromisedResult(result);\n } else {\n sendPromisedResult(sendResponsePromise);\n }\n\n // Let Chrome know that the listener is replying.\n return true;\n };\n });\n const wrappedSendMessageCallback = ({\n reject,\n resolve\n }, reply) => {\n if (extensionAPIs.runtime.lastError) {\n // Detect when none of the listeners replied to the sendMessage call and resolve\n // the promise to undefined as in Firefox.\n // See https://github.com/mozilla/webextension-polyfill/issues/130\n if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {\n resolve();\n } else {\n reject(new Error(extensionAPIs.runtime.lastError.message));\n }\n } else if (reply && reply.__mozWebExtensionPolyfillReject__) {\n // Convert back the JSON representation of the error into\n // an Error instance.\n reject(new Error(reply.message));\n } else {\n resolve(reply);\n }\n };\n const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n return new Promise((resolve, reject) => {\n const wrappedCb = wrappedSendMessageCallback.bind(null, {\n resolve,\n reject\n });\n args.push(wrappedCb);\n apiNamespaceObj.sendMessage(...args);\n });\n };\n const staticWrappers = {\n devtools: {\n network: {\n onRequestFinished: wrapEvent(onRequestFinishedWrappers)\n }\n },\n runtime: {\n onMessage: wrapEvent(onMessageWrappers),\n onMessageExternal: wrapEvent(onMessageWrappers),\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", {\n minArgs: 1,\n maxArgs: 3\n })\n },\n tabs: {\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", {\n minArgs: 2,\n maxArgs: 3\n })\n }\n };\n const settingMetadata = {\n clear: {\n minArgs: 1,\n maxArgs: 1\n },\n get: {\n minArgs: 1,\n maxArgs: 1\n },\n set: {\n minArgs: 1,\n maxArgs: 1\n }\n };\n apiMetadata.privacy = {\n network: {\n \"*\": settingMetadata\n },\n services: {\n \"*\": settingMetadata\n },\n websites: {\n \"*\": settingMetadata\n }\n };\n return wrapObject(extensionAPIs, staticWrappers, apiMetadata);\n };\n\n // The build process adds a UMD wrapper around this file, which makes the\n // `module` variable available.\n module.exports = wrapAPIs(chrome);\n } else {\n module.exports = globalThis.browser;\n }\n});\n//# sourceMappingURL=browser-polyfill.js.map\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["globalThis","chrome","runtime","id","Error","browser","module","exports","CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE","wrapAPIs","extensionAPIs","apiMetadata","alarms","clear","minArgs","maxArgs","clearAll","get","getAll","bookmarks","create","getChildren","getRecent","getSubTree","getTree","move","remove","removeTree","search","update","browserAction","disable","fallbackToNoCallback","enable","getBadgeBackgroundColor","getBadgeText","getPopup","getTitle","openPopup","setBadgeBackgroundColor","setBadgeText","setIcon","setPopup","setTitle","browsingData","removeCache","removeCookies","removeDownloads","removeFormData","removeHistory","removeLocalStorage","removePasswords","removePluginData","settings","commands","contextMenus","removeAll","cookies","getAllCookieStores","set","devtools","inspectedWindow","eval","singleCallbackArg","panels","elements","createSidebarPane","downloads","cancel","download","erase","getFileIcon","open","pause","removeFile","resume","show","extension","isAllowedFileSchemeAccess","isAllowedIncognitoAccess","history","addUrl","deleteAll","deleteRange","deleteUrl","getVisits","i18n","detectLanguage","getAcceptLanguages","identity","launchWebAuthFlow","idle","queryState","management","getSelf","setEnabled","uninstallSelf","notifications","getPermissionLevel","pageAction","hide","permissions","contains","request","getBackgroundPage","getPlatformInfo","openOptionsPage","requestUpdateCheck","sendMessage","sendNativeMessage","setUninstallURL","sessions","getDevices","getRecentlyClosed","restore","storage","local","getBytesInUse","managed","sync","tabs","captureVisibleTab","discard","duplicate","executeScript","getCurrent","getZoom","getZoomSettings","goBack","goForward","highlight","insertCSS","query","reload","removeCSS","setZoom","setZoomSettings","topSites","webNavigation","getAllFrames","getFrame","webRequest","handlerBehaviorChanged","windows","getLastFocused","Object","keys","length","DefaultWeakMap","WeakMap","constructor","createItem","items","undefined","super","this","key","has","makeCallback","promise","metadata","callbackArgs","lastError","reject","message","resolve","pluralizeArguments","numArgs","wrapMethod","target","method","wrapper","Proxy","apply","targetMethod","thisObj","args","call","hasOwnProperty","Function","bind","prototype","wrapObject","wrappers","cache","handlers","proxyTarget","prop","receiver","value","wrapAsyncFunction","name","Promise","cbError","console","warn","noCallback","defineProperty","configurable","enumerable","desc","Reflect","deleteProperty","wrapEvent","wrapperMap","addListener","listener","hasListener","removeListener","onRequestFinishedWrappers","req","wrappedReq","getContent","onMessageWrappers","sender","sendResponse","wrappedSendResponse","result","didCallSendResponse","sendResponsePromise","response","err","isResultThenable","then","msg","error","__mozWebExtensionPolyfillReject__","catch","wrappedSendMessageCallback","reply","wrappedSendMessage","apiNamespaceObj","wrappedCb","push","staticWrappers","network","onRequestFinished","onMessage","onMessageExternal","settingMetadata","privacy","services","websites","PopupEvent","LoggingEvent","ConsoleTransport","isLocal","log","level","timestamp","data","title","consoleMethod","titlePrefix","LOGGER_PREFIX","AnalyticsTransport","gfService","trackEvent","adUnitLog","LOG_LEVELS","Logger","config","minLevel","enabled","transports","getInstance","instance","configure","shouldLog","indexOf","createLogMessage","version","LIB_VERSION","Date","toISOString","onlyLocal","logMessage","filter","transport","forEach","debug","info","addTransport","clearTransports","MAX_RETRY_ATTEMPTS","defaultDelay","attempt","async","retryOperation","operation","options","returnOnFailure","maxAttempts","delayFn","setTimeout","logger","operationName","api","WildfireClient","wfSecret","wfAppId","deviceUrl","dataUrl","_logger","getWildfireDevice","fetch","body","JSON","stringify","headers","ok","json","status","statusText","getActiveDomains","url","getStanddownPolicy","getMerchantRates","rates","storagePrefix","prefixedKey","prefixedKeys","Array","isArray","map","wildfireStorageKeys","shouldStandDown","activeDomain","affiliateStandDown","getStanddownHistory","now","updateStanddownHistory","refreshCache","policy","hasAffiliateParams","URL","hasAffiliation","hostNames","standDownPolicy","some","hostname","hasAffiliateDomain","domain","hours","Domains","includes","searchParams","Params","param","toLowerCase","TrackingCode","userId","charityEin","charityThirdPartyIdentifier","partnerId","toString","encodeUserId","btoa","replace","MESSAGE_TYPES","SHOPIFY_SHOP_IDS_STORAGE_KEY","LAST_HEALTH_CHECK_STORAGE_KEY","DEFAULT_LANGUAGE","hydrationFn","retentionInSeconds","forceRefresh","cachedValue","staleValue","isStale","expiration","content","rawContent","ex","refresh","WildfireService","wildfireClient","vanityBaseUrl","refreshInterval","hasAffilliation","domains","fetchActiveDomains","merchantId","cachedRates","fetchMerchantRates","generateAffiliateUrl","originalUrl","user","partner","device","getDevice","trackingCode","generateTrackingCode","encodedUrl","encodeURIComponent","encodedTrackingCode","DeviceID","ID","clearCache","all","forceSync","fetchStanddownPolicy","getRetryOptions","fetchAndStoreDevice","charity","ein","thirdPartyId","LostAttribution","Serp","merchantRates","VERSION_KEY","getCurrentVersion","String","isNewVersion","updateStorageIfNew","storedVersion","currentVersion","isANewVersion","newVersion","CONFIG_BASE_URL","GiveFreelyConfigService","partnerApiKey","partnerConfig","globalConfig","PARTNER_CONFIG_STORAGE_KEY","GLOBAL_CONFIG_STORAGE_KEY","globalConfigRefreshInterval","partnerConfigRefreshInterval","fetchPartnerConfig","cacheResult","configRefreshInterval","fetchGlobalConfig","configResponse","getConfig","forceRefreshIfIsNewVersion","mergedConfigs","mergeConfigs","parse","merchantExclusionsAdapter","destinationConfig","merchantExclusions","globalConfigRecord","partnerConfigRecord","MessageStrategyRegistry","register","messageType","strategy","strategies","exists","type","isValidMessage","Map","IsActiveDomainStrategy","handle","context","payload","giveFreelyService","getLogger","activeDomains","healthCheck","x","disableDomain","endsWith","isActive","count","find","Domain","Merchant","GetPopupConfigStrategy","getCachedConfig","HidePopupStrategy","days","expiry","setDate","getDate","popupHide","getTime","ack","ShouldStandDownStrategy","Analytics","userService","configService","debounceWindowInMinutes","track","eventType","wfDeviceId","anonymous","skipThrottling","event","_partnerApiKey","eventData","_userService","libVersion","serializedEvent","_key","stack","eventsUrl","getEventsUrl","shouldBroadcastEvent","pushEventToHistory","getEventsHistory","browserStorage","GF_AD_EVENT_HISTORY","lastHourDate","m","setTime","addMinutes","_debounceWindowInMinutes","typedHistory","createdAt","entry","_configService","TrackEventStrategy","ActivateOfferStrategy","selectedCharity","initializeWfDeviceId","currentUser","upsertUser","affiliateUrl","currentTab","tab","newTab","openerTabId","active","pinned","onUpdated","updatedTabId","changeInfo","tabId","waitForTabToLoad","createTab","checkoutPopupFailedActivation","CommissionStatusEnum","GiveFreelyApiClient","adUnitId","getAnonymousUserCommissions","anonymousUserToken","filterParams","queryString","URLSearchParams","apiConfig","baseUri","getAnonymousUserComissionsPath","createOrUpdateAnonymousUser","requestPayload","createAnonymousUserPath","setAnonymousUserTokenHeader","resultUser","selectedCharityThirdPartyIdentifier","resultToken","GiveFreelyUserService","giveFreelyApiClient","ANONYMOUS_USER_STORAGE_KEY","ANONYMOUS_ENCRIPTED_TOKEN_STORAGE_KEY","_giveFreelyApiClient","resetUser","fetchUser","changingPayload","deviceId","shouldCreateOrUpdateUser","anonymousEncriptedToken","isValidURL","affiliatedRequests","Set","ignoredRequests","affiliateWebFilter","urls","types","StoreShopifyShopIdStrategy","shopInfo","STORAGE_KEY","existingData","existingIndex","findIndex","item","shopId","success","GetDomainByShopIdStrategy","matchingShopInfo","found","HealthCheck","lastCheck","initialize","lastHealthCheckStored","getToday","split","check","lastHealthCheck","today","checkoutPopupHealthCheck","language","getUILanguage","countryCodeKey","GetLanguageContentStrategy","lang","getLanguage","translations","charities","CDN_BASE_URL","cacheExpiration","ignoredLanguages","currentLang","defaultLanguageCacheKey","defaultLanguage","hydrateLanguage","languageCacheKey","resultLanguage","mergeLanguages","GLOBAL_LANGUAGE_PREFIX","PARTNER_LANGUAGE_PREFIX","globalLanguageFile","partnerLanguageResult","allSettled","fetchLanguage","globalFile","partnerLanguageFile","resultingLanguage","mergeGlobalAndPartner","globalConfiguration","partnerConfiguration","UninitializedServiceError","dependencies","state","initialized","wildfireService","partnerFilter","analytics","giveFreelyUserService","assertInitialized","backgroundMinLogLevel","createWildfireService","giveFreelyClient","requestOptions","Authorization","country","iso_code","detectUsersCountry","getCountryCode","onBeforeRequest","requestId","initiator","add","initiatorHostname","listeners","filters","onBeforeRedirect","redirectUrl","onCompleted","delete","callback","typedSendResponse","resp","maybePromise","addMessageListener","_sender","handleMessage","purgeLanguages","flatMap","parsedUrl","mutePopups","hosts","getWfDeviceId","getCurrentUser","destroy"],"mappings":"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","x_google_ignoreList":[0]}
|