@bringweb3/chrome-extension-kit 1.2.2 → 1.2.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/README.md +15 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
- [Example](#example)
|
|
17
17
|
- [background.js](#backgroundjs)
|
|
18
18
|
- [contentScript.js](#contentscriptjs)
|
|
19
|
+
- [Turnoff settings](#turnoff-settings)
|
|
19
20
|
- [Contact us](#contact-us)
|
|
20
21
|
|
|
21
22
|
## Description
|
|
@@ -120,6 +121,7 @@ bringInitContentScript({
|
|
|
120
121
|
promptLogin: () => {...}, // Function that prompts a UI element asking the user to login
|
|
121
122
|
walletAddressListeners: ["customEvent:addressChanged"], // An optional list of custom events that dispatched when the user's wallet address had changed, don't add it if you are using walletAddressUpdateCallback
|
|
122
123
|
walletAddressUpdateCallback: (callback)=>{...}, //an optional function that runs when the user's wallet address had changed and execute the callback, don't add it if you are using walletAddressUpdateCallback
|
|
124
|
+
switchWallet: true // Add switch wallet button, this requires also a UI for changing wallet address.
|
|
123
125
|
themeMode: 'light' // 'light' | 'dark',
|
|
124
126
|
text:'lower' // 'lower' | 'upper'
|
|
125
127
|
darkTheme: {...}, // Same as lightTheme
|
|
@@ -219,6 +221,19 @@ bringInitContentScript({
|
|
|
219
221
|
}
|
|
220
222
|
});
|
|
221
223
|
```
|
|
224
|
+
### Turnoff settings
|
|
225
|
+
```javascript
|
|
226
|
+
import { getTurnOff, setTurnOff } from "@bringweb3/chrome-extension-kit";
|
|
227
|
+
|
|
228
|
+
// Get state example
|
|
229
|
+
const current = await getTurnOff()
|
|
230
|
+
console.log(current) // true | false
|
|
231
|
+
|
|
232
|
+
// Set state example
|
|
233
|
+
const res = await setTurnOff(true)
|
|
234
|
+
console.log(res) // true
|
|
235
|
+
```
|
|
236
|
+
|
|
222
237
|
|
|
223
238
|
## Contact us
|
|
224
239
|
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var D=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ie=Object.prototype.hasOwnProperty;var se=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},ae=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of oe(t))!ie.call(e,o)&&o!==r&&D(e,o,{get:()=>t[o],enumerable:!(n=ne(t,o))||n.enumerable});return e};var ce=e=>ae(D({},"__esModule",{value:!0}),e);var Re={};se(Re,{bringInitBackground:()=>ee,bringInitContentScript:()=>G,getTurnOff:()=>te,setTurnOff:()=>re});module.exports=ce(Re);var me=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([o,i])=>{i&&(n&&(o=`${n}_${o}`),o==="url"?t.append(o,encodeURIComponent(i)):t.append(o,i))}),t.toString()},I=me;var U={name:"@bringweb3/chrome-extension-kit",version:"1.2.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"]};var le=()=>U.version,L=le;var ue=({query:e,theme:t,themeMode:r,text:n,iframeUrl:o,page:i,switchWallet:m})=>{let a=chrome.runtime.id,c=`bringweb3-iframe-${a}`,d=document.getElementById(c),h=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${i?"/"+i:""}`:o;if(d)return d;let f=I({query:{...e,extensionId:a,v:L(),themeMode:r,textMode:n,switchWallet:String(m)}}),g=t?`&${I({query:t,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=c,l.src=`${h}?${f}${g}`,l.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),l.style.position="fixed",l.scrolling="no",l.style.overflow="hidden",l.style.width="1px",l.style.height="1px",l.style.right="8px",l.style.borderRadius="10px",l.style.border="none",l.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(l.style.boxShadow=t.popupShadow),document.documentElement.appendChild(l),l},R=ue;var fe=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},W=fe;var pe=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")},F=pe;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION"},ge=[p.ACTIVATE],we=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:o,action:i,style:m,keyFrames:a,time:c,extensionId:d,url:h}=n;if(o==="bringweb3"&&!(d!==chrome.runtime.id&&!ge.includes(i)))switch(i){case p.OPEN:W(t,m);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),c&&chrome.runtime.sendMessage({action:i,time:c,from:"bringweb3"});break;case p.PROMPT_LOGIN:r();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3",url:h,extensionId:d});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:i,time:c,from:"bringweb3"});break;case p.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:i,from:"bringweb3"});case p.ADD_KEYFRAMES:F(a);break;default:break}},$=we;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})},he=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>j({iframeEl:n,getWalletAddress:r}));else if(e)for(let o=0;o<e.length;o++){let i=e[o];i&&window.addEventListener(i,async()=>j({iframeEl:n,getWalletAddress:r}))}},K=he;var Ee=["www.","www1.","www2."],Ae=e=>{if(!e)return"";let t=new URL(e).host;for(let r of Ee)t.startsWith(r)&&(t=t.replace(r,""));return t},w=Ae;var P=null,V=!1,ye=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:o,darkTheme:i,theme:m,text:a,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");K({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:P}),window.addEventListener("message",d=>$({event:d,iframeEl:P,promptLogin:t})),chrome.runtime.onMessage.addListener((d,h,f)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(N=>f({status:"success",walletAddress:N})).catch(N=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==w(location.href)||V)return f({status:"Domain already changed"}),!0;let{token:l,iframeUrl:b,userId:x}=d;console.log({token:l,iframeUrl:b,userId:x});let _={token:l};return x&&(_.userId=x),P=R({query:_,iframeUrl:b,theme:m==="dark"?i:o,themeMode:m||"light",text:a,switchWallet:c,page:d.page}),V=!0,f({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},G=ye;var u=class e{static instance=null;apiEndpoint="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}};var be=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},Q=be;var Oe=async({apiKey:e,body:t})=>{let r=u.getInstance().getApiEndpoint();return await(await fetch(`${r}/check/popup`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(t)})).json()},B=Oe;var k="updateCache";var Te=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),ve=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),xe=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:Te,get:ve,remove:xe};var J=30*60*1e3,De=async(e,t)=>{e=w(e),t||(t=J);let r=await s.get("quietDomains");typeof r=="object"?r[e]=Date.now()+t:r={[e]:Date.now()+J},s.set("quietDomains",r)},y=De;var Ie=async({apiKey:e,walletAddress:t,cashbackUrl:r,lastActivation:n})=>{let o=u.getInstance().getApiEndpoint(),i={walletAddress:t};return n&&(i.lastActivation=n),r&&(i.cashbackUrl=r),await(await fetch(`${o}/check/notification`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(i)})).json()},q=Ie;var Pe=(e,t)=>new Promise((o,i)=>{let m=a=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){i(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?a<4?setTimeout(()=>m(a+1),1e3*Math.pow(2,a)):i(new Error(chrome.runtime.lastError.message)):o(d)})})};m(0)}),E=Pe;var ke=async e=>{let t=await s.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 E(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await s.set("walletAddress",t))}catch{}return t},A=ke;var Ce=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},o=await s.get("notificationCheck");if(o&&Date.now()<o)return n;let i=t?await A(t):await s.get("walletAddress");if(!i)return n;let m=await s.get("lastActivation"),a=await q({apiKey:e,walletAddress:i,cashbackUrl:r,lastActivation:m});s.set("notificationCheck",a.nextCall);let c={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:a.expiration};return c.showNotification&&await s.set("notification",c),c},O=Ce;var Se=e=>e?chrome.runtime.getURL(e):void 0,T=Se;var Me=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&y(e),await O(r,void 0,T(n))},H=Me;var Y=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),z=async()=>{let e=await s.get("optOut");return console.log({isOptedOut:!!(e&&e>Date.now())}),{isOptedOut:!!(e&&e>Date.now())}};var _e=async()=>{let e=await s.get("id");return!await A()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},v=_e;var X=async(e,t,r)=>{await E(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await v(),domain:r})},Ne=async(e,t,r,n)=>{let o=await s.get("notification");if(o?.expiration<Date.now())await s.remove("notification");else if(o)return await X(t,o,n);let i=await O(e,t,T(r));if(i.showNotification)return await X(t,i,n)},C=Ne;var Ue=e=>{let t=Date.now();return(e-t)/1e3/60},M=async e=>{let t=await Q(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=Ue(r);return chrome.alarms.create(k,{delayInMinutes:n||60*24*2}),t.relevantDomains},Z=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await M(t)),!e||!r||!r.length)return"";let n=w(e);for(let o of r)if(n.startsWith(o)){let i=await s.get("quietDomains");return i&&i[o]&&Date.now()<i[o]?"":o}return""},S={},Le=async({identifier:e,apiEndpoint:t,cashbackPagePath:r})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),M(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:o}=n;switch(o){case k:M(e);break;default:console.error("alarm with no use case:",o);break}}),chrome.runtime.onMessage.addListener((n,o,i)=>{if(n?.from!=="bringweb3")return;let{action:m}=n;switch(m){case"ACTIVATE":{let{url:a,extensionId:c}=n;return H(a,c,e,r).then(()=>i()),!0}case"GET_OPT_OUT":return z().then(a=>i(a)),!0;case"OPT_OUT":{let{time:a}=n;return Y(a).then(c=>i(c)),!0}case"CLOSE":{let{time:a}=n;return Z(o.tab?.url||o.origin,e).then(c=>{if(!c)return!0;y(c,a),i({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>i(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>i()),i({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${m}`),!0}}),chrome.tabs.onUpdated.addListener(async(n,o,i)=>{if(!i?.url?.startsWith("http")||!i.url)return;let m=w(i.url),a=await s.get("optOut");if(a&&a>Date.now()){await C(e,n,r,m);return}else a&&(s.remove("optOut"),s.remove("optOutKey"));let c=S[n];if(o.status!=="complete"||m===c)return;S[n]=m;let d=await Z(i.url,e);if(!d||!d.length){await C(e,n,r,m);return}let h=await A(n),{token:f,isValid:g,iframeUrl:l}=await B({apiKey:e,body:{domain:d,url:i.url,address:h}});if(!g){g===!1&&y(d);return}let b=await v();E(n,{action:"INJECT",token:f,domain:m,iframeUrl:l,userId:b})}),chrome.tabs.onRemoved.addListener(n=>delete S[n])},ee=Le;var te=()=>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}console.log({response:r}),e({isTurnedOff:r.isOptedOut})})}),re=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")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getTurnOff,setTurnOff});
|
|
1
|
+
"use strict";var D=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ie=Object.prototype.hasOwnProperty;var se=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},ae=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of oe(t))!ie.call(e,o)&&o!==r&&D(e,o,{get:()=>t[o],enumerable:!(n=ne(t,o))||n.enumerable});return e};var ce=e=>ae(D({},"__esModule",{value:!0}),e);var Re={};se(Re,{bringInitBackground:()=>ee,bringInitContentScript:()=>G,getTurnOff:()=>te,setTurnOff:()=>re});module.exports=ce(Re);var me=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([o,i])=>{i&&(n&&(o=`${n}_${o}`),o==="url"?t.append(o,encodeURIComponent(i)):t.append(o,i))}),t.toString()},I=me;var U={name:"@bringweb3/chrome-extension-kit",version:"1.2.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"]};var le=()=>U.version,L=le;var ue=({query:e,theme:t,themeMode:r,text:n,iframeUrl:o,page:i,switchWallet:m})=>{let a=chrome.runtime.id,c=`bringweb3-iframe-${a}`,d=document.getElementById(c),h=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${i?"/"+i:""}`:o;if(d)return d;let f=I({query:{...e,extensionId:a,v:L(),themeMode:r,textMode:n,switchWallet:String(m)}}),g=t?`&${I({query:t,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=c,l.src=`${h}?${f}${g}`,l.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),l.style.position="fixed",l.scrolling="no",l.style.overflow="hidden",l.style.width="1px",l.style.height="1px",l.style.right="8px",l.style.borderRadius="10px",l.style.border="none",l.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(l.style.boxShadow=t.popupShadow),document.documentElement.appendChild(l),l},R=ue;var fe=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},W=fe;var pe=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")},F=pe;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION"},ge=[p.ACTIVATE],we=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:o,action:i,style:m,keyFrames:a,time:c,extensionId:d,url:h}=n;if(o==="bringweb3"&&!(d!==chrome.runtime.id&&!ge.includes(i)))switch(i){case p.OPEN:W(t,m);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),c&&chrome.runtime.sendMessage({action:i,time:c,from:"bringweb3"});break;case p.PROMPT_LOGIN:r();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3",url:h,extensionId:d});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:i,time:c,from:"bringweb3"});break;case p.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:i,from:"bringweb3"});case p.ADD_KEYFRAMES:F(a);break;default:break}},$=we;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})},he=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>j({iframeEl:n,getWalletAddress:r}));else if(e)for(let o=0;o<e.length;o++){let i=e[o];i&&window.addEventListener(i,async()=>j({iframeEl:n,getWalletAddress:r}))}},K=he;var Ee=["www.","www1.","www2."],Ae=e=>{if(!e)return"";let t=new URL(e).host;for(let r of Ee)t.startsWith(r)&&(t=t.replace(r,""));return t},w=Ae;var P=null,V=!1,ye=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:o,darkTheme:i,theme:m,text:a,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");K({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:P}),window.addEventListener("message",d=>$({event:d,iframeEl:P,promptLogin:t})),chrome.runtime.onMessage.addListener((d,h,f)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(N=>f({status:"success",walletAddress:N})).catch(N=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==w(location.href)||V)return f({status:"Domain already changed"}),!0;let{token:l,iframeUrl:b,userId:x}=d;console.log({token:l,iframeUrl:b,userId:x});let _={token:l};return x&&(_.userId=x),P=R({query:_,iframeUrl:b,theme:m==="dark"?i:o,themeMode:m||"light",text:a,switchWallet:c,page:d.page}),V=!0,f({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},G=ye;var u=class e{static instance=null;apiEndpoint="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}};var be=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},Q=be;var Oe=async({apiKey:e,body:t})=>{let r=u.getInstance().getApiEndpoint();return await(await fetch(`${r}/check/popup`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(t)})).json()},B=Oe;var k="updateCache";var Te=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),ve=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),xe=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:Te,get:ve,remove:xe};var J=30*60*1e3,De=async(e,t)=>{e=w(e),t||(t=J);let r=await s.get("quietDomains");typeof r=="object"?r[e]=Date.now()+t:r={[e]:Date.now()+J},s.set("quietDomains",r)},y=De;var Ie=async({apiKey:e,walletAddress:t,cashbackUrl:r,lastActivation:n})=>{let o=u.getInstance().getApiEndpoint(),i={walletAddress:t};return n&&(i.lastActivation=n),r&&(i.cashbackUrl=r),await(await fetch(`${o}/check/notification`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(i)})).json()},q=Ie;var Pe=(e,t)=>new Promise((o,i)=>{let m=a=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){i(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?a<4?setTimeout(()=>m(a+1),1e3*Math.pow(2,a)):i(new Error(chrome.runtime.lastError.message)):o(d)})})};m(0)}),E=Pe;var ke=async e=>{let t=await s.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 E(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await s.set("walletAddress",t))}catch{}return t},A=ke;var Ce=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},o=await s.get("notificationCheck");if(o&&Date.now()<o)return n;let i=t?await A(t):await s.get("walletAddress");if(!i)return n;let m=await s.get("lastActivation"),a=await q({apiKey:e,walletAddress:i,cashbackUrl:r,lastActivation:m});s.set("notificationCheck",a.nextCall);let c={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:a.expiration};return c.showNotification&&await s.set("notification",c),c},O=Ce;var Se=e=>e?chrome.runtime.getURL(e):void 0,T=Se;var Me=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&y(e),await O(r,void 0,T(n))},H=Me;var Y=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),z=async()=>{let e=await s.get("optOut");return console.log({isOptedOut:!!(e&&e>Date.now())}),{isOptedOut:!!(e&&e>Date.now())}};var _e=async()=>{let e=await s.get("id");return!await A()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},v=_e;var X=async(e,t,r)=>{await E(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await v(),domain:r})},Ne=async(e,t,r,n)=>{let o=await s.get("notification");if(o?.expiration<Date.now())await s.remove("notification");else if(o)return await X(t,o,n);let i=await O(e,t,T(r));if(i.showNotification)return await X(t,i,n)},C=Ne;var Ue=e=>{let t=Date.now();return(e-t)/1e3/60},M=async e=>{let t=await Q(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=Ue(r);return chrome.alarms.create(k,{delayInMinutes:n||60*24*2}),t.relevantDomains},Z=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await M(t)),!e||!r||!r.length)return"";let n=w(e);for(let o of r)if(n.startsWith(o)){let i=await s.get("quietDomains");return i&&i[o]&&Date.now()<i[o]?"":o}return""},S={},Le=async({identifier:e,apiEndpoint:t,cashbackPagePath:r})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),await s.get("relevantDomains")||M(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:o}=n;switch(o){case k:M(e);break;default:console.error("alarm with no use case:",o);break}}),chrome.runtime.onMessage.addListener((n,o,i)=>{if(n?.from!=="bringweb3")return;let{action:m}=n;switch(m){case"ACTIVATE":{let{url:a,extensionId:c}=n;return H(a,c,e,r).then(()=>i()),!0}case"GET_OPT_OUT":return z().then(a=>i(a)),!0;case"OPT_OUT":{let{time:a}=n;return Y(a).then(c=>i(c)),!0}case"CLOSE":{let{time:a}=n;return Z(o.tab?.url||o.origin,e).then(c=>{if(!c)return!0;y(c,a),i({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>i(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>i()),i({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${m}`),!0}}),chrome.tabs.onUpdated.addListener(async(n,o,i)=>{if(!i?.url?.startsWith("http")||!i.url)return;let m=w(i.url),a=await s.get("optOut");if(a&&a>Date.now()){await C(e,n,r,m);return}else a&&(s.remove("optOut"),s.remove("optOutKey"));let c=S[n];if(o.status!=="complete"||m===c)return;S[n]=m;let d=await Z(i.url,e);if(!d||!d.length){await C(e,n,r,m);return}let h=await A(n),{token:f,isValid:g,iframeUrl:l}=await B({apiKey:e,body:{domain:d,url:i.url,address:h}});if(!g){g===!1&&y(d);return}let b=await v();E(n,{action:"INJECT",token:f,domain:m,iframeUrl:l,userId:b})}),chrome.tabs.onRemoved.addListener(n=>delete S[n])},ee=Le;var te=()=>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}console.log({response:r}),e({isTurnedOff:r.isOptedOut})})}),re=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")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getTurnOff,setTurnOff});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var X=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([i,o])=>{o&&(n&&(i=`${n}_${i}`),i==="url"?t.append(i,encodeURIComponent(o)):t.append(i,o))}),t.toString()},D=X;var N={name:"@bringweb3/chrome-extension-kit",version:"1.2.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"]};var ee=()=>N.version,U=ee;var te=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:o,switchWallet:m})=>{let a=chrome.runtime.id,c=`bringweb3-iframe-${a}`,d=document.getElementById(c),h=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${o?"/"+o:""}`:i;if(d)return d;let f=D({query:{...e,extensionId:a,v:U(),themeMode:r,textMode:n,switchWallet:String(m)}}),g=t?`&${D({query:t,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=c,l.src=`${h}?${f}${g}`,l.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),l.style.position="fixed",l.scrolling="no",l.style.overflow="hidden",l.style.width="1px",l.style.height="1px",l.style.right="8px",l.style.borderRadius="10px",l.style.border="none",l.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(l.style.boxShadow=t.popupShadow),document.documentElement.appendChild(l),l},L=te;var re=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},R=re;var ne=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")},W=ne;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION"},oe=[p.ACTIVATE],ie=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:i,action:o,style:m,keyFrames:a,time:c,extensionId:d,url:h}=n;if(i==="bringweb3"&&!(d!==chrome.runtime.id&&!oe.includes(o)))switch(o){case p.OPEN:R(t,m);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),c&&chrome.runtime.sendMessage({action:o,time:c,from:"bringweb3"});break;case p.PROMPT_LOGIN:r();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",url:h,extensionId:d});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:o,time:c,from:"bringweb3"});break;case p.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case p.ADD_KEYFRAMES:W(a);break;default:break}},F=ie;var $=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})},se=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>$({iframeEl:n,getWalletAddress:r}));else if(e)for(let i=0;i<e.length;i++){let o=e[i];o&&window.addEventListener(o,async()=>$({iframeEl:n,getWalletAddress:r}))}},j=se;var ae=["www.","www1.","www2."],ce=e=>{if(!e)return"";let t=new URL(e).host;for(let r of ae)t.startsWith(r)&&(t=t.replace(r,""));return t},w=ce;var I=null,K=!1,me=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:i,darkTheme:o,theme:m,text:a,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");j({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:I}),window.addEventListener("message",d=>F({event:d,iframeEl:I,promptLogin:t})),chrome.runtime.onMessage.addListener((d,h,f)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(_=>f({status:"success",walletAddress:_})).catch(_=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==w(location.href)||K)return f({status:"Domain already changed"}),!0;let{token:l,iframeUrl:b,userId:x}=d;console.log({token:l,iframeUrl:b,userId:x});let M={token:l};return x&&(M.userId=x),I=L({query:M,iframeUrl:b,theme:m==="dark"?o:i,themeMode:m||"light",text:a,switchWallet:c,page:d.page}),K=!0,f({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},de=me;var u=class e{static instance=null;apiEndpoint="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}};var le=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},V=le;var ue=async({apiKey:e,body:t})=>{let r=u.getInstance().getApiEndpoint();return await(await fetch(`${r}/check/popup`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(t)})).json()},G=ue;var P="updateCache";var fe=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),pe=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),ge=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:fe,get:pe,remove:ge};var Q=30*60*1e3,we=async(e,t)=>{e=w(e),t||(t=Q);let r=await s.get("quietDomains");typeof r=="object"?r[e]=Date.now()+t:r={[e]:Date.now()+Q},s.set("quietDomains",r)},y=we;var he=async({apiKey:e,walletAddress:t,cashbackUrl:r,lastActivation:n})=>{let i=u.getInstance().getApiEndpoint(),o={walletAddress:t};return n&&(o.lastActivation=n),r&&(o.cashbackUrl=r),await(await fetch(`${i}/check/notification`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(o)})).json()},B=he;var Ee=(e,t)=>new Promise((i,o)=>{let m=a=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){o(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?a<4?setTimeout(()=>m(a+1),1e3*Math.pow(2,a)):o(new Error(chrome.runtime.lastError.message)):i(d)})})};m(0)}),E=Ee;var Ae=async e=>{let t=await s.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 E(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await s.set("walletAddress",t))}catch{}return t},A=Ae;var ye=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},i=await s.get("notificationCheck");if(i&&Date.now()<i)return n;let o=t?await A(t):await s.get("walletAddress");if(!o)return n;let m=await s.get("lastActivation"),a=await B({apiKey:e,walletAddress:o,cashbackUrl:r,lastActivation:m});s.set("notificationCheck",a.nextCall);let c={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:a.expiration};return c.showNotification&&await s.set("notification",c),c},O=ye;var be=e=>e?chrome.runtime.getURL(e):void 0,T=be;var Oe=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&y(e),await O(r,void 0,T(n))},J=Oe;var q=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),H=async()=>{let e=await s.get("optOut");return console.log({isOptedOut:!!(e&&e>Date.now())}),{isOptedOut:!!(e&&e>Date.now())}};var Te=async()=>{let e=await s.get("id");return!await A()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},v=Te;var Y=async(e,t,r)=>{await E(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await v(),domain:r})},ve=async(e,t,r,n)=>{let i=await s.get("notification");if(i?.expiration<Date.now())await s.remove("notification");else if(i)return await Y(t,i,n);let o=await O(e,t,T(r));if(o.showNotification)return await Y(t,o,n)},k=ve;var xe=e=>{let t=Date.now();return(e-t)/1e3/60},S=async e=>{let t=await V(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=xe(r);return chrome.alarms.create(P,{delayInMinutes:n||60*24*2}),t.relevantDomains},z=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await S(t)),!e||!r||!r.length)return"";let n=w(e);for(let i of r)if(n.startsWith(i)){let o=await s.get("quietDomains");return o&&o[i]&&Date.now()<o[i]?"":i}return""},C={},De=async({identifier:e,apiEndpoint:t,cashbackPagePath:r})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),S(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:i}=n;switch(i){case P:S(e);break;default:console.error("alarm with no use case:",i);break}}),chrome.runtime.onMessage.addListener((n,i,o)=>{if(n?.from!=="bringweb3")return;let{action:m}=n;switch(m){case"ACTIVATE":{let{url:a,extensionId:c}=n;return J(a,c,e,r).then(()=>o()),!0}case"GET_OPT_OUT":return H().then(a=>o(a)),!0;case"OPT_OUT":{let{time:a}=n;return q(a).then(c=>o(c)),!0}case"CLOSE":{let{time:a}=n;return z(i.tab?.url||i.origin,e).then(c=>{if(!c)return!0;y(c,a),o({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>o(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>o()),o({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${m}`),!0}}),chrome.tabs.onUpdated.addListener(async(n,i,o)=>{if(!o?.url?.startsWith("http")||!o.url)return;let m=w(o.url),a=await s.get("optOut");if(a&&a>Date.now()){await k(e,n,r,m);return}else a&&(s.remove("optOut"),s.remove("optOutKey"));let c=C[n];if(i.status!=="complete"||m===c)return;C[n]=m;let d=await z(o.url,e);if(!d||!d.length){await k(e,n,r,m);return}let h=await A(n),{token:f,isValid:g,iframeUrl:l}=await G({apiKey:e,body:{domain:d,url:o.url,address:h}});if(!g){g===!1&&y(d);return}let b=await v();E(n,{action:"INJECT",token:f,domain:m,iframeUrl:l,userId:b})}),chrome.tabs.onRemoved.addListener(n=>delete C[n])},Ie=De;var Pe=()=>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}console.log({response:r}),e({isTurnedOff:r.isOptedOut})})}),ke=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")})});export{Ie as bringInitBackground,de as bringInitContentScript,Pe as getTurnOff,ke as setTurnOff};
|
|
1
|
+
var X=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([i,o])=>{o&&(n&&(i=`${n}_${i}`),i==="url"?t.append(i,encodeURIComponent(o)):t.append(i,o))}),t.toString()},D=X;var N={name:"@bringweb3/chrome-extension-kit",version:"1.2.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"]};var ee=()=>N.version,U=ee;var te=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:o,switchWallet:m})=>{let a=chrome.runtime.id,c=`bringweb3-iframe-${a}`,d=document.getElementById(c),h=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${o?"/"+o:""}`:i;if(d)return d;let f=D({query:{...e,extensionId:a,v:U(),themeMode:r,textMode:n,switchWallet:String(m)}}),g=t?`&${D({query:t,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=c,l.src=`${h}?${f}${g}`,l.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),l.style.position="fixed",l.scrolling="no",l.style.overflow="hidden",l.style.width="1px",l.style.height="1px",l.style.right="8px",l.style.borderRadius="10px",l.style.border="none",l.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(l.style.boxShadow=t.popupShadow),document.documentElement.appendChild(l),l},L=te;var re=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},R=re;var ne=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")},W=ne;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION"},oe=[p.ACTIVATE],ie=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:i,action:o,style:m,keyFrames:a,time:c,extensionId:d,url:h}=n;if(i==="bringweb3"&&!(d!==chrome.runtime.id&&!oe.includes(o)))switch(o){case p.OPEN:R(t,m);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),c&&chrome.runtime.sendMessage({action:o,time:c,from:"bringweb3"});break;case p.PROMPT_LOGIN:r();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",url:h,extensionId:d});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:o,time:c,from:"bringweb3"});break;case p.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case p.ADD_KEYFRAMES:W(a);break;default:break}},F=ie;var $=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})},se=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>$({iframeEl:n,getWalletAddress:r}));else if(e)for(let i=0;i<e.length;i++){let o=e[i];o&&window.addEventListener(o,async()=>$({iframeEl:n,getWalletAddress:r}))}},j=se;var ae=["www.","www1.","www2."],ce=e=>{if(!e)return"";let t=new URL(e).host;for(let r of ae)t.startsWith(r)&&(t=t.replace(r,""));return t},w=ce;var I=null,K=!1,me=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:i,darkTheme:o,theme:m,text:a,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");j({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:I}),window.addEventListener("message",d=>F({event:d,iframeEl:I,promptLogin:t})),chrome.runtime.onMessage.addListener((d,h,f)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(_=>f({status:"success",walletAddress:_})).catch(_=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==w(location.href)||K)return f({status:"Domain already changed"}),!0;let{token:l,iframeUrl:b,userId:x}=d;console.log({token:l,iframeUrl:b,userId:x});let M={token:l};return x&&(M.userId=x),I=L({query:M,iframeUrl:b,theme:m==="dark"?o:i,themeMode:m||"light",text:a,switchWallet:c,page:d.page}),K=!0,f({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},de=me;var u=class e{static instance=null;apiEndpoint="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}};var le=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},V=le;var ue=async({apiKey:e,body:t})=>{let r=u.getInstance().getApiEndpoint();return await(await fetch(`${r}/check/popup`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(t)})).json()},G=ue;var P="updateCache";var fe=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),pe=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),ge=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:fe,get:pe,remove:ge};var Q=30*60*1e3,we=async(e,t)=>{e=w(e),t||(t=Q);let r=await s.get("quietDomains");typeof r=="object"?r[e]=Date.now()+t:r={[e]:Date.now()+Q},s.set("quietDomains",r)},y=we;var he=async({apiKey:e,walletAddress:t,cashbackUrl:r,lastActivation:n})=>{let i=u.getInstance().getApiEndpoint(),o={walletAddress:t};return n&&(o.lastActivation=n),r&&(o.cashbackUrl=r),await(await fetch(`${i}/check/notification`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(o)})).json()},B=he;var Ee=(e,t)=>new Promise((i,o)=>{let m=a=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){o(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},d=>{chrome.runtime.lastError?a<4?setTimeout(()=>m(a+1),1e3*Math.pow(2,a)):o(new Error(chrome.runtime.lastError.message)):i(d)})})};m(0)}),E=Ee;var Ae=async e=>{let t=await s.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 E(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await s.set("walletAddress",t))}catch{}return t},A=Ae;var ye=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},i=await s.get("notificationCheck");if(i&&Date.now()<i)return n;let o=t?await A(t):await s.get("walletAddress");if(!o)return n;let m=await s.get("lastActivation"),a=await B({apiKey:e,walletAddress:o,cashbackUrl:r,lastActivation:m});s.set("notificationCheck",a.nextCall);let c={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:a.expiration};return c.showNotification&&await s.set("notification",c),c},O=ye;var be=e=>e?chrome.runtime.getURL(e):void 0,T=be;var Oe=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&y(e),await O(r,void 0,T(n))},J=Oe;var q=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),H=async()=>{let e=await s.get("optOut");return console.log({isOptedOut:!!(e&&e>Date.now())}),{isOptedOut:!!(e&&e>Date.now())}};var Te=async()=>{let e=await s.get("id");return!await A()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},v=Te;var Y=async(e,t,r)=>{await E(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await v(),domain:r})},ve=async(e,t,r,n)=>{let i=await s.get("notification");if(i?.expiration<Date.now())await s.remove("notification");else if(i)return await Y(t,i,n);let o=await O(e,t,T(r));if(o.showNotification)return await Y(t,o,n)},k=ve;var xe=e=>{let t=Date.now();return(e-t)/1e3/60},S=async e=>{let t=await V(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=xe(r);return chrome.alarms.create(P,{delayInMinutes:n||60*24*2}),t.relevantDomains},z=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await S(t)),!e||!r||!r.length)return"";let n=w(e);for(let i of r)if(n.startsWith(i)){let o=await s.get("quietDomains");return o&&o[i]&&Date.now()<o[i]?"":i}return""},C={},De=async({identifier:e,apiEndpoint:t,cashbackPagePath:r})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),await s.get("relevantDomains")||S(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:i}=n;switch(i){case P:S(e);break;default:console.error("alarm with no use case:",i);break}}),chrome.runtime.onMessage.addListener((n,i,o)=>{if(n?.from!=="bringweb3")return;let{action:m}=n;switch(m){case"ACTIVATE":{let{url:a,extensionId:c}=n;return J(a,c,e,r).then(()=>o()),!0}case"GET_OPT_OUT":return H().then(a=>o(a)),!0;case"OPT_OUT":{let{time:a}=n;return q(a).then(c=>o(c)),!0}case"CLOSE":{let{time:a}=n;return z(i.tab?.url||i.origin,e).then(c=>{if(!c)return!0;y(c,a),o({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>o(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>o()),o({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${m}`),!0}}),chrome.tabs.onUpdated.addListener(async(n,i,o)=>{if(!o?.url?.startsWith("http")||!o.url)return;let m=w(o.url),a=await s.get("optOut");if(a&&a>Date.now()){await k(e,n,r,m);return}else a&&(s.remove("optOut"),s.remove("optOutKey"));let c=C[n];if(i.status!=="complete"||m===c)return;C[n]=m;let d=await z(o.url,e);if(!d||!d.length){await k(e,n,r,m);return}let h=await A(n),{token:f,isValid:g,iframeUrl:l}=await G({apiKey:e,body:{domain:d,url:o.url,address:h}});if(!g){g===!1&&y(d);return}let b=await v();E(n,{action:"INJECT",token:f,domain:m,iframeUrl:l,userId:b})}),chrome.tabs.onRemoved.addListener(n=>delete C[n])},Ie=De;var Pe=()=>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}console.log({response:r}),e({isTurnedOff:r.isOptedOut})})}),ke=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")})});export{Ie as bringInitBackground,de as bringInitContentScript,Pe as getTurnOff,ke as setTurnOff};
|