@bringweb3/chrome-extension-kit 1.1.12 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -7,6 +7,7 @@ interface Configuration$1 {
7
7
  darkTheme?: Style;
8
8
  theme: string;
9
9
  text: 'upper' | 'lower';
10
+ switchWallet: boolean;
10
11
  }
11
12
  /**
12
13
  * Initializes the content script for the Bring extension.
@@ -41,7 +42,7 @@ interface Configuration$1 {
41
42
  * darkTheme: { ... }
42
43
  * });
43
44
  */
44
- declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, walletAddressUpdateCallback, lightTheme, darkTheme, theme, text, }: Configuration$1) => Promise<void>;
45
+ declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, walletAddressUpdateCallback, lightTheme, darkTheme, theme, text, switchWallet }: Configuration$1) => Promise<void>;
45
46
 
46
47
  interface Configuration {
47
48
  identifier: string;
@@ -76,11 +77,30 @@ interface Configuration {
76
77
  *
77
78
  * @example
78
79
  * bringInitBackground({
79
- * identifier: 'my-extension-id',
80
+ * identifier: '<bring_identifier>',
80
81
  * apiEndpoint: 'sandbox',
81
82
  * cashbackPagePath: '/cashback.html'
82
83
  * });
83
84
  */
84
85
  declare const bringInitBackground: ({ identifier, apiEndpoint, cashbackPagePath }: Configuration) => Promise<void>;
85
86
 
86
- export { bringInitBackground, bringInitContentScript };
87
+ interface TurnOff {
88
+ isTurnedOff: boolean;
89
+ }
90
+ /**
91
+ * Retrieves the current "turn off" status, true means turned off and false is turned on
92
+ *
93
+ * @returns A Promise resolving to the turn-off state
94
+ * @throws Will reject if there's an error communicating with the background script
95
+ */
96
+ declare const getTurnOff: () => Promise<TurnOff>;
97
+ /**
98
+ * Sets the opt-out status for the extension
99
+ *
100
+ * @param state - Boolean indicating whether to turn off (true) or turn on (false)
101
+ * @returns A Promise resolving to the new turn-off state
102
+ * @throws Will reject if there's an error communicating with the background script
103
+ */
104
+ declare const setTurnOff: (state: boolean) => Promise<TurnOff>;
105
+
106
+ export { bringInitBackground, bringInitContentScript, getTurnOff, setTurnOff };
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ interface Configuration$1 {
7
7
  darkTheme?: Style;
8
8
  theme: string;
9
9
  text: 'upper' | 'lower';
10
+ switchWallet: boolean;
10
11
  }
11
12
  /**
12
13
  * Initializes the content script for the Bring extension.
@@ -41,7 +42,7 @@ interface Configuration$1 {
41
42
  * darkTheme: { ... }
42
43
  * });
43
44
  */
44
- declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, walletAddressUpdateCallback, lightTheme, darkTheme, theme, text, }: Configuration$1) => Promise<void>;
45
+ declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, walletAddressUpdateCallback, lightTheme, darkTheme, theme, text, switchWallet }: Configuration$1) => Promise<void>;
45
46
 
