@bringweb3/chrome-extension-kit 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var re=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var ot=Object.prototype.hasOwnProperty;var st=(e,t)=>{for(var r in t)re(e,r,{get:t[r],enumerable:!0})},at=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of it(t))!ot.call(e,n)&&n!==r&&re(e,n,{get:()=>t[n],enumerable:!(i=nt(t,n))||i.enumerable});return e};var ct=e=>at(re({},"__esModule",{value:!0}),e);var tr={};st(tr,{bringInitBackground:()=>Xe,bringInitContentScript:()=>xe,getPopupEnabled:()=>tt,getTurnOff:()=>Ze,setPopupEnabled:()=>rt,setTurnOff:()=>et});module.exports=ct(tr);var ne=e=>{try{switch(e){case"VERSION":return process?.env?.VERSION;case"ENDPOINT":return process?.env?.ENDPOINT;case"IFRAME_URL":return process?.env?.IFRAME_URL;default:return}}catch{return}},ge=ne("VERSION"),he=ne("ENDPOINT"),ie=ne("IFRAME_URL");var lt=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,s])=>{s&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(s)):t.append(n,s))}),t.toString()},oe=lt;var we={name:"@bringweb3/chrome-extension-kit",version:"1.5.1",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --env.ENDPOINT=dev --env.VERSION=1.5.0 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify","build:dev":"tsup index.ts --format cjs,esm --dts --minify --env.ENDPOINT=dev --env.VERSION=1.5.0",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var dt=()=>ge||we.version,W=dt;var ut=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:s,switchWallet:l})=>{let d=chrome.runtime.id,a=`bringweb3-iframe-${d}`,c=document.getElementById(a),m=ie?`${ie}${s?"/"+s:""}`:n;if(c)return c;let u=oe({query:{...e,extensionId:d,v:W(),themeMode:r,textMode:i,switchWallet:String(l)}}),f=t?`&${oe({query:t,prefix:"t"})}`:"",p=document.createElement("iframe");return p.id=a,p.src=encodeURI(`${m}?${u}${f}`),p.setAttribute("sandbox","allow-scripts allow-same-origin"),p.style.position="fixed",p.scrolling="no",p.style.overflow="hidden",p.style.width="1px",p.style.height="1px",p.style.right="8px",p.style.borderRadius="10px",p.style.border="none",p.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(p.style.boxShadow=t.popupShadow),document.documentElement.appendChild(p),p},Ee=ut;var pt=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},ye=pt;var ft=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let r=t.sheet;r?e.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},be=ft;var b={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE",STOP_REMINDERS:"STOP_REMINDERS"},gt=[b.ACTIVATE],ht=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:s,keyFrames:l,time:d,extensionId:a,url:c,domain:m,redirectUrl:u,iframeUrl:f,token:p,flowId:g,platformName:h}=e.data;if(i==="bringweb3"&&!(a!==chrome.runtime.id&&!gt.includes(n)))switch(n){case b.OPEN:ye(t,s);break;case b.CLOSE:t&&t.parentNode?.removeChild(t),d&&chrome.runtime.sendMessage({action:n,time:d,domain:m,from:"bringweb3"});break;case b.PROMPT_LOGIN:r();break;case b.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:m,extensionId:a,time:d,redirectUrl:u,iframeUrl:f,token:p,flowId:g,platformName:h});break;case b.OPT_OUT:chrome.runtime.sendMessage({action:n,time:d,from:"bringweb3"});break;case b.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:m,time:d,from:"bringweb3"});break;case b.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case b.ADD_KEYFRAMES:be(l);break;case b.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:c,from:"bringweb3"});break;case b.STOP_REMINDERS:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;default:break}},Ae=ht;var Oe=async({iframeEl:e,getWalletAddress:t})=>{e||(e=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`));let r=await t();e?.contentWindow?.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},wt=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>Oe({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let s=e[n];s&&window.addEventListener(s,async()=>Oe({iframeEl:i,getWalletAddress:r}))}},Pe=wt;var Et=e=>e.endsWith("/")?e.slice(0,-1):e,H=Et;var yt=["www.","www1.","www2."],bt=e=>{for(let r of yt)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=H(t),t},P=bt;var N=null,se,ae=!1,ve=null,At=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:s,theme:l,text:d,switchWallet:a=!1})=>{if(window.self!==window.top&&H(window.document.location.origin).endsWith("bringweb3.io")){window.addEventListener("message",c=>{if(!c.data||c.data.from!=="bringweb3"||c.data.action!=="PORTAL_ACTIVATE")return;let{action:m,domain:u,extensionId:f,time:p,iframeUrl:g,token:h,platformName:w}=c.data;chrome.runtime.sendMessage({action:m,from:"bringweb3",domain:u,extensionId:f,time:p,iframeUrl:g,token:h,source:"portal",platformName:w})});return}if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");Pe({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:N}),window.addEventListener("message",c=>Ae({event:c,iframeEl:N,promptLogin:t})),chrome.runtime.onMessage.addListener((c,m,u)=>{if(c?.from!=="bringweb3")return;let{action:f}=c;switch(f){case"GET_WALLET_ADDRESS":return e().then(p=>u({status:"success",walletAddress:p})).catch(p=>u({status:"success",walletAddress:void 0})),!0;case"CLOSE_POPUP":N&&se===c.path&&P(location.href)===P(c.domain)?(N.parentNode?.removeChild(N),ae=!1,se=void 0,u({status:"success",message:"Popup closed",location:window.document.location.href,flowId:ve})):u({status:"failed",message:"Domain mismatch or iframe not open"});case"INJECT":try{let{referrer:p}=document,g=c.referrers||[];if(P(location.href)!==P(c.domain))return u({status:"failed",message:"Domain already changed"}),!0;if(ae)return u({status:"failed",message:"iframe already open"}),!0;if(!!p&&g.includes(P(p))&&c.page==="")return u({status:"failed",message:`already activated by ${P(p)}`,action:"activate"}),!0;let{token:w,iframeUrl:y,userId:$}=c,K={token:w};return $&&(K.userId=$),N=Ee({query:K,iframeUrl:y,theme:l==="dark"?s:n,themeMode:l||"light",text:d,switchWallet:a,page:c.page}),ae=!0,se=`/${c.page||""}`,ve=c.flowId,u({status:"success"}),!0}catch(p){return p instanceof Error?u({status:"failed",message:p.message}):u({status:"failed",message:String(p)}),!0}default:console.error(`Unknown action: ${f}`);break}})},xe=At;var E=class e{static instance=null;apiEndpoint="";endpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){switch(this.endpoint=t,t){case"prod":this.apiEndpoint="https://api.bringweb3.io/v1/extension";break;case"sandbox":this.apiEndpoint="https://sandbox-api.bringweb3.io/v1/extension";break;case"dev":this.apiEndpoint="https://dev-api.bringweb3.io/v1/extension";break;default:this.apiEndpoint="https://sandbox-api.bringweb3.io/v1/extension";break}}setApiKey(t){this.apiKey=t}getWhitelistEndpoint(){return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}getEndpoint(){if(!this.endpoint)throw new Error("endpoint not set. Call setApiEndpoint first.");return this.endpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var ce=class{cache=new Map;get(t){let r=this.cache.get(t);return r?r.value:null}set(t,r){this.cache.set(t,{value:r})}delete(t){this.cache.delete(t)}clear(){this.cache.clear()}getStats(){return{size:this.cache.size,keys:Array.from(this.cache.keys())}}},Te=ce;var _=e=>{try{return new Uint8Array(atob(e).split("").map(t=>t.charCodeAt(0)))}catch{return null}},Q=e=>btoa(String.fromCharCode(...e)),Ot={relevantDomains:{get:_,set:Q},redirectsWhitelist:{get:_,set:Q},portalRelevantDomains:{get:_,set:Q},postPurchaseUrls:{get:_,set:Q}},F=Ot;var T=e=>e.split("").reverse().join(""),J=e=>{let t=[];for(let n of e){let s=n.indexOf("/");if(s===-1)t.push(T(n));else{let l=n.substring(0,s),d=n.substring(s),a=T(l);t.push(a+d)}}t.sort();let r=[],i="";for(let n of t){let s=Math.min(i.length,n.length,32),l=0;for(;l<s&&i[l]===n[l];)l++;let d=n.substring(l),a=new TextEncoder().encode(d);if(a.length>0){let c=Math.min(...a);if(c<33)throw new Error(`Invalid rem byte: ${c}`)}r.push(l),r.push(...a),i=n}return new Uint8Array(r)},Ie=e=>{let t=[],r=0,i="",n=0;for(;r<e.length;){let s=e[r];r++;let l=r;for(;l<e.length;){let u=e[l];if(u===void 0||u<33)break;l++}let d=new TextDecoder().decode(e.slice(r,l)),a=i.substring(0,s)+d,c=a.indexOf("/"),m;if(c===-1)m=T(a);else{let u=a.substring(0,c),f=a.substring(c);m=T(u)+f}t.push(m),i=a,r=l}return t},D=(e,t,r=!1,i=!1)=>{let n=t.indexOf("/"),s=n===-1?t:t.substring(0,n),l=n===-1?"":t.substring(n+1),d=T(s),a=0,c="";for(;a<e.length;){let m=e[a];if(m===void 0||m<0||m>32)throw new Error(`Invalid LCP marker: ${m}`);a++;let u=a;for(;u<e.length;){let y=e[u];if(y===void 0||y<33)break;u++}let f=new TextDecoder().decode(e.slice(a,u));a=u;let p=c.substring(0,m)+f;c=p;let g=p.indexOf("/"),h,w;if(g===-1)h=T(p),w="";else{let y=p.substring(0,g);h=T(y),w=p.substring(g+1)}if(h===s||h.startsWith("*.")&&(s.endsWith("."+h.substring(2))||s===h.substring(2))){if(l===""&&w==="")return{matched:!0,match:`${h}${g!==-1?`/${w}`:""}`};if(r){let y=`^${w}${i?"$":""}`;if(new RegExp(y).test(l))return{matched:!0,match:`${h}${g!==-1?`/${w}`:""}`}}else if(i&&l===w||!i&&l.startsWith(w))return{matched:!0,match:`${h}${g!==-1?`/${w}`:""}`}}if(T(h)>d)return{matched:!1,match:void 0}}return{matched:!1,match:void 0}};var le=e=>{if(!e||!Array.isArray(e)||e.length!==2)return!1;let[t,r]=e;return typeof t=="number"&&typeof r=="number"&&t<=r},V=(e,t,r)=>{if(!le(e))return!0;let[i,n]=e;return t=t??Date.now(),t<i||t>n||r?.maxRange!==void 0&&n-i>r.maxRange},v=(e,t,r)=>!V(e,t,r);var Y="bring_",A=new Te,_e=async(e,t,r=!0)=>(r&&A.set(e,t),new Promise((i,n)=>{F[e]?.set&&(t=F[e].set(t)),chrome.storage.local.set({[`${Y}${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):i()})})),me=async(e,t=!0)=>{if(t){let r=A.get(e);if(r!==null)return r}return new Promise((r,i)=>{chrome.storage.local.get([`${Y}${e}`],n=>{if(chrome.runtime.lastError)i(chrome.runtime.lastError);else{let s=n[`${Y}${e}`];s&&F[e]?.get&&(s=F[e].get(s)),t&&s!==void 0&&A.set(e,s),r(s)}})})},De=async e=>(A.delete(e),new Promise((t,r)=>{chrome.storage.local.remove([`${Y}${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})})),Pt=()=>{A.clear()},vt=e=>{A.delete(e)},xt=()=>A.getStats(),Tt=()=>{if(!(typeof globalThis>"u"))try{globalThis.bringCache={clear:()=>A.clear(),stats:()=>A.getStats(),get:async e=>await me(e),getReadable:async e=>{let t=await me(e);return t instanceof Uint8Array?t=Ie(t):le(t)&&(t=`[${new Date(t[0]).toLocaleString("en-GB")} - ${new Date(t[1]).toLocaleString("en-GB")}] Total of ${(t[1]-t[0])/1e3/60} minutes`),t},set:async(e,t)=>await _e(e,t),invalidate:e=>A.delete(e),delete:async e=>await De(e)}}catch(e){console.warn("Failed to initialize debug cache:",e)}},o={set:_e,get:me,remove:De,clearCache:Pt,invalidateCache:vt,getCacheStats:xt,initializeDebugCache:Tt};var z=require("uuid"),Se=2,Ne=async(e,t)=>{let r=await o.get(e);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>t?r[i]=[t,n]:delete r[i];await o.set(e,r)}},It=async()=>{try{let e=Date.now(),t=await o.get("optOut");return t&&typeof t=="number"&&t>e?await o.set("optOut",[e,t]):await o.remove("optOut"),await Ne("optOutDomains",e),await Ne("quietDomains",e),!0}catch{return!1}},_t=async()=>{try{let e=await o.get("quietDomains");if(e&&typeof e=="object"){for(let[r,i]of Object.entries(e))Array.isArray(i)&&(e[r]={time:i,phase:"quiet"});await o.set("quietDomains",e)}let t=await o.get("id");return(0,z.validate)(t||"")||(t=(0,z.v4)(),await o.set("id",t)),!0}catch{return!1}},Ce=async()=>{let e=await o.get("migrationVersion")||0;e<1&&await It()&&await o.set("migrationVersion",1),e<Se&&await _t()&&await o.set("migrationVersion",Se)};var Re="quietDomains",Dt=async(e,t,r,i)=>{let n=await o.get(Re);(typeof n!="object"||n===null)&&(n={});let s=Date.now(),l=s+t;n[e]={time:[s,l],phase:i||"quiet"},r&&(n[e].payload=r),await o.set(Re,n)},C=Dt;var X=require("uuid"),St=async()=>{let e=await o.get("id");return(0,X.validate)(e)||(e=(0,X.v4)(),await o.set("id",e)),e},O=St;var Nt=async e=>{let{path:t,method:r,params:i}=e;if(!e||!t||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let n=E.getInstance().getApiEndpoint();n+=t;let s=E.getInstance().getApiKey();if(r==="GET"){let a=new URLSearchParams({...i,version:W(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await O()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${a.toString()}`}else r==="POST"&&(i={...i,version:W(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await O()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(i):void 0})).json()},I=Nt;var Ct=async({walletAddress:e,cashbackUrl:t,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:e};return await o.get("disableReminders")&&(n.disableReminders=!0),r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),t&&(n.cashbackUrl=t),await I({path:"/check/notification",method:"POST",params:n})},Ue=Ct;var Rt=(e,t,r)=>{r=r||5;let i=1e3;return new Promise((n,s)=>{let l=d=>{chrome.tabs.get(e,a=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},c=>{chrome.runtime.lastError?d<r-1?setTimeout(()=>l(d+1),i*Math.pow(2,d)):n(null):n(c||null)})})};l(0)})},x=Rt;var Ut=async e=>{let t=await o.get("walletAddress");try{if(!e){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return t;e=i[0].id}let r=await x(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},R=Ut;var Mt=async(e,t,r,i=!1)=>{let n={showNotification:!1,token:"",iframeUrl:""},s=Date.now(),l=await o.get("notificationCheck");if(!i&&v(l,s))return n;let d=t?await R(t):await o.get("walletAddress"),a=await o.get("lastActivation"),c=a?s-a:void 0,m=await Ue({walletAddress:d,cashbackUrl:r,lastActivation:a,timeSinceLastActivation:c});await o.set("notificationCheck",[s,s+m.nextCall]);let u={showNotification:m.showNotification,token:m.token,iframeUrl:m.iframeUrl,expiration:[s,s+m.expiration]};return u.showNotification&&e&&await Promise.all([o.set("notification",u),o.remove("lastActivation")]),u},U=Mt;var kt=e=>e?chrome.runtime.getURL(e):"",M=kt;var Lt=async e=>{let t=E.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};r.params={},t&&(r.params.whitelist=encodeURIComponent(t)),e&&(r.params.trigger=e);let i=await I(r);return i.relevantDomains=_(i.relevantDomains),i.postPurchaseUrls=_(i.postPurchaseUrls),i},Me=Lt;var ke=e=>{if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="string")return`"${e}"`;if(typeof e=="number")return Number.isNaN(e)?"NaN":String(e);if(typeof e=="boolean")return String(e);if(Array.isArray(e))return`[${e.map(t=>t===void 0?"undefined":t===null?"null":ke(t)).join(", ")}]`;if(typeof e=="object")try{return JSON.stringify(e,(t,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(e)}}`}return String(e)},k=ke;var Le=async()=>{try{let e=E.getInstance().getWhitelistEndpoint();if(!e)return[];let t=await fetch(e,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!t.ok)throw new Error("Failed to fetch whitelist");let r=await t.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r=J(r),r}catch(e){return console.error("Error fetching whitelist:",e),[]}};var Z=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=E.getInstance().getWhitelistEndpoint(),n=null,s=Date.now();if(t?t instanceof Uint8Array?e?Array.isArray(e)?e.length!==2?n=`invalid domains timestamp check format__length: ${e.length} - value: ${k(e)}`:e[0]>=s?n=`cache expired - range start is bigger than Date.now()__value: ${k(e)}, now: ${s}`:s>=e[1]?n="cache expired - range end is smaller than Date.now()":i&&(!r?.length||!(r instanceof Uint8Array))?n="missing whitelist data":V(e,s)&&(n=`cache expired - range is expired__range: ${k(e)}, now: ${s}`):n=`invalid domains timestamp check format - not an array__value: ${k(e)}`:n=`no domains timestamp check found__value: ${k(e)}`:n="domains list isn't an Uint8Array":n="no domains in cache",!n)return t;let l=await Me(n),{nextUpdateTimestamp:d,relevantDomains:a,postPurchaseUrls:c}=l;r=await Le();let m=[o.set("relevantDomains",a),o.set("relevantDomainsCheck",[s,s+d]),o.set("postPurchaseUrls",c)];return r&&m.push(o.set("redirectsWhitelist",r)),await Promise.all(m),a};var $t=async e=>{try{if(!E.getInstance().getWhitelistEndpoint())return!0;let r=await o.get("redirectsWhitelist");if((!(r instanceof Uint8Array)||!r?.length)&&(await Z(),r=await o.get("redirectsWhitelist")),!r?.length)return!1;let i=P(e),{matched:n}=D(r,i);return n}catch{return console.error("Invalid URL:",e),!1}},ee=$t;var Wt=async e=>{let t=Array.isArray(e);t?e.forEach(r=>r.category=r.category||"system"):e.category=e?.category||"system",await I({path:"/analytics",method:"POST",params:t?{events:e}:e})},L=Wt;var Ft=async(e,t,r,i)=>{let s=(await chrome.tabs.query({})).map(m=>m.id).filter(m=>m&&m!==t),l=[],d=await O(),a=await R(),c=s.map(m=>x(m,{action:"CLOSE_POPUP",reason:"already_activated",path:i||"/",domain:e},2).then(u=>{u.status==="success"&&l.push({type:"popup_auto_close",location:u.location,flowId:u.flowId,closer:r,domain:e,userId:d,walletAddress:a})}).catch(()=>{}));await Promise.all(c),l.length&&await L(l)},$e=Ft;var Vt=async(e,t,r,i,n,s,l,d,a,c,m)=>{let u=Date.now(),f=t===chrome.runtime.id;if(f){let g=[o.set("lastActivation",u)];r==="portal"&&g.push(o.set("portalRelevantDomains",J([e]))),await Promise.all(g)}e&&C(e,s||864e5,{iframeUrl:d,token:a,flowId:c},f?"activated":"quiet"),$e(e,l||-1,t),l&&m&&await ee(m)&&chrome.tabs.update(l,{url:m}),await U(n,void 0,M(i),f)},G=Vt;var We="optOutDomains",jt=async(e,t)=>{if(!e)return;let r=await o.get(We);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+t;r[e]=[i,n],await o.set(We,r)},Fe=jt;var Ve=e=>{e&&chrome.tabs.create({url:e})};var je=async e=>{if(e<0)return await o.remove("optOut"),{isOptedOut:!1};{let t=Date.now();return await o.set("optOut",[t,t+e]),{isOptedOut:!0}}},Ge=async()=>{let e=await o.get("optOut");return{isOptedOut:v(e)}};var Gt=(e,t)=>{chrome.runtime.onMessage.addListener((r,i,n)=>{if(r?.from!=="bringweb3")return;let{action:s}=r,l=r.source||"popup";switch(s){case"ACTIVATE":{let{domain:a,extensionId:c,time:m,redirectUrl:u,iframeUrl:f,token:p,flowId:g}=r;return G(a,c,l,e,t,m,i.tab?.id,f,p,g,u).then(()=>n()),!0}case"PORTAL_ACTIVATE":{let{domain:a,extensionId:c,time:m,iframeUrl:u,token:f,flowId:p}=r;return G(a,c,l,e,t,m,i.tab?.id,u,f,p).then(()=>n()),!0}case"GET_OPT_OUT":return Ge().then(a=>n(a)),!0;case"OPT_OUT":{let{time:a}=r;return je(a).then(c=>n(c)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:c}=r;return Fe(a,c).then(m=>n(m)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(a=>n({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=r;return o.set("popupEnabled",a).then(()=>{n({isPopupEnabled:a})}).catch(c=>{console.error("Error setting popup enabled:",c),n({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:c}=r;return c&&(C(c,a),n({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=r;return a?o.set("walletAddress",a).then(()=>U(t,void 0,M(e),!0).then(()=>n(a))):o.remove("walletAddress").then(()=>n({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>n({message:"notification erased successfully"})),!0;case"OPEN_CASHBACK_PAGE":let{url:d}=r;return Ve(d||e),n({message:"cashback page opened successfully"}),!0;case"STOP_REMINDERS":return o.set("disableReminders",!0).then(()=>n({message:"stopped reminders successfully"})),!0;default:return console.warn(`Bring unknown action: ${s}`),!0}})},Ke=Gt;var Kt=async({body:e})=>await I({path:"/check/popup",method:"POST",params:e}),Be=Kt;var Bt=["http://","https://","www.","www1.","www2."],qt=e=>{if(!e)return"";for(let t of Bt)e.startsWith(t)&&(e=e.replace(t,""));return e},qe=qt;var Ht=["www.","www1.","www2."],de={matched:!1,match:""},Qt=async e=>{let t=null;try{t=new URL(e)}catch{try{t=new URL(`https://${e}`)}catch{return de}}let{hostname:r,pathname:i}=t;for(let a of Ht)r=r.replace(a,"");i.endsWith("/")||(i+="/");let n=r+i,s=await o.get("postPurchaseUrls");if(!s||!s.length||!(s instanceof Uint8Array))return de;let{matched:l,match:d}=D(s,n,!0,!0);return l?(await L({type:"thank_you_page",page:e,entry:d}).catch(()=>{}),{matched:l,match:d}):de},He=Qt;var Jt=async e=>{let t=await o.get("quietDomains")||{},r="new",i={};if(t[e]){let{time:n}=t[e];v(n,void 0,{maxRange:60*864e5})?(r=t[e].phase||"quiet",i=t[e].payload||{},r==="activated"&&(t[e].phase="quiet",t[e].payload&&delete t[e].payload,await o.set("quietDomains",t))):(delete t[e],await o.set("quietDomains",t))}return{phase:r,payload:i}},Qe=Jt;var Yt=["www.","www1.","www2."],zt=async e=>{let t=await Z(),r=await o.get("portalRelevantDomains"),i={matched:!1,match:"",phase:void 0};if(!e||!t||!t.length||!(t instanceof Uint8Array))return i;let n=null;try{n=new URL(e)}catch{try{n=new URL(`https://${e}`)}catch{return i}}let{hostname:s,pathname:l}=n,d=s+l;for(let m of Yt)d=d.replace(m,"");if(r){let m=D(r,d);if(m.matched)return await o.remove("portalRelevantDomains"),m}let{matched:a,match:c}=D(t,d);return a?{matched:a,match:c}:i},Je=zt;var Ye=async(e,t,r)=>{await x(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await O(),domain:r})},Xt=async(e,t,r,i,n)=>{let s=await o.get("notification"),l=Date.now(),d=s?.expiration;if(V(d,l))await o.remove("notification");else if(s)return await Ye(e,s,r);let a=await U(i,e,M(t));a.showNotification&&(i&&await Ye(e,a,r),n&&n())},ue=Xt;var Zt=(e,t,r)=>{chrome.tabs.onUpdated.addListener(async(i,n,s)=>{if(!n.url||!s?.url?.startsWith("http"))return;let l=qe(s.url);if(!await o.get("popupEnabled"))return;await He(s.url);let{matched:a,match:c}=await Je(s.url);if(!a){await ue(i,e,l,t,r);return}let{phase:m,payload:u}=await Qe(c);if(m==="new"){let B=Date.now(),te=await o.get("optOut");if(v(te,B))return;await o.remove("optOut");let q=await o.get("optOutDomains");if(q&&v(q[c],B))return}else if(m==="activated"){let B=await O(),{iframeUrl:te,token:q}=u||{},rr=await x(i,{action:"INJECT",iframeUrl:te,token:q,domain:l,userId:B,page:m});return}else if(m==="quiet"){await ue(i,e,l,t,r);return}let f=await R(i),{token:p,isValid:g,iframeUrl:h,networkUrl:w,flowId:y,time:$=864e5,portalReferrers:K}=await Be({body:{domain:c,phase:m,url:s.url,address:f}});if(g===!1){C(c,$);return}if(!await ee(w))return;let fe=await O(),S=await x(i,{action:"INJECT",token:p,domain:l,iframeUrl:h,userId:fe,referrers:K,page:m==="new"?"":m,flowId:y});if(S?.action)switch(S.action){case"activate":G(c,chrome.runtime.id,"popup",e,$,i);break;default:console.error(`Unknown action: ${S.action}`);break}S?.status!=="success"&&L({type:"no_popup",userId:fe,walletAddress:f,details:{url:s.url,match:c,iframeUrl:h,reason:S?.message,status:S?.status},flowId:y})})},ze=Zt;var pe=he,er=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:s=!0,notificationCallback:l})=>{if(!e||!t)throw new Error("Missing configuration");if(pe&&console.log({ENDPOINT:pe}),!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");let d=E.getInstance();d.setApiEndpoint(pe||t),d.setWhitelistEndpoint(i||""),d.setApiKey(e),o.initializeDebugCache(),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await Ce(),Ke(r,s),ze(r,s,l)},Xe=er;var Ze=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e({isTurnedOff:r.isOptedOut})})}),et=e=>new Promise((t,r)=>{let i=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isTurnedOff:n.isOptedOut}):r("No response received")})});var tt=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e(r)})}),rt=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getPopupEnabled,getTurnOff,setPopupEnabled,setTurnOff});
1
+ "use strict";var ne=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var ft=Object.prototype.hasOwnProperty;var pt=(e,t)=>{for(var r in t)ne(e,r,{get:t[r],enumerable:!0})},gt=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of dt(t))!ft.call(e,n)&&n!==r&&ne(e,n,{get:()=>t[n],enumerable:!(i=ut(t,n))||i.enumerable});return e};var ht=e=>gt(ne({},"__esModule",{value:!0}),e);var wr={};pt(wr,{bringInitBackground:()=>at,bringInitContentScript:()=>Ue,getPopupEnabled:()=>ct,getTurnOff:()=>ot,setPopupEnabled:()=>lt,setTurnOff:()=>st});module.exports=ht(wr);var ie=e=>{try{switch(e){case"VERSION":return process?.env?.VERSION;case"ENDPOINT":return process?.env?.ENDPOINT;case"IFRAME_URL":return process?.env?.IFRAME_URL;default:return}}catch{return}},Ee=ie("VERSION"),be=ie("ENDPOINT"),ae=ie("IFRAME_URL");var wt=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,a])=>{a&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(a)):t.append(n,a))}),t.toString()},oe=wt;var Ae={name:"@bringweb3/chrome-extension-kit",version:"1.6.0",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --env.ENDPOINT=dev --env.VERSION=1.6.0 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify","build:dev":"tsup index.ts --format cjs,esm --dts --minify --env.ENDPOINT=dev --env.VERSION=1.6.0",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var Et=()=>Ee||Ae.version,j=Et;var M="bringweb3-offerbar-container",G="bringweb3-iframe";var bt=()=>{let e=[];return{add:t=>{t&&e.push(t)},cleanup:()=>{e.forEach(t=>{try{t()}catch(r){console.error("Cleanup function failed:",r)}}),e.length=0}}},S=bt();var At=(e,t)=>{if(!e)return;let r=document.getElementById(t);r&&r.remove();let i=document.createElement("style");i.id=t,i.textContent=e,document.head.appendChild(i),S.add(()=>{let n=document.getElementById(t);n&&n.remove()})},Se=At;var St=({parent:e,id:t})=>{if(!e)return;let r=document.querySelector(e);if(!r)return;let i=document.createElement("div");for(i.id=t;r.firstChild;)i.appendChild(r.firstChild);r.appendChild(i),S.add(()=>{let n=document.getElementById(t);if(n&&n.parentElement){for(;n.firstChild;)n.parentElement.appendChild(n.firstChild);n.remove()}})},Pe=St;var Oe=(e,t)=>e==="w"?(window.innerWidth-t)/window.innerWidth:e==="h"?(window.innerHeight-t)/window.innerHeight:1,xe=(e,t)=>e.split("").reduce((r,i)=>r+(t[parseInt(i)]??0),0),Pt=({sides:e,scales:t,listener:r})=>{e.forEach((n,a)=>{e[a]=Math.max(0,n)});let i=()=>{let n=document.body,a=Oe(t.x[0],xe(t.x[1],e)),c=Oe(t.y[0],xe(t.y[1],e));console.table({newScaleX:a,newScaleY:c,height:n.style.height}),n.style.setProperty("transform",`translate(${e[3]}px, ${e[0]}px) scale(${a}, ${c})`,"important"),n.style.setProperty("height",`calc(100vh / ${c})`,"important")};i(),r&&window.addEventListener("resize",i),r&&S.add(()=>{window.removeEventListener("resize",i)})},ve=Pt;var Ot=({scroller:e,sides:t,scales:r,resize:i})=>{Pe({parent:e,id:"bringweb3-scroller"}),ve({sides:t,scales:r,listener:i})},Te=Ot;var xt="bring-iframe-stylesheet",vt=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:a,switchWallet:c,placement:m,stylesheet:s,framed:l})=>{let d=chrome.runtime.id,u=`${G}-${d}`,g=document.getElementById(u),f=ae?`${ae}${a?"/"+a:""}`:n;if(g)return g;let w=oe({query:{...e,extensionId:d,v:j(),themeMode:r,textMode:i,switchWallet:String(c)}}),y=t?`&${oe({query:t,prefix:"t"})}`:"",h=document.createElement("iframe");return h.id=u,h.src=encodeURI(`${f}?${w}${y}`),h.setAttribute("sandbox","allow-scripts allow-same-origin"),h.style.position="fixed",h.style.right="8px",h.scrolling="no",h.style.overflow="hidden",h.style.width="1px",h.style.height="1px",h.style.borderRadius="10px",h.style.border="none",h.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(h.style.boxShadow=t.popupShadow),Se(s,xt),l&&Te(l),Tt(h,m,a),h};function Tt(e,t,r){if(console.log({page:r}),["offerbar","framed"].includes(r||"")&&document.querySelector(`iframe[id^="${G}-"]`))return;let i=e;if(t?.parent){let n=document.getElementById(M);n||(n=document.createElement(t.parent),n.id=M),n.appendChild(e),i=n}if(S.add(()=>{if(e&&e.parentNode&&e.remove(),t?.parent){let n=document.getElementById(M);n&&n.remove()}}),!t||t.location==="end"){document.documentElement.appendChild(i);return}if(t.location==="start"){document.documentElement.insertBefore(i,document.documentElement.firstChild);return}if((t.location==="after"||t.location==="before")&&t.selector){let n=document.querySelector(t.selector);if(!n)return;let a=t.location==="after"?n.nextSibling:n;n.parentNode?.insertBefore(i,a);return}document.documentElement.appendChild(i)}var De=vt;var Dt=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},se=Dt;var It=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let r=t.sheet;r?e.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},Ie=It;var P={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE",STOP_REMINDERS:"STOP_REMINDERS"},Rt=[P.ACTIVATE],_t=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:a,keyFrames:c,time:m,extensionId:s,url:l,domain:d,redirectUrl:u,iframeUrl:g,token:f,flowId:w,platformName:y,searchTermPattern:h,type:p,quietDomainType:_,isRegex:A}=e.data;if(i==="bringweb3"&&!(s!==chrome.runtime.id&&!Rt.includes(n)))switch(n){case P.OPEN:let E=document.getElementById(M);E&&a&&"parent"in a&&se(E,a.parent),a&&"iframe"in a&&se(t,a.iframe);break;case P.CLOSE:S.cleanup(),m&&chrome.runtime.sendMessage({action:n,time:m,domain:d,type:p,isRegex:A,from:"bringweb3"});break;case P.PROMPT_LOGIN:r();break;case P.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:d,extensionId:s,time:m,redirectUrl:u,iframeUrl:g,token:f,flowId:w,platformName:y,quietDomainType:_,isRegex:A});break;case P.OPT_OUT:chrome.runtime.sendMessage({action:n,time:m,from:"bringweb3"});break;case P.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:d,time:m,type:p,isRegex:A,from:"bringweb3"});break;case P.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;case P.ADD_KEYFRAMES:Ie(c);break;case P.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:l,from:"bringweb3"});break;case P.STOP_REMINDERS:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;default:break}},Re=_t;var _e=async({iframeEl:e,getWalletAddress:t})=>{e||(e=document.querySelector(`#${G}-${chrome.runtime.id}`));let r=await t();e?.contentWindow?.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},Ct=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>_e({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let a=e[n];a&&window.addEventListener(a,async()=>_e({iframeEl:i,getWalletAddress:r}))}},Ce=Ct;var Nt=e=>e.endsWith("/")?e.slice(0,-1):e,Y=Nt;var Mt=["www.","www1.","www2."],Ut=e=>{for(let r of Mt)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=Y(t),t},I=Ut;var B=null,ce,le=!1,Ne=null,Me=()=>{le=!1,ce=void 0,B=null,S?.cleanup()},kt=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:a,theme:c,text:m,switchWallet:s=!1})=>{if(window.self!==window.top&&Y(window.document.location.origin).endsWith("bringweb3.io")){window.addEventListener("message",l=>{if(!l.data||l.data.from!=="bringweb3"||l.data.action!=="PORTAL_ACTIVATE")return;let{action:d,domain:u,extensionId:g,time:f,iframeUrl:w,token:y,platformName:h}=l.data;chrome.runtime.sendMessage({action:d,from:"bringweb3",domain:u,extensionId:g,time:f,iframeUrl:w,token:y,source:"portal",platformName:h})});return}if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");Ce({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:B}),window.addEventListener("message",l=>Re({event:l,iframeEl:B,promptLogin:t})),chrome.runtime.onMessage.addListener((l,d,u)=>{if(l?.from!=="bringweb3")return;let{action:g}=l;switch(g){case"GET_WALLET_ADDRESS":return e().then(f=>u({status:"success",walletAddress:f})).catch(f=>u({status:"success",walletAddress:void 0})),!0;case"GET_PAGE_LINKS":return window!==window.top?!1:(requestAnimationFrame(()=>{try{let f=Array.from(document.querySelectorAll("a[href]")).map(w=>w.href).filter(w=>w.startsWith("http"));u({status:"success",links:f})}catch{u({status:"failed",links:[]})}}),!0);case"CLOSE_POPUP":return B&&ce===l.path&&I(location.href)===I(l.domain)?(Me(),u({status:"success",message:"Popup closed",location:window.document.location.href,flowId:Ne})):u({status:"failed",message:"Domain mismatch or iframe not open"}),!0;case"INJECT":try{let{referrer:f}=document,w=l.referrers||[];if(I(location.href)!==I(l.domain))return u({status:"failed",message:"Domain already changed"}),!0;if(le)return u({status:"failed",message:"iframe already open"}),!0;if(!!f&&w.includes(I(f))&&l.page==="")return u({status:"failed",message:`already activated by ${I(f)}`,action:"activate"}),!0;let{token:h,iframeUrl:p,userId:_,placement:A,framed:E,stylesheet:V}=l,z={token:h};return _&&(z.userId=_),B=De({query:z,iframeUrl:p,theme:c==="dark"?a:n,themeMode:c||"light",text:m,switchWallet:s,page:l.page,placement:A,stylesheet:V,framed:E}),le=!0,ce=`/${l.page||""}`,Ne=l.flowId,u({status:"success"}),!0}catch(f){return f instanceof Error?u({status:"failed",message:f.message}):u({status:"failed",message:String(f)}),!0}default:console.error(`Unknown action: ${g}`);break}}),window.addEventListener("pagehide",()=>{Me()})},Ue=kt;var b=class e{static instance=null;baseDomain="https://api.bringweb3.io";apiPath="v1/extension";endpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){this.endpoint=t}setApiKey(t){this.apiKey=t}getWhitelistEndpoint(){return this.whitelistEndpoint}getBaseDomain(){return this.baseDomain}getApiPath(){return this.apiPath}getEndpoint(){if(!this.endpoint)throw new Error("endpoint not set. Call setApiEndpoint first.");return this.endpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var me=class{cache=new Map;get(t){let r=this.cache.get(t);return r?r.value:null}set(t,r){this.cache.set(t,{value:r})}delete(t){this.cache.delete(t)}clear(){this.cache.clear()}getStats(){return{size:this.cache.size,keys:Array.from(this.cache.keys())}}},ke=me;var Le=e=>{try{return e.regexes.map((t,r)=>new RegExp(t,e.flags[r]||""))}catch(t){return console.error("Error building RegExp array:",t),null}},Lt={relevantDomains:{get:Le,set:Le}},K=Lt;var ue=e=>{if(!e||!Array.isArray(e)||e.length!==2)return!1;let[t,r]=e;return typeof t=="number"&&typeof r=="number"&&t<=r},H=(e,t,r)=>{if(!ue(e))return!0;let[i,n]=e;return t=t??Date.now(),t<i||t>n||r?.maxRange!==void 0&&n-i>r.maxRange},x=(e,t,r)=>!H(e,t,r);var J="bring_",v=new ke,$e=async(e,t,r=!0)=>{let i=t;return K[e]?.set&&(i=K[e].set(t)),r&&v.set(e,i),new Promise((n,a)=>{chrome.storage.local.set({[`${J}${e}`]:t},()=>{chrome.runtime.lastError?a(chrome.runtime.lastError):n()})})},de=async(e,t=!0)=>{if(t){let r=v.get(e);if(r!==null)return r}return new Promise((r,i)=>{chrome.storage.local.get([`${J}${e}`],async n=>{if(chrome.runtime.lastError)i(chrome.runtime.lastError);else{let a=n[`${J}${e}`];a&&K[e]?.get&&(a=K[e].get(a)),t&&a!==void 0&&v.set(e,a),r(a)}})})},Fe=async e=>(v.delete(e),new Promise((t,r)=>{chrome.storage.local.remove([`${J}${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})})),$t=()=>{v.clear()},Ft=e=>{v.delete(e)},Wt=()=>v.getStats(),qt=()=>{if(!(typeof globalThis>"u"))try{globalThis.bringCache={clear:()=>v.clear(),stats:()=>v.getStats(),get:async e=>await de(e),getReadable:async e=>{let t=await de(e);return ue(t)&&(t=`[${new Date(t[0]).toLocaleString("en-GB")} - ${new Date(t[1]).toLocaleString("en-GB")}] Total of ${(t[1]-t[0])/1e3/60} minutes`),t},set:async(e,t)=>await $e(e,t),invalidate:e=>v.delete(e),delete:async e=>await Fe(e)}}catch(e){console.warn("Failed to initialize debug cache:",e)}},o={set:$e,get:de,remove:Fe,clearCache:$t,invalidateCache:Ft,getCacheStats:Wt,initializeDebugCache:qt};var X=require("uuid"),We=4,qe=async(e,t)=>{let r=await o.get(e);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>t?r[i]=[t,n]:delete r[i];await o.set(e,r)}},Vt=async()=>{try{let e=Date.now(),t=await o.get("optOut");return t&&typeof t=="number"&&t>e?await o.set("optOut",[e,t]):await o.remove("optOut"),await qe("optOutDomains",e),await qe("quietDomains",e),!0}catch{return!1}},jt=async()=>{try{let e=await o.get("quietDomains");if(e&&typeof e=="object"){for(let[r,i]of Object.entries(e))Array.isArray(i)&&(e[r]={time:i,phase:"quiet"});await o.set("quietDomains",e)}let t=await o.get("id");return(0,X.validate)(t||"")||(t=(0,X.v4)(),await o.set("id",t)),!0}catch{return!1}},Gt=async()=>{try{return await Promise.all([o.remove("redirectsWhitelist"),o.remove("relevantDomains"),o.remove("postPurchaseUrls")]),!0}catch{return!1}},Bt=async()=>{try{let e=await o.get("quietDomains")||{},t=await o.get("optOutDomains")||{};for(let[i,n]of Object.entries(t))e[i]||(e[i]={time:n,phase:"quiet"});await o.remove("optOutDomains");let r=Object.entries(e).map(([i,n])=>({domain:i,...n}));return await o.set("quietDomains",r),!0}catch{return!1}},Ve=async()=>{let e=await o.get("migrationVersion")||0;e<1&&await Vt()&&await o.set("migrationVersion",1),e<2&&await jt()&&await o.set("migrationVersion",2),e<3&&await Gt()&&await o.set("migrationVersion",3),e<We&&await Bt()&&await o.set("migrationVersion",We)};var je=(e,t=50)=>{let r=Date.now(),i={maxRange:60*864e5},n=e.filter(a=>x(a.time,r,i));return n.length>t?n.sort((a,c)=>c.time[0]-a.time[0]).slice(0,t):n};var Ge="quietDomains",Kt=async(e,t,r,i,n,a)=>{if(!e)return;let c=Array.isArray(e)?e:[e],m=r?Array.isArray(r)?r:[r]:["kd"],s=i?Array.isArray(i)?i:[i]:[!1],[l,d]=await Promise.all([o.get(Ge),o.get("quietDomainsMaxLength")]);Array.isArray(l)||(l=[]),l=je(l,d);let u=Date.now(),g=u+t;for(let f=0;f<c.length;f++){let w=c[f];if(!w)continue;let y={domain:w,time:[u,g],phase:a||"quiet"};m&&m[f]&&(y.type=m[f]),s&&s[f]!==void 0&&(y.regex=s[f]),n&&(y.payload=n);let h=l.findIndex(p=>p.domain===w&&p.type===y.type);h>=0?l[h]=y:l.push(y)}await o.set(Ge,l)},N=Kt;var Z=require("uuid"),Ht=async()=>{let e=await o.get("id");return(0,Z.validate)(e)||(e=(0,Z.v4)(),await o.set("id",e)),e},T=Ht;var Qt=async e=>{let{path:t,method:r,params:i,timeout:n}=e;if(!e||!t||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let a=b.getInstance(),c=a.getBaseDomain(),m=a.getApiPath(),s=await o.get("envName"),l;s?l=`${c}/${s}/${m}${t}`:l=`${c}/${m}${t}`;let d=b.getInstance().getApiKey();if(r==="GET"){let f=new URLSearchParams({...i,version:j(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await T()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});l+=`?${f.toString()}`}else r==="POST"&&(i={...i,version:j(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await T()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(l,{method:r,headers:{"Content-Type":"application/json","x-api-key":d},body:r==="POST"?JSON.stringify(i):void 0,signal:n&&"timeout"in AbortSignal?AbortSignal.timeout(n):void 0})).json()},R=Qt;var zt=async({walletAddress:e,cashbackUrl:t,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:e};return await o.get("disableReminders")&&(n.disableReminders=!0),r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),t&&(n.cashbackUrl=t),await R({path:"/check/notification",method:"POST",params:n})},Be=zt;var Yt=(e,t,r)=>{r=r||10;let i=100,n=20;return new Promise((a,c)=>{let m=s=>{chrome.tabs.get(e,l=>{if(chrome.runtime.lastError){a(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?s<r-1?setTimeout(()=>m(s+1),i+n*s):a(null):a(d||null)})})};m(0)})},D=Yt;var Jt=async e=>{let t=await o.get("walletAddress");try{if(!e){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return t;e=i[0].id}let r=await D(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},U=Jt;var Xt=async(e,t,r,i=!1)=>{let n={showNotification:!1,token:"",iframeUrl:""},a=Date.now(),c=await o.get("notificationCheck");if(!i&&x(c,a))return n;let m=t?await U(t):await o.get("walletAddress"),s=await o.get("lastActivation"),l=s?a-s:void 0,d=await Be({walletAddress:m,cashbackUrl:r,lastActivation:s,timeSinceLastActivation:l});await o.set("notificationCheck",[a,a+d.nextCall]);let u={showNotification:d.showNotification,token:d.token,iframeUrl:d.iframeUrl,expiration:[a,a+d.expiration]};return u.showNotification&&e&&await Promise.all([o.set("notification",u),o.remove("lastActivation")]),u},k=Xt;var Zt=e=>e?chrome.runtime.getURL(e):"",L=Zt;var Ke=async(e,t,r)=>{t.includes("/")||(t+="/");let i=t.indexOf("/"),n=t.substring(0,i),a=t.substring(i),c=decodeURIComponent(a.replace(/\+/g," ")),s=n.split("").reverse().join("")+c,l=await o.get("domainsTypes");for(let d=0;d<e.length;d++){let u=l?.[d];if(r){if(!r.includes(u))continue}else if(u==="i")continue;let g=e[d];if(!g)continue;let f=g.exec(s);if(f&&f.index===0&&f[0])return{matched:!0,match:Array.from(f).filter(h=>h!==void 0),type:u}}return{matched:!1,match:void 0,type:void 0}},fe=(e,t,r)=>{let i=t.indexOf("/"),n=i===-1?t:t.substring(0,i),a=i===-1?"":t.substring(i+1),c=e.indexOf("/"),m=c===-1?e:e.substring(0,c),s=c===-1?"":e.substring(c+1),l=!1;if(m===n)l=!0;else if(m.startsWith("*.")){let u=m.substring(2);(n.endsWith("."+u)||n===u)&&(l=!0)}if(!l)return!1;if(a===""&&s==="")return!0;let d=decodeURIComponent(a.replace(/\+/g," "));if(r)try{if(new RegExp(s).test(d))return!0}catch{}else if(d.startsWith(s))return!0;return!1},$=(e,t)=>{for(let r of e){let i=typeof r=="string"?r:r.domain,n=typeof r=="string"?!1:r.regex;if(fe(i,t,n))return{matched:!0,match:i}}return{matched:!1,match:void 0}};var er=async(e,t)=>{let r=b.getInstance().getWhitelistEndpoint(),i={path:"/domains",method:"GET",timeout:t};return i.params={},r&&(i.params.whitelist=encodeURIComponent(r)),e&&(i.params.trigger=e),await R(i)},He=er;var Qe=e=>{if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="string")return`"${e}"`;if(typeof e=="number")return Number.isNaN(e)?"NaN":String(e);if(typeof e=="boolean")return String(e);if(Array.isArray(e))return`[${e.map(t=>t===void 0?"undefined":t===null?"null":Qe(t)).join(", ")}]`;if(typeof e=="object")try{return JSON.stringify(e,(t,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(e)}}`}return String(e)},F=Qe;var ze=async e=>{try{let t=b.getInstance().getWhitelistEndpoint();if(!t)return[];let r=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"},signal:e&&"timeout"in AbortSignal?AbortSignal.timeout(e):void 0});if(!r.ok)throw new Error("Failed to fetch whitelist");let i=await r.json();if(!Array.isArray(i))throw new Error("whitelist isn't an array");return i}catch(t){return console.error("Error fetching whitelist:",t),[]}};var ee=null,W=async()=>{let[e,t,r]=await Promise.all([o.get("relevantDomainsCheck"),o.get("relevantDomains"),o.get("redirectsWhitelist")]),i=r,n=b.getInstance().getWhitelistEndpoint(),a=null,c=Date.now();return t?Array.isArray(t)?e?Array.isArray(e)?e.length!==2?a=`invalid domains timestamp check format__length: ${e.length} - value: ${F(e)}`:e[0]>=c?a=`cache expired - range start is bigger than Date.now()__value: ${F(e)}, now: ${c}`:c>=e[1]?a="cache expired - range end is smaller than Date.now()":n&&(!i?.length||!Array.isArray(i))?a="missing whitelist data":H(e,c)&&(a=`cache expired - range is expired__range: ${F(e)}, now: ${c}`):a=`invalid domains timestamp check format - not an array__value: ${F(e)}`:a=`no domains timestamp check found__value: ${F(e)}`:a="domains list isn't valid format":a="no domains in cache",a?ee||(ee=(async()=>{try{let m=await He(a,3e4),{nextUpdateTimestamp:s,relevantDomains:l,postPurchaseUrls:d,flags:u,types:g,quietDomainsMaxLength:f}=m;i=await ze(3e4);let w=[o.set("relevantDomains",{regexes:l,flags:u}),o.set("relevantDomainsCheck",[c,c+s]),o.set("postPurchaseUrls",d),o.set("domainsTypes",g)];return f&&w.push(o.set("quietDomainsMaxLength",f)),i&&w.push(o.set("redirectsWhitelist",i)),await Promise.all(w),await o.get("relevantDomains")}finally{ee=null}})()):t};var tr=async e=>{try{if(!b.getInstance().getWhitelistEndpoint())return!0;let r=await o.get("redirectsWhitelist");if((!Array.isArray(r)||!r?.length)&&(await W(),r=await o.get("redirectsWhitelist")),!r?.length)return!1;let i=I(e),{matched:n}=$(r,i);return n}catch{return console.error("Invalid URL:",e),!1}},te=tr;var rr=async e=>{let t=Array.isArray(e);t?e.forEach(r=>r.category=r.category||"system"):e.category=e?.category||"system",await R({path:"/analytics",method:"POST",params:t?{events:e}:e})},q=rr;var nr=async(e,t,r,i)=>{let a=(await chrome.tabs.query({})).map(d=>d.id).filter(d=>d&&d!==t),c=[],m=await T(),s=await U(),l=a.map(d=>D(d,{action:"CLOSE_POPUP",reason:"already_activated",path:i||"/",domain:e},2).then(u=>{u.status==="success"&&c.push({type:"popup_auto_close",location:u.location,flowId:u.flowId,closer:r,domain:e,userId:m,walletAddress:s})}).catch(()=>{}));await Promise.all(l),c.length&&await q(c)},Ye=nr;var ir=async(e,t,r,i,n,a,c,m,s,l,d,u,g)=>{let f=Date.now(),w=t===chrome.runtime.id;if(w){let h=[o.set("lastActivation",f)];r==="portal"&&h.push(o.set("portalRelevantDomains",[e])),await Promise.all(h)}e&&N(e,m||864e5,a,c,{iframeUrl:l,token:d,flowId:u},w?"activated":"quiet"),Ye(e,s||-1,t),s&&g&&await te(g)&&chrome.tabs.update(s,{url:g}),await k(n,void 0,L(i),w)},Q=ir;var Je=e=>{e&&chrome.tabs.create({url:e})};var Xe=async e=>{if(e<0)return await o.remove("optOut"),{isOptedOut:!1};{let t=Date.now();return await o.set("optOut",[t,t+e]),{isOptedOut:!0}}},Ze=async()=>{let e=await o.get("optOut");return{isOptedOut:x(e)}};var ar=(e,t)=>{chrome.runtime.onMessage.addListener((r,i,n)=>{if(r?.from!=="bringweb3")return;let{action:a}=r,c=r.source||"popup";switch(a){case"ACTIVATE":{let{domain:s,extensionId:l,time:d,redirectUrl:u,iframeUrl:g,token:f,flowId:w,quietDomainType:y,isRegex:h}=r;return Q(s,l,c,e,t,y,h,d,i.tab?.id,g,f,w,u).then(()=>n()),!0}case"PORTAL_ACTIVATE":{let{domain:s,extensionId:l,time:d,iframeUrl:u,token:g,flowId:f,type:w,isRegex:y}=r;return Q(s,l,c,e,t,w,y,d,i.tab?.id,u,g,f).then(()=>n()),!0}case"GET_OPT_OUT":return Ze().then(s=>n(s)),!0;case"OPT_OUT":{let{time:s}=r;return Xe(s).then(l=>n(l)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:l,type:d,isRegex:u}=r;return s?.length?(N(s,l,d,u).then(g=>n(g)),!0):(n({error:"Missing domain"}),!0)}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>n({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=r;return o.set("popupEnabled",s).then(()=>{n({isPopupEnabled:s})}).catch(l=>{console.error("Error setting popup enabled:",l),n({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:l,type:d,isRegex:u}=r;return l&&(N(l,s,d,u),n({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=r;return s?o.set("walletAddress",s).then(()=>k(t,void 0,L(e),!0).then(()=>n(s))):o.remove("walletAddress").then(()=>n({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>n({message:"notification erased successfully"})),!0;case"OPEN_CASHBACK_PAGE":let{url:m}=r;return Je(m||e),n({message:"cashback page opened successfully"}),!0;case"STOP_REMINDERS":return o.set("disableReminders",!0).then(()=>n({message:"stopped reminders successfully"})),!0;default:return console.warn(`Bring unknown action: ${a}`),!0}})},et=ar;var or=async({body:e})=>await R({path:"/check/popup",method:"POST",params:e}),tt=or;var sr=["http://","https://","www.","www1.","www2."],cr=e=>{if(!e)return"";for(let t of sr)e.startsWith(t)&&(e=e.replace(t,""));return e},re=cr;var lr=["www.","www1.","www2."],pe={matched:!1,match:""},mr=async e=>{let t=null;try{t=new URL(e)}catch{try{t=new URL(`https://${e}`)}catch{return pe}}let{hostname:r,pathname:i}=t;for(let s of lr)r=r.replace(s,"");i.endsWith("/")||(i+="/");let n=r+i,a=await o.get("postPurchaseUrls");if(!Array.isArray(a)||!a?.length)return pe;let{matched:c,match:m}=$(a,n);return c?(await q({type:"thank_you_page",page:e,entry:m}).catch(()=>{}),{matched:c,match:m}):pe},rt=mr;var ur=async(e,t)=>{let r=await o.get("quietDomains")||[],i="new",n={};for(let a=0;a<r.length;a++){let c=r[a];if(c.type?.includes(t)&&fe(c.domain,e,c.regex)){let{time:m}=c;x(m,void 0,{maxRange:60*864e5})?(i=c.phase||"quiet",n=c.payload||{},i==="activated"&&(c.phase="quiet",c.payload&&delete c.payload,await o.set("quietDomains",r))):(r.splice(a,1),await o.set("quietDomains",r));break}}return{phase:i,payload:n}},ge=ur;var dr=["www.","www1.","www2."],fr=async(e,t)=>{let r=await W(),i=await o.get("portalRelevantDomains"),n={matched:!1,match:"",phase:void 0,type:void 0};if(!e||!r||!r.length)return n;let a=null;try{a=new URL(e)}catch{try{a=new URL(`https://${e}`)}catch{return n}}let c=a.toString(),m=`${a.protocol}//`;c.startsWith(m)&&(c=c.substring(m.length));for(let s of dr)c=c.replace(s,"");if(i){let s=$(i,c);if(s.matched)return await o.remove("portalRelevantDomains"),s}if(Array.isArray(r)){let s=await Ke(r,c,t);return s.matched?{matched:!0,match:s.match,type:s.type}:n}return n},he=fr;var nt=async(e,t,r)=>{await D(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await T(),domain:r})},pr=async(e,t,r,i,n)=>{let a=await o.get("notification"),c=Date.now(),m=a?.expiration;if(H(m,c))await o.remove("notification");else if(a)return await nt(e,a,r);let s=await k(i,e,L(t));s.showNotification&&(i&&await nt(e,s,r),n&&n())},we=pr;var O=new Map,gr=(e,t,r)=>{let i=async(n,a,c,m=!1,s)=>{if(m&&O.get(a)?.urlSearchStatus=="succeeded")return;let l=re(n),{matched:d,match:u,type:g}=await he(n,m?"d":"kd");if(!d){m||await we(a,e,l,t,r);return}if(m){let E=O.get(a);if(E?.inlineSearch?.status==="matched")return;E?E.inlineSearch={status:"matched",popupData:null}:O.set(a,{urlSearchStatus:null,inlineSearch:{status:"matched",popupData:null}})}let{phase:f,payload:w}=await ge(l,g);if(f==="new"){let E=Date.now(),V=await o.get("optOut");if(x(V,E))return;await o.remove("optOut")}else if(f==="activated"){let E=await T(),{iframeUrl:V,token:z,placement:mt}=w||{},yr=await D(a,{action:"INJECT",iframeUrl:V,token:z,domain:l,userId:E,page:f,placement:mt});return}else if(f==="quiet"){await we(a,e,l,t,r);return}let y=await U(a),h=await o.get("quietDomains")||[];O.has(a)||O.set(a,{urlSearchStatus:null,inlineSearch:null}),m||(O.get(a).urlSearchStatus="pending");let p=await tt({body:{phase:f,url:c.url,address:y,type:m?"i":g,quietDomains:h,...m&&{link:n,linkMatch:u,urlMatch:s},...!m&&{urlMatch:u}}});if(p.time||(p.time=864e5),p.isValid===!1){if(N(p.verifiedMatch.match,p.time,p.quietDomainType,p.verifiedMatch.isRegex),m)return;let E=O.get(a);if(E.urlSearchStatus="failed",!E.inlineSearch?.popupData)return;p=E.inlineSearch.popupData}if(!await te(p.networkUrl))return;if(!m)O.get(a).urlSearchStatus="succeeded";else{let E=O.get(a);if(E?.urlSearchStatus==="succeeded")return;if(E?.urlSearchStatus==="pending"){E.inlineSearch={status:"matched",popupData:p};return}}let _=await T(),A=await D(a,{action:"INJECT",token:p.token,domain:re(c.url),iframeUrl:p.iframeUrl,userId:_,referrers:p.portalReferrers,page:p.framed?"framed":p.isOfferBar?"offerbar":f==="new"?"":f,flowId:p.flowId,stylesheet:p.stylesheet,placement:p.placement,framed:p.framed});if(A?.action)switch(A.action){case"activate":Q(p.verifiedMatch.match,chrome.runtime.id,"popup",e,p.quietDomainType,p.verifiedMatch.isRegex,p.time,a);break;default:console.error(`Unknown action: ${A.action}`);break}A?.status!=="success"&&q({type:"no_popup",userId:_,walletAddress:y,details:{url:n,match:u,iframeUrl:p.iframeUrl,reason:A?.message,status:A?.status},flowId:p.flowId})};chrome.tabs.onUpdated.addListener(async(n,a,c)=>{if(!(!c?.url?.startsWith("http")||!await o.get("popupEnabled"))&&(a.url&&(O.delete(n),await rt(c.url),i(c.url,n,c,!1)),a.status==="complete")){let s=await he(c.url,"i");if(!s.matched||(await ge(re(c.url),"i")).phase==="quiet")return;let d=await D(n,{action:"GET_PAGE_LINKS"});if(d?.status!=="success"||!d.links?.length)return;let u=[...new Set(d.links)];await Promise.allSettled(u.map(g=>i(g,n,c,!0,s.match)))}}),chrome.tabs.onRemoved.addListener(n=>{O.delete(n)})},it=gr;var ye=be,hr=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:a=!0,notificationCallback:c})=>{if(!e||!t)throw new Error("Missing configuration");if(ye&&console.log({ENDPOINT:ye}),!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");let m=b.getInstance();m.setApiEndpoint(ye||t),m.setWhitelistEndpoint(i||""),m.setApiKey(e),o.initializeDebugCache();let s=await o.get("popupEnabled");s===void 0&&(await o.set("popupEnabled",n),s=n),await Ve(),et(r,a),s&&await W(),it(r,a,c)},at=hr;var ot=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e({isTurnedOff:r.isOptedOut})})}),st=e=>new Promise((t,r)=>{let i=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isTurnedOff:n.isOptedOut}):r("No response received")})});var ct=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e(r)})}),lt=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getPopupEnabled,getTurnOff,setPopupEnabled,setTurnOff});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var ee=e=>{try{switch(e){case"VERSION":return process?.env?.VERSION;case"ENDPOINT":return process?.env?.ENDPOINT;case"IFRAME_URL":return process?.env?.IFRAME_URL;default:return}}catch{return}},ue=ee("VERSION"),pe=ee("ENDPOINT"),te=ee("IFRAME_URL");var Qe=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,s])=>{s&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(s)):t.append(n,s))}),t.toString()},re=Qe;var fe={name:"@bringweb3/chrome-extension-kit",version:"1.5.1",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --env.ENDPOINT=dev --env.VERSION=1.5.0 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify","build:dev":"tsup index.ts --format cjs,esm --dts --minify --env.ENDPOINT=dev --env.VERSION=1.5.0",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var Ye=()=>ue||fe.version,W=Ye;var ze=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:s,switchWallet:l})=>{let d=chrome.runtime.id,a=`bringweb3-iframe-${d}`,c=document.getElementById(a),m=te?`${te}${s?"/"+s:""}`:n;if(c)return c;let u=re({query:{...e,extensionId:d,v:W(),themeMode:r,textMode:i,switchWallet:String(l)}}),f=t?`&${re({query:t,prefix:"t"})}`:"",p=document.createElement("iframe");return p.id=a,p.src=encodeURI(`${m}?${u}${f}`),p.setAttribute("sandbox","allow-scripts allow-same-origin"),p.style.position="fixed",p.scrolling="no",p.style.overflow="hidden",p.style.width="1px",p.style.height="1px",p.style.right="8px",p.style.borderRadius="10px",p.style.border="none",p.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(p.style.boxShadow=t.popupShadow),document.documentElement.appendChild(p),p},ge=ze;var Xe=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},he=Xe;var Ze=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let r=t.sheet;r?e.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},we=Ze;var b={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE",STOP_REMINDERS:"STOP_REMINDERS"},et=[b.ACTIVATE],tt=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:s,keyFrames:l,time:d,extensionId:a,url:c,domain:m,redirectUrl:u,iframeUrl:f,token:p,flowId:g,platformName:h}=e.data;if(i==="bringweb3"&&!(a!==chrome.runtime.id&&!et.includes(n)))switch(n){case b.OPEN:he(t,s);break;case b.CLOSE:t&&t.parentNode?.removeChild(t),d&&chrome.runtime.sendMessage({action:n,time:d,domain:m,from:"bringweb3"});break;case b.PROMPT_LOGIN:r();break;case b.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:m,extensionId:a,time:d,redirectUrl:u,iframeUrl:f,token:p,flowId:g,platformName:h});break;case b.OPT_OUT:chrome.runtime.sendMessage({action:n,time:d,from:"bringweb3"});break;case b.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:m,time:d,from:"bringweb3"});break;case b.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case b.ADD_KEYFRAMES:we(l);break;case b.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:c,from:"bringweb3"});break;case b.STOP_REMINDERS:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;default:break}},Ee=tt;var ye=async({iframeEl:e,getWalletAddress:t})=>{e||(e=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`));let r=await t();e?.contentWindow?.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},rt=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>ye({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let s=e[n];s&&window.addEventListener(s,async()=>ye({iframeEl:i,getWalletAddress:r}))}},be=rt;var nt=e=>e.endsWith("/")?e.slice(0,-1):e,H=nt;var it=["www.","www1.","www2."],ot=e=>{for(let r of it)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=H(t),t},P=ot;var N=null,ne,ie=!1,Ae=null,st=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:s,theme:l,text:d,switchWallet:a=!1})=>{if(window.self!==window.top&&H(window.document.location.origin).endsWith("bringweb3.io")){window.addEventListener("message",c=>{if(!c.data||c.data.from!=="bringweb3"||c.data.action!=="PORTAL_ACTIVATE")return;let{action:m,domain:u,extensionId:f,time:p,iframeUrl:g,token:h,platformName:w}=c.data;chrome.runtime.sendMessage({action:m,from:"bringweb3",domain:u,extensionId:f,time:p,iframeUrl:g,token:h,source:"portal",platformName:w})});return}if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");be({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:N}),window.addEventListener("message",c=>Ee({event:c,iframeEl:N,promptLogin:t})),chrome.runtime.onMessage.addListener((c,m,u)=>{if(c?.from!=="bringweb3")return;let{action:f}=c;switch(f){case"GET_WALLET_ADDRESS":return e().then(p=>u({status:"success",walletAddress:p})).catch(p=>u({status:"success",walletAddress:void 0})),!0;case"CLOSE_POPUP":N&&ne===c.path&&P(location.href)===P(c.domain)?(N.parentNode?.removeChild(N),ie=!1,ne=void 0,u({status:"success",message:"Popup closed",location:window.document.location.href,flowId:Ae})):u({status:"failed",message:"Domain mismatch or iframe not open"});case"INJECT":try{let{referrer:p}=document,g=c.referrers||[];if(P(location.href)!==P(c.domain))return u({status:"failed",message:"Domain already changed"}),!0;if(ie)return u({status:"failed",message:"iframe already open"}),!0;if(!!p&&g.includes(P(p))&&c.page==="")return u({status:"failed",message:`already activated by ${P(p)}`,action:"activate"}),!0;let{token:w,iframeUrl:y,userId:$}=c,K={token:w};return $&&(K.userId=$),N=ge({query:K,iframeUrl:y,theme:l==="dark"?s:n,themeMode:l||"light",text:d,switchWallet:a,page:c.page}),ie=!0,ne=`/${c.page||""}`,Ae=c.flowId,u({status:"success"}),!0}catch(p){return p instanceof Error?u({status:"failed",message:p.message}):u({status:"failed",message:String(p)}),!0}default:console.error(`Unknown action: ${f}`);break}})},at=st;var E=class e{static instance=null;apiEndpoint="";endpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){switch(this.endpoint=t,t){case"prod":this.apiEndpoint="https://api.bringweb3.io/v1/extension";break;case"sandbox":this.apiEndpoint="https://sandbox-api.bringweb3.io/v1/extension";break;case"dev":this.apiEndpoint="https://dev-api.bringweb3.io/v1/extension";break;default:this.apiEndpoint="https://sandbox-api.bringweb3.io/v1/extension";break}}setApiKey(t){this.apiKey=t}getWhitelistEndpoint(){return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}getEndpoint(){if(!this.endpoint)throw new Error("endpoint not set. Call setApiEndpoint first.");return this.endpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var oe=class{cache=new Map;get(t){let r=this.cache.get(t);return r?r.value:null}set(t,r){this.cache.set(t,{value:r})}delete(t){this.cache.delete(t)}clear(){this.cache.clear()}getStats(){return{size:this.cache.size,keys:Array.from(this.cache.keys())}}},Oe=oe;var _=e=>{try{return new Uint8Array(atob(e).split("").map(t=>t.charCodeAt(0)))}catch{return null}},Q=e=>btoa(String.fromCharCode(...e)),ct={relevantDomains:{get:_,set:Q},redirectsWhitelist:{get:_,set:Q},portalRelevantDomains:{get:_,set:Q},postPurchaseUrls:{get:_,set:Q}},F=ct;var T=e=>e.split("").reverse().join(""),J=e=>{let t=[];for(let n of e){let s=n.indexOf("/");if(s===-1)t.push(T(n));else{let l=n.substring(0,s),d=n.substring(s),a=T(l);t.push(a+d)}}t.sort();let r=[],i="";for(let n of t){let s=Math.min(i.length,n.length,32),l=0;for(;l<s&&i[l]===n[l];)l++;let d=n.substring(l),a=new TextEncoder().encode(d);if(a.length>0){let c=Math.min(...a);if(c<33)throw new Error(`Invalid rem byte: ${c}`)}r.push(l),r.push(...a),i=n}return new Uint8Array(r)},Pe=e=>{let t=[],r=0,i="",n=0;for(;r<e.length;){let s=e[r];r++;let l=r;for(;l<e.length;){let u=e[l];if(u===void 0||u<33)break;l++}let d=new TextDecoder().decode(e.slice(r,l)),a=i.substring(0,s)+d,c=a.indexOf("/"),m;if(c===-1)m=T(a);else{let u=a.substring(0,c),f=a.substring(c);m=T(u)+f}t.push(m),i=a,r=l}return t},D=(e,t,r=!1,i=!1)=>{let n=t.indexOf("/"),s=n===-1?t:t.substring(0,n),l=n===-1?"":t.substring(n+1),d=T(s),a=0,c="";for(;a<e.length;){let m=e[a];if(m===void 0||m<0||m>32)throw new Error(`Invalid LCP marker: ${m}`);a++;let u=a;for(;u<e.length;){let y=e[u];if(y===void 0||y<33)break;u++}let f=new TextDecoder().decode(e.slice(a,u));a=u;let p=c.substring(0,m)+f;c=p;let g=p.indexOf("/"),h,w;if(g===-1)h=T(p),w="";else{let y=p.substring(0,g);h=T(y),w=p.substring(g+1)}if(h===s||h.startsWith("*.")&&(s.endsWith("."+h.substring(2))||s===h.substring(2))){if(l===""&&w==="")return{matched:!0,match:`${h}${g!==-1?`/${w}`:""}`};if(r){let y=`^${w}${i?"$":""}`;if(new RegExp(y).test(l))return{matched:!0,match:`${h}${g!==-1?`/${w}`:""}`}}else if(i&&l===w||!i&&l.startsWith(w))return{matched:!0,match:`${h}${g!==-1?`/${w}`:""}`}}if(T(h)>d)return{matched:!1,match:void 0}}return{matched:!1,match:void 0}};var se=e=>{if(!e||!Array.isArray(e)||e.length!==2)return!1;let[t,r]=e;return typeof t=="number"&&typeof r=="number"&&t<=r},V=(e,t,r)=>{if(!se(e))return!0;let[i,n]=e;return t=t??Date.now(),t<i||t>n||r?.maxRange!==void 0&&n-i>r.maxRange},v=(e,t,r)=>!V(e,t,r);var Y="bring_",A=new Oe,ve=async(e,t,r=!0)=>(r&&A.set(e,t),new Promise((i,n)=>{F[e]?.set&&(t=F[e].set(t)),chrome.storage.local.set({[`${Y}${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):i()})})),ae=async(e,t=!0)=>{if(t){let r=A.get(e);if(r!==null)return r}return new Promise((r,i)=>{chrome.storage.local.get([`${Y}${e}`],n=>{if(chrome.runtime.lastError)i(chrome.runtime.lastError);else{let s=n[`${Y}${e}`];s&&F[e]?.get&&(s=F[e].get(s)),t&&s!==void 0&&A.set(e,s),r(s)}})})},xe=async e=>(A.delete(e),new Promise((t,r)=>{chrome.storage.local.remove([`${Y}${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})})),lt=()=>{A.clear()},mt=e=>{A.delete(e)},dt=()=>A.getStats(),ut=()=>{if(!(typeof globalThis>"u"))try{globalThis.bringCache={clear:()=>A.clear(),stats:()=>A.getStats(),get:async e=>await ae(e),getReadable:async e=>{let t=await ae(e);return t instanceof Uint8Array?t=Pe(t):se(t)&&(t=`[${new Date(t[0]).toLocaleString("en-GB")} - ${new Date(t[1]).toLocaleString("en-GB")}] Total of ${(t[1]-t[0])/1e3/60} minutes`),t},set:async(e,t)=>await ve(e,t),invalidate:e=>A.delete(e),delete:async e=>await xe(e)}}catch(e){console.warn("Failed to initialize debug cache:",e)}},o={set:ve,get:ae,remove:xe,clearCache:lt,invalidateCache:mt,getCacheStats:dt,initializeDebugCache:ut};import{v4 as pt,validate as ft}from"uuid";var Te=2,Ie=async(e,t)=>{let r=await o.get(e);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>t?r[i]=[t,n]:delete r[i];await o.set(e,r)}},gt=async()=>{try{let e=Date.now(),t=await o.get("optOut");return t&&typeof t=="number"&&t>e?await o.set("optOut",[e,t]):await o.remove("optOut"),await Ie("optOutDomains",e),await Ie("quietDomains",e),!0}catch{return!1}},ht=async()=>{try{let e=await o.get("quietDomains");if(e&&typeof e=="object"){for(let[r,i]of Object.entries(e))Array.isArray(i)&&(e[r]={time:i,phase:"quiet"});await o.set("quietDomains",e)}let t=await o.get("id");return ft(t||"")||(t=pt(),await o.set("id",t)),!0}catch{return!1}},_e=async()=>{let e=await o.get("migrationVersion")||0;e<1&&await gt()&&await o.set("migrationVersion",1),e<Te&&await ht()&&await o.set("migrationVersion",Te)};var De="quietDomains",wt=async(e,t,r,i)=>{let n=await o.get(De);(typeof n!="object"||n===null)&&(n={});let s=Date.now(),l=s+t;n[e]={time:[s,l],phase:i||"quiet"},r&&(n[e].payload=r),await o.set(De,n)},C=wt;import{v4 as Et,validate as yt}from"uuid";var bt=async()=>{let e=await o.get("id");return yt(e)||(e=Et(),await o.set("id",e)),e},O=bt;var At=async e=>{let{path:t,method:r,params:i}=e;if(!e||!t||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let n=E.getInstance().getApiEndpoint();n+=t;let s=E.getInstance().getApiKey();if(r==="GET"){let a=new URLSearchParams({...i,version:W(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await O()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${a.toString()}`}else r==="POST"&&(i={...i,version:W(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await O()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(i):void 0})).json()},I=At;var Ot=async({walletAddress:e,cashbackUrl:t,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:e};return await o.get("disableReminders")&&(n.disableReminders=!0),r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),t&&(n.cashbackUrl=t),await I({path:"/check/notification",method:"POST",params:n})},Se=Ot;var Pt=(e,t,r)=>{r=r||5;let i=1e3;return new Promise((n,s)=>{let l=d=>{chrome.tabs.get(e,a=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},c=>{chrome.runtime.lastError?d<r-1?setTimeout(()=>l(d+1),i*Math.pow(2,d)):n(null):n(c||null)})})};l(0)})},x=Pt;var vt=async e=>{let t=await o.get("walletAddress");try{if(!e){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return t;e=i[0].id}let r=await x(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},R=vt;var xt=async(e,t,r,i=!1)=>{let n={showNotification:!1,token:"",iframeUrl:""},s=Date.now(),l=await o.get("notificationCheck");if(!i&&v(l,s))return n;let d=t?await R(t):await o.get("walletAddress"),a=await o.get("lastActivation"),c=a?s-a:void 0,m=await Se({walletAddress:d,cashbackUrl:r,lastActivation:a,timeSinceLastActivation:c});await o.set("notificationCheck",[s,s+m.nextCall]);let u={showNotification:m.showNotification,token:m.token,iframeUrl:m.iframeUrl,expiration:[s,s+m.expiration]};return u.showNotification&&e&&await Promise.all([o.set("notification",u),o.remove("lastActivation")]),u},U=xt;var Tt=e=>e?chrome.runtime.getURL(e):"",M=Tt;var It=async e=>{let t=E.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};r.params={},t&&(r.params.whitelist=encodeURIComponent(t)),e&&(r.params.trigger=e);let i=await I(r);return i.relevantDomains=_(i.relevantDomains),i.postPurchaseUrls=_(i.postPurchaseUrls),i},Ne=It;var Ce=e=>{if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="string")return`"${e}"`;if(typeof e=="number")return Number.isNaN(e)?"NaN":String(e);if(typeof e=="boolean")return String(e);if(Array.isArray(e))return`[${e.map(t=>t===void 0?"undefined":t===null?"null":Ce(t)).join(", ")}]`;if(typeof e=="object")try{return JSON.stringify(e,(t,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(e)}}`}return String(e)},k=Ce;var Re=async()=>{try{let e=E.getInstance().getWhitelistEndpoint();if(!e)return[];let t=await fetch(e,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!t.ok)throw new Error("Failed to fetch whitelist");let r=await t.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r=J(r),r}catch(e){return console.error("Error fetching whitelist:",e),[]}};var z=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=E.getInstance().getWhitelistEndpoint(),n=null,s=Date.now();if(t?t instanceof Uint8Array?e?Array.isArray(e)?e.length!==2?n=`invalid domains timestamp check format__length: ${e.length} - value: ${k(e)}`:e[0]>=s?n=`cache expired - range start is bigger than Date.now()__value: ${k(e)}, now: ${s}`:s>=e[1]?n="cache expired - range end is smaller than Date.now()":i&&(!r?.length||!(r instanceof Uint8Array))?n="missing whitelist data":V(e,s)&&(n=`cache expired - range is expired__range: ${k(e)}, now: ${s}`):n=`invalid domains timestamp check format - not an array__value: ${k(e)}`:n=`no domains timestamp check found__value: ${k(e)}`:n="domains list isn't an Uint8Array":n="no domains in cache",!n)return t;let l=await Ne(n),{nextUpdateTimestamp:d,relevantDomains:a,postPurchaseUrls:c}=l;r=await Re();let m=[o.set("relevantDomains",a),o.set("relevantDomainsCheck",[s,s+d]),o.set("postPurchaseUrls",c)];return r&&m.push(o.set("redirectsWhitelist",r)),await Promise.all(m),a};var _t=async e=>{try{if(!E.getInstance().getWhitelistEndpoint())return!0;let r=await o.get("redirectsWhitelist");if((!(r instanceof Uint8Array)||!r?.length)&&(await z(),r=await o.get("redirectsWhitelist")),!r?.length)return!1;let i=P(e),{matched:n}=D(r,i);return n}catch{return console.error("Invalid URL:",e),!1}},X=_t;var Dt=async e=>{let t=Array.isArray(e);t?e.forEach(r=>r.category=r.category||"system"):e.category=e?.category||"system",await I({path:"/analytics",method:"POST",params:t?{events:e}:e})},L=Dt;var St=async(e,t,r,i)=>{let s=(await chrome.tabs.query({})).map(m=>m.id).filter(m=>m&&m!==t),l=[],d=await O(),a=await R(),c=s.map(m=>x(m,{action:"CLOSE_POPUP",reason:"already_activated",path:i||"/",domain:e},2).then(u=>{u.status==="success"&&l.push({type:"popup_auto_close",location:u.location,flowId:u.flowId,closer:r,domain:e,userId:d,walletAddress:a})}).catch(()=>{}));await Promise.all(c),l.length&&await L(l)},Ue=St;var Nt=async(e,t,r,i,n,s,l,d,a,c,m)=>{let u=Date.now(),f=t===chrome.runtime.id;if(f){let g=[o.set("lastActivation",u)];r==="portal"&&g.push(o.set("portalRelevantDomains",J([e]))),await Promise.all(g)}e&&C(e,s||864e5,{iframeUrl:d,token:a,flowId:c},f?"activated":"quiet"),Ue(e,l||-1,t),l&&m&&await X(m)&&chrome.tabs.update(l,{url:m}),await U(n,void 0,M(i),f)},G=Nt;var Me="optOutDomains",Ct=async(e,t)=>{if(!e)return;let r=await o.get(Me);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+t;r[e]=[i,n],await o.set(Me,r)},ke=Ct;var Le=e=>{e&&chrome.tabs.create({url:e})};var $e=async e=>{if(e<0)return await o.remove("optOut"),{isOptedOut:!1};{let t=Date.now();return await o.set("optOut",[t,t+e]),{isOptedOut:!0}}},We=async()=>{let e=await o.get("optOut");return{isOptedOut:v(e)}};var Rt=(e,t)=>{chrome.runtime.onMessage.addListener((r,i,n)=>{if(r?.from!=="bringweb3")return;let{action:s}=r,l=r.source||"popup";switch(s){case"ACTIVATE":{let{domain:a,extensionId:c,time:m,redirectUrl:u,iframeUrl:f,token:p,flowId:g}=r;return G(a,c,l,e,t,m,i.tab?.id,f,p,g,u).then(()=>n()),!0}case"PORTAL_ACTIVATE":{let{domain:a,extensionId:c,time:m,iframeUrl:u,token:f,flowId:p}=r;return G(a,c,l,e,t,m,i.tab?.id,u,f,p).then(()=>n()),!0}case"GET_OPT_OUT":return We().then(a=>n(a)),!0;case"OPT_OUT":{let{time:a}=r;return $e(a).then(c=>n(c)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:c}=r;return ke(a,c).then(m=>n(m)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(a=>n({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=r;return o.set("popupEnabled",a).then(()=>{n({isPopupEnabled:a})}).catch(c=>{console.error("Error setting popup enabled:",c),n({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:c}=r;return c&&(C(c,a),n({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=r;return a?o.set("walletAddress",a).then(()=>U(t,void 0,M(e),!0).then(()=>n(a))):o.remove("walletAddress").then(()=>n({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>n({message:"notification erased successfully"})),!0;case"OPEN_CASHBACK_PAGE":let{url:d}=r;return Le(d||e),n({message:"cashback page opened successfully"}),!0;case"STOP_REMINDERS":return o.set("disableReminders",!0).then(()=>n({message:"stopped reminders successfully"})),!0;default:return console.warn(`Bring unknown action: ${s}`),!0}})},Fe=Rt;var Ut=async({body:e})=>await I({path:"/check/popup",method:"POST",params:e}),Ve=Ut;var Mt=["http://","https://","www.","www1.","www2."],kt=e=>{if(!e)return"";for(let t of Mt)e.startsWith(t)&&(e=e.replace(t,""));return e},je=kt;var Lt=["www.","www1.","www2."],ce={matched:!1,match:""},$t=async e=>{let t=null;try{t=new URL(e)}catch{try{t=new URL(`https://${e}`)}catch{return ce}}let{hostname:r,pathname:i}=t;for(let a of Lt)r=r.replace(a,"");i.endsWith("/")||(i+="/");let n=r+i,s=await o.get("postPurchaseUrls");if(!s||!s.length||!(s instanceof Uint8Array))return ce;let{matched:l,match:d}=D(s,n,!0,!0);return l?(await L({type:"thank_you_page",page:e,entry:d}).catch(()=>{}),{matched:l,match:d}):ce},Ge=$t;var Wt=async e=>{let t=await o.get("quietDomains")||{},r="new",i={};if(t[e]){let{time:n}=t[e];v(n,void 0,{maxRange:60*864e5})?(r=t[e].phase||"quiet",i=t[e].payload||{},r==="activated"&&(t[e].phase="quiet",t[e].payload&&delete t[e].payload,await o.set("quietDomains",t))):(delete t[e],await o.set("quietDomains",t))}return{phase:r,payload:i}},Ke=Wt;var Ft=["www.","www1.","www2."],Vt=async e=>{let t=await z(),r=await o.get("portalRelevantDomains"),i={matched:!1,match:"",phase:void 0};if(!e||!t||!t.length||!(t instanceof Uint8Array))return i;let n=null;try{n=new URL(e)}catch{try{n=new URL(`https://${e}`)}catch{return i}}let{hostname:s,pathname:l}=n,d=s+l;for(let m of Ft)d=d.replace(m,"");if(r){let m=D(r,d);if(m.matched)return await o.remove("portalRelevantDomains"),m}let{matched:a,match:c}=D(t,d);return a?{matched:a,match:c}:i},Be=Vt;var qe=async(e,t,r)=>{await x(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await O(),domain:r})},jt=async(e,t,r,i,n)=>{let s=await o.get("notification"),l=Date.now(),d=s?.expiration;if(V(d,l))await o.remove("notification");else if(s)return await qe(e,s,r);let a=await U(i,e,M(t));a.showNotification&&(i&&await qe(e,a,r),n&&n())},le=jt;var Gt=(e,t,r)=>{chrome.tabs.onUpdated.addListener(async(i,n,s)=>{if(!n.url||!s?.url?.startsWith("http"))return;let l=je(s.url);if(!await o.get("popupEnabled"))return;await Ge(s.url);let{matched:a,match:c}=await Be(s.url);if(!a){await le(i,e,l,t,r);return}let{phase:m,payload:u}=await Ke(c);if(m==="new"){let B=Date.now(),Z=await o.get("optOut");if(v(Z,B))return;await o.remove("optOut");let q=await o.get("optOutDomains");if(q&&v(q[c],B))return}else if(m==="activated"){let B=await O(),{iframeUrl:Z,token:q}=u||{},Yt=await x(i,{action:"INJECT",iframeUrl:Z,token:q,domain:l,userId:B,page:m});return}else if(m==="quiet"){await le(i,e,l,t,r);return}let f=await R(i),{token:p,isValid:g,iframeUrl:h,networkUrl:w,flowId:y,time:$=864e5,portalReferrers:K}=await Ve({body:{domain:c,phase:m,url:s.url,address:f}});if(g===!1){C(c,$);return}if(!await X(w))return;let de=await O(),S=await x(i,{action:"INJECT",token:p,domain:l,iframeUrl:h,userId:de,referrers:K,page:m==="new"?"":m,flowId:y});if(S?.action)switch(S.action){case"activate":G(c,chrome.runtime.id,"popup",e,$,i);break;default:console.error(`Unknown action: ${S.action}`);break}S?.status!=="success"&&L({type:"no_popup",userId:de,walletAddress:f,details:{url:s.url,match:c,iframeUrl:h,reason:S?.message,status:S?.status},flowId:y})})},He=Gt;var me=pe,Kt=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:s=!0,notificationCallback:l})=>{if(!e||!t)throw new Error("Missing configuration");if(me&&console.log({ENDPOINT:me}),!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");let d=E.getInstance();d.setApiEndpoint(me||t),d.setWhitelistEndpoint(i||""),d.setApiKey(e),o.initializeDebugCache(),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await _e(),Fe(r,s),He(r,s,l)},Bt=Kt;var qt=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e({isTurnedOff:r.isOptedOut})})}),Ht=e=>new Promise((t,r)=>{let i=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isTurnedOff:n.isOptedOut}):r("No response received")})});var Qt=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e(r)})}),Jt=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});export{Bt as bringInitBackground,at as bringInitContentScript,Qt as getPopupEnabled,qt as getTurnOff,Jt as setPopupEnabled,Ht as setTurnOff};
1
+ var te=e=>{try{switch(e){case"VERSION":return process?.env?.VERSION;case"ENDPOINT":return process?.env?.ENDPOINT;case"IFRAME_URL":return process?.env?.IFRAME_URL;default:return}}catch{return}},he=te("VERSION"),we=te("ENDPOINT"),re=te("IFRAME_URL");var rt=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,a])=>{a&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(a)):t.append(n,a))}),t.toString()},ne=rt;var ye={name:"@bringweb3/chrome-extension-kit",version:"1.6.0",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --env.ENDPOINT=dev --env.VERSION=1.6.0 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify","build:dev":"tsup index.ts --format cjs,esm --dts --minify --env.ENDPOINT=dev --env.VERSION=1.6.0",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var it=()=>he||ye.version,j=it;var M="bringweb3-offerbar-container",G="bringweb3-iframe";var at=()=>{let e=[];return{add:t=>{t&&e.push(t)},cleanup:()=>{e.forEach(t=>{try{t()}catch(r){console.error("Cleanup function failed:",r)}}),e.length=0}}},S=at();var ot=(e,t)=>{if(!e)return;let r=document.getElementById(t);r&&r.remove();let i=document.createElement("style");i.id=t,i.textContent=e,document.head.appendChild(i),S.add(()=>{let n=document.getElementById(t);n&&n.remove()})},Ee=ot;var st=({parent:e,id:t})=>{if(!e)return;let r=document.querySelector(e);if(!r)return;let i=document.createElement("div");for(i.id=t;r.firstChild;)i.appendChild(r.firstChild);r.appendChild(i),S.add(()=>{let n=document.getElementById(t);if(n&&n.parentElement){for(;n.firstChild;)n.parentElement.appendChild(n.firstChild);n.remove()}})},be=st;var Ae=(e,t)=>e==="w"?(window.innerWidth-t)/window.innerWidth:e==="h"?(window.innerHeight-t)/window.innerHeight:1,Se=(e,t)=>e.split("").reduce((r,i)=>r+(t[parseInt(i)]??0),0),ct=({sides:e,scales:t,listener:r})=>{e.forEach((n,a)=>{e[a]=Math.max(0,n)});let i=()=>{let n=document.body,a=Ae(t.x[0],Se(t.x[1],e)),c=Ae(t.y[0],Se(t.y[1],e));console.table({newScaleX:a,newScaleY:c,height:n.style.height}),n.style.setProperty("transform",`translate(${e[3]}px, ${e[0]}px) scale(${a}, ${c})`,"important"),n.style.setProperty("height",`calc(100vh / ${c})`,"important")};i(),r&&window.addEventListener("resize",i),r&&S.add(()=>{window.removeEventListener("resize",i)})},Pe=ct;var lt=({scroller:e,sides:t,scales:r,resize:i})=>{be({parent:e,id:"bringweb3-scroller"}),Pe({sides:t,scales:r,listener:i})},Oe=lt;var mt="bring-iframe-stylesheet",ut=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:a,switchWallet:c,placement:m,stylesheet:s,framed:l})=>{let d=chrome.runtime.id,u=`${G}-${d}`,g=document.getElementById(u),f=re?`${re}${a?"/"+a:""}`:n;if(g)return g;let w=ne({query:{...e,extensionId:d,v:j(),themeMode:r,textMode:i,switchWallet:String(c)}}),y=t?`&${ne({query:t,prefix:"t"})}`:"",h=document.createElement("iframe");return h.id=u,h.src=encodeURI(`${f}?${w}${y}`),h.setAttribute("sandbox","allow-scripts allow-same-origin"),h.style.position="fixed",h.style.right="8px",h.scrolling="no",h.style.overflow="hidden",h.style.width="1px",h.style.height="1px",h.style.borderRadius="10px",h.style.border="none",h.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(h.style.boxShadow=t.popupShadow),Ee(s,mt),l&&Oe(l),dt(h,m,a),h};function dt(e,t,r){if(console.log({page:r}),["offerbar","framed"].includes(r||"")&&document.querySelector(`iframe[id^="${G}-"]`))return;let i=e;if(t?.parent){let n=document.getElementById(M);n||(n=document.createElement(t.parent),n.id=M),n.appendChild(e),i=n}if(S.add(()=>{if(e&&e.parentNode&&e.remove(),t?.parent){let n=document.getElementById(M);n&&n.remove()}}),!t||t.location==="end"){document.documentElement.appendChild(i);return}if(t.location==="start"){document.documentElement.insertBefore(i,document.documentElement.firstChild);return}if((t.location==="after"||t.location==="before")&&t.selector){let n=document.querySelector(t.selector);if(!n)return;let a=t.location==="after"?n.nextSibling:n;n.parentNode?.insertBefore(i,a);return}document.documentElement.appendChild(i)}var xe=ut;var ft=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},ie=ft;var pt=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let r=t.sheet;r?e.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},ve=pt;var P={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE",STOP_REMINDERS:"STOP_REMINDERS"},gt=[P.ACTIVATE],ht=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:a,keyFrames:c,time:m,extensionId:s,url:l,domain:d,redirectUrl:u,iframeUrl:g,token:f,flowId:w,platformName:y,searchTermPattern:h,type:p,quietDomainType:_,isRegex:A}=e.data;if(i==="bringweb3"&&!(s!==chrome.runtime.id&&!gt.includes(n)))switch(n){case P.OPEN:let E=document.getElementById(M);E&&a&&"parent"in a&&ie(E,a.parent),a&&"iframe"in a&&ie(t,a.iframe);break;case P.CLOSE:S.cleanup(),m&&chrome.runtime.sendMessage({action:n,time:m,domain:d,type:p,isRegex:A,from:"bringweb3"});break;case P.PROMPT_LOGIN:r();break;case P.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:d,extensionId:s,time:m,redirectUrl:u,iframeUrl:g,token:f,flowId:w,platformName:y,quietDomainType:_,isRegex:A});break;case P.OPT_OUT:chrome.runtime.sendMessage({action:n,time:m,from:"bringweb3"});break;case P.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:d,time:m,type:p,isRegex:A,from:"bringweb3"});break;case P.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;case P.ADD_KEYFRAMES:ve(c);break;case P.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:l,from:"bringweb3"});break;case P.STOP_REMINDERS:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;default:break}},Te=ht;var De=async({iframeEl:e,getWalletAddress:t})=>{e||(e=document.querySelector(`#${G}-${chrome.runtime.id}`));let r=await t();e?.contentWindow?.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},wt=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>De({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let a=e[n];a&&window.addEventListener(a,async()=>De({iframeEl:i,getWalletAddress:r}))}},Ie=wt;var yt=e=>e.endsWith("/")?e.slice(0,-1):e,Y=yt;var Et=["www.","www1.","www2."],bt=e=>{for(let r of Et)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=Y(t),t},I=bt;var B=null,ae,oe=!1,Re=null,_e=()=>{oe=!1,ae=void 0,B=null,S?.cleanup()},At=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:a,theme:c,text:m,switchWallet:s=!1})=>{if(window.self!==window.top&&Y(window.document.location.origin).endsWith("bringweb3.io")){window.addEventListener("message",l=>{if(!l.data||l.data.from!=="bringweb3"||l.data.action!=="PORTAL_ACTIVATE")return;let{action:d,domain:u,extensionId:g,time:f,iframeUrl:w,token:y,platformName:h}=l.data;chrome.runtime.sendMessage({action:d,from:"bringweb3",domain:u,extensionId:g,time:f,iframeUrl:w,token:y,source:"portal",platformName:h})});return}if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");Ie({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:B}),window.addEventListener("message",l=>Te({event:l,iframeEl:B,promptLogin:t})),chrome.runtime.onMessage.addListener((l,d,u)=>{if(l?.from!=="bringweb3")return;let{action:g}=l;switch(g){case"GET_WALLET_ADDRESS":return e().then(f=>u({status:"success",walletAddress:f})).catch(f=>u({status:"success",walletAddress:void 0})),!0;case"GET_PAGE_LINKS":return window!==window.top?!1:(requestAnimationFrame(()=>{try{let f=Array.from(document.querySelectorAll("a[href]")).map(w=>w.href).filter(w=>w.startsWith("http"));u({status:"success",links:f})}catch{u({status:"failed",links:[]})}}),!0);case"CLOSE_POPUP":return B&&ae===l.path&&I(location.href)===I(l.domain)?(_e(),u({status:"success",message:"Popup closed",location:window.document.location.href,flowId:Re})):u({status:"failed",message:"Domain mismatch or iframe not open"}),!0;case"INJECT":try{let{referrer:f}=document,w=l.referrers||[];if(I(location.href)!==I(l.domain))return u({status:"failed",message:"Domain already changed"}),!0;if(oe)return u({status:"failed",message:"iframe already open"}),!0;if(!!f&&w.includes(I(f))&&l.page==="")return u({status:"failed",message:`already activated by ${I(f)}`,action:"activate"}),!0;let{token:h,iframeUrl:p,userId:_,placement:A,framed:E,stylesheet:V}=l,z={token:h};return _&&(z.userId=_),B=xe({query:z,iframeUrl:p,theme:c==="dark"?a:n,themeMode:c||"light",text:m,switchWallet:s,page:l.page,placement:A,stylesheet:V,framed:E}),oe=!0,ae=`/${l.page||""}`,Re=l.flowId,u({status:"success"}),!0}catch(f){return f instanceof Error?u({status:"failed",message:f.message}):u({status:"failed",message:String(f)}),!0}default:console.error(`Unknown action: ${g}`);break}}),window.addEventListener("pagehide",()=>{_e()})},St=At;var b=class e{static instance=null;baseDomain="https://api.bringweb3.io";apiPath="v1/extension";endpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){this.endpoint=t}setApiKey(t){this.apiKey=t}getWhitelistEndpoint(){return this.whitelistEndpoint}getBaseDomain(){return this.baseDomain}getApiPath(){return this.apiPath}getEndpoint(){if(!this.endpoint)throw new Error("endpoint not set. Call setApiEndpoint first.");return this.endpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var se=class{cache=new Map;get(t){let r=this.cache.get(t);return r?r.value:null}set(t,r){this.cache.set(t,{value:r})}delete(t){this.cache.delete(t)}clear(){this.cache.clear()}getStats(){return{size:this.cache.size,keys:Array.from(this.cache.keys())}}},Ce=se;var Ne=e=>{try{return e.regexes.map((t,r)=>new RegExp(t,e.flags[r]||""))}catch(t){return console.error("Error building RegExp array:",t),null}},Pt={relevantDomains:{get:Ne,set:Ne}},K=Pt;var ce=e=>{if(!e||!Array.isArray(e)||e.length!==2)return!1;let[t,r]=e;return typeof t=="number"&&typeof r=="number"&&t<=r},H=(e,t,r)=>{if(!ce(e))return!0;let[i,n]=e;return t=t??Date.now(),t<i||t>n||r?.maxRange!==void 0&&n-i>r.maxRange},x=(e,t,r)=>!H(e,t,r);var J="bring_",v=new Ce,Me=async(e,t,r=!0)=>{let i=t;return K[e]?.set&&(i=K[e].set(t)),r&&v.set(e,i),new Promise((n,a)=>{chrome.storage.local.set({[`${J}${e}`]:t},()=>{chrome.runtime.lastError?a(chrome.runtime.lastError):n()})})},le=async(e,t=!0)=>{if(t){let r=v.get(e);if(r!==null)return r}return new Promise((r,i)=>{chrome.storage.local.get([`${J}${e}`],async n=>{if(chrome.runtime.lastError)i(chrome.runtime.lastError);else{let a=n[`${J}${e}`];a&&K[e]?.get&&(a=K[e].get(a)),t&&a!==void 0&&v.set(e,a),r(a)}})})},Ue=async e=>(v.delete(e),new Promise((t,r)=>{chrome.storage.local.remove([`${J}${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})})),Ot=()=>{v.clear()},xt=e=>{v.delete(e)},vt=()=>v.getStats(),Tt=()=>{if(!(typeof globalThis>"u"))try{globalThis.bringCache={clear:()=>v.clear(),stats:()=>v.getStats(),get:async e=>await le(e),getReadable:async e=>{let t=await le(e);return ce(t)&&(t=`[${new Date(t[0]).toLocaleString("en-GB")} - ${new Date(t[1]).toLocaleString("en-GB")}] Total of ${(t[1]-t[0])/1e3/60} minutes`),t},set:async(e,t)=>await Me(e,t),invalidate:e=>v.delete(e),delete:async e=>await Ue(e)}}catch(e){console.warn("Failed to initialize debug cache:",e)}},o={set:Me,get:le,remove:Ue,clearCache:Ot,invalidateCache:xt,getCacheStats:vt,initializeDebugCache:Tt};import{v4 as Dt,validate as It}from"uuid";var ke=4,Le=async(e,t)=>{let r=await o.get(e);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>t?r[i]=[t,n]:delete r[i];await o.set(e,r)}},Rt=async()=>{try{let e=Date.now(),t=await o.get("optOut");return t&&typeof t=="number"&&t>e?await o.set("optOut",[e,t]):await o.remove("optOut"),await Le("optOutDomains",e),await Le("quietDomains",e),!0}catch{return!1}},_t=async()=>{try{let e=await o.get("quietDomains");if(e&&typeof e=="object"){for(let[r,i]of Object.entries(e))Array.isArray(i)&&(e[r]={time:i,phase:"quiet"});await o.set("quietDomains",e)}let t=await o.get("id");return It(t||"")||(t=Dt(),await o.set("id",t)),!0}catch{return!1}},Ct=async()=>{try{return await Promise.all([o.remove("redirectsWhitelist"),o.remove("relevantDomains"),o.remove("postPurchaseUrls")]),!0}catch{return!1}},Nt=async()=>{try{let e=await o.get("quietDomains")||{},t=await o.get("optOutDomains")||{};for(let[i,n]of Object.entries(t))e[i]||(e[i]={time:n,phase:"quiet"});await o.remove("optOutDomains");let r=Object.entries(e).map(([i,n])=>({domain:i,...n}));return await o.set("quietDomains",r),!0}catch{return!1}},$e=async()=>{let e=await o.get("migrationVersion")||0;e<1&&await Rt()&&await o.set("migrationVersion",1),e<2&&await _t()&&await o.set("migrationVersion",2),e<3&&await Ct()&&await o.set("migrationVersion",3),e<ke&&await Nt()&&await o.set("migrationVersion",ke)};var Fe=(e,t=50)=>{let r=Date.now(),i={maxRange:60*864e5},n=e.filter(a=>x(a.time,r,i));return n.length>t?n.sort((a,c)=>c.time[0]-a.time[0]).slice(0,t):n};var We="quietDomains",Mt=async(e,t,r,i,n,a)=>{if(!e)return;let c=Array.isArray(e)?e:[e],m=r?Array.isArray(r)?r:[r]:["kd"],s=i?Array.isArray(i)?i:[i]:[!1],[l,d]=await Promise.all([o.get(We),o.get("quietDomainsMaxLength")]);Array.isArray(l)||(l=[]),l=Fe(l,d);let u=Date.now(),g=u+t;for(let f=0;f<c.length;f++){let w=c[f];if(!w)continue;let y={domain:w,time:[u,g],phase:a||"quiet"};m&&m[f]&&(y.type=m[f]),s&&s[f]!==void 0&&(y.regex=s[f]),n&&(y.payload=n);let h=l.findIndex(p=>p.domain===w&&p.type===y.type);h>=0?l[h]=y:l.push(y)}await o.set(We,l)},N=Mt;import{v4 as Ut,validate as kt}from"uuid";var Lt=async()=>{let e=await o.get("id");return kt(e)||(e=Ut(),await o.set("id",e)),e},T=Lt;var $t=async e=>{let{path:t,method:r,params:i,timeout:n}=e;if(!e||!t||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let a=b.getInstance(),c=a.getBaseDomain(),m=a.getApiPath(),s=await o.get("envName"),l;s?l=`${c}/${s}/${m}${t}`:l=`${c}/${m}${t}`;let d=b.getInstance().getApiKey();if(r==="GET"){let f=new URLSearchParams({...i,version:j(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await T()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});l+=`?${f.toString()}`}else r==="POST"&&(i={...i,version:j(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await T()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(l,{method:r,headers:{"Content-Type":"application/json","x-api-key":d},body:r==="POST"?JSON.stringify(i):void 0,signal:n&&"timeout"in AbortSignal?AbortSignal.timeout(n):void 0})).json()},R=$t;var Ft=async({walletAddress:e,cashbackUrl:t,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:e};return await o.get("disableReminders")&&(n.disableReminders=!0),r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),t&&(n.cashbackUrl=t),await R({path:"/check/notification",method:"POST",params:n})},qe=Ft;var Wt=(e,t,r)=>{r=r||10;let i=100,n=20;return new Promise((a,c)=>{let m=s=>{chrome.tabs.get(e,l=>{if(chrome.runtime.lastError){a(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?s<r-1?setTimeout(()=>m(s+1),i+n*s):a(null):a(d||null)})})};m(0)})},D=Wt;var qt=async e=>{let t=await o.get("walletAddress");try{if(!e){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return t;e=i[0].id}let r=await D(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},U=qt;var Vt=async(e,t,r,i=!1)=>{let n={showNotification:!1,token:"",iframeUrl:""},a=Date.now(),c=await o.get("notificationCheck");if(!i&&x(c,a))return n;let m=t?await U(t):await o.get("walletAddress"),s=await o.get("lastActivation"),l=s?a-s:void 0,d=await qe({walletAddress:m,cashbackUrl:r,lastActivation:s,timeSinceLastActivation:l});await o.set("notificationCheck",[a,a+d.nextCall]);let u={showNotification:d.showNotification,token:d.token,iframeUrl:d.iframeUrl,expiration:[a,a+d.expiration]};return u.showNotification&&e&&await Promise.all([o.set("notification",u),o.remove("lastActivation")]),u},k=Vt;var jt=e=>e?chrome.runtime.getURL(e):"",L=jt;var Ve=async(e,t,r)=>{t.includes("/")||(t+="/");let i=t.indexOf("/"),n=t.substring(0,i),a=t.substring(i),c=decodeURIComponent(a.replace(/\+/g," ")),s=n.split("").reverse().join("")+c,l=await o.get("domainsTypes");for(let d=0;d<e.length;d++){let u=l?.[d];if(r){if(!r.includes(u))continue}else if(u==="i")continue;let g=e[d];if(!g)continue;let f=g.exec(s);if(f&&f.index===0&&f[0])return{matched:!0,match:Array.from(f).filter(h=>h!==void 0),type:u}}return{matched:!1,match:void 0,type:void 0}},me=(e,t,r)=>{let i=t.indexOf("/"),n=i===-1?t:t.substring(0,i),a=i===-1?"":t.substring(i+1),c=e.indexOf("/"),m=c===-1?e:e.substring(0,c),s=c===-1?"":e.substring(c+1),l=!1;if(m===n)l=!0;else if(m.startsWith("*.")){let u=m.substring(2);(n.endsWith("."+u)||n===u)&&(l=!0)}if(!l)return!1;if(a===""&&s==="")return!0;let d=decodeURIComponent(a.replace(/\+/g," "));if(r)try{if(new RegExp(s).test(d))return!0}catch{}else if(d.startsWith(s))return!0;return!1},$=(e,t)=>{for(let r of e){let i=typeof r=="string"?r:r.domain,n=typeof r=="string"?!1:r.regex;if(me(i,t,n))return{matched:!0,match:i}}return{matched:!1,match:void 0}};var Gt=async(e,t)=>{let r=b.getInstance().getWhitelistEndpoint(),i={path:"/domains",method:"GET",timeout:t};return i.params={},r&&(i.params.whitelist=encodeURIComponent(r)),e&&(i.params.trigger=e),await R(i)},je=Gt;var Ge=e=>{if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="string")return`"${e}"`;if(typeof e=="number")return Number.isNaN(e)?"NaN":String(e);if(typeof e=="boolean")return String(e);if(Array.isArray(e))return`[${e.map(t=>t===void 0?"undefined":t===null?"null":Ge(t)).join(", ")}]`;if(typeof e=="object")try{return JSON.stringify(e,(t,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(e)}}`}return String(e)},F=Ge;var Be=async e=>{try{let t=b.getInstance().getWhitelistEndpoint();if(!t)return[];let r=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"},signal:e&&"timeout"in AbortSignal?AbortSignal.timeout(e):void 0});if(!r.ok)throw new Error("Failed to fetch whitelist");let i=await r.json();if(!Array.isArray(i))throw new Error("whitelist isn't an array");return i}catch(t){return console.error("Error fetching whitelist:",t),[]}};var X=null,W=async()=>{let[e,t,r]=await Promise.all([o.get("relevantDomainsCheck"),o.get("relevantDomains"),o.get("redirectsWhitelist")]),i=r,n=b.getInstance().getWhitelistEndpoint(),a=null,c=Date.now();return t?Array.isArray(t)?e?Array.isArray(e)?e.length!==2?a=`invalid domains timestamp check format__length: ${e.length} - value: ${F(e)}`:e[0]>=c?a=`cache expired - range start is bigger than Date.now()__value: ${F(e)}, now: ${c}`:c>=e[1]?a="cache expired - range end is smaller than Date.now()":n&&(!i?.length||!Array.isArray(i))?a="missing whitelist data":H(e,c)&&(a=`cache expired - range is expired__range: ${F(e)}, now: ${c}`):a=`invalid domains timestamp check format - not an array__value: ${F(e)}`:a=`no domains timestamp check found__value: ${F(e)}`:a="domains list isn't valid format":a="no domains in cache",a?X||(X=(async()=>{try{let m=await je(a,3e4),{nextUpdateTimestamp:s,relevantDomains:l,postPurchaseUrls:d,flags:u,types:g,quietDomainsMaxLength:f}=m;i=await Be(3e4);let w=[o.set("relevantDomains",{regexes:l,flags:u}),o.set("relevantDomainsCheck",[c,c+s]),o.set("postPurchaseUrls",d),o.set("domainsTypes",g)];return f&&w.push(o.set("quietDomainsMaxLength",f)),i&&w.push(o.set("redirectsWhitelist",i)),await Promise.all(w),await o.get("relevantDomains")}finally{X=null}})()):t};var Bt=async e=>{try{if(!b.getInstance().getWhitelistEndpoint())return!0;let r=await o.get("redirectsWhitelist");if((!Array.isArray(r)||!r?.length)&&(await W(),r=await o.get("redirectsWhitelist")),!r?.length)return!1;let i=I(e),{matched:n}=$(r,i);return n}catch{return console.error("Invalid URL:",e),!1}},Z=Bt;var Kt=async e=>{let t=Array.isArray(e);t?e.forEach(r=>r.category=r.category||"system"):e.category=e?.category||"system",await R({path:"/analytics",method:"POST",params:t?{events:e}:e})},q=Kt;var Ht=async(e,t,r,i)=>{let a=(await chrome.tabs.query({})).map(d=>d.id).filter(d=>d&&d!==t),c=[],m=await T(),s=await U(),l=a.map(d=>D(d,{action:"CLOSE_POPUP",reason:"already_activated",path:i||"/",domain:e},2).then(u=>{u.status==="success"&&c.push({type:"popup_auto_close",location:u.location,flowId:u.flowId,closer:r,domain:e,userId:m,walletAddress:s})}).catch(()=>{}));await Promise.all(l),c.length&&await q(c)},Ke=Ht;var Qt=async(e,t,r,i,n,a,c,m,s,l,d,u,g)=>{let f=Date.now(),w=t===chrome.runtime.id;if(w){let h=[o.set("lastActivation",f)];r==="portal"&&h.push(o.set("portalRelevantDomains",[e])),await Promise.all(h)}e&&N(e,m||864e5,a,c,{iframeUrl:l,token:d,flowId:u},w?"activated":"quiet"),Ke(e,s||-1,t),s&&g&&await Z(g)&&chrome.tabs.update(s,{url:g}),await k(n,void 0,L(i),w)},Q=Qt;var He=e=>{e&&chrome.tabs.create({url:e})};var Qe=async e=>{if(e<0)return await o.remove("optOut"),{isOptedOut:!1};{let t=Date.now();return await o.set("optOut",[t,t+e]),{isOptedOut:!0}}},ze=async()=>{let e=await o.get("optOut");return{isOptedOut:x(e)}};var zt=(e,t)=>{chrome.runtime.onMessage.addListener((r,i,n)=>{if(r?.from!=="bringweb3")return;let{action:a}=r,c=r.source||"popup";switch(a){case"ACTIVATE":{let{domain:s,extensionId:l,time:d,redirectUrl:u,iframeUrl:g,token:f,flowId:w,quietDomainType:y,isRegex:h}=r;return Q(s,l,c,e,t,y,h,d,i.tab?.id,g,f,w,u).then(()=>n()),!0}case"PORTAL_ACTIVATE":{let{domain:s,extensionId:l,time:d,iframeUrl:u,token:g,flowId:f,type:w,isRegex:y}=r;return Q(s,l,c,e,t,w,y,d,i.tab?.id,u,g,f).then(()=>n()),!0}case"GET_OPT_OUT":return ze().then(s=>n(s)),!0;case"OPT_OUT":{let{time:s}=r;return Qe(s).then(l=>n(l)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:l,type:d,isRegex:u}=r;return s?.length?(N(s,l,d,u).then(g=>n(g)),!0):(n({error:"Missing domain"}),!0)}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>n({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=r;return o.set("popupEnabled",s).then(()=>{n({isPopupEnabled:s})}).catch(l=>{console.error("Error setting popup enabled:",l),n({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:l,type:d,isRegex:u}=r;return l&&(N(l,s,d,u),n({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=r;return s?o.set("walletAddress",s).then(()=>k(t,void 0,L(e),!0).then(()=>n(s))):o.remove("walletAddress").then(()=>n({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>n({message:"notification erased successfully"})),!0;case"OPEN_CASHBACK_PAGE":let{url:m}=r;return He(m||e),n({message:"cashback page opened successfully"}),!0;case"STOP_REMINDERS":return o.set("disableReminders",!0).then(()=>n({message:"stopped reminders successfully"})),!0;default:return console.warn(`Bring unknown action: ${a}`),!0}})},Ye=zt;var Yt=async({body:e})=>await R({path:"/check/popup",method:"POST",params:e}),Je=Yt;var Jt=["http://","https://","www.","www1.","www2."],Xt=e=>{if(!e)return"";for(let t of Jt)e.startsWith(t)&&(e=e.replace(t,""));return e},ee=Xt;var Zt=["www.","www1.","www2."],ue={matched:!1,match:""},er=async e=>{let t=null;try{t=new URL(e)}catch{try{t=new URL(`https://${e}`)}catch{return ue}}let{hostname:r,pathname:i}=t;for(let s of Zt)r=r.replace(s,"");i.endsWith("/")||(i+="/");let n=r+i,a=await o.get("postPurchaseUrls");if(!Array.isArray(a)||!a?.length)return ue;let{matched:c,match:m}=$(a,n);return c?(await q({type:"thank_you_page",page:e,entry:m}).catch(()=>{}),{matched:c,match:m}):ue},Xe=er;var tr=async(e,t)=>{let r=await o.get("quietDomains")||[],i="new",n={};for(let a=0;a<r.length;a++){let c=r[a];if(c.type?.includes(t)&&me(c.domain,e,c.regex)){let{time:m}=c;x(m,void 0,{maxRange:60*864e5})?(i=c.phase||"quiet",n=c.payload||{},i==="activated"&&(c.phase="quiet",c.payload&&delete c.payload,await o.set("quietDomains",r))):(r.splice(a,1),await o.set("quietDomains",r));break}}return{phase:i,payload:n}},de=tr;var rr=["www.","www1.","www2."],nr=async(e,t)=>{let r=await W(),i=await o.get("portalRelevantDomains"),n={matched:!1,match:"",phase:void 0,type:void 0};if(!e||!r||!r.length)return n;let a=null;try{a=new URL(e)}catch{try{a=new URL(`https://${e}`)}catch{return n}}let c=a.toString(),m=`${a.protocol}//`;c.startsWith(m)&&(c=c.substring(m.length));for(let s of rr)c=c.replace(s,"");if(i){let s=$(i,c);if(s.matched)return await o.remove("portalRelevantDomains"),s}if(Array.isArray(r)){let s=await Ve(r,c,t);return s.matched?{matched:!0,match:s.match,type:s.type}:n}return n},fe=nr;var Ze=async(e,t,r)=>{await D(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await T(),domain:r})},ir=async(e,t,r,i,n)=>{let a=await o.get("notification"),c=Date.now(),m=a?.expiration;if(H(m,c))await o.remove("notification");else if(a)return await Ze(e,a,r);let s=await k(i,e,L(t));s.showNotification&&(i&&await Ze(e,s,r),n&&n())},pe=ir;var O=new Map,ar=(e,t,r)=>{let i=async(n,a,c,m=!1,s)=>{if(m&&O.get(a)?.urlSearchStatus=="succeeded")return;let l=ee(n),{matched:d,match:u,type:g}=await fe(n,m?"d":"kd");if(!d){m||await pe(a,e,l,t,r);return}if(m){let E=O.get(a);if(E?.inlineSearch?.status==="matched")return;E?E.inlineSearch={status:"matched",popupData:null}:O.set(a,{urlSearchStatus:null,inlineSearch:{status:"matched",popupData:null}})}let{phase:f,payload:w}=await de(l,g);if(f==="new"){let E=Date.now(),V=await o.get("optOut");if(x(V,E))return;await o.remove("optOut")}else if(f==="activated"){let E=await T(),{iframeUrl:V,token:z,placement:tt}=w||{},dr=await D(a,{action:"INJECT",iframeUrl:V,token:z,domain:l,userId:E,page:f,placement:tt});return}else if(f==="quiet"){await pe(a,e,l,t,r);return}let y=await U(a),h=await o.get("quietDomains")||[];O.has(a)||O.set(a,{urlSearchStatus:null,inlineSearch:null}),m||(O.get(a).urlSearchStatus="pending");let p=await Je({body:{phase:f,url:c.url,address:y,type:m?"i":g,quietDomains:h,...m&&{link:n,linkMatch:u,urlMatch:s},...!m&&{urlMatch:u}}});if(p.time||(p.time=864e5),p.isValid===!1){if(N(p.verifiedMatch.match,p.time,p.quietDomainType,p.verifiedMatch.isRegex),m)return;let E=O.get(a);if(E.urlSearchStatus="failed",!E.inlineSearch?.popupData)return;p=E.inlineSearch.popupData}if(!await Z(p.networkUrl))return;if(!m)O.get(a).urlSearchStatus="succeeded";else{let E=O.get(a);if(E?.urlSearchStatus==="succeeded")return;if(E?.urlSearchStatus==="pending"){E.inlineSearch={status:"matched",popupData:p};return}}let _=await T(),A=await D(a,{action:"INJECT",token:p.token,domain:ee(c.url),iframeUrl:p.iframeUrl,userId:_,referrers:p.portalReferrers,page:p.framed?"framed":p.isOfferBar?"offerbar":f==="new"?"":f,flowId:p.flowId,stylesheet:p.stylesheet,placement:p.placement,framed:p.framed});if(A?.action)switch(A.action){case"activate":Q(p.verifiedMatch.match,chrome.runtime.id,"popup",e,p.quietDomainType,p.verifiedMatch.isRegex,p.time,a);break;default:console.error(`Unknown action: ${A.action}`);break}A?.status!=="success"&&q({type:"no_popup",userId:_,walletAddress:y,details:{url:n,match:u,iframeUrl:p.iframeUrl,reason:A?.message,status:A?.status},flowId:p.flowId})};chrome.tabs.onUpdated.addListener(async(n,a,c)=>{if(!(!c?.url?.startsWith("http")||!await o.get("popupEnabled"))&&(a.url&&(O.delete(n),await Xe(c.url),i(c.url,n,c,!1)),a.status==="complete")){let s=await fe(c.url,"i");if(!s.matched||(await de(ee(c.url),"i")).phase==="quiet")return;let d=await D(n,{action:"GET_PAGE_LINKS"});if(d?.status!=="success"||!d.links?.length)return;let u=[...new Set(d.links)];await Promise.allSettled(u.map(g=>i(g,n,c,!0,s.match)))}}),chrome.tabs.onRemoved.addListener(n=>{O.delete(n)})},et=ar;var ge=we,or=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:a=!0,notificationCallback:c})=>{if(!e||!t)throw new Error("Missing configuration");if(ge&&console.log({ENDPOINT:ge}),!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");let m=b.getInstance();m.setApiEndpoint(ge||t),m.setWhitelistEndpoint(i||""),m.setApiKey(e),o.initializeDebugCache();let s=await o.get("popupEnabled");s===void 0&&(await o.set("popupEnabled",n),s=n),await $e(),Ye(r,a),s&&await W(),et(r,a,c)},sr=or;var cr=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e({isTurnedOff:r.isOptedOut})})}),lr=e=>new Promise((t,r)=>{let i=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isTurnedOff:n.isOptedOut}):r("No response received")})});var mr=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e(r)})}),ur=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});export{sr as bringInitBackground,St as bringInitContentScript,mr as getPopupEnabled,cr as getTurnOff,ur as setPopupEnabled,lr as setTurnOff};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bringweb3/chrome-extension-kit",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "Crypto cashback integration kit for crypto outlets extension",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -15,9 +15,9 @@
15
15
  "url": "https://github.com/Bring-Web3-LTD/chromeExtension.git"
16
16
  },
17
17
  "scripts": {
18
- "watch": "tsup index.ts --env.IFRAME_URL=http://localhost:5173 --env.ENDPOINT=dev --env.VERSION=1.5.0 --format cjs,esm --dts --watch",
18
+ "watch": "tsup index.ts --env.IFRAME_URL=http://localhost:5173 --env.ENDPOINT=dev --env.VERSION=1.6.0 --format cjs,esm --dts --watch",
19
19
  "build": "tsup index.ts --format cjs,esm --dts --minify",
20
- "build:dev": "tsup index.ts --format cjs,esm --dts --minify --env.ENDPOINT=dev --env.VERSION=1.5.0",
20
+ "build:dev": "tsup index.ts --format cjs,esm --dts --minify --env.ENDPOINT=dev --env.VERSION=1.6.0",
21
21
  "lint": "tsc",
22
22
  "test": "vitest --coverage",
23
23
  "release": "yarn build && changeset publish"