@bringweb3/chrome-extension-kit 1.1.5 → 1.1.7

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 CHANGED
@@ -118,7 +118,8 @@ import { bringInitContentScript } from "@bringweb3/chrome-extension-kit";
118
118
  bringInitContentScript({
119
119
  getWalletAddress: async () => await new Promise(resolve => setTimeout(() => resolve('<USER_WALLET_ADDRESS>'), 200)),// Async function that returns the current user's wallet address
120
120
  promptLogin: () => {...}, // Function that prompts a UI element asking the user to login
121
- walletAddressListeners: ["customEvent:addressChanged"], // A list of custom events that dispatched when the user's wallet address had changed
121
+ 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
+ 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
122
123
  themeMode: 'light' // 'light' | 'dark',
123
124
  text:'lower' // 'lower' | 'upper'
124
125
  darkTheme: {...}, // Same as lightTheme
package/dist/index.d.mts CHANGED
@@ -1,8 +1,9 @@
1
1
  interface Configuration$1 {
2
2
  iframeEndpoint: string;
3
3
  getWalletAddress: () => Promise<WalletAddress>;
4
+ walletAddressUpdateCallback?: (callback: () => void) => void;
5
+ walletAddressListeners?: string[];
4
6
  promptLogin: () => Promise<void>;
5
- walletAddressListeners: string[];
6
7
  lightTheme?: Style;
7
8
  darkTheme?: Style;
8
9
  theme: string;
@@ -16,7 +17,8 @@ interface Configuration$1 {
16
17
  * @param {Object} configuration - The configuration object.
17
18
  * @param {Function} configuration.getWalletAddress - A function that returns a Promise resolving to the wallet address.
18
19
  * @param {Function} configuration.promptLogin - A function to prompt the user to login.
19
- * @param {string[]} configuration.walletAddressListeners - An array of strings representing wallet address listeners.
20
+ * @param {string[]} configuration.walletAddressListeners - An optional array of strings representing wallet address listeners.
21
+ * @param {Function} [configuration.walletAddressUpdateCallback] - An optional callback function for wallet address updates.
20
22
  * @param {Object} [configuration.lightTheme] - Optional light theme settings.
21
23
  * @param {Object} [configuration.darkTheme] - Optional dark theme settings.
22
24
  * @param {string} configuration.theme - The chosen theme, light | dark.
@@ -40,7 +42,7 @@ interface Configuration$1 {
40
42
  * darkTheme: { ... }
41
43
  * });
42
44
  */
43
- declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, lightTheme, darkTheme, theme, text, }: Configuration$1) => Promise<void>;
45
+ declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, walletAddressUpdateCallback, lightTheme, darkTheme, theme, text, }: Configuration$1) => Promise<void>;
44
46
 
45
47
  interface Configuration {
46
48
  identifier: string;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  interface Configuration$1 {
2
2
  iframeEndpoint: string;
3
3
  getWalletAddress: () => Promise<WalletAddress>;
4
+ walletAddressUpdateCallback?: (callback: () => void) => void;
5
+ walletAddressListeners?: string[];
4
6
  promptLogin: () => Promise<void>;
5
- walletAddressListeners: string[];
6
7
  lightTheme?: Style;
7
8
  darkTheme?: Style;
8
9
  theme: string;
@@ -16,7 +17,8 @@ interface Configuration$1 {
16
17
  * @param {Object} configuration - The configuration object.
17
18
  * @param {Function} configuration.getWalletAddress - A function that returns a Promise resolving to the wallet address.
18
19
  * @param {Function} configuration.promptLogin - A function to prompt the user to login.
19
- * @param {string[]} configuration.walletAddressListeners - An array of strings representing wallet address listeners.
20
+ * @param {string[]} configuration.walletAddressListeners - An optional array of strings representing wallet address listeners.
21
+ * @param {Function} [configuration.walletAddressUpdateCallback] - An optional callback function for wallet address updates.
20
22
  * @param {Object} [configuration.lightTheme] - Optional light theme settings.
21
23
  * @param {Object} [configuration.darkTheme] - Optional dark theme settings.
22
24
  * @param {string} configuration.theme - The chosen theme, light | dark.
@@ -40,7 +42,7 @@ interface Configuration$1 {
40
42
  * darkTheme: { ... }
41
43
  * });
42
44
  */
43
- declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, lightTheme, darkTheme, theme, text, }: Configuration$1) => Promise<void>;
45
+ declare const bringInitContentScript: ({ getWalletAddress, promptLogin, walletAddressListeners, walletAddressUpdateCallback, lightTheme, darkTheme, theme, text, }: Configuration$1) => Promise<void>;
44
46
 
