@bringweb3/chrome-extension-kit 1.4.0 → 1.4.2
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/README.md +2 -3
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -60,8 +60,7 @@ Include this configuration inside your `manifest.json` file:
|
|
|
60
60
|
```json
|
|
61
61
|
"permissions": [
|
|
62
62
|
"storage",
|
|
63
|
-
"tabs"
|
|
64
|
-
"alarms"
|
|
63
|
+
"tabs"
|
|
65
64
|
],
|
|
66
65
|
"content_scripts": [
|
|
67
66
|
{
|
|
@@ -236,5 +235,5 @@ console.log(res.isTurnedOff) // true
|
|
|
236
235
|
|
|
237
236
|
|
|
238
237
|
## Contact us
|
|
239
|
-
|
|
238
|
+
|
|
240
239
|
For more information: [contact us](https://bringweb3.io/#contact)
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var N=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var ve=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},De=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Pe(t))!Te.call(e,i)&&i!==r&&N(e,i,{get:()=>t[i],enumerable:!(n=Oe(t,i))||n.enumerable});return e};var xe=e=>De(N({},"__esModule",{value:!0}),e);var dt={};ve(dt,{bringInitBackground:()=>pe,bringInitContentScript:()=>Y,getPopupEnabled:()=>he,getTurnOff:()=>fe,setPopupEnabled:()=>we,setTurnOff:()=>ge});module.exports=xe(dt);var Ie=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([i,s])=>{s&&(n&&(i=`${n}_${i}`),i==="url"?t.append(i,encodeURIComponent(s)):t.append(i,s))}),t.toString()},L=Ie;var G={name:"@bringweb3/chrome-extension-kit",version:"1.4.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 --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 _e=()=>G.version,v=_e;var Se=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:s,switchWallet:l})=>{let m=chrome.runtime.id,c=`bringweb3-iframe-${m}`,d=document.getElementById(c),u=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:i;if(d)return d;let p=L({query:{...e,extensionId:m,v:v(),themeMode:r,textMode:n,switchWallet:String(l)}}),h=t?`&${L({query:t,prefix:"t"})}`:"",a=document.createElement("iframe");return a.id=c,a.src=`${u}?${p}${h}`,a.setAttribute("sandbox","allow-scripts allow-same-origin"),a.style.position="fixed",a.scrolling="no",a.style.overflow="hidden",a.style.width="1px",a.style.height="1px",a.style.right="8px",a.style.borderRadius="10px",a.style.border="none",a.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(a.style.boxShadow=t.popupShadow),document.documentElement.appendChild(a),a},B=Se;var Ue=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},j=Ue;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:n,rules:i})=>{r.insertRule(`@keyframes ${n} { ${i} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},V=ke;var E={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"},Ne=[E.ACTIVATE],Le=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:n,action:i,style:s,keyFrames:l,time:m,extensionId:c,url:d,domain:u,redirectUrl:p}=e.data;if(n==="bringweb3"&&!(c!==chrome.runtime.id&&!Ne.includes(i)))switch(i){case E.OPEN:j(t,s);break;case E.CLOSE:t&&t.parentNode?.removeChild(t),m&&chrome.runtime.sendMessage({action:i,time:m,domain:u,from:"bringweb3"});break;case E.PROMPT_LOGIN:r();break;case E.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3",domain:u,extensionId:c,time:m,redirectUrl:p});break;case E.OPT_OUT:chrome.runtime.sendMessage({action:i,time:m,from:"bringweb3"});break;case E.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:i,domain:u,time:m,from:"bringweb3"});break;case E.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:i,from:"bringweb3"});case E.ADD_KEYFRAMES:V(l);break;case E.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:i,url:d,from:"bringweb3"});break;default:break}},H=Le;var q=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})},Me=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>q({iframeEl:n,getWalletAddress:r}));else if(e)for(let i=0;i<e.length;i++){let s=e[i];s&&window.addEventListener(s,async()=>q({iframeEl:n,getWalletAddress:r}))}},Q=Me;var We=e=>e.endsWith("/")?e.slice(0,-1):e,D=We;var Re=["www.","www1.","www2."],Fe=e=>{for(let r of Re)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=D(t),t},O=Fe;var M=null,J=!1,Ke=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:i,darkTheme:s,theme:l,text:m,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");Q({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:M}),window.addEventListener("message",d=>H({event:d,iframeEl:M,promptLogin:t})),chrome.runtime.onMessage.addListener((d,u,p)=>{if(d?.from!=="bringweb3")return;let{action:h}=d;switch(h){case"GET_WALLET_ADDRESS":return e().then(a=>p({status:"success",walletAddress:a})).catch(a=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{if(O(location.href)!==O(d.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(J)return p({status:"failed",message:"iframe already open"}),!0;let{token:a,iframeUrl:g,userId:b}=d,w={token:a};return b&&(w.userId=b),M=B({query:w,iframeUrl:g,theme:l==="dark"?s:i,themeMode:l||"light",text:m,switchWallet:c,page:d.page}),J=!0,p({status:"success"}),!0}catch(a){return a instanceof Error?p({status:"failed",message:a.message}):p({status:"failed",message:String(a)}),!0}default:console.error(`Unknown action: ${h}`);break}})}},Y=Ke;var z=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 $e=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),Ge=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),Be=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),o={set:$e,get:Ge,remove:Be};var X=require("uuid"),je=async()=>{let e=await o.get("id");return e||(e=(0,X.v4)(),o.set("id",e)),e},y=je;var Ve=async e=>{let{path:t,method:r,params:n}=e;if(!e||!t||!r||!n&&r==="POST")throw new Error("Missing endpoint or method");let i=f.getInstance().getApiEndpoint();i+=t;let s=f.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...n,version:v(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await y()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});i+=`?${c.toString()}`}else r==="POST"&&(n={...n,version:v(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await y()||void 0,walletAddress:n?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(i,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(n):void 0})).json()},A=Ve;var He=async({body:e})=>await A({path:"/check/popup",method:"POST",params:e}),Z=He;var qe=["www.","www1.","www2."],Qe=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of qe)e.startsWith(t)&&(e=e.replace(t,""));return e},ee=Qe;var I="updateCache";var te="quietDomains",Je=async(e,t)=>{let r=await o.get(te);typeof r=="object"?r[e]=t:r={[e]:t},o.set(te,r)},x=Je;var Ye=async({walletAddress:e,cashbackUrl:t,lastActivation:r})=>{let n={walletAddress:e};return r&&(n.lastActivation=r),t&&(n.cashbackUrl=t),await A({path:"/check/notification",method:"POST",params:n})},re=Ye;var ze=(e,t)=>new Promise((i,s)=>{let l=m=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){i(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?m<4?setTimeout(()=>l(m+1),1e3*Math.pow(2,m)):i(null):i(d||null)})})};l(0)}),P=ze;var Xe=async e=>{let t=await o.get("walletAddress");try{if(!e){let n=await chrome.tabs.query({active:!0,currentWindow:!0});if(!n||!n[0]||!n[0].id)return t;e=n[0].id}let r=await P(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},C=Xe;var Ze=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},i=await o.get("notificationCheck");if(i&&Date.now()<i)return n;let s=t?await C(t):await o.get("walletAddress");if(!s)return n;let l=await o.get("lastActivation"),m=await re({walletAddress:s,cashbackUrl:r,lastActivation:l});o.set("notificationCheck",m.nextCall);let c={showNotification:m.showNotification,token:m.token,iframeUrl:m.iframeUrl,expiration:m.expiration};return c.showNotification&&await o.set("notification",c),c},_=Ze;var et=e=>e?chrome.runtime.getURL(e):"",S=et;var tt=async()=>{let e=f.getInstance().getWhitelistEndpoint(),t={path:"/domains",method:"GET"};return e&&(t.params={whitelist:encodeURIComponent(e)}),await A(t)},ne=tt;var ie=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 rt=e=>{let t=Date.now();return(e-t)/1e3/60},T=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),n=f.getInstance().getApiKey(),i=f.getInstance().getWhitelistEndpoint();if(t?.length&&e&&e>Date.now()&&(!i||i&&r?.length))return t;let s=await ne(),{nextUpdateTimestamp:l,relevantDomains:m}=s;o.set("relevantDomains",m),o.set("relevantDomainsCheck",l),r=await ie(),r&&o.set("redirectsWhitelist",r);let c=rt(l);return chrome.alarms.create(I,{delayInMinutes:c||60*24*2}),m};var nt=async(e,t)=>{try{let r=f.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await T(),t=await o.get("redirectsWhitelist")),!t?.length)return!r;let i=new URL(e).hostname.toLowerCase();return i=i.replace("www.",""),t.includes(i)?!0:t.some(s=>{if(s.startsWith("*.")){let l=s.slice(2);return i.endsWith(l)}return!1})}catch{return console.error("Invalid URL:",e),!1}},U=nt;var it=async(e,t,r,n,i,s,l)=>{if(t===chrome.runtime.id&&await o.set("lastActivation",Date.now()),e&&x(e,i||Date.now()+24*60*60*1e3),s&&l){let m=await o.get("redirectsWhitelist");await U(l,m)&&chrome.tabs.update(s,{url:l})}await _(r,void 0,S(n))},oe=it;var se=async e=>e<0?(await o.remove("optOut"),{isOptedOut:!1}):(await o.set("optOut",Date.now()+e),{isOptedOut:!0}),ae=async()=>{let e=await o.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var ce=async(e,t,r)=>{await P(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await y(),domain:r})},ot=async(e,t,r,n,i,s)=>{let l=await o.get("notification");if(l?.expiration<Date.now())await o.remove("notification");else if(l)return await ce(t,l,n);let m=await _(e,t,S(r));m.showNotification&&(i&&await ce(t,m,n),s&&s())},me=ot;var st=async e=>{e.category=e?.category||"system",await A({path:"/analytics",method:"POST",params:e})},le=st;var de="optOutDomains",at=async(e,t)=>{if(!e)return;let r=await o.get(de);typeof r=="object"?r[e]=t:r={[e]:t},o.set(de,r)},ue=at;var ct=["www.","www1.","www2."],mt=async e=>{let t=await T();if(!e||!t||!t.length)return"";let r=null;try{r=new URL(e)}catch{r=new URL(`https://${e}`)}let n=r.hostname,i=D(r.pathname);for(let s of ct)n=n.replace(s,"");for(let s of t){let l=s;s=D(s);let m=!1;s.startsWith("*.")&&(m=!0);let c="/"+s.split("/").slice(1).join("/")||"";if(c!=="/"&&i.startsWith(c)&&(n+=c),n===s||m&&n.endsWith(s.replace("*.",""))){let d=await o.get("quietDomains");return d&&d[s]&&Date.now()<d[s]&&d[s]<Date.now()+60*24*60*60*1e3?"":l}}return""},W={},lt=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:n,isEnabledByDefault:i=!0,showNotifications:s=!0,notificationCallback:l})=>{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(n||""),f.getInstance().setApiKey(e),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",i),T(),chrome.alarms.onAlarm.addListener(async c=>{let{name:d}=c;switch(d){case I:T();break;default:console.error("alarm with no use case:",d);break}}),chrome.runtime.onMessage.addListener((c,d,u)=>{if(c?.from!=="bringweb3")return;let{action:p}=c;switch(p){case"ACTIVATE":{let{domain:a,extensionId:g,time:b,redirectUrl:w}=c;return oe(a,g,e,r,b,d.tab?.id,w).then(()=>u()),!0}case"GET_OPT_OUT":return ae().then(a=>u(a)),!0;case"OPT_OUT":{let{time:a}=c;return se(a).then(g=>u(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:g}=c;return ue(a,g).then(b=>u(b)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(a=>u({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=c;return o.set("popupEnabled",a).then(()=>{u({isPopupEnabled:a})}).catch(g=>{console.error("Error setting popup enabled:",g),u({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:g}=c;return g&&(x(g,a),u({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=c;return a?o.set("walletAddress",a).then(()=>u(a)):o.remove("walletAddress").then(()=>u({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>u({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:h}=c;return z(h||r),u({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,d,u)=>{if(!u?.url?.startsWith("http")||!u.url)return;let p=ee(u.url),h=await o.get("optOut");if(!await o.get("popupEnabled")||h&&h>Date.now())return;h&&(o.remove("optOut"),o.remove("optOutKey"));let g=await o.get("optOutDomains");if(g&&g[O(p)]&&g[O(p)]>Date.now())return;let b=W[c];if(d.status!=="complete"||p===b)return;W[c]=p;let w=await mt(u.url);if(!w||!w.length){await me(e,c,r,p,s,l);return}let R=await C(c),{token:Ee,isValid:F,iframeUrl:K,networkUrl:be,flowId:Ae,time:ye=Date.now()+24*60*60*1e3}=await Z({body:{domain:w,url:u.url,address:R}});if(!F){F===!1&&x(w,ye);return}if(!await U(be,await o.get("redirectsWhitelist")))return;let $=await y(),k=await P(c,{action:"INJECT",token:Ee,domain:p,iframeUrl:K,userId:$});k?.status!=="success"&&le({type:"no_popup",userId:$,walletAddress:R,details:{url:u.url,match:w,iframeUrl:K,reason:k?.message,status:k?.status},flowId:Ae})}),chrome.tabs.onRemoved.addListener(c=>delete W[c])},pe=lt;var fe=()=>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})})}),ge=e=>new Promise((t,r)=>{let n=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:n},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isTurnedOff:i.isOptedOut}):r("No response received")})});var he=()=>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)})}),we=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isPopupEnabled:n.isPopupEnabled}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getPopupEnabled,getTurnOff,setPopupEnabled,setTurnOff});
|
|
1
|
+
"use strict";var L=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var ve=(e,t)=>{for(var r in t)L(e,r,{get:t[r],enumerable:!0})},De=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Pe(t))!Te.call(e,i)&&i!==r&&L(e,i,{get:()=>t[i],enumerable:!(n=Oe(t,i))||n.enumerable});return e};var xe=e=>De(L({},"__esModule",{value:!0}),e);var mt={};ve(mt,{bringInitBackground:()=>fe,bringInitContentScript:()=>X,getPopupEnabled:()=>we,getTurnOff:()=>ge,setPopupEnabled:()=>Ee,setTurnOff:()=>he});module.exports=xe(mt);var Ie=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([i,s])=>{s&&(n&&(i=`${n}_${i}`),i==="url"?t.append(i,encodeURIComponent(s)):t.append(i,s))}),t.toString()},W=Ie;var j={name:"@bringweb3/chrome-extension-kit",version:"1.4.2",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 Se=()=>j.version,D=Se;var _e=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:s,switchWallet:m})=>{let l=chrome.runtime.id,c=`bringweb3-iframe-${l}`,u=document.getElementById(c),d=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:i;if(u)return u;let p=W({query:{...e,extensionId:l,v:D(),themeMode:r,textMode:n,switchWallet:String(m)}}),h=t?`&${W({query:t,prefix:"t"})}`:"",a=document.createElement("iframe");return a.id=c,a.src=`${d}?${p}${h}`,a.setAttribute("sandbox","allow-scripts allow-same-origin"),a.style.position="fixed",a.scrolling="no",a.style.overflow="hidden",a.style.width="1px",a.style.height="1px",a.style.right="8px",a.style.borderRadius="10px",a.style.border="none",a.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(a.style.boxShadow=t.popupShadow),document.documentElement.appendChild(a),a},V=_e;var Ue=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},Q=Ue;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:n,rules:i})=>{r.insertRule(`@keyframes ${n} { ${i} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},q=ke;var E={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"},Ne=[E.ACTIVATE],Le=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:n,action:i,style:s,keyFrames:m,time:l,extensionId:c,url:u,domain:d,redirectUrl:p}=e.data;if(n==="bringweb3"&&!(c!==chrome.runtime.id&&!Ne.includes(i)))switch(i){case E.OPEN:Q(t,s);break;case E.CLOSE:t&&t.parentNode?.removeChild(t),l&&chrome.runtime.sendMessage({action:i,time:l,domain:d,from:"bringweb3"});break;case E.PROMPT_LOGIN:r();break;case E.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3",domain:d,extensionId:c,time:l,redirectUrl:p});break;case E.OPT_OUT:chrome.runtime.sendMessage({action:i,time:l,from:"bringweb3"});break;case E.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:i,domain:d,time:l,from:"bringweb3"});break;case E.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:i,from:"bringweb3"});case E.ADD_KEYFRAMES:q(m);break;case E.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:i,url:u,from:"bringweb3"});break;default:break}},H=Le;var J=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})},We=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>J({iframeEl:n,getWalletAddress:r}));else if(e)for(let i=0;i<e.length;i++){let s=e[i];s&&window.addEventListener(s,async()=>J({iframeEl:n,getWalletAddress:r}))}},Y=We;var Me=e=>e.endsWith("/")?e.slice(0,-1):e,x=Me;var Re=["www.","www1.","www2."],Fe=e=>{for(let r of Re)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=x(t),t},b=Fe;var M=null,z=!1,Ke=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:i,darkTheme:s,theme:m,text:l,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");Y({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:M}),window.addEventListener("message",u=>H({event:u,iframeEl:M,promptLogin:t})),chrome.runtime.onMessage.addListener((u,d,p)=>{if(u?.from!=="bringweb3")return;let{action:h}=u;switch(h){case"GET_WALLET_ADDRESS":return e().then(a=>p({status:"success",walletAddress:a})).catch(a=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:a}=document,f=u.portalReferrers||[];if(b(location.href)!==b(u.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(z)return p({status:"failed",message:"iframe already open"}),!0;if(a&&f.includes(b(a)))return p({status:"failed",message:`already activated by ${b(a)}`,action:"activate"}),!0;let{token:A,iframeUrl:w,userId:v}=u,S={token:A};return v&&(S.userId=v),M=V({query:S,iframeUrl:w,theme:m==="dark"?s:i,themeMode:m||"light",text:l,switchWallet:c,page:u.page}),z=!0,p({status:"success"}),!0}catch(a){return a instanceof Error?p({status:"failed",message:a.message}):p({status:"failed",message:String(a)}),!0}default:console.error(`Unknown action: ${h}`);break}})}},X=Ke;var Z=e=>{e&&chrome.tabs.create({url:e})};var g=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 $e=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),Ge=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),Be=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),o={set:$e,get:Ge,remove:Be};var ee=require("uuid"),je=async()=>{let e=await o.get("id");return e||(e=(0,ee.v4)(),o.set("id",e)),e},O=je;var Ve=async e=>{let{path:t,method:r,params:n}=e;if(!e||!t||!r||!n&&r==="POST")throw new Error("Missing endpoint or method");let i=g.getInstance().getApiEndpoint();i+=t;let s=g.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...n,version:D(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await O()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});i+=`?${c.toString()}`}else r==="POST"&&(n={...n,version:D(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await O()||void 0,walletAddress:n?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(i,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(n):void 0})).json()},y=Ve;var Qe=async({body:e})=>await y({path:"/check/popup",method:"POST",params:e}),te=Qe;var qe=["www.","www1.","www2."],He=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of qe)e.startsWith(t)&&(e=e.replace(t,""));return e},re=He;var ie="quietDomains",Je=async(e,t)=>{let r=await o.get(ie);typeof r=="object"?r[e]=t:r={[e]:t},o.set(ie,r)},I=Je;var Ye=async({walletAddress:e,cashbackUrl:t,lastActivation:r})=>{let n={walletAddress:e};return r&&(n.lastActivation=r),t&&(n.cashbackUrl=t),await y({path:"/check/notification",method:"POST",params:n})},ne=Ye;var ze=(e,t)=>new Promise((i,s)=>{let m=l=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){i(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},u=>{chrome.runtime.lastError?l<4?setTimeout(()=>m(l+1),1e3*Math.pow(2,l)):i(null):i(u||null)})})};m(0)}),T=ze;var Xe=async e=>{let t=await o.get("walletAddress");try{if(!e){let n=await chrome.tabs.query({active:!0,currentWindow:!0});if(!n||!n[0]||!n[0].id)return t;e=n[0].id}let r=await T(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},_=Xe;var Ze=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},i=await o.get("notificationCheck");if(i&&Date.now()<i)return n;let s=t?await _(t):await o.get("walletAddress");if(!s)return n;let m=await o.get("lastActivation"),l=await ne({walletAddress:s,cashbackUrl:r,lastActivation:m});o.set("notificationCheck",l.nextCall);let c={showNotification:l.showNotification,token:l.token,iframeUrl:l.iframeUrl,expiration:l.expiration};return c.showNotification&&await o.set("notification",c),c},U=Ze;var et=e=>e?chrome.runtime.getURL(e):"",k=et;var tt=async e=>{let t=g.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=tt;var se=async()=>{try{let e=g.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 C=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),n=g.getInstance().getWhitelistEndpoint(),i=null;if(t?t.length?e?e<=Date.now()?i="cache expired":n&&!r?.length&&(i="missing whitelist data"):i="no domains timestamp check found":i="empty domains list":i="no domains in cache",!i)return t;let s=await oe(i),{nextUpdateTimestamp:m,relevantDomains:l}=s;return o.set("relevantDomains",l),o.set("relevantDomainsCheck",m),r=await se(),r&&o.set("redirectsWhitelist",r),l};var rt=async(e,t)=>{try{let r=g.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await C(),t=await o.get("redirectsWhitelist")),!t?.length)return!r;let i=new URL(e).hostname.toLowerCase();return i=i.replace("www.",""),t.includes(i)?!0:t.some(s=>{if(s.startsWith("*.")){let m=s.slice(2);return i.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",e),!1}},N=rt;var it=async(e,t,r,n,i,s,m)=>{if(t===chrome.runtime.id&&await o.set("lastActivation",Date.now()),e&&I(e,i||Date.now()+24*60*60*1e3),s&&m){let l=await o.get("redirectsWhitelist");await N(m,l)&&chrome.tabs.update(s,{url:m})}await U(r,void 0,k(n))},R=it;var ae=async e=>e<0?(await o.remove("optOut"),{isOptedOut:!1}):(await o.set("optOut",Date.now()+e),{isOptedOut:!0}),ce=async()=>{let e=await o.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var le=async(e,t,r)=>{await T(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await O(),domain:r})},nt=async(e,t,r,n,i,s)=>{let m=await o.get("notification");if(m?.expiration<Date.now())await o.remove("notification");else if(m)return await le(t,m,n);let l=await U(e,t,k(r));l.showNotification&&(i&&await le(t,l,n),s&&s())},me=nt;var ot=async e=>{e.category=e?.category||"system",await y({path:"/analytics",method:"POST",params:e})},de=ot;var ue="optOutDomains",st=async(e,t)=>{if(!e)return;let r=await o.get(ue);typeof r=="object"?r[e]=t:r={[e]:t},o.set(ue,r)},pe=st;var at=["www.","www1.","www2."],ct=async e=>{let t=await C();if(!e||!t||!t.length)return"";let r=null;try{r=new URL(e)}catch{r=new URL(`https://${e}`)}let n=r.hostname,i=x(r.pathname);for(let s of at)n=n.replace(s,"");for(let s of t){let m=s;s=x(s);let l=!1;s.startsWith("*.")&&(l=!0);let c="/"+s.split("/").slice(1).join("/")||"";if(c!=="/"&&i.startsWith(c)&&(n+=c),n===s||l&&n.endsWith(s.replace("*.",""))){let u=await o.get("quietDomains");return u&&u[s]&&Date.now()<u[s]&&u[s]<Date.now()+60*24*60*60*1e3?"":m}}return""},F={},lt=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:n,isEnabledByDefault:i=!0,showNotifications:s=!0,notificationCallback:m})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");g.getInstance().setApiEndpoint(t),g.getInstance().setWhitelistEndpoint(n||""),g.getInstance().setApiKey(e),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",i),C(),chrome.runtime.onMessage.addListener((c,u,d)=>{if(c?.from!=="bringweb3")return;let{action:p}=c;switch(p){case"ACTIVATE":{let{domain:a,extensionId:f,time:A,redirectUrl:w}=c;return R(a,f,e,r,A,u.tab?.id,w).then(()=>d()),!0}case"GET_OPT_OUT":return ce().then(a=>d(a)),!0;case"OPT_OUT":{let{time:a}=c;return ae(a).then(f=>d(f)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:f}=c;return pe(a,f).then(A=>d(A)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(a=>d({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=c;return o.set("popupEnabled",a).then(()=>{d({isPopupEnabled:a})}).catch(f=>{console.error("Error setting popup enabled:",f),d({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:f}=c;return f&&(I(f,a),d({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=c;return a?o.set("walletAddress",a).then(()=>d(a)):o.remove("walletAddress").then(()=>d({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>d({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:h}=c;return Z(h||r),d({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,d)=>{if(!d?.url?.startsWith("http")||!d.url)return;let p=re(d.url),h=await o.get("optOut");if(!await o.get("popupEnabled")||h&&h>Date.now())return;h&&(o.remove("optOut"),o.remove("optOutKey"));let f=await o.get("optOutDomains");if(f&&f[b(p)]&&f[b(p)]>Date.now())return;let A=F[c];if(u.status!=="complete"||p===A)return;F[c]=p;let w=await ct(d.url);if(!w||!w.length){await me(e,c,r,p,s,m);return}let v=await _(c),{token:S,isValid:K,iframeUrl:$,networkUrl:be,flowId:ye,portalReferrers:Ae,time:G=Date.now()+24*60*60*1e3}=await te({body:{domain:w,url:d.url,address:v}});if(!K){K===!1&&I(w,G);return}if(!await N(be,await o.get("redirectsWhitelist")))return;let B=await O(),P=await T(c,{action:"INJECT",token:S,domain:p,iframeUrl:$,userId:B,portalReferrers:Ae});if(P?.action)switch(P.action){case"activate":R(w,chrome.runtime.id,e,r,G,c);break;default:console.error(`Unknown action: ${P.action}`);break}P?.status!=="success"&&de({type:"no_popup",userId:B,walletAddress:v,details:{url:d.url,match:w,iframeUrl:$,reason:P?.message,status:P?.status},flowId:ye})}),chrome.tabs.onRemoved.addListener(c=>delete F[c])},fe=lt;var ge=()=>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})})}),he=e=>new Promise((t,r)=>{let n=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:n},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isTurnedOff:i.isOptedOut}):r("No response received")})});var we=()=>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)})}),Ee=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isPopupEnabled:n.isPopupEnabled}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getPopupEnabled,getTurnOff,setPopupEnabled,setTurnOff});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var fe=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([o,s])=>{s&&(n&&(o=`${n}_${o}`),o==="url"?t.append(o,encodeURIComponent(s)):t.append(o,s))}),t.toString()},N=fe;var $={name:"@bringweb3/chrome-extension-kit",version:"1.4.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 --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 he=()=>$.version,v=he;var we=({query:e,theme:t,themeMode:r,text:n,iframeUrl:o,page:s,switchWallet:l})=>{let m=chrome.runtime.id,c=`bringweb3-iframe-${m}`,d=document.getElementById(c),u=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:o;if(d)return d;let p=N({query:{...e,extensionId:m,v:v(),themeMode:r,textMode:n,switchWallet:String(l)}}),h=t?`&${N({query:t,prefix:"t"})}`:"",a=document.createElement("iframe");return a.id=c,a.src=`${u}?${p}${h}`,a.setAttribute("sandbox","allow-scripts allow-same-origin"),a.style.position="fixed",a.scrolling="no",a.style.overflow="hidden",a.style.width="1px",a.style.height="1px",a.style.right="8px",a.style.borderRadius="10px",a.style.border="none",a.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(a.style.boxShadow=t.popupShadow),document.documentElement.appendChild(a),a},G=we;var Ee=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},B=Ee;var be=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let r=t.sheet;r?e.forEach(({name:n,rules:o})=>{r.insertRule(`@keyframes ${n} { ${o} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},j=be;var E={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"},Ae=[E.ACTIVATE],ye=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:n,action:o,style:s,keyFrames:l,time:m,extensionId:c,url:d,domain:u,redirectUrl:p}=e.data;if(n==="bringweb3"&&!(c!==chrome.runtime.id&&!Ae.includes(o)))switch(o){case E.OPEN:B(t,s);break;case E.CLOSE:t&&t.parentNode?.removeChild(t),m&&chrome.runtime.sendMessage({action:o,time:m,domain:u,from:"bringweb3"});break;case E.PROMPT_LOGIN:r();break;case E.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",domain:u,extensionId:c,time:m,redirectUrl:p});break;case E.OPT_OUT:chrome.runtime.sendMessage({action:o,time:m,from:"bringweb3"});break;case E.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:o,domain:u,time:m,from:"bringweb3"});break;case E.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case E.ADD_KEYFRAMES:j(l);break;case E.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:o,url:d,from:"bringweb3"});break;default:break}},V=ye;var H=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})},Oe=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>H({iframeEl:n,getWalletAddress:r}));else if(e)for(let o=0;o<e.length;o++){let s=e[o];s&&window.addEventListener(s,async()=>H({iframeEl:n,getWalletAddress:r}))}},q=Oe;var Pe=e=>e.endsWith("/")?e.slice(0,-1):e,D=Pe;var Te=["www.","www1.","www2."],ve=e=>{for(let r of Te)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=D(t),t},O=ve;var L=null,Q=!1,De=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:o,darkTheme:s,theme:l,text:m,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");q({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:L}),window.addEventListener("message",d=>V({event:d,iframeEl:L,promptLogin:t})),chrome.runtime.onMessage.addListener((d,u,p)=>{if(d?.from!=="bringweb3")return;let{action:h}=d;switch(h){case"GET_WALLET_ADDRESS":return e().then(a=>p({status:"success",walletAddress:a})).catch(a=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{if(O(location.href)!==O(d.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(Q)return p({status:"failed",message:"iframe already open"}),!0;let{token:a,iframeUrl:g,userId:b}=d,w={token:a};return b&&(w.userId=b),L=G({query:w,iframeUrl:g,theme:l==="dark"?s:o,themeMode:l||"light",text:m,switchWallet:c,page:d.page}),Q=!0,p({status:"success"}),!0}catch(a){return a instanceof Error?p({status:"failed",message:a.message}):p({status:"failed",message:String(a)}),!0}default:console.error(`Unknown action: ${h}`);break}})}},xe=De;var J=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 Ie=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),Ce=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),_e=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),i={set:Ie,get:Ce,remove:_e};import{v4 as Se}from"uuid";var Ue=async()=>{let e=await i.get("id");return e||(e=Se(),i.set("id",e)),e},y=Ue;var ke=async e=>{let{path:t,method:r,params:n}=e;if(!e||!t||!r||!n&&r==="POST")throw new Error("Missing endpoint or method");let o=f.getInstance().getApiEndpoint();o+=t;let s=f.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...n,version:v(),timestamp:Date.now().toString(),opt_out:await i.get("optOut")||0,user_id:await y()||"undefined",wallet_address:await i.get("walletAddress")||"undefined"});o+=`?${c.toString()}`}else r==="POST"&&(n={...n,version:v(),timestamp:Date.now(),optOut:await i.get("optOut")||0,userId:await y()||void 0,walletAddress:n?.walletAddress||await i.get("walletAddress")||void 0});return await(await fetch(o,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(n):void 0})).json()},A=ke;var Ne=async({body:e})=>await A({path:"/check/popup",method:"POST",params:e}),Y=Ne;var Le=["www.","www1.","www2."],Me=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of Le)e.startsWith(t)&&(e=e.replace(t,""));return e},z=Me;var I="updateCache";var X="quietDomains",We=async(e,t)=>{let r=await i.get(X);typeof r=="object"?r[e]=t:r={[e]:t},i.set(X,r)},x=We;var Re=async({walletAddress:e,cashbackUrl:t,lastActivation:r})=>{let n={walletAddress:e};return r&&(n.lastActivation=r),t&&(n.cashbackUrl=t),await A({path:"/check/notification",method:"POST",params:n})},Z=Re;var Fe=(e,t)=>new Promise((o,s)=>{let l=m=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){o(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?m<4?setTimeout(()=>l(m+1),1e3*Math.pow(2,m)):o(null):o(d||null)})})};l(0)}),P=Fe;var Ke=async e=>{let t=await i.get("walletAddress");try{if(!e){let n=await chrome.tabs.query({active:!0,currentWindow:!0});if(!n||!n[0]||!n[0].id)return t;e=n[0].id}let r=await P(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await i.set("walletAddress",t))}catch{}return t},C=Ke;var $e=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},o=await i.get("notificationCheck");if(o&&Date.now()<o)return n;let s=t?await C(t):await i.get("walletAddress");if(!s)return n;let l=await i.get("lastActivation"),m=await Z({walletAddress:s,cashbackUrl:r,lastActivation:l});i.set("notificationCheck",m.nextCall);let c={showNotification:m.showNotification,token:m.token,iframeUrl:m.iframeUrl,expiration:m.expiration};return c.showNotification&&await i.set("notification",c),c},_=$e;var Ge=e=>e?chrome.runtime.getURL(e):"",S=Ge;var Be=async()=>{let e=f.getInstance().getWhitelistEndpoint(),t={path:"/domains",method:"GET"};return e&&(t.params={whitelist:encodeURIComponent(e)}),await A(t)},ee=Be;var te=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 je=e=>{let t=Date.now();return(e-t)/1e3/60},T=async()=>{let e=await i.get("relevantDomainsCheck"),t=await i.get("relevantDomains"),r=await i.get("redirectsWhitelist"),n=f.getInstance().getApiKey(),o=f.getInstance().getWhitelistEndpoint();if(t?.length&&e&&e>Date.now()&&(!o||o&&r?.length))return t;let s=await ee(),{nextUpdateTimestamp:l,relevantDomains:m}=s;i.set("relevantDomains",m),i.set("relevantDomainsCheck",l),r=await te(),r&&i.set("redirectsWhitelist",r);let c=je(l);return chrome.alarms.create(I,{delayInMinutes:c||60*24*2}),m};var Ve=async(e,t)=>{try{let r=f.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await T(),t=await i.get("redirectsWhitelist")),!t?.length)return!r;let o=new URL(e).hostname.toLowerCase();return o=o.replace("www.",""),t.includes(o)?!0:t.some(s=>{if(s.startsWith("*.")){let l=s.slice(2);return o.endsWith(l)}return!1})}catch{return console.error("Invalid URL:",e),!1}},U=Ve;var He=async(e,t,r,n,o,s,l)=>{if(t===chrome.runtime.id&&await i.set("lastActivation",Date.now()),e&&x(e,o||Date.now()+24*60*60*1e3),s&&l){let m=await i.get("redirectsWhitelist");await U(l,m)&&chrome.tabs.update(s,{url:l})}await _(r,void 0,S(n))},re=He;var ne=async e=>e<0?(await i.remove("optOut"),{isOptedOut:!1}):(await i.set("optOut",Date.now()+e),{isOptedOut:!0}),ie=async()=>{let e=await i.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var oe=async(e,t,r)=>{await P(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await y(),domain:r})},qe=async(e,t,r,n,o,s)=>{let l=await i.get("notification");if(l?.expiration<Date.now())await i.remove("notification");else if(l)return await oe(t,l,n);let m=await _(e,t,S(r));m.showNotification&&(o&&await oe(t,m,n),s&&s())},se=qe;var Qe=async e=>{e.category=e?.category||"system",await A({path:"/analytics",method:"POST",params:e})},ae=Qe;var ce="optOutDomains",Je=async(e,t)=>{if(!e)return;let r=await i.get(ce);typeof r=="object"?r[e]=t:r={[e]:t},i.set(ce,r)},me=Je;var Ye=["www.","www1.","www2."],ze=async e=>{let t=await T();if(!e||!t||!t.length)return"";let r=null;try{r=new URL(e)}catch{r=new URL(`https://${e}`)}let n=r.hostname,o=D(r.pathname);for(let s of Ye)n=n.replace(s,"");for(let s of t){let l=s;s=D(s);let m=!1;s.startsWith("*.")&&(m=!0);let c="/"+s.split("/").slice(1).join("/")||"";if(c!=="/"&&o.startsWith(c)&&(n+=c),n===s||m&&n.endsWith(s.replace("*.",""))){let d=await i.get("quietDomains");return d&&d[s]&&Date.now()<d[s]&&d[s]<Date.now()+60*24*60*60*1e3?"":l}}return""},M={},Xe=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:n,isEnabledByDefault:o=!0,showNotifications:s=!0,notificationCallback:l})=>{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(n||""),f.getInstance().setApiKey(e),await i.get("popupEnabled")===void 0&&await i.set("popupEnabled",o),T(),chrome.alarms.onAlarm.addListener(async c=>{let{name:d}=c;switch(d){case I:T();break;default:console.error("alarm with no use case:",d);break}}),chrome.runtime.onMessage.addListener((c,d,u)=>{if(c?.from!=="bringweb3")return;let{action:p}=c;switch(p){case"ACTIVATE":{let{domain:a,extensionId:g,time:b,redirectUrl:w}=c;return re(a,g,e,r,b,d.tab?.id,w).then(()=>u()),!0}case"GET_OPT_OUT":return ie().then(a=>u(a)),!0;case"OPT_OUT":{let{time:a}=c;return ne(a).then(g=>u(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:g}=c;return me(a,g).then(b=>u(b)),!0}case"GET_POPUP_ENABLED":return i.get("popupEnabled").then(a=>u({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=c;return i.set("popupEnabled",a).then(()=>{u({isPopupEnabled:a})}).catch(g=>{console.error("Error setting popup enabled:",g),u({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:g}=c;return g&&(x(g,a),u({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=c;return a?i.set("walletAddress",a).then(()=>u(a)):i.remove("walletAddress").then(()=>u({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return i.remove("notification").then(()=>u({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:h}=c;return J(h||r),u({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,d,u)=>{if(!u?.url?.startsWith("http")||!u.url)return;let p=z(u.url),h=await i.get("optOut");if(!await i.get("popupEnabled")||h&&h>Date.now())return;h&&(i.remove("optOut"),i.remove("optOutKey"));let g=await i.get("optOutDomains");if(g&&g[O(p)]&&g[O(p)]>Date.now())return;let b=M[c];if(d.status!=="complete"||p===b)return;M[c]=p;let w=await ze(u.url);if(!w||!w.length){await se(e,c,r,p,s,l);return}let W=await C(c),{token:le,isValid:R,iframeUrl:F,networkUrl:de,flowId:ue,time:pe=Date.now()+24*60*60*1e3}=await Y({body:{domain:w,url:u.url,address:W}});if(!R){R===!1&&x(w,pe);return}if(!await U(de,await i.get("redirectsWhitelist")))return;let K=await y(),k=await P(c,{action:"INJECT",token:le,domain:p,iframeUrl:F,userId:K});k?.status!=="success"&&ae({type:"no_popup",userId:K,walletAddress:W,details:{url:u.url,match:w,iframeUrl:F,reason:k?.message,status:k?.status},flowId:ue})}),chrome.tabs.onRemoved.addListener(c=>delete M[c])},Ze=Xe;var et=()=>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})})}),tt=e=>new Promise((t,r)=>{let n=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:n},o=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}o?t({isTurnedOff:o.isOptedOut}):r("No response received")})});var rt=()=>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)})}),nt=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isPopupEnabled:n.isPopupEnabled}):r("No response received")})});export{Ze as bringInitBackground,xe as bringInitContentScript,rt as getPopupEnabled,et as getTurnOff,nt as setPopupEnabled,tt as setTurnOff};
|
|
1
|
+
var fe=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,s])=>{s&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(s)):t.append(n,s))}),t.toString()},L=fe;var B={name:"@bringweb3/chrome-extension-kit",version:"1.4.2",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 he=()=>B.version,D=he;var we=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:s,switchWallet:m})=>{let l=chrome.runtime.id,c=`bringweb3-iframe-${l}`,u=document.getElementById(c),d=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:n;if(u)return u;let p=L({query:{...e,extensionId:l,v:D(),themeMode:r,textMode:i,switchWallet:String(m)}}),h=t?`&${L({query:t,prefix:"t"})}`:"",a=document.createElement("iframe");return a.id=c,a.src=`${d}?${p}${h}`,a.setAttribute("sandbox","allow-scripts allow-same-origin"),a.style.position="fixed",a.scrolling="no",a.style.overflow="hidden",a.style.width="1px",a.style.height="1px",a.style.right="8px",a.style.borderRadius="10px",a.style.border="none",a.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(a.style.boxShadow=t.popupShadow),document.documentElement.appendChild(a),a},j=we;var Ee=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},V=Ee;var be=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")},Q=be;var E={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"},ye=[E.ACTIVATE],Ae=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:s,keyFrames:m,time:l,extensionId:c,url:u,domain:d,redirectUrl:p}=e.data;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!ye.includes(n)))switch(n){case E.OPEN:V(t,s);break;case E.CLOSE:t&&t.parentNode?.removeChild(t),l&&chrome.runtime.sendMessage({action:n,time:l,domain:d,from:"bringweb3"});break;case E.PROMPT_LOGIN:r();break;case E.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:d,extensionId:c,time:l,redirectUrl:p});break;case E.OPT_OUT:chrome.runtime.sendMessage({action:n,time:l,from:"bringweb3"});break;case E.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:d,time:l,from:"bringweb3"});break;case E.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case E.ADD_KEYFRAMES:Q(m);break;case E.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:u,from:"bringweb3"});break;default:break}},q=Ae;var H=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})},Oe=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>H({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let s=e[n];s&&window.addEventListener(s,async()=>H({iframeEl:i,getWalletAddress:r}))}},J=Oe;var Pe=e=>e.endsWith("/")?e.slice(0,-1):e,x=Pe;var Te=["www.","www1.","www2."],ve=e=>{for(let r of Te)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=x(t),t},b=ve;var W=null,Y=!1,De=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:s,theme:m,text:l,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");J({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:W}),window.addEventListener("message",u=>q({event:u,iframeEl:W,promptLogin:t})),chrome.runtime.onMessage.addListener((u,d,p)=>{if(u?.from!=="bringweb3")return;let{action:h}=u;switch(h){case"GET_WALLET_ADDRESS":return e().then(a=>p({status:"success",walletAddress:a})).catch(a=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:a}=document,f=u.portalReferrers||[];if(b(location.href)!==b(u.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(Y)return p({status:"failed",message:"iframe already open"}),!0;if(a&&f.includes(b(a)))return p({status:"failed",message:`already activated by ${b(a)}`,action:"activate"}),!0;let{token:A,iframeUrl:w,userId:v}=u,S={token:A};return v&&(S.userId=v),W=j({query:S,iframeUrl:w,theme:m==="dark"?s:n,themeMode:m||"light",text:l,switchWallet:c,page:u.page}),Y=!0,p({status:"success"}),!0}catch(a){return a instanceof Error?p({status:"failed",message:a.message}):p({status:"failed",message:String(a)}),!0}default:console.error(`Unknown action: ${h}`);break}})}},xe=De;var z=e=>{e&&chrome.tabs.create({url:e})};var g=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 Ie=async(e,t)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Ce=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(i[`bring_${e}`])})}),Se=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),o={set:Ie,get:Ce,remove:Se};import{v4 as _e}from"uuid";var Ue=async()=>{let e=await o.get("id");return e||(e=_e(),o.set("id",e)),e},O=Ue;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=g.getInstance().getApiEndpoint();n+=t;let s=g.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...i,version:D(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await O()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${c.toString()}`}else r==="POST"&&(i={...i,version:D(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await O()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(i):void 0})).json()},y=ke;var Ne=async({body:e})=>await y({path:"/check/popup",method:"POST",params:e}),X=Ne;var Le=["www.","www1.","www2."],We=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of Le)e.startsWith(t)&&(e=e.replace(t,""));return e},Z=We;var ee="quietDomains",Me=async(e,t)=>{let r=await o.get(ee);typeof r=="object"?r[e]=t:r={[e]:t},o.set(ee,r)},I=Me;var Re=async({walletAddress:e,cashbackUrl:t,lastActivation:r})=>{let i={walletAddress:e};return r&&(i.lastActivation=r),t&&(i.cashbackUrl=t),await y({path:"/check/notification",method:"POST",params:i})},te=Re;var Fe=(e,t)=>new Promise((n,s)=>{let m=l=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},u=>{chrome.runtime.lastError?l<4?setTimeout(()=>m(l+1),1e3*Math.pow(2,l)):n(null):n(u||null)})})};m(0)}),T=Fe;var Ke=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 T(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},_=Ke;var $e=async(e,t,r)=>{let i={showNotification:!1,token:"",iframeUrl:""},n=await o.get("notificationCheck");if(n&&Date.now()<n)return i;let s=t?await _(t):await o.get("walletAddress");if(!s)return i;let m=await o.get("lastActivation"),l=await te({walletAddress:s,cashbackUrl:r,lastActivation:m});o.set("notificationCheck",l.nextCall);let c={showNotification:l.showNotification,token:l.token,iframeUrl:l.iframeUrl,expiration:l.expiration};return c.showNotification&&await o.set("notification",c),c},U=$e;var Ge=e=>e?chrome.runtime.getURL(e):"",k=Ge;var Be=async e=>{let t=g.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},t&&(r.params.whitelist=encodeURIComponent(t)),e&&(r.params.trigger=e),await y(r)},re=Be;var ie=async()=>{try{let e=g.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 C=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=g.getInstance().getWhitelistEndpoint(),n=null;if(t?t.length?e?e<=Date.now()?n="cache expired":i&&!r?.length&&(n="missing whitelist data"):n="no domains timestamp check found":n="empty domains list":n="no domains in cache",!n)return t;let s=await re(n),{nextUpdateTimestamp:m,relevantDomains:l}=s;return o.set("relevantDomains",l),o.set("relevantDomainsCheck",m),r=await ie(),r&&o.set("redirectsWhitelist",r),l};var je=async(e,t)=>{try{let r=g.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await C(),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(s=>{if(s.startsWith("*.")){let m=s.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",e),!1}},N=je;var Ve=async(e,t,r,i,n,s,m)=>{if(t===chrome.runtime.id&&await o.set("lastActivation",Date.now()),e&&I(e,n||Date.now()+24*60*60*1e3),s&&m){let l=await o.get("redirectsWhitelist");await N(m,l)&&chrome.tabs.update(s,{url:m})}await U(r,void 0,k(i))},M=Ve;var ne=async e=>e<0?(await o.remove("optOut"),{isOptedOut:!1}):(await o.set("optOut",Date.now()+e),{isOptedOut:!0}),oe=async()=>{let e=await o.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var se=async(e,t,r)=>{await T(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await O(),domain:r})},Qe=async(e,t,r,i,n,s)=>{let m=await o.get("notification");if(m?.expiration<Date.now())await o.remove("notification");else if(m)return await se(t,m,i);let l=await U(e,t,k(r));l.showNotification&&(n&&await se(t,l,i),s&&s())},ae=Qe;var qe=async e=>{e.category=e?.category||"system",await y({path:"/analytics",method:"POST",params:e})},ce=qe;var le="optOutDomains",He=async(e,t)=>{if(!e)return;let r=await o.get(le);typeof r=="object"?r[e]=t:r={[e]:t},o.set(le,r)},me=He;var Je=["www.","www1.","www2."],Ye=async e=>{let t=await C();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=x(r.pathname);for(let s of Je)i=i.replace(s,"");for(let s of t){let m=s;s=x(s);let l=!1;s.startsWith("*.")&&(l=!0);let c="/"+s.split("/").slice(1).join("/")||"";if(c!=="/"&&n.startsWith(c)&&(i+=c),i===s||l&&i.endsWith(s.replace("*.",""))){let u=await o.get("quietDomains");return u&&u[s]&&Date.now()<u[s]&&u[s]<Date.now()+60*24*60*60*1e3?"":m}}return""},R={},ze=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:s=!0,notificationCallback:m})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");g.getInstance().setApiEndpoint(t),g.getInstance().setWhitelistEndpoint(i||""),g.getInstance().setApiKey(e),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),C(),chrome.runtime.onMessage.addListener((c,u,d)=>{if(c?.from!=="bringweb3")return;let{action:p}=c;switch(p){case"ACTIVATE":{let{domain:a,extensionId:f,time:A,redirectUrl:w}=c;return M(a,f,e,r,A,u.tab?.id,w).then(()=>d()),!0}case"GET_OPT_OUT":return oe().then(a=>d(a)),!0;case"OPT_OUT":{let{time:a}=c;return ne(a).then(f=>d(f)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:f}=c;return me(a,f).then(A=>d(A)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(a=>d({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=c;return o.set("popupEnabled",a).then(()=>{d({isPopupEnabled:a})}).catch(f=>{console.error("Error setting popup enabled:",f),d({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:f}=c;return f&&(I(f,a),d({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=c;return a?o.set("walletAddress",a).then(()=>d(a)):o.remove("walletAddress").then(()=>d({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>d({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:h}=c;return z(h||r),d({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,d)=>{if(!d?.url?.startsWith("http")||!d.url)return;let p=Z(d.url),h=await o.get("optOut");if(!await o.get("popupEnabled")||h&&h>Date.now())return;h&&(o.remove("optOut"),o.remove("optOutKey"));let f=await o.get("optOutDomains");if(f&&f[b(p)]&&f[b(p)]>Date.now())return;let A=R[c];if(u.status!=="complete"||p===A)return;R[c]=p;let w=await Ye(d.url);if(!w||!w.length){await ae(e,c,r,p,s,m);return}let v=await _(c),{token:S,isValid:F,iframeUrl:K,networkUrl:de,flowId:ue,portalReferrers:pe,time:$=Date.now()+24*60*60*1e3}=await X({body:{domain:w,url:d.url,address:v}});if(!F){F===!1&&I(w,$);return}if(!await N(de,await o.get("redirectsWhitelist")))return;let G=await O(),P=await T(c,{action:"INJECT",token:S,domain:p,iframeUrl:K,userId:G,portalReferrers:pe});if(P?.action)switch(P.action){case"activate":M(w,chrome.runtime.id,e,r,$,c);break;default:console.error(`Unknown action: ${P.action}`);break}P?.status!=="success"&&ce({type:"no_popup",userId:G,walletAddress:v,details:{url:d.url,match:w,iframeUrl:K,reason:P?.message,status:P?.status},flowId:ue})}),chrome.tabs.onRemoved.addListener(c=>delete R[c])},Xe=ze;var Ze=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e({isTurnedOff:r.isOptedOut})})}),et=e=>new Promise((t,r)=>{let i=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isTurnedOff:n.isOptedOut}):r("No response received")})});var tt=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e(r)})}),rt=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});export{Xe as bringInitBackground,xe as bringInitContentScript,tt as getPopupEnabled,Ze as getTurnOff,rt as setPopupEnabled,et as setTurnOff};
|