46
47
  interface Configuration {
47
48
  identifier: string;
@@ -76,11 +77,30 @@ interface Configuration {
76
77
  *
77
78
  * @example
78
79
  * bringInitBackground({
79
- * identifier: 'my-extension-id',
80
+ * identifier: '<bring_identifier>',
80
81
  * apiEndpoint: 'sandbox',
81
82
  * cashbackPagePath: '/cashback.html'
82
83
  * });
83
84
  */
84
85
  declare const bringInitBackground: ({ identifier, apiEndpoint, cashbackPagePath }: Configuration) => Promise<void>;
85
86
 
86
- export { bringInitBackground, bringInitContentScript };
87
+ interface TurnOff {
88
+ isTurnedOff: boolean;
89
+ }
90
+ /**
91
+ * Retrieves the current "turn off" status, true means turned off and false is turned on
92
+ *
93
+ * @returns A Promise resolving to the turn-off state
94
+ * @throws Will reject if there's an error communicating with the background script
95
+ */
96
+ declare const getTurnOff: () => Promise<TurnOff>;
97
+ /**
98
+ * Sets the opt-out status for the extension
99
+ *
100
+ * @param state - Boolean indicating whether to turn off (true) or turn on (false)
101
+ * @returns A Promise resolving to the new turn-off state
102
+ * @throws Will reject if there's an error communicating with the background script
103
+ */
104
+ declare const setTurnOff: (state: boolean) => Promise<TurnOff>;
105
+
106
+ export { bringInitBackground, bringInitContentScript, getTurnOff, setTurnOff };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var E=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var n in t)E(e,n,{get:t[n],enumerable:!0})},X=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of H(t))!Y.call(e,s)&&s!==n&&E(e,s,{get:()=>t[s],enumerable:!(r=G(t,s))||r.enumerable});return e};var Z=e=>X(E({},"__esModule",{value:!0}),e);var Te={};z(Te,{bringInitBackground:()=>Q,bringInitContentScript:()=>W});module.exports=Z(Te);var ee=e=>{let t=new URLSearchParams,{query:n,prefix:r}=e;return Object.entries(n).forEach(([s,i])=>{i&&(r&&(s=`${r}_${s}`),s==="url"?t.append(s,encodeURIComponent(i)):t.append(s,i))}),t.toString()},b=ee;var I={name:"@bringweb3/chrome-extension-kit",version:"1.1.12",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 ne=()=>I.version,R=ne;var re=({query:e,theme:t,themeMode:n,text:r,iframeUrl:s,page:i})=>{let o=chrome.runtime.id,a=`bringweb3-iframe-${o}`,d=document.getElementById(a),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${i?"/"+i:""}`:s;if(d)return d;let p=b({query:{...e,extensionId:o,v:R(),themeMode:n,textMode:r}}),g=t?`&${b({query:t,prefix:"t"})}`:"",c=document.createElement("iframe");return c.id=a,c.src=`${l}?${p}${g}`,c.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),c.style.position="fixed",c.scrolling="no",c.style.overflow="hidden",c.style.width="1px",c.style.height="1px",c.style.right="8px",c.style.borderRadius="10px",c.style.border="none",c.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(c.style.boxShadow=t.popupShadow),document.documentElement.appendChild(c),c},S=re;var se=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([n,r])=>{n in e.style&&(e.style[n]=r)})},L=se;var ie=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let n=t.sheet;n?e.forEach(({name:r,rules:s})=>{n.insertRule(`@keyframes ${r} { ${s} }`,n.cssRules.length)}):console.error("Failed to create stylesheet")},M=ie;var f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES"},oe=[f.ACTIVATE],ae=({event:e,iframeEl:t,promptLogin:n})=>{let{data:r}=e,{from:s,action:i,style:o,keyFrames:a,time:d,extensionId:l}=r;if(s==="bringweb3"&&!(l!==chrome.runtime.id&&!oe.includes(i)))switch(i){case f.OPEN:L(t,o);break;case f.CLOSE:t&&t.parentNode?.removeChild(t),d&&chrome.runtime.sendMessage({action:i,time:d,from:"bringweb3"});break;case f.PROMPT_LOGIN:n();break;case f.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3"});break;case f.OPT_OUT:chrome.runtime.sendMessage({action:i,time:d,from:"bringweb3"});break;case f.ADD_KEYFRAMES:M(a);break;default:break}},U=ae;var O=async({iframeEl:e,getWalletAddress:t})=>{if(!e&&(e=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!e)||!e.contentWindow)return;let n=await t();e.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:n},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:n})},ce=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:n,iframeEl:r})=>{if(t)t(()=>O({iframeEl:r,getWalletAddress:n}));else if(e)for(let s=0;s<e.length;s++){let i=e[s];i&&window.addEventListener(i,async()=>O({iframeEl:r,getWalletAddress:n}))}},_=ce;var de=["www.","www1.","www2."],me=e=>{if(!e)return"";let t=new URL(e).host;for(let n of de)t.startsWith(n)&&(t=t.replace(n,""));return t},h=me;var A=null,N=!1,le=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:n,walletAddressUpdateCallback:r,lightTheme:s,darkTheme:i,theme:o,text:a})=>{if(window.self===window.top){if(!e||!t||!n?.length&&typeof r!="function")throw new Error("Missing configuration");_({walletAddressListeners:n,walletAddressUpdateCallback:r,getWalletAddress:e,iframeEl:A}),window.addEventListener("message",d=>U({event:d,iframeEl:A,promptLogin:t})),chrome.runtime.onMessage.addListener((d,l,p)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(C=>p({status:"success",walletAddress:C})).catch(C=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==h(location.href)||N)return;let{token:c,iframeUrl:y,userId:w}=d,P={token:c};return w&&(P.userId=w),A=S({query:P,iframeUrl:y,theme:o==="dark"?i:s,themeMode:o||"light",text:a,page:d.page}),N=!0,p({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},W=le;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 ue=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},$=ue;var pe=async({apiKey:e,body:t})=>{let n=u.getInstance().getApiEndpoint();return await(await fetch(`${n}/check/popup`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(t)})).json()},j=pe;var fe=async({apiKey:e,walletAddress:t,cashbackUrl:n})=>{let r=u.getInstance().getApiEndpoint(),s={walletAddress:t};return n&&(s.cashbackUrl=n),await(await fetch(`${r}/check/notification`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(s)})).json()},F=fe;var T="updateCache";var ge=async(e,t)=>new Promise((n,r)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):n()})}),he=async e=>new Promise((t,n)=>{chrome.storage.local.get([`bring_${e}`],r=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t(r[`bring_${e}`])})}),we=async e=>new Promise((t,n)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t()})}),m={set:ge,get:he,remove:we};var q=30*60*1e3,x=async e=>{let t=await m.get("walletAddress");try{if(!e){let r=await chrome.tabs.query({active:!0,currentWindow:!0});if(!r||!r[0]||!r[0].id)return t;e=r[0].id}let n=await D(e,{action:"GET_WALLET_ADDRESS"});n?.walletAddress&&t!==n?.walletAddress&&(t=n?.walletAddress,await m.set("walletAddress",t))}catch{}return t},ye=e=>{let t=Date.now();return(e-t)/1e3/60},v=async e=>{let t=await $(e);m.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:n}=t,r=ye(n);return chrome.alarms.create(T,{delayInMinutes:r||60*24*2}),t.relevantDomains},Ee=async(e,t,n,r)=>{let s={showNotification:!1,token:"",iframeUrl:""},i=await m.get("notificationCheck");if(i?.check&&Date.now()<i.check)return s;let o=await x(t);if(!o)return s;let a=await F({apiKey:e,walletAddress:o,cashbackUrl:n}),d={check:r?a.nextRequestTimestampActivated:a.nextRequestTimestampRegular,nextRequestTimestampActivated:a.nextRequestTimestampActivated,nextRequestTimestampRegular:a.nextRequestTimestampRegular};return m.set("notificationCheck",d),{showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl}},V=async(e,t)=>{let n=await m.get("relevantDomains");if(n===void 0&&(n=await v(t)),!e||!n||!n.length)return"";let r=h(e);for(let s of n)if(r.startsWith(s)){let i=await m.get("quietDomains");return i&&i[s]&&Date.now()<i[s]?"":s}return""},K=async(e,t)=>{t||(t=q);let n=await m.get("quietDomains");typeof n=="object"?n[e]=Date.now()+t:n={[e]:Date.now()+q},m.set("quietDomains",n)},be=e=>e?chrome.runtime.getURL(e):void 0,J=async()=>{let e=await m.get("id");return!await x()&&!e&&(e=Math.random().toString(36).substring(2),m.set("id",e)),e},D=(e,t)=>new Promise((s,i)=>{let o=a=>{chrome.tabs.get(e,d=>{if(chrome.runtime.lastError){i(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},l=>{chrome.runtime.lastError?a<4?setTimeout(()=>o(a+1),1e3*Math.pow(2,a)):i(new Error(chrome.runtime.lastError.message)):s(l)})})};o(0)}),B=async(e,t,n)=>{let r=await Ee(e,t,be(n));r.showNotification&&await D(t,{action:"INJECT",page:"notification",token:r.token,iframeUrl:r.iframeUrl,userId:await J()})},k={},Ae=async({identifier:e,apiEndpoint:t,cashbackPagePath:n})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),v(e),chrome.alarms.onAlarm.addListener(async r=>{let{name:s}=r;switch(s){case T:v(e);break;default:console.error("alarm with no use case:",s);break}}),chrome.runtime.onMessage.addListener(async(r,s)=>{if(r?.from!=="bringweb3")return;let{action:i}=r;switch(i){case"ACTIVATE":{let o=await m.get("notificationCheck");if(!o.check||!o.nextRequestTimestampActivated)break;o.check=o.nextRequestTimestampActivated,m.set("notificationCheck",o);break}case"OPT_OUT":{let{time:o}=r;m.set("optOut",Date.now()+o);break}case"CLOSE":{let{time:o}=r,a=await V(s.tab?.url||s.origin,e);if(!a)break;K(a,o);break}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:o}=r;m.set("walletAddress",o);break}default:{console.warn(`Bring unknown action: ${i}`);break}}}),chrome.tabs.onUpdated.addListener(async(r,s,i)=>{let o=await m.get("optOut");if(o&&o>Date.now()){await B(e,r,n);return}if(!i.url)return;let a=h(i.url),d=k[r];if(s.status!=="complete"||a===d)return;k[r]=a;let l=await V(i.url,e);if(!l||!l.length){await B(e,r,n);return}let p=await x(r),{token:g,isValid:c,iframeUrl:y}=await j({apiKey:e,body:{domain:l,url:i.url,address:p}});if(!c){c===!1&&K(l);return}let w=await J();D(r,{action:"INJECT",token:g,domain:a,iframeUrl:y,userId:w})}),chrome.tabs.onRemoved.addListener(r=>delete k[r])},Q=Ae;0&&(module.exports={bringInitBackground,bringInitContentScript});
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.1",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --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 p=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}?${p}${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 f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION"},ge=[f.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 f.OPEN:W(t,m);break;case f.CLOSE:t&&t.parentNode?.removeChild(t),c&&chrome.runtime.sendMessage({action:i,time:c,from:"bringweb3"});break;case f.PROMPT_LOGIN:r();break;case f.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3",url:h,extensionId:d});break;case f.OPT_OUT:chrome.runtime.sendMessage({action:i,time:c,from:"bringweb3"});break;case f.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:i,from:"bringweb3"});case f.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,p)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(N=>p({status:"success",walletAddress:N})).catch(N=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==w(location.href)||V)return!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,p({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()},H=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 H({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))},q=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 q(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)}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>i()),!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:p,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:p,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 B=e=>{let t=new URLSearchParams,{query:n,prefix:r}=e;return Object.entries(n).forEach(([s,i])=>{i&&(r&&(s=`${r}_${s}`),s==="url"?t.append(s,encodeURIComponent(i)):t.append(s,i))}),t.toString()},E=B;var C={name:"@bringweb3/chrome-extension-kit",version:"1.1.12",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 Q=()=>C.version,I=Q;var G=({query:e,theme:t,themeMode:n,text:r,iframeUrl:s,page:i})=>{let o=chrome.runtime.id,a=`bringweb3-iframe-${o}`,d=document.getElementById(a),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${i?"/"+i:""}`:s;if(d)return d;let p=E({query:{...e,extensionId:o,v:I(),themeMode:n,textMode:r}}),g=t?`&${E({query:t,prefix:"t"})}`:"",c=document.createElement("iframe");return c.id=a,c.src=`${l}?${p}${g}`,c.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),c.style.position="fixed",c.scrolling="no",c.style.overflow="hidden",c.style.width="1px",c.style.height="1px",c.style.right="8px",c.style.borderRadius="10px",c.style.border="none",c.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(c.style.boxShadow=t.popupShadow),document.documentElement.appendChild(c),c},R=G;var H=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([n,r])=>{n in e.style&&(e.style[n]=r)})},S=H;var Y=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let n=t.sheet;n?e.forEach(({name:r,rules:s})=>{n.insertRule(`@keyframes ${r} { ${s} }`,n.cssRules.length)}):console.error("Failed to create stylesheet")},L=Y;var f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES"},z=[f.ACTIVATE],X=({event:e,iframeEl:t,promptLogin:n})=>{let{data:r}=e,{from:s,action:i,style:o,keyFrames:a,time:d,extensionId:l}=r;if(s==="bringweb3"&&!(l!==chrome.runtime.id&&!z.includes(i)))switch(i){case f.OPEN:S(t,o);break;case f.CLOSE:t&&t.parentNode?.removeChild(t),d&&chrome.runtime.sendMessage({action:i,time:d,from:"bringweb3"});break;case f.PROMPT_LOGIN:n();break;case f.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3"});break;case f.OPT_OUT:chrome.runtime.sendMessage({action:i,time:d,from:"bringweb3"});break;case f.ADD_KEYFRAMES:L(a);break;default:break}},M=X;var U=async({iframeEl:e,getWalletAddress:t})=>{if(!e&&(e=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!e)||!e.contentWindow)return;let n=await t();e.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:n},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:n})},Z=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:n,iframeEl:r})=>{if(t)t(()=>U({iframeEl:r,getWalletAddress:n}));else if(e)for(let s=0;s<e.length;s++){let i=e[s];i&&window.addEventListener(i,async()=>U({iframeEl:r,getWalletAddress:n}))}},O=Z;var ee=["www.","www1.","www2."],te=e=>{if(!e)return"";let t=new URL(e).host;for(let n of ee)t.startsWith(n)&&(t=t.replace(n,""));return t},h=te;var b=null,_=!1,ne=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:n,walletAddressUpdateCallback:r,lightTheme:s,darkTheme:i,theme:o,text:a})=>{if(window.self===window.top){if(!e||!t||!n?.length&&typeof r!="function")throw new Error("Missing configuration");O({walletAddressListeners:n,walletAddressUpdateCallback:r,getWalletAddress:e,iframeEl:b}),window.addEventListener("message",d=>M({event:d,iframeEl:b,promptLogin:t})),chrome.runtime.onMessage.addListener((d,l,p)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(P=>p({status:"success",walletAddress:P})).catch(P=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==h(location.href)||_)return;let{token:c,iframeUrl:y,userId:w}=d,D={token:c};return w&&(D.userId=w),b=R({query:D,iframeUrl:y,theme:o==="dark"?i:s,themeMode:o||"light",text:a,page:d.page}),_=!0,p({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},re=ne;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 se=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},N=se;var ie=async({apiKey:e,body:t})=>{let n=u.getInstance().getApiEndpoint();return await(await fetch(`${n}/check/popup`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(t)})).json()},W=ie;var oe=async({apiKey:e,walletAddress:t,cashbackUrl:n})=>{let r=u.getInstance().getApiEndpoint(),s={walletAddress:t};return n&&(s.cashbackUrl=n),await(await fetch(`${r}/check/notification`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(s)})).json()},$=oe;var A="updateCache";var ae=async(e,t)=>new Promise((n,r)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):n()})}),ce=async e=>new Promise((t,n)=>{chrome.storage.local.get([`bring_${e}`],r=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t(r[`bring_${e}`])})}),de=async e=>new Promise((t,n)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t()})}),m={set:ae,get:ce,remove:de};var j=30*60*1e3,v=async e=>{let t=await m.get("walletAddress");try{if(!e){let r=await chrome.tabs.query({active:!0,currentWindow:!0});if(!r||!r[0]||!r[0].id)return t;e=r[0].id}let n=await x(e,{action:"GET_WALLET_ADDRESS"});n?.walletAddress&&t!==n?.walletAddress&&(t=n?.walletAddress,await m.set("walletAddress",t))}catch{}return t},me=e=>{let t=Date.now();return(e-t)/1e3/60},k=async e=>{let t=await N(e);m.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:n}=t,r=me(n);return chrome.alarms.create(A,{delayInMinutes:r||60*24*2}),t.relevantDomains},le=async(e,t,n,r)=>{let s={showNotification:!1,token:"",iframeUrl:""},i=await m.get("notificationCheck");if(i?.check&&Date.now()<i.check)return s;let o=await v(t);if(!o)return s;let a=await $({apiKey:e,walletAddress:o,cashbackUrl:n}),d={check:r?a.nextRequestTimestampActivated:a.nextRequestTimestampRegular,nextRequestTimestampActivated:a.nextRequestTimestampActivated,nextRequestTimestampRegular:a.nextRequestTimestampRegular};return m.set("notificationCheck",d),{showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl}},F=async(e,t)=>{let n=await m.get("relevantDomains");if(n===void 0&&(n=await k(t)),!e||!n||!n.length)return"";let r=h(e);for(let s of n)if(r.startsWith(s)){let i=await m.get("quietDomains");return i&&i[s]&&Date.now()<i[s]?"":s}return""},q=async(e,t)=>{t||(t=j);let n=await m.get("quietDomains");typeof n=="object"?n[e]=Date.now()+t:n={[e]:Date.now()+j},m.set("quietDomains",n)},ue=e=>e?chrome.runtime.getURL(e):void 0,K=async()=>{let e=await m.get("id");return!await v()&&!e&&(e=Math.random().toString(36).substring(2),m.set("id",e)),e},x=(e,t)=>new Promise((s,i)=>{let o=a=>{chrome.tabs.get(e,d=>{if(chrome.runtime.lastError){i(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},l=>{chrome.runtime.lastError?a<4?setTimeout(()=>o(a+1),1e3*Math.pow(2,a)):i(new Error(chrome.runtime.lastError.message)):s(l)})})};o(0)}),V=async(e,t,n)=>{let r=await le(e,t,ue(n));r.showNotification&&await x(t,{action:"INJECT",page:"notification",token:r.token,iframeUrl:r.iframeUrl,userId:await K()})},T={},pe=async({identifier:e,apiEndpoint:t,cashbackPagePath:n})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),k(e),chrome.alarms.onAlarm.addListener(async r=>{let{name:s}=r;switch(s){case A:k(e);break;default:console.error("alarm with no use case:",s);break}}),chrome.runtime.onMessage.addListener(async(r,s)=>{if(r?.from!=="bringweb3")return;let{action:i}=r;switch(i){case"ACTIVATE":{let o=await m.get("notificationCheck");if(!o.check||!o.nextRequestTimestampActivated)break;o.check=o.nextRequestTimestampActivated,m.set("notificationCheck",o);break}case"OPT_OUT":{let{time:o}=r;m.set("optOut",Date.now()+o);break}case"CLOSE":{let{time:o}=r,a=await F(s.tab?.url||s.origin,e);if(!a)break;q(a,o);break}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:o}=r;m.set("walletAddress",o);break}default:{console.warn(`Bring unknown action: ${i}`);break}}}),chrome.tabs.onUpdated.addListener(async(r,s,i)=>{let o=await m.get("optOut");if(o&&o>Date.now()){await V(e,r,n);return}if(!i.url)return;let a=h(i.url),d=T[r];if(s.status!=="complete"||a===d)return;T[r]=a;let l=await F(i.url,e);if(!l||!l.length){await V(e,r,n);return}let p=await v(r),{token:g,isValid:c,iframeUrl:y}=await W({apiKey:e,body:{domain:l,url:i.url,address:p}});if(!c){c===!1&&q(l);return}let w=await K();x(r,{action:"INJECT",token:g,domain:a,iframeUrl:y,userId:w})}),chrome.tabs.onRemoved.addListener(r=>delete T[r])},fe=pe;export{fe as bringInitBackground,re as bringInitContentScript};
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.1",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --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 p=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}?${p}${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 f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION"},oe=[f.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 f.OPEN:R(t,m);break;case f.CLOSE:t&&t.parentNode?.removeChild(t),c&&chrome.runtime.sendMessage({action:o,time:c,from:"bringweb3"});break;case f.PROMPT_LOGIN:r();break;case f.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",url:h,extensionId:d});break;case f.OPT_OUT:chrome.runtime.sendMessage({action:o,time:c,from:"bringweb3"});break;case f.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case f.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,p)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(_=>p({status:"success",walletAddress:_})).catch(_=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==w(location.href)||K)return!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,p({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 H=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),q=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 q().then(a=>o(a)),!0;case"OPT_OUT":{let{time:a}=n;return H(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)}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>o()),!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:p,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:p,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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bringweb3/chrome-extension-kit",
3
- "version": "1.1.12",
3
+ "version": "1.2.1",
4
4
  "description": "Crypto cashback integration kit for crypto outlets extension",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",