UNPKG

@bringweb3/chrome-extension-kit

Version:

Crypto cashback integration kit for crypto outlets extension

2 lines (1 loc) 32.4 kB
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}},be=ie("VERSION"),Ae=ie("ENDPOINT"),oe=ie("IFRAME_URL");var at=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()},Pe=at;var ve={name:"@bringweb3/chrome-extension-kit",version:"1.7.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.1 --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.1",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.9","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^3.2.0",tsup:"^8.3.5",typescript:"^5.6.3",vitest:"^3.2.0"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^14.0.0"},resolutions:{picomatch:"^4.0.4",micromatch:"^4.0.8",minimatch:"^9.0.7","cross-spawn":"^7.0.5",rollup:"^4.59.0","brace-expansion":"^2.0.3",nanoid:"^3.3.8",postcss:"^8.5.10","@babel/runtime":"^7.26.10","js-yaml":"^4.1.1",tmp:"^0.2.4",esbuild:"^0.25.0",glob:"^10.5.0"}};var ct=()=>be||ve.version,H=ct;var k="bringweb3-offerbar-container",K="bringweb3-iframe";var lt=()=>{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}}},P=lt();var mt=(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),P.add(()=>{let n=document.getElementById(t);n&&n.remove()})},Se=mt;var ut=({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),P.add(()=>{let n=document.getElementById(t);if(n&&n.parentElement){for(;n.firstChild;)n.parentElement.appendChild(n.firstChild);n.remove()}})},Oe=ut;var xe=["width","height","transform"],dt=({sides:e,listener:t})=>{let r=e.map(d=>Math.max(0,d)),[i,n,a,s]=r,l=s+n,o=i+a,m=null,u=()=>{let d=document.body;if(!d)return;m||(m=xe.map(g=>({prop:g,value:d.style.getPropertyValue(g),priority:d.style.getPropertyPriority(g)})));let f=window.innerWidth-l,p=window.innerHeight-o,h=f<=0||p<=0?{width:"0px",height:"0px",transform:`translate(${s}px, ${i}px) scale(0)`}:(()=>{let g=l>0?f/window.innerWidth:1,y=o>0?p/window.innerHeight:1,A=Math.min(g,y);return{width:`${f/A}px`,height:`${p/A}px`,transform:`translate(${s}px, ${i}px) scale(${A})`}})();for(let g of xe)d.style.setProperty(g,h[g],"important")};document.body?u():document.addEventListener("DOMContentLoaded",u,{once:!0}),t&&window.addEventListener("resize",u),P.add(()=>{document.removeEventListener("DOMContentLoaded",u),t&&window.removeEventListener("resize",u);let d=document.body;if(!(!d||!m))for(let{prop:f,value:p,priority:h}of m)p?d.style.setProperty(f,p,h):d.style.removeProperty(f)})},De=dt;var ft=({scroller:e,sides:t,resize:r})=>{Oe({parent:e,id:"bringweb3-scroller"}),De({sides:t,listener:r})},Te=ft;var pt="bring-iframe-stylesheet",gt=({query:e,styleUrl:t,themeMode:r,text:i,iframeUrl:n,page:a,switchWallet:s,placement:l,stylesheet:o,framed:m})=>{let u=chrome.runtime.id,d=`${K}-${u}`,f=document.getElementById(d),p=oe?`${oe}${a?"/"+a:""}`:n;if(f)return f;let h=Pe({query:{...e,extensionId:u,v:H(),themeMode:r,textMode:i,switchWallet:String(s),...t?{styleUrl:t}:{}}}),g=document.createElement("iframe");return g.id=d,g.src=encodeURI(`${p}?${h}`),g.setAttribute("sandbox","allow-scripts allow-same-origin"),g.style.position="fixed",g.style.right="8px",g.scrolling="no",g.style.overflow="hidden",g.style.width="1px",g.style.height="1px",g.style.borderRadius="10px",g.style.border="none",g.style.cssText+="z-index: 99999999999999 !important;",Se(o,pt),m&&Te(m),ht(g,l,a),g};function ht(e,t,r){if(console.log({page:r}),["offerbar","framed"].includes(r||"")&&document.querySelector(`iframe[id^="${K}-"]`))return;let i=e;if(t?.parent){let n=document.getElementById(k);n||(n=document.createElement(t.parent),n.id=k),n.appendChild(e),i=n}if(P.add(()=>{if(e&&e.parentNode&&e.remove(),t?.parent){let n=document.getElementById(k);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 Re=gt;var wt=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},ae=wt;var yt=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=yt;var v={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=[v.ACTIVATE],bt=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:a,keyFrames:s,time:l,extensionId:o,url:m,domain:u,redirectUrl:d,iframeUrl:f,token:p,flowId:h,platformName:g,searchTermPattern:y,type:A,quietDomainType:C,isRegex:I}=e.data;if(i==="bringweb3"&&!(o!==chrome.runtime.id&&!Et.includes(n)))switch(n){case v.OPEN:let U=document.getElementById(k);U&&a&&"parent"in a&&ae(U,a.parent),a&&"iframe"in a&&ae(t,a.iframe);break;case v.CLOSE:P.cleanup(),l&&chrome.runtime.sendMessage({action:n,time:l,domain:u,type:A,isRegex:I,from:"bringweb3"});break;case v.PROMPT_LOGIN:r();break;case v.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:u,extensionId:o,time:l,redirectUrl:d,iframeUrl:f,token:p,flowId:h,platformName:g,quietDomainType:C,isRegex:I});break;case v.OPT_OUT:chrome.runtime.sendMessage({action:n,time:l,from:"bringweb3"});break;case v.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:u,time:l,type:A,isRegex:I,from:"bringweb3"});break;case v.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;case v.ADD_KEYFRAMES:Ie(s);break;case v.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:m,from:"bringweb3"});break;case v.STOP_REMINDERS:chrome.runtime.sendMessage({action:n,from:"bringweb3"});break;default:break}},_e=bt;var Ce=async({iframeEl:e,getWalletAddress:t})=>{e||(e=document.querySelector(`#${K}-${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})},At=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>Ce({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let a=e[n];a&&window.addEventListener(a,async()=>Ce({iframeEl:i,getWalletAddress:r}))}},Ne=At;var Pt=e=>e.endsWith("/")?e.slice(0,-1):e,X=Pt;var vt=["www.","www1.","www2."],St=e=>{for(let r of vt)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=X(t),t},R=St;var Q=null,ce,le=!1,Me=null,se=()=>{le=!1,ce=void 0,Q=null,P?.cleanup()},Ot=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,styleUrl:n,theme:a,text:s,switchWallet:l=!1})=>{if(window.self!==window.top&&X(window.document.location.origin).endsWith("bringweb3.io")){window.addEventListener("message",o=>{if(!o.data||o.data.from!=="bringweb3"||o.data.action!=="PORTAL_ACTIVATE")return;let{action:m,domain:u,extensionId:d,time:f,iframeUrl:p,token:h,platformName:g}=o.data;chrome.runtime.sendMessage({action:m,from:"bringweb3",domain:u,extensionId:d,time:f,iframeUrl:p,token:h,source:"portal",platformName:g})});return}if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");Ne({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:Q}),window.addEventListener("message",o=>_e({event:o,iframeEl:Q,promptLogin:t})),chrome.runtime.onMessage.addListener((o,m,u)=>{if(o?.from!=="bringweb3")return;let{action:d}=o;switch(d){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":if(window!==window.top)return!1;try{let f=Array.from(document.querySelectorAll("a[href]")).map(p=>p.href).filter(p=>p.startsWith("http"));u({status:"success",links:f})}catch{u({status:"failed",links:[]})}return!0;case"CLOSE_POPUP":return Q&&ce===o.path&&R(location.href)===R(o.domain)?(se(),u({status:"success",message:"Popup closed",location:window.document.location.href,flowId:Me})):u({status:"failed",message:"Domain mismatch or iframe not open"}),!0;case"INJECT":try{let{referrer:f}=document,p=o.referrers||[];if(R(location.href)!==R(o.domain))return u({status:"failed",message:"Domain already changed"}),!0;if(le)if(o.isSpaNavigation)se();else return u({status:"failed",message:"iframe already open"}),!0;if(!!f&&p.includes(R(f))&&o.page==="")return u({status:"failed",message:`already activated by ${R(f)}`,action:"activate"}),!0;let{token:g,iframeUrl:y,userId:A,placement:C,framed:I,stylesheet:U}=o,w={token:g};return A&&(w.userId=A),Q=Re({query:w,iframeUrl:y,styleUrl:n,themeMode:a||"light",text:s,switchWallet:l,page:o.page,placement:C,stylesheet:U,framed:I}),le=!0,ce=`/${o.page||""}`,Me=o.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: ${d}`);break}}),window.addEventListener("pagehide",()=>{se()})},xt=Ot;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())}}},Ue=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}},Dt={relevantDomains:{get:Le,set:Le}},z=Dt;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},Y=(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},O=(e,t,r)=>!Y(e,t,r);var Z="bring_",x=new Ue,ke=async(e,t,r=!0)=>{let i=t;return z[e]?.set&&(i=z[e].set(t)),r&&x.set(e,i),new Promise((n,a)=>{chrome.storage.local.set({[`${Z}${e}`]:t},()=>{chrome.runtime.lastError?a(chrome.runtime.lastError):n()})})},de=async(e,t=!0)=>{if(t){let r=x.get(e);if(r!==null)return r}return new Promise((r,i)=>{chrome.storage.local.get([`${Z}${e}`],async n=>{if(chrome.runtime.lastError)i(chrome.runtime.lastError);else{let a=n[`${Z}${e}`];a&&z[e]?.get&&(a=z[e].get(a)),t&&a!==void 0&&x.set(e,a),r(a)}})})},$e=async e=>(x.delete(e),new Promise((t,r)=>{chrome.storage.local.remove([`${Z}${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})})),Tt=()=>{x.clear()},Rt=e=>{x.delete(e)},It=()=>x.getStats(),_t=()=>{if(!(typeof globalThis>"u"))try{globalThis.bringCache={clear:()=>x.clear(),stats:()=>x.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 ke(e,t),invalidate:e=>x.delete(e),delete:async e=>await $e(e)}}catch(e){console.warn("Failed to initialize debug cache:",e)}},c={set:ke,get:de,remove:$e,clearCache:Tt,invalidateCache:Rt,getCacheStats:It,initializeDebugCache:_t};import{v4 as Ct,validate as Nt}from"uuid";var We=4,Fe=async(e,t)=>{let r=await c.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 c.set(e,r)}},Mt=async()=>{try{let e=Date.now(),t=await c.get("optOut");return t&&typeof t=="number"&&t>e?await c.set("optOut",[e,t]):await c.remove("optOut"),await Fe("optOutDomains",e),await Fe("quietDomains",e),!0}catch{return!1}},Ut=async()=>{try{let e=await c.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 c.set("quietDomains",e)}let t=await c.get("id");return Nt(t||"")||(t=Ct(),await c.set("id",t)),!0}catch{return!1}},Lt=async()=>{try{return await Promise.all([c.remove("redirectsWhitelist"),c.remove("relevantDomains"),c.remove("postPurchaseUrls")]),!0}catch{return!1}},kt=async()=>{try{let e=await c.get("quietDomains")||{},t=await c.get("optOutDomains")||{};for(let[i,n]of Object.entries(t))e[i]||(e[i]={time:n,phase:"quiet"});await c.remove("optOutDomains");let r=Object.entries(e).map(([i,n])=>({domain:i,...n}));return await c.set("quietDomains",r),!0}catch{return!1}},Ve=async()=>{let e=await c.get("migrationVersion")||0;e<1&&await Mt()&&await c.set("migrationVersion",1),e<2&&await Ut()&&await c.set("migrationVersion",2),e<3&&await Lt()&&await c.set("migrationVersion",3),e<We&&await kt()&&await c.set("migrationVersion",We)};var qe=(e,t=50)=>{let r=Date.now(),i={maxRange:60*864e5},n=e.filter(a=>O(a.time,r,i));return n.length>t?n.sort((a,s)=>s.time[0]-a.time[0]).slice(0,t):n};var Ge="quietDomains",$t=async(e,t,r,i,n,a)=>{if(!e)return;let s=Array.isArray(e)?e:[e],l=r?Array.isArray(r)?r:[r]:["kds"],o=i?Array.isArray(i)?i:[i]:[!1],[m,u]=await Promise.all([c.get(Ge),c.get("quietDomainsMaxLength")]);Array.isArray(m)||(m=[]),m=qe(m,u);let d=Date.now(),f=d+t;for(let p=0;p<s.length;p++){let h=s[p];if(!h)continue;let g={domain:h,time:[d,f],phase:a||"quiet"};l&&l[p]&&(g.type=l[p]),o&&o[p]!==void 0&&(g.regex=o[p]),n&&(g.payload=n);let y=m.findIndex(A=>A.domain===h&&A.type===g.type);y>=0?m[y]=g:m.push(g)}await c.set(Ge,m)},M=$t;import{v4 as Wt,validate as Ft}from"uuid";var Vt=async()=>{let e=await c.get("id");return Ft(e)||(e=Wt(),await c.set("id",e)),e},D=Vt;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(),s=a.getBaseDomain(),l=a.getApiPath(),o=await c.get("envName"),m;o?m=`${s}/${o}/${l}${t}`:m=`${s}/${l}${t}`;let u=b.getInstance().getApiKey();if(r==="GET"){let p=new URLSearchParams({...i,version:H(),timestamp:Date.now().toString(),opt_out:await c.get("optOut")||0,user_id:await D()||"undefined",wallet_address:await c.get("walletAddress")||"undefined"});m+=`?${p.toString()}`}else r==="POST"&&(i={...i,version:H(),timestamp:Date.now(),optOut:await c.get("optOut")||0,userId:await D()||void 0,walletAddress:i?.walletAddress||await c.get("walletAddress")||void 0});return await(await fetch(m,{method:r,headers:{"Content-Type":"application/json","x-api-key":u},body:r==="POST"?JSON.stringify(i):void 0,signal:n&&"timeout"in AbortSignal?AbortSignal.timeout(n):void 0})).json()},_=qt;var Gt=async({walletAddress:e,cashbackUrl:t,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:e};return await c.get("disableReminders")&&(n.disableReminders=!0),r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),t&&(n.cashbackUrl=t),await _({path:"/check/notification",method:"POST",params:n})},je=Gt;var jt=(e,t,r,i)=>{r=r||10;let n=100,a=20;return new Promise((s,l)=>{let o=m=>{chrome.tabs.get(e,u=>{if(chrome.runtime.lastError){s(null);return}let d=i!==void 0?{frameId:i}:{};chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d,f=>{chrome.runtime.lastError?m<r-1?setTimeout(()=>o(m+1),n+a*m):s(null):s(f||null)})})};o(0)})},T=jt;var Bt=async e=>{let t=await c.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 T(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await c.set("walletAddress",t))}catch{}return t},$=Bt;var Ht=async(e,t,r,i=!1)=>{let n={showNotification:!1,token:"",iframeUrl:""},a=Date.now(),s=await c.get("notificationCheck");if(!i&&O(s,a))return n;let l=t?await $(t):await c.get("walletAddress"),o=await c.get("lastActivation"),m=o?a-o:void 0,u=await je({walletAddress:l,cashbackUrl:r,lastActivation:o,timeSinceLastActivation:m});await c.set("notificationCheck",[a,a+u.nextCall]);let d={showNotification:u.showNotification,token:u.token,iframeUrl:u.iframeUrl,expiration:[a,a+u.expiration]};return d.showNotification&&e&&await Promise.all([c.set("notification",d),c.remove("lastActivation")]),d},W=Ht;var Kt=e=>e?chrome.runtime.getURL(e):"",F=Kt;var Be=async(e,t,r)=>{t.includes("/")||(t+="/");let i=t.indexOf("/"),n=t.substring(0,i),a=t.substring(i),s=decodeURIComponent(a.replace(/\+/g," ")),o=n.split("").reverse().join("")+s,m=await c.get("domainsTypes");for(let u=0;u<e.length;u++){let d=m?.[u];if(r&&![...d].some(h=>r.includes(h)))continue;let f=e[u];if(!f)continue;let p=f.exec(o);if(p&&p.index===0&&p[0])return{matched:!0,match:Array.from(p).filter(y=>y!==void 0),type:d}}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),s=e.indexOf("/"),l=s===-1?e:e.substring(0,s),o=s===-1?"":e.substring(s+1),m=!1;if(l===n)m=!0;else if(l.startsWith("*.")){let d=l.substring(2);(n.endsWith("."+d)||n===d)&&(m=!0)}if(!m)return!1;if(a===""&&o==="")return!0;let u=decodeURIComponent(a.replace(/\+/g," "));if(r)try{if(new RegExp(o).test(u))return!0}catch{}else if(u.startsWith(o))return!0;return!1},V=(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 Qt=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 _(i)},He=Qt;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)},q=Ke;var Qe=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,G=async()=>{let[e,t,r]=await Promise.all([c.get("relevantDomainsCheck"),c.get("relevantDomains"),c.get("redirectsWhitelist")]),i=r,n=b.getInstance().getWhitelistEndpoint(),a=null,s=Date.now();return t?Array.isArray(t)?e?Array.isArray(e)?e.length!==2?a=`invalid domains timestamp check format__length: ${e.length} - value: ${q(e)}`:e[0]>=s?a=`cache expired - range start is bigger than Date.now()__value: ${q(e)}, now: ${s}`:s>=e[1]?a="cache expired - range end is smaller than Date.now()":n&&(!i?.length||!Array.isArray(i))?a="missing whitelist data":Y(e,s)&&(a=`cache expired - range is expired__range: ${q(e)}, now: ${s}`):a=`invalid domains timestamp check format - not an array__value: ${q(e)}`:a=`no domains timestamp check found__value: ${q(e)}`:a="domains list isn't valid format":a="no domains in cache",a?ee||(ee=(async()=>{try{let l=await He(a,3e4),{nextUpdateTimestamp:o,relevantDomains:m,postPurchaseUrls:u,flags:d,types:f,quietDomainsMaxLength:p}=l;i=await Qe(3e4);let h=[c.set("relevantDomains",{regexes:m,flags:d}),c.set("relevantDomainsCheck",[s,s+o]),c.set("postPurchaseUrls",u),c.set("domainsTypes",f)];return p&&h.push(c.set("quietDomainsMaxLength",p)),i&&h.push(c.set("redirectsWhitelist",i)),await Promise.all(h),await c.get("relevantDomains")}finally{ee=null}})()):t};var zt=async e=>{try{if(!b.getInstance().getWhitelistEndpoint())return!0;let r=await c.get("redirectsWhitelist");if((!Array.isArray(r)||!r?.length)&&(await G(),r=await c.get("redirectsWhitelist")),!r?.length)return!1;let i=R(e),{matched:n}=V(r,i);return n}catch{return console.error("Invalid URL:",e),!1}},te=zt;var Yt=async e=>{let t=Array.isArray(e);t?e.forEach(r=>r.category=r.category||"system"):e.category=e?.category||"system",await _({path:"/analytics",method:"POST",params:t?{events:e}:e})},j=Yt;var Jt=async(e,t,r,i)=>{let a=(await chrome.tabs.query({})).map(u=>u.id).filter(u=>u&&u!==t),s=[],l=await D(),o=await $(),m=a.map(u=>T(u,{action:"CLOSE_POPUP",reason:"already_activated",path:i||"/",domain:e},2).then(d=>{d.status==="success"&&s.push({type:"popup_auto_close",location:d.location,flowId:d.flowId,closer:r,domain:e,userId:l,walletAddress:o})}).catch(()=>{}));await Promise.all(m),s.length&&await j(s)},ze=Jt;var Xt=async(e,t,r,i,n,a,s,l,o,m,u,d,f)=>{let p=Date.now(),h=t===chrome.runtime.id;if(h){let y=[c.set("lastActivation",p)];r==="portal"&&y.push(c.set("portalRelevantDomains",[e])),await Promise.all(y)}e&&M(e,l||864e5,a,s,{iframeUrl:m,token:u,flowId:d},h?"activated":"quiet"),ze(e,o||-1,t),o&&f&&await te(f)&&chrome.tabs.update(o,{url:f}),await W(n,void 0,F(i),h)},J=Xt;var Ye=e=>{e&&chrome.tabs.create({url:e})};var Je=async e=>{if(e<0)return await c.remove("optOut"),{isOptedOut:!1};{let t=Date.now();return await c.set("optOut",[t,t+e]),{isOptedOut:!0}}},Xe=async()=>{let e=await c.get("optOut");return{isOptedOut:O(e)}};var Zt=(e,t)=>{chrome.runtime.onMessage.addListener((r,i,n)=>{if(r?.from!=="bringweb3")return;let{action:a}=r,s=r.source||"popup";switch(a){case"ACTIVATE":{let{domain:o,extensionId:m,time:u,redirectUrl:d,iframeUrl:f,token:p,flowId:h,quietDomainType:g,isRegex:y}=r;return J(o,m,s,e,t,g,y,u,i.tab?.id,f,p,h,d).then(()=>n()),!0}case"PORTAL_ACTIVATE":{let{domain:o,extensionId:m,time:u,iframeUrl:d,token:f,flowId:p,type:h,isRegex:g}=r;return J(o,m,s,e,t,h,g,u,i.tab?.id,d,f,p).then(()=>n()),!0}case"GET_OPT_OUT":return Xe().then(o=>n(o)),!0;case"OPT_OUT":{let{time:o}=r;return Je(o).then(m=>n(m)),!0}case"OPT_OUT_SPECIFIC":{let{domain:o,time:m,type:u,isRegex:d}=r;return o?.length?(M(o,m,u,d).then(f=>n(f)),!0):(n({error:"Missing domain"}),!0)}case"GET_POPUP_ENABLED":return c.get("popupEnabled").then(o=>n({isPopupEnabled:o})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:o}=r;return c.set("popupEnabled",o).then(()=>{n({isPopupEnabled:o})}).catch(m=>{console.error("Error setting popup enabled:",m),n({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:o,domain:m,type:u,isRegex:d}=r;return m&&(M(m,o,u,d),n({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:o}=r;return o?c.set("walletAddress",o).then(()=>W(t,void 0,F(e),!0).then(()=>n(o))):c.remove("walletAddress").then(()=>n({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return c.remove("notification").then(()=>n({message:"notification erased successfully"})),!0;case"OPEN_CASHBACK_PAGE":let{url:l}=r;return Ye(l||e),n({message:"cashback page opened successfully"}),!0;case"STOP_REMINDERS":return c.set("disableReminders",!0).then(()=>n({message:"stopped reminders successfully"})),!0;default:return console.warn(`Bring unknown action: ${a}`),!0}})},Ze=Zt;var er=async({body:e})=>await _({path:"/check/popup",method:"POST",params:e}),et=er;var tr=["http://","https://","www.","www1.","www2."],rr=e=>{if(!e)return"";for(let t of tr)e.startsWith(t)&&(e=e.replace(t,""));return e},re=rr;var nr=["www.","www1.","www2."],pe={matched:!1,match:""},ir=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 o of nr)r=r.replace(o,"");i.endsWith("/")||(i+="/");let n=r+i,a=await c.get("postPurchaseUrls");if(!Array.isArray(a)||!a?.length)return pe;let{matched:s,match:l}=V(a,n);return s?(await j({type:"thank_you_page",page:e,entry:l}).catch(()=>{}),{matched:s,match:l}):pe},tt=ir;var or=async(e,t)=>{let r=await c.get("quietDomains")||[],i="new",n={};for(let a=0;a<r.length;a++){let s=r[a];if(!(t&&!t.split("").some(l=>s.type?.includes(l)))&&fe(s.domain,e,s.regex)){let{time:l}=s;O(l,void 0,{maxRange:60*864e5})?(i=s.phase||"quiet",n=s.payload||{}):(r.splice(a,1),await c.set("quietDomains",r));break}}return{phase:i,payload:n}},ge=or;var ar=["www.","www1.","www2."],sr=async(e,t)=>{let r=await G(),i=await c.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 s=a.toString(),l=`${a.protocol}//`;s.startsWith(l)&&(s=s.substring(l.length));for(let o of ar)s=s.replace(o,"");if(i){let o=V(i,s);if(o.matched)return await c.remove("portalRelevantDomains"),o}if(Array.isArray(r)){let o=await Be(r,s,t);return o.matched?{matched:!0,match:o.match,type:o.type}:n}return n},he=sr;var rt=async(e,t,r)=>{await T(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await D(),domain:r})},cr=async(e,t,r,i,n)=>{let a=await c.get("notification"),s=Date.now(),l=a?.expiration;if(Y(l,s))await c.remove("notification");else if(a)return await rt(e,a,r);let o=await W(i,e,F(t));o.showNotification&&(i&&await rt(e,o,r),n&&n())},we=cr;var S=new Map,lr=typeof chrome<"u"&&chrome.webNavigation&&typeof chrome.webNavigation.onCommitted?.addListener=="function",B=new Map,mr=(e,t,r)=>{let i=async(s,l,o,m=!1,u,d=!1)=>{if(m&&S.get(l)?.urlSearchStatus=="succeeded")return;let f=re(s),{matched:p,match:h,type:g}=await he(s,m?"s":"kd");if(!p){m||await we(l,e,f,t,r);return}if(m){let E=S.get(l);if(E?.inlineSearch?.status==="matched")return;E?E.inlineSearch={status:"matched",popupData:null}:S.set(l,{urlSearchStatus:null,inlineSearch:{status:"matched",popupData:null}})}let{phase:y,payload:A}=await ge(f,g),C=[];if(m&&u&&C.push({match:u.match,type:u.type||""}),C.push({match:h,type:g||""}),y==="new"){let E=Date.now(),ne=await c.get("optOut");if(O(ne,E))return;await c.remove("optOut")}else if(y==="activated"){let E=await D(),{iframeUrl:ne,token:it,placement:ot}=A||{},wr=await T(l,{action:"INJECT",iframeUrl:ne,token:it,domain:f,userId:E,page:y,placement:ot,isSpaNavigation:d});return}else if(y==="quiet"){await we(l,e,f,t,r);return}let I=await $(l),U=await c.get("quietDomains")||[];S.has(l)||S.set(l,{urlSearchStatus:null,inlineSearch:null}),m||(S.get(l).urlSearchStatus="pending");let w=await et({body:{phase:y,url:o.url,address:I,quietDomains:U,matches:C}});if(w.time||(w.time=864e5),w.isValid===!1){if(M(w.verifiedMatch.match,w.time,w.quietDomainType,w.verifiedMatch.isRegex),m)return;let E=S.get(l);if(E.urlSearchStatus="failed",!E.inlineSearch?.popupData)return;w=E.inlineSearch.popupData}if(!await te(w.networkUrl))return;if(!m)S.get(l).urlSearchStatus="succeeded";else{let E=S.get(l);if(E?.urlSearchStatus==="succeeded")return;if(E?.urlSearchStatus==="pending"){E.inlineSearch={status:"matched",popupData:w};return}}let Ee=await D(),L=await T(l,{action:"INJECT",token:w.token,domain:re(o.url),iframeUrl:w.iframeUrl,userId:Ee,referrers:w.portalReferrers,page:w.framed?"framed":w.isOfferBar?"offerbar":y==="new"?"":y,flowId:w.flowId,stylesheet:w.stylesheet,placement:w.placement,framed:w.framed,isSpaNavigation:d});if(L?.action)switch(L.action){case"activate":J(w.verifiedMatch.match,chrome.runtime.id,"popup",e,w.quietDomainType,w.verifiedMatch.isRegex,w.time,l);break;default:console.error(`Unknown action: ${L.action}`);break}L?.status!=="success"&&j({type:"no_popup",userId:Ee,walletAddress:I,details:{url:s,match:h,iframeUrl:w.iframeUrl,reason:L?.message,status:L?.status},flowId:w.flowId})},n=async(s,l)=>{if(!await c.get("popupEnabled"))return;let m=await he(l,"i");if(!m.matched||(await ge(re(l),"i")).phase==="quiet")return;let d=await chrome.tabs.get(s),f=await T(s,{action:"GET_PAGE_LINKS"},void 0,0);if(f?.status!=="success"||!f.links?.length)return;let p=[...new Set(f.links)];await Promise.allSettled(p.map(h=>i(h,s,d,!0,{match:m.match,type:m.type})))},a=async(s,l,o=!1)=>{if(!await c.get("popupEnabled"))return;let u=await chrome.tabs.get(s);S.delete(s),await tt(l),await i(l,s,u,!1,void 0,o)};lr?(chrome.webNavigation.onCommitted.addListener(async({tabId:s,frameId:l,url:o})=>{if(l!==0)return;let m=B.get(s);m?m.committed=o:B.set(s,{committed:o}),a(s,o).catch(()=>{})},{url:[{schemes:["http","https"]}]}),chrome.webNavigation.onHistoryStateUpdated.addListener(async({tabId:s,frameId:l,url:o})=>{if(l!==0||B.get(s)?.committed===o)return;let m=B.get(s);m?m.history=o:B.set(s,{history:o}),a(s,o,!0).catch(()=>{})},{url:[{schemes:["http","https"]}]}),chrome.webNavigation.onCompleted.addListener(async({tabId:s,frameId:l,url:o})=>{l===0&&n(s,o).catch(()=>{})},{url:[{schemes:["http","https"]}]})):chrome.tabs.onUpdated.addListener(async(s,l,o)=>{o?.url?.startsWith("http")&&(l.url&&a(s,o.url).catch(()=>{}),l.status==="complete"&&n(s,o.url).catch(()=>{}))}),chrome.tabs.onRemoved.addListener(s=>{S.delete(s),B.delete(s)})},nt=mr;var ye=Ae,ur=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:a=!0,notificationCallback:s})=>{if(!e||!t)throw new Error("Missing configuration");if(ye&&console.log({ENDPOINT:ye}),!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");let l=b.getInstance();l.setApiEndpoint(ye||t),l.setWhitelistEndpoint(i||""),l.setApiKey(e),c.initializeDebugCache();let o=await c.get("popupEnabled");o===void 0&&(await c.set("popupEnabled",n),o=n),await Ve(),Ze(r,a),o&&await G(),nt(r,a,s)},dr=ur;var fr=()=>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})})}),pr=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 gr=()=>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)})}),hr=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{dr as bringInitBackground,xt as bringInitContentScript,gr as getPopupEnabled,fr as getTurnOff,hr as setPopupEnabled,pr as setTurnOff};