@bringweb3/chrome-extension-kit 1.2.7 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var x=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ae=(e,t)=>{for(var r in t)x(e,r,{get:t[r],enumerable:!0})},ce=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ie(t))!se.call(e,o)&&o!==r&&x(e,o,{get:()=>t[o],enumerable:!(n=oe(t,o))||n.enumerable});return e};var me=e=>ce(x({},"__esModule",{value:!0}),e);var We={};ae(We,{bringInitBackground:()=>te,bringInitContentScript:()=>B,getTurnOff:()=>re,setTurnOff:()=>ne});module.exports=me(We);var le=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()},D=le;var M={name:"@bringweb3/chrome-extension-kit",version:"1.2.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"},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 ue=()=>M.version,L=ue;var fe=({query:e,theme:t,themeMode:r,text:n,iframeUrl:o,page:i,switchWallet:m})=>{let a=chrome.runtime.id,c=`bringweb3-iframe-${a}`,l=document.getElementById(c),w=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${i?"/"+i:""}`:o;if(l)return l;let p=D({query:{...e,extensionId:a,v:L(),themeMode:r,textMode:n,switchWallet:String(m)}}),g=t?`&${D({query:t,prefix:"t"})}`:"",d=document.createElement("iframe");return d.id=c,d.src=`${w}?${p}${g}`,d.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),d.style.position="fixed",d.scrolling="no",d.style.overflow="hidden",d.style.width="1px",d.style.height="1px",d.style.right="8px",d.style.borderRadius="10px",d.style.border="none",d.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(d.style.boxShadow=t.popupShadow),document.documentElement.appendChild(d),d},R=fe;var pe=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},W=pe;var ge=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=ge;var f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},he=[f.ACTIVATE],we=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:o,action:i,style:m,keyFrames:a,time:c,extensionId:l,url:w}=n;if(o==="bringweb3"&&!(l!==chrome.runtime.id&&!he.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:w,extensionId:l});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;case f.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:i,from:"bringweb3"});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})},Ee=({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=Ee;var Ae=["www.","www1.","www2."],ye=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of Ae)e.startsWith(t)&&(e=e.replace(t,""));return e},h=ye;var P=null,G=!1,be=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",l=>$({event:l,iframeEl:P,promptLogin:t})),chrome.runtime.onMessage.addListener((l,w,p)=>{if(l?.from!=="bringweb3")return;let{action:g}=l;switch(g){case"GET_WALLET_ADDRESS":return e().then(U=>p({status:"success",walletAddress:U})).catch(U=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":if(l.domain!==h(location.href)||G)return p({status:"Domain already changed"}),!0;let{token:d,iframeUrl:v,userId:S}=l,N={token:d};return S&&(N.userId=S),P=R({query:N,iframeUrl:v,theme:m==="dark"?i:o,themeMode:m||"light",text:a,switchWallet:c,page:l.page}),G=!0,p({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},B=be;var V=e=>{chrome.tabs.create({url:e})};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 Oe=async e=>{let t=u.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains?country=ALL`,{headers:{"x-api-key":e}})).json()},H=Oe;var Te=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()},Q=Te;var C="updateCache";var ve=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),xe=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),De=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:ve,get:xe,remove:De};var J=30*60*1e3,Pe=async(e,t)=>{e=h(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=Pe;var Ce=async({apiKey:e,walletAddress:t,cashbackUrl:r,lastActivation:n})=>{let o=u.getInstance().getApiEndpoint(),i={walletAddress:t};return n&&(i.lastActivation=n),r&&(i.cashbackUrl=r),await(await fetch(`${o}/check/notification`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify(i)})).json()},q=Ce;var Ie=(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"},l=>{chrome.runtime.lastError?a<4?setTimeout(()=>m(a+1),1e3*Math.pow(2,a)):i(new Error(chrome.runtime.lastError.message)):o(l)})})};m(0)}),E=Ie;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 _e=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},o=await s.get("notificationCheck");if(o&&Date.now()<o)return n;let i=t?await A(t):await s.get("walletAddress");if(!i)return n;let m=await s.get("lastActivation"),a=await q({apiKey:e,walletAddress:i,cashbackUrl:r,lastActivation:m});s.set("notificationCheck",a.nextCall);let c={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:a.expiration};return c.showNotification&&await s.set("notification",c),c},b=_e;var Se=e=>e?chrome.runtime.getURL(e):"",O=Se;var Ne=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&y(e),await b(r,void 0,O(n))},Y=Ne;var z=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),X=async()=>{let e=await s.get("optOut");return console.log({isOptedOut:!!(e&&e>Date.now())}),{isOptedOut:!!(e&&e>Date.now())}};var Ue=async()=>{let e=await s.get("id");return!await A()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},T=Ue;var Z=async(e,t,r)=>{await E(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await T(),domain:r})},Me=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 Z(t,o,n);let i=await b(e,t,O(r));if(i.showNotification)return await Z(t,i,n)},I=Me;var Le=e=>{let t=Date.now();return(e-t)/1e3/60},_=async e=>{let t=await H(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=Le(r);return chrome.alarms.create(C,{delayInMinutes:n||60*24*2}),t.relevantDomains},ee=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await _(t)),!e||!r||!r.length)return"";let n=h(e);console.log("check relevant",{domain:n,url:e});for(let o of r)if(n.startsWith(o)){console.log("Found relevant",{domain:n,relevantDomain:o});let i=await s.get("quietDomains");return i&&i[o]&&Date.now()<i[o]?"":o}return""},k={},Re=async({identifier:e,apiEndpoint:t,cashbackPagePath:r})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),await s.get("relevantDomains")||_(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:o}=n;switch(o){case C:_(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 Y(a,c,e,r).then(()=>i()),!0}case"GET_OPT_OUT":return X().then(a=>i(a)),!0;case"OPT_OUT":{let{time:a}=n;return z(a).then(c=>i(c)),!0}case"CLOSE":{let{time:a}=n;return ee(o.tab?.url||o.origin,e).then(c=>{if(!c)return!0;y(c,a),i({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>i(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>i()),i({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${m}`),!0;case"OPEN_CASHBACK_PAGE":return V(r||""),i({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,o,i)=>{if(console.log("before previousUrl",i.url),!i?.url?.startsWith("http")||!i.url)return;let m=h(i.url),a=await s.get("optOut");if(a&&a>Date.now()){await I(e,n,r,m);return}else a&&(s.remove("optOut"),s.remove("optOutKey"));let c=k[n];if(o.status!=="complete"||m===c)return;console.log("after previousUrl"),k[n]=m;let l=await ee(i.url,e);if(!l||!l.length){await I(e,n,r,m);return}let w=await A(n),{token:p,isValid:g,iframeUrl:d}=await Q({apiKey:e,body:{domain:l,url:i.url,address:w}});if(!g){g===!1&&y(l);return}let v=await T();E(n,{action:"INJECT",token:p,domain:m,iframeUrl:d,userId:v})}),chrome.tabs.onRemoved.addListener(n=>delete k[n])},te=Re;var re=()=>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})})}),ne=e=>new Promise((t,r)=>{let n=e?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:n},o=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}o?t({isTurnedOff:o.isOptedOut}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getTurnOff,setTurnOff});
1
+ "use strict";var v=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ae=(e,t)=>{for(var r in t)v(e,r,{get:t[r],enumerable:!0})},ce=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ie(t))!se.call(e,i)&&i!==r&&v(e,i,{get:()=>t[i],enumerable:!(n=oe(t,i))||n.enumerable});return e};var me=e=>ce(v({},"__esModule",{value:!0}),e);var We={};ae(We,{bringInitBackground:()=>te,bringInitContentScript:()=>B,getTurnOff:()=>re,setTurnOff:()=>ne});module.exports=me(We);var de=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=de;var U={name:"@bringweb3/chrome-extension-kit",version:"1.2.8",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 ue=()=>U.version,L=ue;var fe=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:o,switchWallet:d})=>{let a=chrome.runtime.id,m=`bringweb3-iframe-${a}`,c=document.getElementById(m),w=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${o?"/"+o:""}`:i;if(c)return c;let u=D({query:{...e,extensionId:a,v:L(),themeMode:r,textMode:n,switchWallet:String(d)}}),g=t?`&${D({query:t,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=m,l.src=`${w}?${u}${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=fe;var pe=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},W=pe;var ge=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")},F=ge;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},he=[p.ACTIVATE],we=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:i,action:o,style:d,keyFrames:a,time:m,extensionId:c,url:w,domain:u}=n;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!he.includes(o)))switch(o){case p.OPEN:W(t,d);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),m&&chrome.runtime.sendMessage({action:o,time:m,domain:u,from:"bringweb3"});break;case p.PROMPT_LOGIN:r();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",url:w,extensionId:c});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:o,time:m,from:"bringweb3"});break;case p.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case p.ADD_KEYFRAMES:F(a);break;case p.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:o,from:"bringweb3"});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})},Ee=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:n})=>{if(t)t(()=>j({iframeEl:n,getWalletAddress:r}));else if(e)for(let i=0;i<e.length;i++){let o=e[i];o&&window.addEventListener(o,async()=>j({iframeEl:n,getWalletAddress:r}))}},K=Ee;var Ae=["www.","www1.","www2."],ye=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of Ae)e.startsWith(t)&&(e=e.replace(t,""));return e},h=ye;var P=null,G=!1,be=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:i,darkTheme:o,theme:d,text:a,switchWallet:m=!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",c=>$({event:c,iframeEl:P,promptLogin:t})),chrome.runtime.onMessage.addListener((c,w,u)=>{if(c?.from!=="bringweb3")return;let{action:g}=c;switch(g){case"GET_WALLET_ADDRESS":return e().then(M=>u({status:"success",walletAddress:M})).catch(M=>u({status:"success",walletAddress:void 0})),!0;case"INJECT":if(c.domain!==h(location.href)||G)return u({status:"Domain already changed"}),!0;let{token:l,iframeUrl:x,userId:S}=c,N={token:l};return S&&(N.userId=S),P=R({query:N,iframeUrl:x,theme:d==="dark"?o:i,themeMode:d||"light",text:a,switchWallet:m,page:c.page}),G=!0,u({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},B=be;var V=e=>{chrome.tabs.create({url:e})};var f=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 Oe=async e=>{let t=f.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains?country=ALL`,{headers:{"x-api-key":e}})).json()},H=Oe;var Te=async({apiKey:e,body:t})=>{let r=f.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()},Q=Te;var C="updateCache";var xe=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}`])})}),De=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:xe,get:ve,remove:De};var q=30*60*1e3,Pe=async(e,t)=>{e=h(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)},E=Pe;var Ce=async({apiKey:e,walletAddress:t,cashbackUrl:r,lastActivation:n})=>{let i=f.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()},J=Ce;var Ie=(e,t)=>new Promise((i,o)=>{let d=a=>{chrome.tabs.get(e,m=>{if(chrome.runtime.lastError){o(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},c=>{chrome.runtime.lastError?a<4?setTimeout(()=>d(a+1),1e3*Math.pow(2,a)):o(new Error(chrome.runtime.lastError.message)):i(c)})})};d(0)}),A=Ie;var _e=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 A(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await s.set("walletAddress",t))}catch{}return t},y=_e;var ke=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 y(t):await s.get("walletAddress");if(!o)return n;let d=await s.get("lastActivation"),a=await J({apiKey:e,walletAddress:o,cashbackUrl:r,lastActivation:d});s.set("notificationCheck",a.nextCall);let m={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:a.expiration};return m.showNotification&&await s.set("notification",m),m},b=ke;var Se=e=>e?chrome.runtime.getURL(e):"",O=Se;var Ne=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&E(e),await b(r,void 0,O(n))},Y=Ne;var z=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),X=async()=>{let e=await s.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var Me=async()=>{let e=await s.get("id");return!await y()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},T=Me;var Z=async(e,t,r)=>{await A(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await T(),domain:r})},Ue=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 Z(t,i,n);let o=await b(e,t,O(r));if(o.showNotification)return await Z(t,o,n)},I=Ue;var Le=e=>{let t=Date.now();return(e-t)/1e3/60},k=async e=>{let t=await H(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=Le(r);return chrome.alarms.create(C,{delayInMinutes:n||60*24*2}),t.relevantDomains},ee=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await k(t)),!e||!r||!r.length)return"";let n=h(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""},_={},Re=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");f.getInstance().setApiEndpoint(t),await s.get("relevantDomains")||k(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:i}=n;switch(i){case C:k(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:d}=n;switch(d){case"ACTIVATE":{let{url:a,extensionId:m}=n;return Y(a,m,e,r).then(()=>o()),!0}case"GET_OPT_OUT":return X().then(a=>o(a)),!0;case"OPT_OUT":{let{time:a}=n;return z(a).then(m=>o(m)),!0}case"CLOSE":{let{time:a,domain:m}=n;return m?(E(m,a),o({message:"domain added to quiet list"})):ee(i.tab?.url||i.origin,e).then(c=>{if(!c)return!0;E(c,a),o({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>o(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>o()),o({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${d}`),!0;case"OPEN_CASHBACK_PAGE":return V(r||""),o({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,i,o)=>{if(!o?.url?.startsWith("http")||!o.url)return;let d=h(o.url),a=await s.get("optOut");if(a&&a>Date.now()){await I(e,n,r,d);return}else a&&(s.remove("optOut"),s.remove("optOutKey"));let m=_[n];if(i.status!=="complete"||d===m)return;_[n]=d;let c=await ee(o.url,e);if(!c||!c.length){await I(e,n,r,d);return}let w=await y(n),{token:u,isValid:g,iframeUrl:l}=await Q({apiKey:e,body:{domain:c,url:o.url,address:w}});if(!g){g===!1&&E(c);return}let x=await T();A(n,{action:"INJECT",token:u,domain:d,iframeUrl:l,userId:x})}),chrome.tabs.onRemoved.addListener(n=>delete _[n])},te=Re;var re=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e({isTurnedOff:r.isOptedOut})})}),ne=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")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getTurnOff,setTurnOff});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var Z=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()},x=Z;var U={name:"@bringweb3/chrome-extension-kit",version:"1.2.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"},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 te=()=>U.version,M=te;var re=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:o,switchWallet:m})=>{let a=chrome.runtime.id,c=`bringweb3-iframe-${a}`,l=document.getElementById(c),w=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${o?"/"+o:""}`:i;if(l)return l;let p=x({query:{...e,extensionId:a,v:M(),themeMode:r,textMode:n,switchWallet:String(m)}}),g=t?`&${x({query:t,prefix:"t"})}`:"",d=document.createElement("iframe");return d.id=c,d.src=`${w}?${p}${g}`,d.setAttribute("sandbox","allow-popups allow-scripts allow-same-origin allow-top-navigation-by-user-activation"),d.style.position="fixed",d.scrolling="no",d.style.overflow="hidden",d.style.width="1px",d.style.height="1px",d.style.right="8px",d.style.borderRadius="10px",d.style.border="none",d.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(d.style.boxShadow=t.popupShadow),document.documentElement.appendChild(d),d},L=re;var ne=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},R=ne;var oe=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=oe;var f={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},ie=[f.ACTIVATE],se=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:i,action:o,style:m,keyFrames:a,time:c,extensionId:l,url:w}=n;if(i==="bringweb3"&&!(l!==chrome.runtime.id&&!ie.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:w,extensionId:l});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;case f.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:o,from:"bringweb3"});break;default:break}},F=se;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})},ae=({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=ae;var ce=["www.","www1.","www2."],me=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of ce)e.startsWith(t)&&(e=e.replace(t,""));return e},h=me;var D=null,K=!1,le=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:D}),window.addEventListener("message",l=>F({event:l,iframeEl:D,promptLogin:t})),chrome.runtime.onMessage.addListener((l,w,p)=>{if(l?.from!=="bringweb3")return;let{action:g}=l;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(l.domain!==h(location.href)||K)return p({status:"Domain already changed"}),!0;let{token:d,iframeUrl:v,userId:_}=l,S={token:d};return _&&(S.userId=_),D=L({query:S,iframeUrl:v,theme:m==="dark"?o:i,themeMode:m||"light",text:a,switchWallet:c,page:l.page}),K=!0,p({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},de=le;var G=e=>{chrome.tabs.create({url:e})};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?country=ALL`,{headers:{"x-api-key":e}})).json()},B=ue;var fe=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()},V=fe;var P="updateCache";var pe=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),ge=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),he=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:pe,get:ge,remove:he};var H=30*60*1e3,we=async(e,t)=>{e=h(e),t||(t=H);let r=await s.get("quietDomains");typeof r=="object"?r[e]=Date.now()+t:r={[e]:Date.now()+H},s.set("quietDomains",r)},y=we;var Ee=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()},Q=Ee;var Ae=(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"},l=>{chrome.runtime.lastError?a<4?setTimeout(()=>m(a+1),1e3*Math.pow(2,a)):o(new Error(chrome.runtime.lastError.message)):i(l)})})};m(0)}),E=Ae;var ye=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=ye;var be=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 Q({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},b=be;var Oe=e=>e?chrome.runtime.getURL(e):"",O=Oe;var Te=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&y(e),await b(r,void 0,O(n))},J=Te;var q=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),Y=async()=>{let e=await s.get("optOut");return console.log({isOptedOut:!!(e&&e>Date.now())}),{isOptedOut:!!(e&&e>Date.now())}};var ve=async()=>{let e=await s.get("id");return!await A()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},T=ve;var z=async(e,t,r)=>{await E(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await T(),domain:r})},xe=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 z(t,i,n);let o=await b(e,t,O(r));if(o.showNotification)return await z(t,o,n)},C=xe;var De=e=>{let t=Date.now();return(e-t)/1e3/60},k=async e=>{let t=await B(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=De(r);return chrome.alarms.create(P,{delayInMinutes:n||60*24*2}),t.relevantDomains},X=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await k(t)),!e||!r||!r.length)return"";let n=h(e);console.log("check relevant",{domain:n,url:e});for(let i of r)if(n.startsWith(i)){console.log("Found relevant",{domain:n,relevantDomain:i});let o=await s.get("quietDomains");return o&&o[i]&&Date.now()<o[i]?"":i}return""},I={},Pe=async({identifier:e,apiEndpoint:t,cashbackPagePath:r})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(t),await s.get("relevantDomains")||k(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:i}=n;switch(i){case P:k(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 Y().then(a=>o(a)),!0;case"OPT_OUT":{let{time:a}=n;return q(a).then(c=>o(c)),!0}case"CLOSE":{let{time:a}=n;return X(i.tab?.url||i.origin,e).then(c=>{if(!c)return!0;y(c,a),o({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>o(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>o()),o({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${m}`),!0;case"OPEN_CASHBACK_PAGE":return G(r||""),o({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,i,o)=>{if(console.log("before previousUrl",o.url),!o?.url?.startsWith("http")||!o.url)return;let m=h(o.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=I[n];if(i.status!=="complete"||m===c)return;console.log("after previousUrl"),I[n]=m;let l=await X(o.url,e);if(!l||!l.length){await C(e,n,r,m);return}let w=await A(n),{token:p,isValid:g,iframeUrl:d}=await V({apiKey:e,body:{domain:l,url:o.url,address:w}});if(!g){g===!1&&y(l);return}let v=await T();E(n,{action:"INJECT",token:p,domain:m,iframeUrl:d,userId:v})}),chrome.tabs.onRemoved.addListener(n=>delete I[n])},Ce=Pe;var Ie=()=>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{Ce as bringInitBackground,de as bringInitContentScript,Ie as getTurnOff,ke as setTurnOff};
1
+ var Z=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()},v=Z;var M={name:"@bringweb3/chrome-extension-kit",version:"1.2.8",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 te=()=>M.version,U=te;var re=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:o,switchWallet:d})=>{let a=chrome.runtime.id,m=`bringweb3-iframe-${a}`,c=document.getElementById(m),w=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${o?"/"+o:""}`:i;if(c)return c;let u=v({query:{...e,extensionId:a,v:U(),themeMode:r,textMode:n,switchWallet:String(d)}}),g=t?`&${v({query:t,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=m,l.src=`${w}?${u}${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=re;var ne=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},R=ne;var oe=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=oe;var p={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},ie=[p.ACTIVATE],se=({event:e,iframeEl:t,promptLogin:r})=>{let{data:n}=e,{from:i,action:o,style:d,keyFrames:a,time:m,extensionId:c,url:w,domain:u}=n;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!ie.includes(o)))switch(o){case p.OPEN:R(t,d);break;case p.CLOSE:t&&t.parentNode?.removeChild(t),m&&chrome.runtime.sendMessage({action:o,time:m,domain:u,from:"bringweb3"});break;case p.PROMPT_LOGIN:r();break;case p.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",url:w,extensionId:c});break;case p.OPT_OUT:chrome.runtime.sendMessage({action:o,time:m,from:"bringweb3"});break;case p.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case p.ADD_KEYFRAMES:W(a);break;case p.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:o,from:"bringweb3"});break;default:break}},F=se;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})},ae=({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=ae;var ce=["www.","www1.","www2."],me=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of ce)e.startsWith(t)&&(e=e.replace(t,""));return e},h=me;var D=null,K=!1,de=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:i,darkTheme:o,theme:d,text:a,switchWallet:m=!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:D}),window.addEventListener("message",c=>F({event:c,iframeEl:D,promptLogin:t})),chrome.runtime.onMessage.addListener((c,w,u)=>{if(c?.from!=="bringweb3")return;let{action:g}=c;switch(g){case"GET_WALLET_ADDRESS":return e().then(N=>u({status:"success",walletAddress:N})).catch(N=>u({status:"success",walletAddress:void 0})),!0;case"INJECT":if(c.domain!==h(location.href)||K)return u({status:"Domain already changed"}),!0;let{token:l,iframeUrl:x,userId:k}=c,S={token:l};return k&&(S.userId=k),D=L({query:S,iframeUrl:x,theme:d==="dark"?o:i,themeMode:d||"light",text:a,switchWallet:m,page:c.page}),K=!0,u({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},le=de;var G=e=>{chrome.tabs.create({url:e})};var f=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=f.getInstance().getApiEndpoint();return await(await fetch(`${t}/domains?country=ALL`,{headers:{"x-api-key":e}})).json()},B=ue;var fe=async({apiKey:e,body:t})=>{let r=f.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()},V=fe;var P="updateCache";var pe=async(e,t)=>new Promise((r,n)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?n(chrome.runtime.lastError):r()})}),ge=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],n=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(n[`bring_${e}`])})}),he=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),s={set:pe,get:ge,remove:he};var H=30*60*1e3,we=async(e,t)=>{e=h(e),t||(t=H);let r=await s.get("quietDomains");typeof r=="object"?r[e]=Date.now()+t:r={[e]:Date.now()+H},s.set("quietDomains",r)},E=we;var Ee=async({apiKey:e,walletAddress:t,cashbackUrl:r,lastActivation:n})=>{let i=f.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()},Q=Ee;var Ae=(e,t)=>new Promise((i,o)=>{let d=a=>{chrome.tabs.get(e,m=>{if(chrome.runtime.lastError){o(new Error(chrome.runtime.lastError.message));return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},c=>{chrome.runtime.lastError?a<4?setTimeout(()=>d(a+1),1e3*Math.pow(2,a)):o(new Error(chrome.runtime.lastError.message)):i(c)})})};d(0)}),A=Ae;var ye=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 A(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await s.set("walletAddress",t))}catch{}return t},y=ye;var be=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 y(t):await s.get("walletAddress");if(!o)return n;let d=await s.get("lastActivation"),a=await Q({apiKey:e,walletAddress:o,cashbackUrl:r,lastActivation:d});s.set("notificationCheck",a.nextCall);let m={showNotification:a.showNotification,token:a.token,iframeUrl:a.iframeUrl,expiration:a.expiration};return m.showNotification&&await s.set("notification",m),m},b=be;var Oe=e=>e?chrome.runtime.getURL(e):"",O=Oe;var Te=async(e,t,r,n)=>{t===chrome.runtime.id&&await s.set("lastActivation",Date.now()),e&&E(e),await b(r,void 0,O(n))},q=Te;var J=async e=>e<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+e),{isOptedOut:!0}),Y=async()=>{let e=await s.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var xe=async()=>{let e=await s.get("id");return!await y()&&!e&&(e=Math.random().toString(36).substring(2),s.set("id",e)),e},T=xe;var z=async(e,t,r)=>{await A(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await T(),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 z(t,i,n);let o=await b(e,t,O(r));if(o.showNotification)return await z(t,o,n)},C=ve;var De=e=>{let t=Date.now();return(e-t)/1e3/60},_=async e=>{let t=await B(e);s.set("relevantDomains",t.relevantDomains);let{nextUpdateTimestamp:r}=t,n=De(r);return chrome.alarms.create(P,{delayInMinutes:n||60*24*2}),t.relevantDomains},X=async(e,t)=>{let r=await s.get("relevantDomains");if(r===void 0&&(r=await _(t)),!e||!r||!r.length)return"";let n=h(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""},I={},Pe=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");f.getInstance().setApiEndpoint(t),await s.get("relevantDomains")||_(e),chrome.alarms.onAlarm.addListener(async n=>{let{name:i}=n;switch(i){case P:_(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:d}=n;switch(d){case"ACTIVATE":{let{url:a,extensionId:m}=n;return q(a,m,e,r).then(()=>o()),!0}case"GET_OPT_OUT":return Y().then(a=>o(a)),!0;case"OPT_OUT":{let{time:a}=n;return J(a).then(m=>o(m)),!0}case"CLOSE":{let{time:a,domain:m}=n;return m?(E(m,a),o({message:"domain added to quiet list"})):X(i.tab?.url||i.origin,e).then(c=>{if(!c)return!0;E(c,a),o({message:"domain added to quiet list"})}),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=n;return s.set("walletAddress",a).then(()=>o(a)),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>o()),o({message:"notification erased successfully"}),!0;default:return console.warn(`Bring unknown action: ${d}`),!0;case"OPEN_CASHBACK_PAGE":return G(r||""),o({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,i,o)=>{if(!o?.url?.startsWith("http")||!o.url)return;let d=h(o.url),a=await s.get("optOut");if(a&&a>Date.now()){await C(e,n,r,d);return}else a&&(s.remove("optOut"),s.remove("optOutKey"));let m=I[n];if(i.status!=="complete"||d===m)return;I[n]=d;let c=await X(o.url,e);if(!c||!c.length){await C(e,n,r,d);return}let w=await y(n),{token:u,isValid:g,iframeUrl:l}=await V({apiKey:e,body:{domain:c,url:o.url,address:w}});if(!g){g===!1&&E(c);return}let x=await T();A(n,{action:"INJECT",token:u,domain:d,iframeUrl:l,userId:x})}),chrome.tabs.onRemoved.addListener(n=>delete I[n])},Ce=Pe;var Ie=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e({isTurnedOff:r.isOptedOut})})}),_e=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{Ce as bringInitBackground,le as bringInitContentScript,Ie as getTurnOff,_e as setTurnOff};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bringweb3/chrome-extension-kit",
3
- "version": "1.2.7",
3
+ "version": "1.2.8",
4
4
  "description": "Crypto cashback integration kit for crypto outlets extension",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",