45
47
  interface Configuration {
46
48
  identifier: string;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var w=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var B=(e,t)=>{for(var n in t)w(e,n,{get:t[n],enumerable:!0})},J=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of V(t))!K.call(e,s)&&s!==n&&w(e,s,{get:()=>t[s],enumerable:!(r=F(t,s))||r.enumerable});return e};var Q=e=>J(w({},"__esModule",{value:!0}),e);var ge={};B(ge,{bringInitBackground:()=>q,bringInitContentScript:()=>M});module.exports=Q(ge);var G=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=G;var D={name:"@bringweb3/chrome-extension-kit",version:"1.1.5",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"},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"},dependencies:{}};var Y=()=>D.version,k=Y;var z=({query:e,theme:t,themeMode:n,text:r,iframeUrl:s})=>{let i=chrome.runtime.id,o=`bringweb3-iframe-${i}`,a=document.getElementById(o);if(a)return a;let m=E({query:{...e,extensionId:i,v:k(),themeMode:n,textMode:r}}),l=t?`&${E({query:t,prefix:"t"})}`:"",c=document.createElement("iframe");return c.id=o,c.src=`${process.env.IFRAME_URL||s}?${m}${l}`,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},v=z;var X=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([n,r])=>{n in e.style&&(e.style[n]=r)})},C=X;var Z=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")},P=Z;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES"},ee=[p.ACTIVATE],te=({event:e,iframeEl:t,promptLogin:n})=>{let{data:r}=e,{from:s,action:i,style:o,keyFrames:a,time:m,extensionId:l}=r;if(s==="bringweb3"&&!(l!==chrome.runtime.id&&!ee.includes(i)))switch(i){case p.OPEN:C(t,o);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),m&&chrome.runtime.sendMessage({action:i,time:m,from:"bringweb3"});break;case p.PROMPT_LOGIN:n();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3"});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:i,time:m,from:"bringweb3"});break;case p.ADD_KEYFRAMES:P(a);break;default:break}},S=te;var ne=({walletAddressListeners:e,getWalletAddress:t,iframeEl:n})=>{for(let r=0;r<e.length;r++){let s=e[r];s&&window.addEventListener(s,async i=>{if(!n&&(n=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!n)||!n.contentWindow)return;let o=await t();n.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:o},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:o})})}},R=ne;var y=null,L=!1,re=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:n,lightTheme:r,darkTheme:s,theme:i,text:o})=>{if(!e||!t||!n?.length)throw new Error("Missing configuration");R({walletAddressListeners:n,getWalletAddress:e,iframeEl:y}),window.addEventListener("message",a=>S({event:a,iframeEl:y,promptLogin:t})),chrome.runtime.onMessage.addListener((a,m,l)=>{let{action:c}=a;switch(c){case"GET_WALLET_ADDRESS":return e().then(g=>l({status:"success",walletAddress:g})).catch(g=>l({status:"success",walletAddress:void 0})),!0;case"INJECT":if(L)return;let{token:h,iframeUrl:f}=a;return console.log({iframeUrl:f}),y=v({query:{token:h},iframeUrl:f,theme:i==="dark"?s:r,themeMode:i||"light",text:o}),L=!0,l({status:"success"}),!0;default:console.error(`Unknown action: ${c}`);break}})},M=re;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()},I=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()},O=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()})}),d={set:ae,get:ce,remove:de};var U=30*60*1e3,W=async e=>{let t=await d.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 d.set("walletAddress",t))}catch{}return t},le=e=>{let t=Date.now();return(e-t)/1e3/60},T=async e=>{let t=await I(e);d.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:n}=t,r=le(n);return chrome.alarms.create(A,{delayInMinutes:r||60*24*2}),t.relevantDomains},me=async(e,t,n,r)=>{let s={showNotification:!1,token:"",iframeUrl:""},i=await d.get("notificationCheck");if(i?.check&&Date.now()<i.check)return s;let o=await W(t);if(!o)return s;let a=await _({apiKey:e,walletAddress:o,cashbackUrl:n}),m={check:r?a.nextRequestTimestampActivated:a.nextRequestTimestampRegular,nextRequestTimestampActivated:a.nextRequestTimestampActivated,nextRequestTimestampRegular:a.nextRequestTimestampRegular};return d.set("notificationCheck",m),{showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl}},ue=e=>e.replace(/^(https?:\/\/)?(www\.)?/,""),N=async(e,t)=>{let n=await d.get("relevantDomains");if(n===void 0&&(n=await T(t)),!e||!n||!n.length)return"";let r=ue(e);for(let s of n)if(r.startsWith(s)){let i=await d.get("quietDomains");return i&&i[s]&&Date.now()<i[s]?"":s}return""},j=async(e,t)=>{t||(t=U);let n=await d.get("quietDomains");typeof n=="object"?n[e]=Date.now()+t:n={[e]:Date.now()+U},d.set("quietDomains",n)},pe=e=>e?chrome.runtime.getURL(e):void 0,x=(e,t)=>new Promise((s,i)=>{let o=a=>{chrome.tabs.get(e,m=>{if(chrome.runtime.lastError){i(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,t,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)}),$=async(e,t,n)=>{let r=await me(e,t,pe(n));r.showNotification&&await x(t,{action:"INJECT",token:r.token,iframeUrl:r.iframeUrl})},b={},fe=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),T(e),chrome.alarms.onAlarm.addListener(async r=>{let{name:s}=r;switch(s){case A:T(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 d.get("notificationCheck");if(!o.check||!o.nextRequestTimestampActivated)break;o.check=o.nextRequestTimestampActivated,d.set("notificationCheck",o);break}case"OPT_OUT":{let{time:o}=r;d.set("optOut",Date.now()+o);break}case"CLOSE":{let{time:o}=r,a=await N(s.tab?.url||s.origin,e);if(!a)break;j(a,o);break}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:o}=r;d.set("walletAddress",o);break}default:{console.warn(`Bring unknown action: ${i}`);break}}}),chrome.tabs.onUpdated.addListener(async(r,s,i)=>{let o=await d.get("optOut");if(o&&o>Date.now()){await $(e,r,n);return}if(!i.url)return;let a=i.url.replace("www.",""),m=b[r];if(s.status!=="complete"||a===m)return;b[r]=a;let l=await N(i.url,e);if(!l||!l.length){await $(e,r,n);return}let c=await W(r),{token:h,isValid:f,iframeUrl:g}=await O({apiKey:e,body:{domain:l,url:i.url,address:c}});if(!f){f===!1&&j(l);return}x(r,{action:"INJECT",token:h,domain:a,iframeUrl:g})}),chrome.tabs.onRemoved.addListener(r=>delete b[r])},q=fe;0&&(module.exports={bringInitBackground,bringInitContentScript});
1
+ "use strict";var E=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var n in t)E(e,n,{get:t[n],enumerable:!0})},H=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of J(t))!Q.call(e,s)&&s!==n&&E(e,s,{get:()=>t[s],enumerable:!(r=B(t,s))||r.enumerable});return e};var Y=e=>H(E({},"__esModule",{value:!0}),e);var ye={};G(ye,{bringInitBackground:()=>K,bringInitContentScript:()=>O});module.exports=Y(ye);var z=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()},y=z;var D={name:"@bringweb3/chrome-extension-kit",version:"1.1.7",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"},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"},dependencies:{}};var Z=()=>D.version,P=Z;var ee=({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 u=y({query:{...e,extensionId:o,v:P(),themeMode:n,textMode:r}}),g=t?`&${y({query:t,prefix:"t"})}`:"",c=document.createElement("iframe");return c.id=a,c.src=`${l}?${u}${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},C=ee;var te=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([n,r])=>{n in e.style&&(e.style[n]=r)})},R=te;var ne=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")},S=ne;var f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES"},re=[f.ACTIVATE],se=({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&&!re.includes(i)))switch(i){case f.OPEN:R(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:S(a);break;default:break}},L=se;var M=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})},ie=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:n,iframeEl:r})=>{if(t)t(()=>M({iframeEl:r,getWalletAddress:n}));else if(e)for(let s=0;s<e.length;s++){let i=e[s];i&&window.addEventListener(i,async()=>M({iframeEl:r,getWalletAddress:n}))}},I=ie;var oe=["www.","www1.","www2."],ae=e=>{if(!e)return"";let t=new URL(e).host;for(let n of oe)t.startsWith(n)&&t.replace(n,"");return t},h=ae;var A=null,U=!1,ce=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");I({walletAddressListeners:n,walletAddressUpdateCallback:r,getWalletAddress:e,iframeEl:A}),window.addEventListener("message",d=>L({event:d,iframeEl:A,promptLogin:t})),chrome.runtime.onMessage.addListener((d,l,u)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(k=>u({status:"success",walletAddress:k})).catch(k=>u({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==h(location.href)||U)return;let{token:c,iframeUrl:w}=d;return A=C({query:{token:c},iframeUrl:w,theme:o==="dark"?i:s,themeMode:o||"light",text:a,page:d.page}),U=!0,u({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},O=ce;var p=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 de=async e=>{let t=p.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},_=de;var me=async({apiKey:e,body:t})=>{let n=p.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()},N=me;var le=async({apiKey:e,walletAddress:t,cashbackUrl:n})=>{let r=p.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()},$=le;var b="updateCache";var pe=async(e,t)=>new Promise((n,r)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):n()})}),ue=async e=>new Promise((t,n)=>{chrome.storage.local.get([`bring_${e}`],r=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t(r[`bring_${e}`])})}),fe=async e=>new Promise((t,n)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t()})}),m={set:pe,get:ue,remove:fe};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},ge=e=>{let t=Date.now();return(e-t)/1e3/60},T=async e=>{let t=await _(e);m.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:n}=t,r=ge(n);return chrome.alarms.create(b,{delayInMinutes:r||60*24*2}),t.relevantDomains},he=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}},W=async(e,t)=>{let n=await m.get("relevantDomains");if(n===void 0&&(n=await T(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""},F=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)},we=e=>e?chrome.runtime.getURL(e):void 0,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)}),q=async(e,t,n)=>{let r=await he(e,t,we(n));r.showNotification&&await x(t,{action:"INJECT",page:"notification",token:r.token,iframeUrl:r.iframeUrl})},v={},Ee=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");p.getInstance().setApiEndpoint(t),T(e),chrome.alarms.onAlarm.addListener(async r=>{let{name:s}=r;switch(s){case b:T(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 W(s.tab?.url||s.origin,e);if(!a)break;F(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 q(e,r,n);return}if(!i.url)return;let a=h(i.url),d=v[r];if(s.status!=="complete"||a===d)return;v[r]=a;let l=await W(i.url,e);if(!l||!l.length){await q(e,r,n);return}let u=await V(r),{token:g,isValid:c,iframeUrl:w}=await N({apiKey:e,body:{domain:l,url:i.url,address:u}});if(!c){c===!1&&F(l);return}x(r,{action:"INJECT",token:g,domain:a,iframeUrl:w})}),chrome.tabs.onRemoved.addListener(r=>delete v[r])},K=Ee;0&&(module.exports={bringInitBackground,bringInitContentScript});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var $=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()},w=$;var x={name:"@bringweb3/chrome-extension-kit",version:"1.1.5",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"},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"},dependencies:{}};var q=()=>x.version,D=q;var F=({query:e,theme:t,themeMode:n,text:r,iframeUrl:s})=>{let i=chrome.runtime.id,o=`bringweb3-iframe-${i}`,a=document.getElementById(o);if(a)return a;let m=w({query:{...e,extensionId:i,v:D(),themeMode:n,textMode:r}}),l=t?`&${w({query:t,prefix:"t"})}`:"",c=document.createElement("iframe");return c.id=o,c.src=`${process.env.IFRAME_URL||s}?${m}${l}`,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},k=F;var V=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([n,r])=>{n in e.style&&(e.style[n]=r)})},v=V;var K=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")},C=K;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES"},B=[p.ACTIVATE],J=({event:e,iframeEl:t,promptLogin:n})=>{let{data:r}=e,{from:s,action:i,style:o,keyFrames:a,time:m,extensionId:l}=r;if(s==="bringweb3"&&!(l!==chrome.runtime.id&&!B.includes(i)))switch(i){case p.OPEN:v(t,o);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),m&&chrome.runtime.sendMessage({action:i,time:m,from:"bringweb3"});break;case p.PROMPT_LOGIN:n();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3"});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:i,time:m,from:"bringweb3"});break;case p.ADD_KEYFRAMES:C(a);break;default:break}},P=J;var Q=({walletAddressListeners:e,getWalletAddress:t,iframeEl:n})=>{for(let r=0;r<e.length;r++){let s=e[r];s&&window.addEventListener(s,async i=>{if(!n&&(n=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!n)||!n.contentWindow)return;let o=await t();n.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:o},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:o})})}},S=Q;var E=null,R=!1,G=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:n,lightTheme:r,darkTheme:s,theme:i,text:o})=>{if(!e||!t||!n?.length)throw new Error("Missing configuration");S({walletAddressListeners:n,getWalletAddress:e,iframeEl:E}),window.addEventListener("message",a=>P({event:a,iframeEl:E,promptLogin:t})),chrome.runtime.onMessage.addListener((a,m,l)=>{let{action:c}=a;switch(c){case"GET_WALLET_ADDRESS":return e().then(g=>l({status:"success",walletAddress:g})).catch(g=>l({status:"success",walletAddress:void 0})),!0;case"INJECT":if(R)return;let{token:h,iframeUrl:f}=a;return console.log({iframeUrl:f}),E=k({query:{token:h},iframeUrl:f,theme:i==="dark"?s:r,themeMode:i||"light",text:o}),R=!0,l({status:"success"}),!0;default:console.error(`Unknown action: ${c}`);break}})},H=G;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 Y=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},L=Y;var z=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()},M=z;var X=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()},I=X;var y="updateCache";var Z=async(e,t)=>new Promise((n,r)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):n()})}),ee=async e=>new Promise((t,n)=>{chrome.storage.local.get([`bring_${e}`],r=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t(r[`bring_${e}`])})}),te=async e=>new Promise((t,n)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t()})}),d={set:Z,get:ee,remove:te};var O=30*60*1e3,j=async e=>{let t=await d.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 T(e,{action:"GET_WALLET_ADDRESS"});n?.walletAddress&&t!==n?.walletAddress&&(t=n?.walletAddress,await d.set("walletAddress",t))}catch{}return t},ne=e=>{let t=Date.now();return(e-t)/1e3/60},b=async e=>{let t=await L(e);d.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:n}=t,r=ne(n);return chrome.alarms.create(y,{delayInMinutes:r||60*24*2}),t.relevantDomains},re=async(e,t,n,r)=>{let s={showNotification:!1,token:"",iframeUrl:""},i=await d.get("notificationCheck");if(i?.check&&Date.now()<i.check)return s;let o=await j(t);if(!o)return s;let a=await I({apiKey:e,walletAddress:o,cashbackUrl:n}),m={check:r?a.nextRequestTimestampActivated:a.nextRequestTimestampRegular,nextRequestTimestampActivated:a.nextRequestTimestampActivated,nextRequestTimestampRegular:a.nextRequestTimestampRegular};return d.set("notificationCheck",m),{showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl}},se=e=>e.replace(/^(https?:\/\/)?(www\.)?/,""),_=async(e,t)=>{let n=await d.get("relevantDomains");if(n===void 0&&(n=await b(t)),!e||!n||!n.length)return"";let r=se(e);for(let s of n)if(r.startsWith(s)){let i=await d.get("quietDomains");return i&&i[s]&&Date.now()<i[s]?"":s}return""},U=async(e,t)=>{t||(t=O);let n=await d.get("quietDomains");typeof n=="object"?n[e]=Date.now()+t:n={[e]:Date.now()+O},d.set("quietDomains",n)},ie=e=>e?chrome.runtime.getURL(e):void 0,T=(e,t)=>new Promise((s,i)=>{let o=a=>{chrome.tabs.get(e,m=>{if(chrome.runtime.lastError){i(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,t,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)}),N=async(e,t,n)=>{let r=await re(e,t,ie(n));r.showNotification&&await T(t,{action:"INJECT",token:r.token,iframeUrl:r.iframeUrl})},A={},oe=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),b(e),chrome.alarms.onAlarm.addListener(async r=>{let{name:s}=r;switch(s){case y:b(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 d.get("notificationCheck");if(!o.check||!o.nextRequestTimestampActivated)break;o.check=o.nextRequestTimestampActivated,d.set("notificationCheck",o);break}case"OPT_OUT":{let{time:o}=r;d.set("optOut",Date.now()+o);break}case"CLOSE":{let{time:o}=r,a=await _(s.tab?.url||s.origin,e);if(!a)break;U(a,o);break}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:o}=r;d.set("walletAddress",o);break}default:{console.warn(`Bring unknown action: ${i}`);break}}}),chrome.tabs.onUpdated.addListener(async(r,s,i)=>{let o=await d.get("optOut");if(o&&o>Date.now()){await N(e,r,n);return}if(!i.url)return;let a=i.url.replace("www.",""),m=A[r];if(s.status!=="complete"||a===m)return;A[r]=a;let l=await _(i.url,e);if(!l||!l.length){await N(e,r,n);return}let c=await j(r),{token:h,isValid:f,iframeUrl:g}=await M({apiKey:e,body:{domain:l,url:i.url,address:c}});if(!f){f===!1&&U(l);return}T(r,{action:"INJECT",token:h,domain:a,iframeUrl:g})}),chrome.tabs.onRemoved.addListener(r=>delete A[r])},ae=oe;export{ae as bringInitBackground,H as bringInitContentScript};
1
+ var q=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=q;var k={name:"@bringweb3/chrome-extension-kit",version:"1.1.7",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"},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"},dependencies:{}};var K=()=>k.version,D=K;var B=({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 u=E({query:{...e,extensionId:o,v:D(),themeMode:n,textMode:r}}),g=t?`&${E({query:t,prefix:"t"})}`:"",c=document.createElement("iframe");return c.id=a,c.src=`${l}?${u}${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},P=B;var J=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([n,r])=>{n in e.style&&(e.style[n]=r)})},C=J;var Q=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")},R=Q;var f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES"},G=[f.ACTIVATE],H=({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&&!G.includes(i)))switch(i){case f.OPEN:C(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:R(a);break;default:break}},S=H;var L=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})},Y=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:n,iframeEl:r})=>{if(t)t(()=>L({iframeEl:r,getWalletAddress:n}));else if(e)for(let s=0;s<e.length;s++){let i=e[s];i&&window.addEventListener(i,async()=>L({iframeEl:r,getWalletAddress:n}))}},M=Y;var z=["www.","www1.","www2."],X=e=>{if(!e)return"";let t=new URL(e).host;for(let n of z)t.startsWith(n)&&t.replace(n,"");return t},h=X;var y=null,I=!1,Z=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");M({walletAddressListeners:n,walletAddressUpdateCallback:r,getWalletAddress:e,iframeEl:y}),window.addEventListener("message",d=>S({event:d,iframeEl:y,promptLogin:t})),chrome.runtime.onMessage.addListener((d,l,u)=>{if(d?.from!=="bringweb3")return;let{action:g}=d;switch(g){case"GET_WALLET_ADDRESS":return e().then(x=>u({status:"success",walletAddress:x})).catch(x=>u({status:"success",walletAddress:void 0})),!0;case"INJECT":if(d.domain!==h(location.href)||I)return;let{token:c,iframeUrl:w}=d;return y=P({query:{token:c},iframeUrl:w,theme:o==="dark"?i:s,themeMode:o||"light",text:a,page:d.page}),I=!0,u({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},ee=Z;var p=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 te=async e=>{let t=p.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains`,{headers:{"x-api-key":e}})).json()},U=te;var ne=async({apiKey:e,body:t})=>{let n=p.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()},O=ne;var re=async({apiKey:e,walletAddress:t,cashbackUrl:n})=>{let r=p.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()},_=re;var A="updateCache";var se=async(e,t)=>new Promise((n,r)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):n()})}),ie=async e=>new Promise((t,n)=>{chrome.storage.local.get([`bring_${e}`],r=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t(r[`bring_${e}`])})}),oe=async e=>new Promise((t,n)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):t()})}),m={set:se,get:ie,remove:oe};var N=30*60*1e3,F=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 T(e,{action:"GET_WALLET_ADDRESS"});n?.walletAddress&&t!==n?.walletAddress&&(t=n?.walletAddress,await m.set("walletAddress",t))}catch{}return t},ae=e=>{let t=Date.now();return(e-t)/1e3/60},v=async e=>{let t=await U(e);m.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:n}=t,r=ae(n);return chrome.alarms.create(A,{delayInMinutes:r||60*24*2}),t.relevantDomains},ce=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 F(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}},$=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""},j=async(e,t)=>{t||(t=N);let n=await m.get("quietDomains");typeof n=="object"?n[e]=Date.now()+t:n={[e]:Date.now()+N},m.set("quietDomains",n)},de=e=>e?chrome.runtime.getURL(e):void 0,T=(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)}),W=async(e,t,n)=>{let r=await ce(e,t,de(n));r.showNotification&&await T(t,{action:"INJECT",page:"notification",token:r.token,iframeUrl:r.iframeUrl})},b={},me=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");p.getInstance().setApiEndpoint(t),v(e),chrome.alarms.onAlarm.addListener(async r=>{let{name:s}=r;switch(s){case A: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 $(s.tab?.url||s.origin,e);if(!a)break;j(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 W(e,r,n);return}if(!i.url)return;let a=h(i.url),d=b[r];if(s.status!=="complete"||a===d)return;b[r]=a;let l=await $(i.url,e);if(!l||!l.length){await W(e,r,n);return}let u=await F(r),{token:g,isValid:c,iframeUrl:w}=await O({apiKey:e,body:{domain:l,url:i.url,address:u}});if(!c){c===!1&&j(l);return}T(r,{action:"INJECT",token:g,domain:a,iframeUrl:w})}),chrome.tabs.onRemoved.addListener(r=>delete b[r])},le=me;export{le as bringInitBackground,ee as bringInitContentScript};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bringweb3/chrome-extension-kit",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "Crypto cashback integration kit for crypto outlets extension",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",