@bringweb3/chrome-extension-kit 1.4.3 → 1.4.4
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 +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var W=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Ce=Object.prototype.hasOwnProperty;var Ue=(e,t)=>{for(var r in t)W(e,r,{get:t[r],enumerable:!0})},ke=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of _e(t))!Ce.call(e,n)&&n!==r&&W(e,n,{get:()=>t[n],enumerable:!(i=Ie(t,n))||i.enumerable});return e};var Me=e=>ke(W({},"__esModule",{value:!0}),e);var bt={};Ue(bt,{bringInitBackground:()=>ye,bringInitContentScript:()=>te,getPopupEnabled:()=>Pe,getTurnOff:()=>Ae,setPopupEnabled:()=>Te,setTurnOff:()=>Oe});module.exports=Me(bt);var Ne=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,c])=>{c&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(c)):t.append(n,c))}),t.toString()},F=Ne;var q={name:"@bringweb3/chrome-extension-kit",version:"1.4.3",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 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",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 Le=()=>q.version,S=Le;var We=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:c,switchWallet:m})=>{let u=chrome.runtime.id,a=`bringweb3-iframe-${u}`,d=document.getElementById(a),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${c?"/"+c:""}`:n;if(d)return d;let p=F({query:{...e,extensionId:u,v:S(),themeMode:r,textMode:i,switchWallet:String(m)}}),w=t?`&${F({query:t,prefix:"t"})}`:"",s=document.createElement("iframe");return s.id=a,s.src=`${l}?${p}${w}`,s.setAttribute("sandbox","allow-scripts allow-same-origin"),s.style.position="fixed",s.scrolling="no",s.style.overflow="hidden",s.style.width="1px",s.style.height="1px",s.style.right="8px",s.style.borderRadius="10px",s.style.border="none",s.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(s.style.boxShadow=t.popupShadow),document.documentElement.appendChild(s),s},Q=We;var Fe=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},Y=Fe;var Ke=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")},J=Ke;var h={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"},$e=[h.ACTIVATE],je=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:c,keyFrames:m,time:u,extensionId:a,url:d,domain:l,redirectUrl:p}=e.data;if(i==="bringweb3"&&!(a!==chrome.runtime.id&&!$e.includes(n)))switch(n){case h.OPEN:Y(t,c);break;case h.CLOSE:t&&t.parentNode?.removeChild(t),u&&chrome.runtime.sendMessage({action:n,time:u,domain:l,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:l,extensionId:a,time:u,redirectUrl:p});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:n,time:u,from:"bringweb3"});break;case h.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:l,time:u,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case h.ADD_KEYFRAMES:J(m);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:d,from:"bringweb3"});break;default:break}},z=je;var X=async({iframeEl:e,getWalletAddress:t})=>{if(!e&&(e=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!e)||!e.contentWindow)return;let r=await t();e.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},Ge=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>X({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let c=e[n];c&&window.addEventListener(c,async()=>X({iframeEl:i,getWalletAddress:r}))}},Z=Ge;var Be=e=>e.endsWith("/")?e.slice(0,-1):e,I=Be;var Ve=["www.","www1.","www2."],He=e=>{for(let r of Ve)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=I(t),t},O=He;var K=null,ee=!1,qe=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:c,theme:m,text:u,switchWallet:a=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");Z({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:K}),window.addEventListener("message",d=>z({event:d,iframeEl:K,promptLogin:t})),chrome.runtime.onMessage.addListener((d,l,p)=>{if(d?.from!=="bringweb3")return;let{action:w}=d;switch(w){case"GET_WALLET_ADDRESS":return e().then(s=>p({status:"success",walletAddress:s})).catch(s=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:s}=document,g=d.portalReferrers||[];if(O(location.href)!==O(d.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(ee)return p({status:"failed",message:"iframe already open"}),!0;if(s&&g.includes(O(s)))return p({status:"failed",message:`already activated by ${O(s)}`,action:"activate"}),!0;let{token:b,iframeUrl:x,userId:E}=d,D={token:b};return E&&(D.userId=E),K=Q({query:D,iframeUrl:x,theme:m==="dark"?c:n,themeMode:m||"light",text:u,switchWallet:a,page:d.page}),ee=!0,p({status:"success"}),!0}catch(s){return s instanceof Error?p({status:"failed",message:s.message}):p({status:"failed",message:String(s)}),!0}default:console.error(`Unknown action: ${w}`);break}})}},te=qe;var re=e=>{e&&chrome.tabs.create({url:e})};var f=class e{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}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}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var Qe=async(e,t)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Ye=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(i[`bring_${e}`])})}),Je=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),o={set:Qe,get:Ye,remove:Je};var ne=require("uuid"),ze=async()=>{let e=await o.get("id");return e||(e=(0,ne.v4)(),o.set("id",e)),e},P=ze;var Xe=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=f.getInstance().getApiEndpoint();n+=t;let c=f.getInstance().getApiKey();if(r==="GET"){let a=new URLSearchParams({...i,version:S(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await P()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${a.toString()}`}else r==="POST"&&(i={...i,version:S(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await P()||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":c},body:r==="POST"?JSON.stringify(i):void 0})).json()},y=Xe;var Ze=async({body:e})=>await y({path:"/check/popup",method:"POST",params:e}),ie=Ze;var et=["www.","www1.","www2."],tt=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of et)e.startsWith(t)&&(e=e.replace(t,""));return e},oe=tt;var se="quietDomains",rt=async(e,t)=>{let r=await o.get(se);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+t;r[e]=[i,n],o.set(se,r)},_=rt;var nt=async({walletAddress:e,cashbackUrl:t,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:e};return r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),t&&(n.cashbackUrl=t),await y({path:"/check/notification",method:"POST",params:n})},ae=nt;var it=(e,t)=>new Promise((n,c)=>{let m=u=>{chrome.tabs.get(e,a=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?u<4?setTimeout(()=>m(u+1),1e3*Math.pow(2,u)):n(null):n(d||null)})})};m(0)}),v=it;var ot=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 v(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},k=ot;var st=e=>{if(!e||!Array.isArray(e)||e.length!==2)return!1;let[t,r]=e;return typeof t=="number"&&typeof r=="number"&&t<=r},C=(e,t)=>{if(!st(e))return!0;let[r,i]=e;return t=t??Date.now(),t<r||t>i},A=(e,t)=>!C(e,t);var at=async(e,t)=>{let r={showNotification:!1,token:"",iframeUrl:""},i=Date.now(),n=await o.get("notificationCheck");if(A(n,i))return r;let c=e?await k(e):await o.get("walletAddress");if(!c)return r;let m=await o.get("lastActivation"),u=m?i-m:void 0,a=await ae({walletAddress:c,cashbackUrl:t,lastActivation:m,timeSinceLastActivation:u});o.set("notificationCheck",[i,i+a.nextCall]);let d={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:[i,i+a.expiration]};return d.showNotification&&await o.set("notification",d),d},M=at;var ct=e=>e?chrome.runtime.getURL(e):"",N=ct;var mt=async e=>{let t=f.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},t&&(r.params.whitelist=encodeURIComponent(t)),e&&(r.params.trigger=e),await y(r)},ce=mt;var me=async()=>{try{let e=f.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}catch(e){return console.error("Error fetching whitelist:",e),[]}};var U=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=f.getInstance().getWhitelistEndpoint(),n=null,c=Date.now();if(t?Array.isArray(t)?e?Array.isArray(e)?e.length!==2?n="invalid domains timestamp check format":e[0]>=c?n="cache expired - range start is bigger than Date.now()":c>=e[1]?n="cache expired - range end is smaller than Date.now()":i&&!r?.length?n="missing whitelist data":C(e,c)&&(n="cache expired - range is expired"):n="invalid domains timestamp check format - not an array":n="no domains timestamp check found":n="domains list isn't an array":n="no domains in cache",!n)return t;let m=await ce(n),{nextUpdateTimestamp:u,relevantDomains:a}=m;return o.set("relevantDomains",a),o.set("relevantDomainsCheck",[c,c+u]),r=await me(),r&&o.set("redirectsWhitelist",r),a};var lt=async(e,t)=>{try{let r=f.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await U(),t=await o.get("redirectsWhitelist")),!t?.length)return!r;let n=new URL(e).hostname.toLowerCase();return n=n.replace("www.",""),t.includes(n)?!0:t.some(c=>{if(c.startsWith("*.")){let m=c.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",e),!1}},R=lt;var dt=async(e,t,r,i,n,c)=>{let m=Date.now();if(t===chrome.runtime.id&&await o.set("lastActivation",m),e&&_(e,i||864e5),n&&c){let u=await o.get("redirectsWhitelist");await R(c,u)&&chrome.tabs.update(n,{url:c})}await M(void 0,N(r))},$=dt;var le=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}}},de=async()=>{let e=await o.get("optOut");return{isOptedOut:A(e)}};var ue=async(e,t,r)=>{await v(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await P(),domain:r})},ut=async(e,t,r,i,n)=>{let c=await o.get("notification"),m=Date.now(),u=c?.expiration;if(C(u,m))await o.remove("notification");else if(c)return await ue(e,c,r);let a=await M(e,N(t));a.showNotification&&(i&&await ue(e,a,r),n&&n())},pe=ut;var pt=async e=>{e.category=e?.category||"system",await y({path:"/analytics",method:"POST",params:e})},fe=pt;var ge="optOutDomains",ft=async(e,t)=>{if(!e)return;let r=await o.get(ge);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+t;r[e]=[i,n],o.set(ge,r)},he=ft;var we=1,Ee=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];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 Ee("optOutDomains",e),await Ee("quietDomains",e),!0}catch{return!1}},be=async()=>{(await o.get("migrationVersion")||0)<we&&await gt()&&await o.set("migrationVersion",we)};var ht=["www.","www1.","www2."],wt=async e=>{let t=await U();if(!e||!t||!t.length)return"";let r=null;try{r=new URL(e)}catch{r=new URL(`https://${e}`)}let i=r.hostname,n=I(r.pathname);for(let m of ht)i=i.replace(m,"");let c=Date.now();for(let m of t){let u=m;m=I(m);let a=!1;m.startsWith("*.")&&(a=!0);let d="/"+m.split("/").slice(1).join("/")||"";if(d!=="/"&&n.startsWith(d)&&(i+=d),i===m||a&&i.endsWith(m.replace("*.",""))){let l=await o.get("quietDomains");return l&&l[m]&&A(l[m])&&l[m][1]<c+60*864e5?"":u}}return""},j={},Et=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:c=!0,notificationCallback:m})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");f.getInstance().setApiEndpoint(t),f.getInstance().setWhitelistEndpoint(i||""),f.getInstance().setApiKey(e),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await be(),U(),chrome.runtime.onMessage.addListener((a,d,l)=>{if(a?.from!=="bringweb3")return;let{action:p}=a;switch(p){case"ACTIVATE":{let{domain:s,extensionId:g,time:b,redirectUrl:x}=a;return $(s,g,r,b,d.tab?.id,x).then(()=>l()),!0}case"GET_OPT_OUT":return de().then(s=>l(s)),!0;case"OPT_OUT":{let{time:s}=a;return le(s).then(g=>l(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:g}=a;return he(s,g).then(b=>l(b)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>l({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=a;return o.set("popupEnabled",s).then(()=>{l({isPopupEnabled:s})}).catch(g=>{console.error("Error setting popup enabled:",g),l({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:g}=a;return g&&(_(g,s),l({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=a;return s?o.set("walletAddress",s).then(()=>l(s)):o.remove("walletAddress").then(()=>l({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>l({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:w}=a;return re(w||r),l({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(a,d,l)=>{if(!d.url||!l?.url?.startsWith("http"))return;let p=oe(l.url),w=await o.get("optOut"),s=await o.get("popupEnabled"),g=Date.now();if(!s||A(w,g))return;w&&o.remove("optOut");let b=await o.get("optOutDomains");if(b&&A(b[O(p)],g))return;let x=j[a];if(p===x)return;j[a]=p;let E=await wt(l.url);if(!E||!E.length){await pe(a,r,p,c,m);return}let D=await k(a),{token:ve,isValid:G,iframeUrl:B,networkUrl:xe,flowId:De,portalReferrers:Se,time:V=864e5}=await ie({body:{domain:E,url:l.url,address:D}});if(!G){G===!1&&_(E,V);return}if(!await R(xe,await o.get("redirectsWhitelist")))return;let H=await P(),T=await v(a,{action:"INJECT",token:ve,domain:p,iframeUrl:B,userId:H,portalReferrers:Se});if(T?.action)switch(T.action){case"activate":$(E,chrome.runtime.id,r,V,a);break;default:console.error(`Unknown action: ${T.action}`);break}T?.status!=="success"&&fe({type:"no_popup",userId:H,walletAddress:D,details:{url:l.url,match:E,iframeUrl:B,reason:T?.message,status:T?.status},flowId:De})}),chrome.tabs.onRemoved.addListener(a=>delete j[a])},ye=Et;var Ae=()=>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})})}),Oe=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 Pe=()=>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)})}),Te=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 $=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var Nt=Object.getOwnPropertyNames;var Ut=Object.prototype.hasOwnProperty;var kt=(t,e)=>{for(var r in e)$(t,r,{get:e[r],enumerable:!0})},Mt=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Nt(e))!Ut.call(t,n)&&n!==r&&$(t,n,{get:()=>e[n],enumerable:!(i=Ct(e,n))||i.enumerable});return t};var Rt=t=>Mt($({},"__esModule",{value:!0}),t);var Ae={};kt(Ae,{bringInitBackground:()=>Ot,bringInitContentScript:()=>rt,getPopupEnabled:()=>_t,getTurnOff:()=>Pt,setPopupEnabled:()=>xt,setTurnOff:()=>Tt});module.exports=Rt(Ae);var Lt=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,a])=>{a&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(a)):e.append(n,a))}),e.toString()},F=Lt;var Q={name:"@bringweb3/chrome-extension-kit",version:"1.4.4",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 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",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 $t=()=>Q.version,S=$t;var Ft=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:a,switchWallet:m})=>{let d=chrome.runtime.id,c=`bringweb3-iframe-${d}`,u=document.getElementById(c),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${a?"/"+a:""}`:n;if(u)return u;let f=F({query:{...t,extensionId:d,v:S(),themeMode:r,textMode:i,switchWallet:String(m)}}),E=e?`&${F({query:e,prefix:"t"})}`:"",s=document.createElement("iframe");return s.id=c,s.src=encodeURI(`${l}?${f}${E}`),s.setAttribute("sandbox","allow-scripts allow-same-origin"),s.style.position="fixed",s.scrolling="no",s.style.overflow="hidden",s.style.width="1px",s.style.height="1px",s.style.right="8px",s.style.borderRadius="10px",s.style.border="none",s.style.cssText+="z-index: 99999999999999 !important;",e?.popupShadow&&(s.style.boxShadow=e.popupShadow),document.documentElement.appendChild(s),s},J=Ft;var jt=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},Y=jt;var Kt=t=>{if(!t||!t.length)return;let e=document.createElement("style");document.head.appendChild(e);let r=e.sheet;r?t.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},z=Kt;var h={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"},Gt=[h.ACTIVATE],Bt=({event:t,iframeEl:e,promptLogin:r})=>{if(!t?.data)return;let{from:i,action:n,style:a,keyFrames:m,time:d,extensionId:c,url:u,domain:l,redirectUrl:f}=t.data;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!Gt.includes(n)))switch(n){case h.OPEN:Y(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),d&&chrome.runtime.sendMessage({action:n,time:d,domain:l,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:l,extensionId:c,time:d,redirectUrl:f});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:n,time:d,from:"bringweb3"});break;case h.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:l,time:d,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case h.ADD_KEYFRAMES:z(m);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:u,from:"bringweb3"});break;default:break}},X=Bt;var Z=async({iframeEl:t,getWalletAddress:e})=>{if(!t&&(t=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!t)||!t.contentWindow)return;let r=await e();t.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},Vt=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>Z({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let a=t[n];a&&window.addEventListener(a,async()=>Z({iframeEl:i,getWalletAddress:r}))}},tt=Vt;var Ht=t=>t.endsWith("/")?t.slice(0,-1):t,I=Ht;var qt=["www.","www1.","www2."],Qt=t=>{for(let r of qt)t=t.replace(r,"");let e="";try{e=new URL(t).host}catch{e=new URL(`https://${t}`).host}return e=I(e),e},P=Qt;var j=null,et=!1,Jt=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:a,theme:m,text:d,switchWallet:c=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");tt({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:j}),window.addEventListener("message",u=>X({event:u,iframeEl:j,promptLogin:e})),chrome.runtime.onMessage.addListener((u,l,f)=>{if(u?.from!=="bringweb3")return;let{action:E}=u;switch(E){case"GET_WALLET_ADDRESS":return t().then(s=>f({status:"success",walletAddress:s})).catch(s=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:s}=document,g=u.portalReferrers||[];if(P(location.href)!==P(u.domain))return f({status:"failed",message:"Domain already changed"}),!0;if(et)return f({status:"failed",message:"iframe already open"}),!0;if(s&&g.includes(P(s)))return f({status:"failed",message:`already activated by ${P(s)}`,action:"activate"}),!0;let{token:y,iframeUrl:v,userId:b}=u,D={token:y};return b&&(D.userId=b),j=J({query:D,iframeUrl:v,theme:m==="dark"?a:n,themeMode:m||"light",text:d,switchWallet:c,page:u.page}),et=!0,f({status:"success"}),!0}catch(s){return s instanceof Error?f({status:"failed",message:s.message}):f({status:"failed",message:String(s)}),!0}default:console.error(`Unknown action: ${E}`);break}})}},rt=Jt;var nt=t=>{t&&chrome.tabs.create({url:t})};var p=class t{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}setWhitelistEndpoint(e){this.whitelistEndpoint=e}setApiEndpoint(e){this.apiEndpoint=e==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}setApiKey(e){this.apiKey=e}getWhitelistEndpoint(){return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var Yt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),zt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),Xt=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),o={set:Yt,get:zt,remove:Xt};var it=require("uuid"),Zt=async()=>{let t=await o.get("id");return t||(t=(0,it.v4)(),o.set("id",t)),t},T=Zt;var te=async t=>{let{path:e,method:r,params:i}=t;if(!t||!e||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let n=p.getInstance().getApiEndpoint();n+=e;let a=p.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...i,version:S(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await T()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${c.toString()}`}else r==="POST"&&(i={...i,version:S(),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(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":a},body:r==="POST"?JSON.stringify(i):void 0})).json()},A=te;var ee=async({body:t})=>await A({path:"/check/popup",method:"POST",params:t}),ot=ee;var re=["www.","www1.","www2."],ne=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of re)t.startsWith(e)&&(t=t.replace(e,""));return t},st=ne;var at="quietDomains",ie=async(t,e)=>{let r=await o.get(at);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(at,r)},C=ie;var oe=async({walletAddress:t,cashbackUrl:e,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:t};return r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),e&&(n.cashbackUrl=e),await A({path:"/check/notification",method:"POST",params:n})},ct=oe;var se=(t,e)=>new Promise((n,a)=>{let m=d=>{chrome.tabs.get(t,c=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},u=>{chrome.runtime.lastError?d<4?setTimeout(()=>m(d+1),1e3*Math.pow(2,d)):n(null):n(u||null)})})};m(0)}),x=se;var ae=async t=>{let e=await o.get("walletAddress");try{if(!t){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return e;t=i[0].id}let r=await x(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await o.set("walletAddress",e))}catch{}return e},k=ae;var ce=t=>{if(!t||!Array.isArray(t)||t.length!==2)return!1;let[e,r]=t;return typeof e=="number"&&typeof r=="number"&&e<=r},N=(t,e)=>{if(!ce(t))return!0;let[r,i]=t;return e=e??Date.now(),e<r||e>i},O=(t,e)=>!N(t,e);var me=async(t,e)=>{let r={showNotification:!1,token:"",iframeUrl:""},i=Date.now(),n=await o.get("notificationCheck");if(O(n,i))return r;let a=t?await k(t):await o.get("walletAddress");if(!a)return r;let m=await o.get("lastActivation"),d=m?i-m:void 0,c=await ct({walletAddress:a,cashbackUrl:e,lastActivation:m,timeSinceLastActivation:d});o.set("notificationCheck",[i,i+c.nextCall]);let u={showNotification:c.showNotification,token:c.token,iframeUrl:c.iframeUrl,expiration:[i,i+c.expiration]};return u.showNotification&&await o.set("notification",u),u},M=me;var le=t=>t?chrome.runtime.getURL(t):"",R=le;var ue=async t=>{let e=p.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},e&&(r.params.whitelist=encodeURIComponent(e)),t&&(r.params.trigger=t),await A(r)},mt=ue;var lt=t=>{if(t===void 0)return"undefined";if(t===null)return"null";if(typeof t=="string")return`"${t}"`;if(typeof t=="number")return Number.isNaN(t)?"NaN":String(t);if(typeof t=="boolean")return String(t);if(Array.isArray(t))return`[${t.map(e=>e===void 0?"undefined":e===null?"null":lt(e)).join(", ")}]`;if(typeof t=="object")try{return JSON.stringify(t,(e,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(t)}}`}return String(t)},w=lt;var ut=async()=>{try{let t=p.getInstance().getWhitelistEndpoint();if(!t)return[];let e=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!e.ok)throw new Error("Failed to fetch whitelist");let r=await e.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(t){return console.error("Error fetching whitelist:",t),[]}};var U=async()=>{let t=await o.get("relevantDomainsCheck"),e=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=p.getInstance().getWhitelistEndpoint(),n=null,a=Date.now();if(e?Array.isArray(e)?t?Array.isArray(t)?t.length!==2?n=`invalid domains timestamp check format__length: ${t.length} - value: ${w(t)}`:t[0]>=a?n=`cache expired - range start is bigger than Date.now()__value: ${w(t)}, now: ${a}`:a>=t[1]?n=`cache expired - range end is smaller than Date.now()__value: ${w(t)}, now: ${a}`:i&&!r?.length?n=`missing whitelist data__endpoint: ${i}, whitelist: ${w(r)}`:N(t,a)&&(n=`cache expired - range is expired__range: ${w(t)}, now: ${a}`):n=`invalid domains timestamp check format - not an array__value: ${w(t)}`:n=`no domains timestamp check found__value: ${w(t)}`:n=`domains list isn't an array__value: ${w(e)}`:n=`no domains in cache__value: ${w(e)}`,!n)return e;let m=await mt(n),{nextUpdateTimestamp:d,relevantDomains:c}=m;return o.set("relevantDomains",c),o.set("relevantDomainsCheck",[a,a+d]),r=await ut(),r&&o.set("redirectsWhitelist",r),c};var de=async(t,e)=>{try{let r=p.getInstance().getWhitelistEndpoint();if(r&&!e?.length&&(await U(),e=await o.get("redirectsWhitelist")),!e?.length)return!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(a=>{if(a.startsWith("*.")){let m=a.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",t),!1}},L=de;var fe=async(t,e,r,i,n,a)=>{let m=Date.now();if(e===chrome.runtime.id&&await o.set("lastActivation",m),t&&C(t,i||864e5),n&&a){let d=await o.get("redirectsWhitelist");await L(a,d)&&chrome.tabs.update(n,{url:a})}await M(void 0,R(r))},K=fe;var dt=async t=>{if(t<0)return await o.remove("optOut"),{isOptedOut:!1};{let e=Date.now();return await o.set("optOut",[e,e+t]),{isOptedOut:!0}}},ft=async()=>{let t=await o.get("optOut");return{isOptedOut:O(t)}};var pt=async(t,e,r)=>{await x(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await T(),domain:r})},pe=async(t,e,r,i,n)=>{let a=await o.get("notification"),m=Date.now(),d=a?.expiration;if(N(d,m))await o.remove("notification");else if(a)return await pt(t,a,r);let c=await M(t,R(e));c.showNotification&&(i&&await pt(t,c,r),n&&n())},gt=pe;var ge=async t=>{t.category=t?.category||"system",await A({path:"/analytics",method:"POST",params:t})},ht=ge;var wt="optOutDomains",he=async(t,e)=>{if(!t)return;let r=await o.get(wt);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(wt,r)},Et=he;var bt=1,yt=async(t,e)=>{let r=await o.get(t);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>e?r[i]=[e,n]:delete r[i];o.set(t,r)}},we=async()=>{try{let t=Date.now(),e=await o.get("optOut");return e&&typeof e=="number"&&e>t?await o.set("optOut",[t,e]):await o.remove("optOut"),await yt("optOutDomains",t),await yt("quietDomains",t),!0}catch{return!1}},At=async()=>{(await o.get("migrationVersion")||0)<bt&&await we()&&await o.set("migrationVersion",bt)};var Ee=["www.","www1.","www2."],be=async t=>{let e=await U();if(!t||!e||!e.length)return"";let r=null;try{r=new URL(t)}catch{r=new URL(`https://${t}`)}let i=r.hostname,n=I(r.pathname);for(let m of Ee)i=i.replace(m,"");let a=Date.now();for(let m of e){let d=m;m=I(m);let c=!1;m.startsWith("*.")&&(c=!0);let u="/"+m.split("/").slice(1).join("/")||"";if(u!=="/"&&n.startsWith(u)&&(i+=u),i===m||c&&i.endsWith(m.replace("*.",""))){let l=await o.get("quietDomains");return l&&l[m]&&O(l[m])&&l[m][1]<a+60*864e5?"":d}}return""},G={},ye=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:a=!0,notificationCallback:m})=>{if(!t||!e)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(e))throw new Error("unknown apiEndpoint");p.getInstance().setApiEndpoint(e),p.getInstance().setWhitelistEndpoint(i||""),p.getInstance().setApiKey(t),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await At(),U(),chrome.runtime.onMessage.addListener((c,u,l)=>{if(c?.from!=="bringweb3")return;let{action:f}=c;switch(f){case"ACTIVATE":{let{domain:s,extensionId:g,time:y,redirectUrl:v}=c;return K(s,g,r,y,u.tab?.id,v).then(()=>l()),!0}case"GET_OPT_OUT":return ft().then(s=>l(s)),!0;case"OPT_OUT":{let{time:s}=c;return dt(s).then(g=>l(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:g}=c;return Et(s,g).then(y=>l(y)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>l({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=c;return o.set("popupEnabled",s).then(()=>{l({isPopupEnabled:s})}).catch(g=>{console.error("Error setting popup enabled:",g),l({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:g}=c;return g&&(C(g,s),l({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=c;return s?o.set("walletAddress",s).then(()=>l(s)):o.remove("walletAddress").then(()=>l({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>l({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${f}`),!0;case"OPEN_CASHBACK_PAGE":let{url:E}=c;return nt(E||r),l({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,l)=>{if(!u.url||!l?.url?.startsWith("http"))return;let f=st(l.url),E=await o.get("optOut"),s=await o.get("popupEnabled"),g=Date.now();if(!s||O(E,g))return;E&&o.remove("optOut");let y=await o.get("optOutDomains");if(y&&O(y[P(f)],g))return;let v=G[c];if(f===v)return;G[c]=f;let b=await be(l.url);if(!b||!b.length){await gt(c,r,f,a,m);return}let D=await k(c),{token:vt,isValid:B,iframeUrl:V,networkUrl:Dt,flowId:St,portalReferrers:It,time:H=864e5}=await ot({body:{domain:b,url:l.url,address:D}});if(!B){B===!1&&C(b,H);return}if(!await L(Dt,await o.get("redirectsWhitelist")))return;let q=await T(),_=await x(c,{action:"INJECT",token:vt,domain:f,iframeUrl:V,userId:q,portalReferrers:It});if(_?.action)switch(_.action){case"activate":K(b,chrome.runtime.id,r,H,c);break;default:console.error(`Unknown action: ${_.action}`);break}_?.status!=="success"&&ht({type:"no_popup",userId:q,walletAddress:D,details:{url:l.url,match:b,iframeUrl:V,reason:_?.message,status:_?.status},flowId:St})}),chrome.tabs.onRemoved.addListener(c=>delete G[c])},Ot=ye;var Pt=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t({isTurnedOff:r.isOptedOut})})}),Tt=t=>new Promise((e,r)=>{let i=t?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?e({isTurnedOff:n.isOptedOut}):r("No response received")})});var _t=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t(r)})}),xt=t=>new Promise((e,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:t},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?e({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 Ae=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,c])=>{c&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(c)):t.append(n,c))}),t.toString()},W=Ae;var H={name:"@bringweb3/chrome-extension-kit",version:"1.4.3",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 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",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 Pe=()=>H.version,S=Pe;var Te=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:c,switchWallet:m})=>{let u=chrome.runtime.id,a=`bringweb3-iframe-${u}`,d=document.getElementById(a),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${c?"/"+c:""}`:n;if(d)return d;let p=W({query:{...e,extensionId:u,v:S(),themeMode:r,textMode:i,switchWallet:String(m)}}),w=t?`&${W({query:t,prefix:"t"})}`:"",s=document.createElement("iframe");return s.id=a,s.src=`${l}?${p}${w}`,s.setAttribute("sandbox","allow-scripts allow-same-origin"),s.style.position="fixed",s.scrolling="no",s.style.overflow="hidden",s.style.width="1px",s.style.height="1px",s.style.right="8px",s.style.borderRadius="10px",s.style.border="none",s.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(s.style.boxShadow=t.popupShadow),document.documentElement.appendChild(s),s},q=Te;var ve=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},Q=ve;var xe=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")},Y=xe;var h={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"},De=[h.ACTIVATE],Se=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:c,keyFrames:m,time:u,extensionId:a,url:d,domain:l,redirectUrl:p}=e.data;if(i==="bringweb3"&&!(a!==chrome.runtime.id&&!De.includes(n)))switch(n){case h.OPEN:Q(t,c);break;case h.CLOSE:t&&t.parentNode?.removeChild(t),u&&chrome.runtime.sendMessage({action:n,time:u,domain:l,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:l,extensionId:a,time:u,redirectUrl:p});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:n,time:u,from:"bringweb3"});break;case h.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:l,time:u,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case h.ADD_KEYFRAMES:Y(m);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:d,from:"bringweb3"});break;default:break}},J=Se;var z=async({iframeEl:e,getWalletAddress:t})=>{if(!e&&(e=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!e)||!e.contentWindow)return;let r=await t();e.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},Ie=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>z({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let c=e[n];c&&window.addEventListener(c,async()=>z({iframeEl:i,getWalletAddress:r}))}},X=Ie;var _e=e=>e.endsWith("/")?e.slice(0,-1):e,I=_e;var Ce=["www.","www1.","www2."],Ue=e=>{for(let r of Ce)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=I(t),t},O=Ue;var F=null,Z=!1,ke=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:c,theme:m,text:u,switchWallet:a=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");X({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:F}),window.addEventListener("message",d=>J({event:d,iframeEl:F,promptLogin:t})),chrome.runtime.onMessage.addListener((d,l,p)=>{if(d?.from!=="bringweb3")return;let{action:w}=d;switch(w){case"GET_WALLET_ADDRESS":return e().then(s=>p({status:"success",walletAddress:s})).catch(s=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:s}=document,g=d.portalReferrers||[];if(O(location.href)!==O(d.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(Z)return p({status:"failed",message:"iframe already open"}),!0;if(s&&g.includes(O(s)))return p({status:"failed",message:`already activated by ${O(s)}`,action:"activate"}),!0;let{token:b,iframeUrl:x,userId:E}=d,D={token:b};return E&&(D.userId=E),F=q({query:D,iframeUrl:x,theme:m==="dark"?c:n,themeMode:m||"light",text:u,switchWallet:a,page:d.page}),Z=!0,p({status:"success"}),!0}catch(s){return s instanceof Error?p({status:"failed",message:s.message}):p({status:"failed",message:String(s)}),!0}default:console.error(`Unknown action: ${w}`);break}})}},Me=ke;var ee=e=>{e&&chrome.tabs.create({url:e})};var f=class e{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}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}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var Ne=async(e,t)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Re=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(i[`bring_${e}`])})}),Le=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),o={set:Ne,get:Re,remove:Le};import{v4 as We}from"uuid";var Fe=async()=>{let e=await o.get("id");return e||(e=We(),o.set("id",e)),e},P=Fe;var Ke=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=f.getInstance().getApiEndpoint();n+=t;let c=f.getInstance().getApiKey();if(r==="GET"){let a=new URLSearchParams({...i,version:S(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await P()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${a.toString()}`}else r==="POST"&&(i={...i,version:S(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await P()||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":c},body:r==="POST"?JSON.stringify(i):void 0})).json()},y=Ke;var $e=async({body:e})=>await y({path:"/check/popup",method:"POST",params:e}),te=$e;var je=["www.","www1.","www2."],Ge=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of je)e.startsWith(t)&&(e=e.replace(t,""));return e},re=Ge;var ne="quietDomains",Be=async(e,t)=>{let r=await o.get(ne);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+t;r[e]=[i,n],o.set(ne,r)},_=Be;var Ve=async({walletAddress:e,cashbackUrl:t,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:e};return r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),t&&(n.cashbackUrl=t),await y({path:"/check/notification",method:"POST",params:n})},ie=Ve;var He=(e,t)=>new Promise((n,c)=>{let m=u=>{chrome.tabs.get(e,a=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?u<4?setTimeout(()=>m(u+1),1e3*Math.pow(2,u)):n(null):n(d||null)})})};m(0)}),v=He;var qe=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 v(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},k=qe;var Qe=e=>{if(!e||!Array.isArray(e)||e.length!==2)return!1;let[t,r]=e;return typeof t=="number"&&typeof r=="number"&&t<=r},C=(e,t)=>{if(!Qe(e))return!0;let[r,i]=e;return t=t??Date.now(),t<r||t>i},A=(e,t)=>!C(e,t);var Ye=async(e,t)=>{let r={showNotification:!1,token:"",iframeUrl:""},i=Date.now(),n=await o.get("notificationCheck");if(A(n,i))return r;let c=e?await k(e):await o.get("walletAddress");if(!c)return r;let m=await o.get("lastActivation"),u=m?i-m:void 0,a=await ie({walletAddress:c,cashbackUrl:t,lastActivation:m,timeSinceLastActivation:u});o.set("notificationCheck",[i,i+a.nextCall]);let d={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:[i,i+a.expiration]};return d.showNotification&&await o.set("notification",d),d},M=Ye;var Je=e=>e?chrome.runtime.getURL(e):"",N=Je;var ze=async e=>{let t=f.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},t&&(r.params.whitelist=encodeURIComponent(t)),e&&(r.params.trigger=e),await y(r)},oe=ze;var se=async()=>{try{let e=f.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}catch(e){return console.error("Error fetching whitelist:",e),[]}};var U=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=f.getInstance().getWhitelistEndpoint(),n=null,c=Date.now();if(t?Array.isArray(t)?e?Array.isArray(e)?e.length!==2?n="invalid domains timestamp check format":e[0]>=c?n="cache expired - range start is bigger than Date.now()":c>=e[1]?n="cache expired - range end is smaller than Date.now()":i&&!r?.length?n="missing whitelist data":C(e,c)&&(n="cache expired - range is expired"):n="invalid domains timestamp check format - not an array":n="no domains timestamp check found":n="domains list isn't an array":n="no domains in cache",!n)return t;let m=await oe(n),{nextUpdateTimestamp:u,relevantDomains:a}=m;return o.set("relevantDomains",a),o.set("relevantDomainsCheck",[c,c+u]),r=await se(),r&&o.set("redirectsWhitelist",r),a};var Xe=async(e,t)=>{try{let r=f.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await U(),t=await o.get("redirectsWhitelist")),!t?.length)return!r;let n=new URL(e).hostname.toLowerCase();return n=n.replace("www.",""),t.includes(n)?!0:t.some(c=>{if(c.startsWith("*.")){let m=c.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",e),!1}},R=Xe;var Ze=async(e,t,r,i,n,c)=>{let m=Date.now();if(t===chrome.runtime.id&&await o.set("lastActivation",m),e&&_(e,i||864e5),n&&c){let u=await o.get("redirectsWhitelist");await R(c,u)&&chrome.tabs.update(n,{url:c})}await M(void 0,N(r))},K=Ze;var ae=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}}},ce=async()=>{let e=await o.get("optOut");return{isOptedOut:A(e)}};var me=async(e,t,r)=>{await v(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await P(),domain:r})},et=async(e,t,r,i,n)=>{let c=await o.get("notification"),m=Date.now(),u=c?.expiration;if(C(u,m))await o.remove("notification");else if(c)return await me(e,c,r);let a=await M(e,N(t));a.showNotification&&(i&&await me(e,a,r),n&&n())},le=et;var tt=async e=>{e.category=e?.category||"system",await y({path:"/analytics",method:"POST",params:e})},de=tt;var ue="optOutDomains",rt=async(e,t)=>{if(!e)return;let r=await o.get(ue);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+t;r[e]=[i,n],o.set(ue,r)},pe=rt;var fe=1,ge=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];o.set(e,r)}},nt=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 ge("optOutDomains",e),await ge("quietDomains",e),!0}catch{return!1}},he=async()=>{(await o.get("migrationVersion")||0)<fe&&await nt()&&await o.set("migrationVersion",fe)};var it=["www.","www1.","www2."],ot=async e=>{let t=await U();if(!e||!t||!t.length)return"";let r=null;try{r=new URL(e)}catch{r=new URL(`https://${e}`)}let i=r.hostname,n=I(r.pathname);for(let m of it)i=i.replace(m,"");let c=Date.now();for(let m of t){let u=m;m=I(m);let a=!1;m.startsWith("*.")&&(a=!0);let d="/"+m.split("/").slice(1).join("/")||"";if(d!=="/"&&n.startsWith(d)&&(i+=d),i===m||a&&i.endsWith(m.replace("*.",""))){let l=await o.get("quietDomains");return l&&l[m]&&A(l[m])&&l[m][1]<c+60*864e5?"":u}}return""},$={},st=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:c=!0,notificationCallback:m})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");f.getInstance().setApiEndpoint(t),f.getInstance().setWhitelistEndpoint(i||""),f.getInstance().setApiKey(e),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await he(),U(),chrome.runtime.onMessage.addListener((a,d,l)=>{if(a?.from!=="bringweb3")return;let{action:p}=a;switch(p){case"ACTIVATE":{let{domain:s,extensionId:g,time:b,redirectUrl:x}=a;return K(s,g,r,b,d.tab?.id,x).then(()=>l()),!0}case"GET_OPT_OUT":return ce().then(s=>l(s)),!0;case"OPT_OUT":{let{time:s}=a;return ae(s).then(g=>l(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:g}=a;return pe(s,g).then(b=>l(b)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>l({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=a;return o.set("popupEnabled",s).then(()=>{l({isPopupEnabled:s})}).catch(g=>{console.error("Error setting popup enabled:",g),l({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:g}=a;return g&&(_(g,s),l({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=a;return s?o.set("walletAddress",s).then(()=>l(s)):o.remove("walletAddress").then(()=>l({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>l({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:w}=a;return ee(w||r),l({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(a,d,l)=>{if(!d.url||!l?.url?.startsWith("http"))return;let p=re(l.url),w=await o.get("optOut"),s=await o.get("popupEnabled"),g=Date.now();if(!s||A(w,g))return;w&&o.remove("optOut");let b=await o.get("optOutDomains");if(b&&A(b[O(p)],g))return;let x=$[a];if(p===x)return;$[a]=p;let E=await ot(l.url);if(!E||!E.length){await le(a,r,p,c,m);return}let D=await k(a),{token:we,isValid:j,iframeUrl:G,networkUrl:Ee,flowId:be,portalReferrers:ye,time:B=864e5}=await te({body:{domain:E,url:l.url,address:D}});if(!j){j===!1&&_(E,B);return}if(!await R(Ee,await o.get("redirectsWhitelist")))return;let V=await P(),T=await v(a,{action:"INJECT",token:we,domain:p,iframeUrl:G,userId:V,portalReferrers:ye});if(T?.action)switch(T.action){case"activate":K(E,chrome.runtime.id,r,B,a);break;default:console.error(`Unknown action: ${T.action}`);break}T?.status!=="success"&&de({type:"no_popup",userId:V,walletAddress:D,details:{url:l.url,match:E,iframeUrl:G,reason:T?.message,status:T?.status},flowId:be})}),chrome.tabs.onRemoved.addListener(a=>delete $[a])},at=st;var ct=()=>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})})}),mt=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 lt=()=>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)})}),dt=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{at as bringInitBackground,Me as bringInitContentScript,lt as getPopupEnabled,ct as getTurnOff,dt as setPopupEnabled,mt as setTurnOff};
|
|
1
|
+
var Pt=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,a])=>{a&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(a)):e.append(n,a))}),e.toString()},$=Pt;var q={name:"@bringweb3/chrome-extension-kit",version:"1.4.4",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 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",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 _t=()=>q.version,S=_t;var xt=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:a,switchWallet:m})=>{let d=chrome.runtime.id,c=`bringweb3-iframe-${d}`,u=document.getElementById(c),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${a?"/"+a:""}`:n;if(u)return u;let f=$({query:{...t,extensionId:d,v:S(),themeMode:r,textMode:i,switchWallet:String(m)}}),E=e?`&${$({query:e,prefix:"t"})}`:"",s=document.createElement("iframe");return s.id=c,s.src=encodeURI(`${l}?${f}${E}`),s.setAttribute("sandbox","allow-scripts allow-same-origin"),s.style.position="fixed",s.scrolling="no",s.style.overflow="hidden",s.style.width="1px",s.style.height="1px",s.style.right="8px",s.style.borderRadius="10px",s.style.border="none",s.style.cssText+="z-index: 99999999999999 !important;",e?.popupShadow&&(s.style.boxShadow=e.popupShadow),document.documentElement.appendChild(s),s},Q=xt;var vt=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},J=vt;var Dt=t=>{if(!t||!t.length)return;let e=document.createElement("style");document.head.appendChild(e);let r=e.sheet;r?t.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},Y=Dt;var h={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"},St=[h.ACTIVATE],It=({event:t,iframeEl:e,promptLogin:r})=>{if(!t?.data)return;let{from:i,action:n,style:a,keyFrames:m,time:d,extensionId:c,url:u,domain:l,redirectUrl:f}=t.data;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!St.includes(n)))switch(n){case h.OPEN:J(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),d&&chrome.runtime.sendMessage({action:n,time:d,domain:l,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:l,extensionId:c,time:d,redirectUrl:f});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:n,time:d,from:"bringweb3"});break;case h.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:l,time:d,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case h.ADD_KEYFRAMES:Y(m);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:u,from:"bringweb3"});break;default:break}},z=It;var X=async({iframeEl:t,getWalletAddress:e})=>{if(!t&&(t=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!t)||!t.contentWindow)return;let r=await e();t.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},Ct=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>X({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let a=t[n];a&&window.addEventListener(a,async()=>X({iframeEl:i,getWalletAddress:r}))}},Z=Ct;var Nt=t=>t.endsWith("/")?t.slice(0,-1):t,I=Nt;var Ut=["www.","www1.","www2."],kt=t=>{for(let r of Ut)t=t.replace(r,"");let e="";try{e=new URL(t).host}catch{e=new URL(`https://${t}`).host}return e=I(e),e},P=kt;var F=null,tt=!1,Mt=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:a,theme:m,text:d,switchWallet:c=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");Z({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:F}),window.addEventListener("message",u=>z({event:u,iframeEl:F,promptLogin:e})),chrome.runtime.onMessage.addListener((u,l,f)=>{if(u?.from!=="bringweb3")return;let{action:E}=u;switch(E){case"GET_WALLET_ADDRESS":return t().then(s=>f({status:"success",walletAddress:s})).catch(s=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:s}=document,g=u.portalReferrers||[];if(P(location.href)!==P(u.domain))return f({status:"failed",message:"Domain already changed"}),!0;if(tt)return f({status:"failed",message:"iframe already open"}),!0;if(s&&g.includes(P(s)))return f({status:"failed",message:`already activated by ${P(s)}`,action:"activate"}),!0;let{token:y,iframeUrl:v,userId:b}=u,D={token:y};return b&&(D.userId=b),F=Q({query:D,iframeUrl:v,theme:m==="dark"?a:n,themeMode:m||"light",text:d,switchWallet:c,page:u.page}),tt=!0,f({status:"success"}),!0}catch(s){return s instanceof Error?f({status:"failed",message:s.message}):f({status:"failed",message:String(s)}),!0}default:console.error(`Unknown action: ${E}`);break}})}},Rt=Mt;var et=t=>{t&&chrome.tabs.create({url:t})};var p=class t{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}setWhitelistEndpoint(e){this.whitelistEndpoint=e}setApiEndpoint(e){this.apiEndpoint=e==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}setApiKey(e){this.apiKey=e}getWhitelistEndpoint(){return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var Lt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Wt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),$t=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),o={set:Lt,get:Wt,remove:$t};import{v4 as Ft}from"uuid";var jt=async()=>{let t=await o.get("id");return t||(t=Ft(),o.set("id",t)),t},T=jt;var Kt=async t=>{let{path:e,method:r,params:i}=t;if(!t||!e||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let n=p.getInstance().getApiEndpoint();n+=e;let a=p.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...i,version:S(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await T()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${c.toString()}`}else r==="POST"&&(i={...i,version:S(),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(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":a},body:r==="POST"?JSON.stringify(i):void 0})).json()},A=Kt;var Gt=async({body:t})=>await A({path:"/check/popup",method:"POST",params:t}),rt=Gt;var Bt=["www.","www1.","www2."],Vt=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of Bt)t.startsWith(e)&&(t=t.replace(e,""));return t},nt=Vt;var it="quietDomains",Ht=async(t,e)=>{let r=await o.get(it);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(it,r)},C=Ht;var qt=async({walletAddress:t,cashbackUrl:e,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:t};return r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),e&&(n.cashbackUrl=e),await A({path:"/check/notification",method:"POST",params:n})},ot=qt;var Qt=(t,e)=>new Promise((n,a)=>{let m=d=>{chrome.tabs.get(t,c=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},u=>{chrome.runtime.lastError?d<4?setTimeout(()=>m(d+1),1e3*Math.pow(2,d)):n(null):n(u||null)})})};m(0)}),x=Qt;var Jt=async t=>{let e=await o.get("walletAddress");try{if(!t){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return e;t=i[0].id}let r=await x(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await o.set("walletAddress",e))}catch{}return e},k=Jt;var Yt=t=>{if(!t||!Array.isArray(t)||t.length!==2)return!1;let[e,r]=t;return typeof e=="number"&&typeof r=="number"&&e<=r},N=(t,e)=>{if(!Yt(t))return!0;let[r,i]=t;return e=e??Date.now(),e<r||e>i},O=(t,e)=>!N(t,e);var zt=async(t,e)=>{let r={showNotification:!1,token:"",iframeUrl:""},i=Date.now(),n=await o.get("notificationCheck");if(O(n,i))return r;let a=t?await k(t):await o.get("walletAddress");if(!a)return r;let m=await o.get("lastActivation"),d=m?i-m:void 0,c=await ot({walletAddress:a,cashbackUrl:e,lastActivation:m,timeSinceLastActivation:d});o.set("notificationCheck",[i,i+c.nextCall]);let u={showNotification:c.showNotification,token:c.token,iframeUrl:c.iframeUrl,expiration:[i,i+c.expiration]};return u.showNotification&&await o.set("notification",u),u},M=zt;var Xt=t=>t?chrome.runtime.getURL(t):"",R=Xt;var Zt=async t=>{let e=p.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},e&&(r.params.whitelist=encodeURIComponent(e)),t&&(r.params.trigger=t),await A(r)},st=Zt;var at=t=>{if(t===void 0)return"undefined";if(t===null)return"null";if(typeof t=="string")return`"${t}"`;if(typeof t=="number")return Number.isNaN(t)?"NaN":String(t);if(typeof t=="boolean")return String(t);if(Array.isArray(t))return`[${t.map(e=>e===void 0?"undefined":e===null?"null":at(e)).join(", ")}]`;if(typeof t=="object")try{return JSON.stringify(t,(e,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(t)}}`}return String(t)},w=at;var ct=async()=>{try{let t=p.getInstance().getWhitelistEndpoint();if(!t)return[];let e=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!e.ok)throw new Error("Failed to fetch whitelist");let r=await e.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(t){return console.error("Error fetching whitelist:",t),[]}};var U=async()=>{let t=await o.get("relevantDomainsCheck"),e=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=p.getInstance().getWhitelistEndpoint(),n=null,a=Date.now();if(e?Array.isArray(e)?t?Array.isArray(t)?t.length!==2?n=`invalid domains timestamp check format__length: ${t.length} - value: ${w(t)}`:t[0]>=a?n=`cache expired - range start is bigger than Date.now()__value: ${w(t)}, now: ${a}`:a>=t[1]?n=`cache expired - range end is smaller than Date.now()__value: ${w(t)}, now: ${a}`:i&&!r?.length?n=`missing whitelist data__endpoint: ${i}, whitelist: ${w(r)}`:N(t,a)&&(n=`cache expired - range is expired__range: ${w(t)}, now: ${a}`):n=`invalid domains timestamp check format - not an array__value: ${w(t)}`:n=`no domains timestamp check found__value: ${w(t)}`:n=`domains list isn't an array__value: ${w(e)}`:n=`no domains in cache__value: ${w(e)}`,!n)return e;let m=await st(n),{nextUpdateTimestamp:d,relevantDomains:c}=m;return o.set("relevantDomains",c),o.set("relevantDomainsCheck",[a,a+d]),r=await ct(),r&&o.set("redirectsWhitelist",r),c};var te=async(t,e)=>{try{let r=p.getInstance().getWhitelistEndpoint();if(r&&!e?.length&&(await U(),e=await o.get("redirectsWhitelist")),!e?.length)return!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(a=>{if(a.startsWith("*.")){let m=a.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",t),!1}},L=te;var ee=async(t,e,r,i,n,a)=>{let m=Date.now();if(e===chrome.runtime.id&&await o.set("lastActivation",m),t&&C(t,i||864e5),n&&a){let d=await o.get("redirectsWhitelist");await L(a,d)&&chrome.tabs.update(n,{url:a})}await M(void 0,R(r))},j=ee;var mt=async t=>{if(t<0)return await o.remove("optOut"),{isOptedOut:!1};{let e=Date.now();return await o.set("optOut",[e,e+t]),{isOptedOut:!0}}},lt=async()=>{let t=await o.get("optOut");return{isOptedOut:O(t)}};var ut=async(t,e,r)=>{await x(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await T(),domain:r})},re=async(t,e,r,i,n)=>{let a=await o.get("notification"),m=Date.now(),d=a?.expiration;if(N(d,m))await o.remove("notification");else if(a)return await ut(t,a,r);let c=await M(t,R(e));c.showNotification&&(i&&await ut(t,c,r),n&&n())},dt=re;var ne=async t=>{t.category=t?.category||"system",await A({path:"/analytics",method:"POST",params:t})},ft=ne;var pt="optOutDomains",ie=async(t,e)=>{if(!t)return;let r=await o.get(pt);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(pt,r)},gt=ie;var ht=1,wt=async(t,e)=>{let r=await o.get(t);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>e?r[i]=[e,n]:delete r[i];o.set(t,r)}},oe=async()=>{try{let t=Date.now(),e=await o.get("optOut");return e&&typeof e=="number"&&e>t?await o.set("optOut",[t,e]):await o.remove("optOut"),await wt("optOutDomains",t),await wt("quietDomains",t),!0}catch{return!1}},Et=async()=>{(await o.get("migrationVersion")||0)<ht&&await oe()&&await o.set("migrationVersion",ht)};var se=["www.","www1.","www2."],ae=async t=>{let e=await U();if(!t||!e||!e.length)return"";let r=null;try{r=new URL(t)}catch{r=new URL(`https://${t}`)}let i=r.hostname,n=I(r.pathname);for(let m of se)i=i.replace(m,"");let a=Date.now();for(let m of e){let d=m;m=I(m);let c=!1;m.startsWith("*.")&&(c=!0);let u="/"+m.split("/").slice(1).join("/")||"";if(u!=="/"&&n.startsWith(u)&&(i+=u),i===m||c&&i.endsWith(m.replace("*.",""))){let l=await o.get("quietDomains");return l&&l[m]&&O(l[m])&&l[m][1]<a+60*864e5?"":d}}return""},K={},ce=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:a=!0,notificationCallback:m})=>{if(!t||!e)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(e))throw new Error("unknown apiEndpoint");p.getInstance().setApiEndpoint(e),p.getInstance().setWhitelistEndpoint(i||""),p.getInstance().setApiKey(t),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await Et(),U(),chrome.runtime.onMessage.addListener((c,u,l)=>{if(c?.from!=="bringweb3")return;let{action:f}=c;switch(f){case"ACTIVATE":{let{domain:s,extensionId:g,time:y,redirectUrl:v}=c;return j(s,g,r,y,u.tab?.id,v).then(()=>l()),!0}case"GET_OPT_OUT":return lt().then(s=>l(s)),!0;case"OPT_OUT":{let{time:s}=c;return mt(s).then(g=>l(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:g}=c;return gt(s,g).then(y=>l(y)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>l({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=c;return o.set("popupEnabled",s).then(()=>{l({isPopupEnabled:s})}).catch(g=>{console.error("Error setting popup enabled:",g),l({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:g}=c;return g&&(C(g,s),l({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=c;return s?o.set("walletAddress",s).then(()=>l(s)):o.remove("walletAddress").then(()=>l({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>l({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${f}`),!0;case"OPEN_CASHBACK_PAGE":let{url:E}=c;return et(E||r),l({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,l)=>{if(!u.url||!l?.url?.startsWith("http"))return;let f=nt(l.url),E=await o.get("optOut"),s=await o.get("popupEnabled"),g=Date.now();if(!s||O(E,g))return;E&&o.remove("optOut");let y=await o.get("optOutDomains");if(y&&O(y[P(f)],g))return;let v=K[c];if(f===v)return;K[c]=f;let b=await ae(l.url);if(!b||!b.length){await dt(c,r,f,a,m);return}let D=await k(c),{token:bt,isValid:G,iframeUrl:B,networkUrl:yt,flowId:At,portalReferrers:Ot,time:V=864e5}=await rt({body:{domain:b,url:l.url,address:D}});if(!G){G===!1&&C(b,V);return}if(!await L(yt,await o.get("redirectsWhitelist")))return;let H=await T(),_=await x(c,{action:"INJECT",token:bt,domain:f,iframeUrl:B,userId:H,portalReferrers:Ot});if(_?.action)switch(_.action){case"activate":j(b,chrome.runtime.id,r,V,c);break;default:console.error(`Unknown action: ${_.action}`);break}_?.status!=="success"&&ft({type:"no_popup",userId:H,walletAddress:D,details:{url:l.url,match:b,iframeUrl:B,reason:_?.message,status:_?.status},flowId:At})}),chrome.tabs.onRemoved.addListener(c=>delete K[c])},me=ce;var le=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t({isTurnedOff:r.isOptedOut})})}),ue=t=>new Promise((e,r)=>{let i=t?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?e({isTurnedOff:n.isOptedOut}):r("No response received")})});var de=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t(r)})}),fe=t=>new Promise((e,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:t},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?e({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});export{me as bringInitBackground,Rt as bringInitContentScript,de as getPopupEnabled,le as getTurnOff,fe as setPopupEnabled,ue as setTurnOff};
|