@bringweb3/chrome-extension-kit 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var _=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var dt=Object.prototype.hasOwnProperty;var mt=(t,e)=>{for(var r in e)_(t,r,{get:e[r],enumerable:!0})},lt=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ct(e))!dt.call(t,n)&&n!==r&&_(t,n,{get:()=>e[n],enumerable:!(i=at(e,n))||i.enumerable});return t};var ut=t=>lt(_({},"__esModule",{value:!0}),t);var qt={};mt(qt,{bringInitBackground:()=>it,bringInitContentScript:()=>B,getTurnOff:()=>st,setTurnOff:()=>ot});module.exports=ut(qt);var ft=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,s])=>{s&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(s)):e.append(n,s))}),e.toString()},S=ft;var L={name:"@bringweb3/chrome-extension-kit",version:"1.3.0",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var gt=()=>L.version,b=gt;var ht=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:s,switchWallet:a})=>{let d=chrome.runtime.id,m=`bringweb3-iframe-${d}`,c=document.getElementById(m),u=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:n;if(c)return c;let f=S({query:{...t,extensionId:d,v:b(),themeMode:r,textMode:i,switchWallet:String(a)}}),g=e?`&${S({query:e,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=m,l.src=`${u}?${f}${g}`,l.setAttribute("sandbox","allow-scripts allow-same-origin"),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;",e?.popupShadow&&(l.style.boxShadow=e.popupShadow),document.documentElement.appendChild(l),l},R=ht;var wt=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},F=wt;var Et=t=>{if(!t||!t.length)return;let e=document.createElement("style");document.head.appendChild(e);let r=e.sheet;r?t.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},$=Et;var h={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"},At=[h.ACTIVATE],bt=({event:t,iframeEl:e,promptLogin:r})=>{let{data:i}=t,{from:n,action:s,style:a,keyFrames:d,time:m,extensionId:c,url:u,domain:f,redirectUrl:g}=i;if(n==="bringweb3"&&!(c!==chrome.runtime.id&&!At.includes(s)))switch(s){case h.OPEN:F(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),m&&chrome.runtime.sendMessage({action:s,time:m,domain:f,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:s,from:"bringweb3",domain:f,extensionId:c,time:m,redirectUrl:g});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:s,time:m,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:s,from:"bringweb3"});case h.ADD_KEYFRAMES:$(d);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:s,url:u,from:"bringweb3"});break;default:break}},G=bt;var K=async({iframeEl:t,getWalletAddress:e})=>{if(!t&&(t=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!t)||!t.contentWindow)return;let r=await e();t.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},yt=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>K({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let s=t[n];s&&window.addEventListener(s,async()=>K({iframeEl:i,getWalletAddress:r}))}},j=yt;var Ot=["www.","www1.","www2."],Tt=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of Ot)t.startsWith(e)&&(t=t.replace(e,""));return t},y=Tt;var k=null,q=!1,vt=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:s,theme:a,text:d,switchWallet:m=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");j({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:k}),window.addEventListener("message",c=>G({event:c,iframeEl:k,promptLogin:e})),chrome.runtime.onMessage.addListener((c,u,f)=>{if(c?.from!=="bringweb3")return;let{action:g}=c;switch(g){case"GET_WALLET_ADDRESS":return t().then(W=>f({status:"success",walletAddress:W})).catch(W=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":if(c.domain!==y(location.href)||q)return f({status:"Domain already changed"}),!0;let{token:l,iframeUrl:T,userId:v}=c,x={token:l};return v&&(x.userId=v),k=R({query:x,iframeUrl:T,theme:a==="dark"?s:n,themeMode:a||"light",text:d,switchWallet:m,page:c.page}),q=!0,f({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},B=vt;var V=t=>{t&&chrome.tabs.create({url:t})};var p=class t{static instance=null;apiEndpoint="";whitelistEndpoint="";constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}setWhitelistEndpoint(e){this.whitelistEndpoint=e}setApiEndpoint(e){this.apiEndpoint=e==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}getWhitelistEndpoint(){if(!this.whitelistEndpoint)throw new Error("Whitelist endpoint not set. Call setWhitelistEndpoint first.");return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}};var xt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Pt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),Dt=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),o={set:xt,get:Pt,remove:Dt};var H=require("uuid"),Ct=async()=>{let t=await o.get("id");return t||(t=(0,H.v4)(),o.set("id",t)),t},w=Ct;var It=async t=>{let{path:e,method:r,apiKey:i,params:n}=t;if(!t||!e||!r||!n&&r==="POST"||!i)throw new Error("Missing endpoint or method");let s=p.getInstance().getApiEndpoint();if(s+=e,r==="GET"){let m=new URLSearchParams({...n,version:b(),opt_out:await o.get("optOut")||0,user_id:await w()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});s+=`?${m.toString()}`}else r==="POST"&&(n={...n,version:b(),optOut:await o.get("optOut")||0,userId:await w()||void 0,walletAddress:n?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(s,{method:r,headers:{"Content-Type":"application/json","x-api-key":i},body:r==="POST"?JSON.stringify(n):void 0})).json()},E=It;var _t=async t=>{let e=p.getInstance().getWhitelistEndpoint(),r={path:"/domains",apiKey:t,method:"GET"};return e&&(r.params={whitelist:encodeURIComponent(e)}),await E(r)},Q=_t;var St=async({apiKey:t,body:e})=>await E({path:"/check/popup",apiKey:t,method:"POST",params:e}),J=St;var U="updateCache";var Y=30*60*1e3,kt=async(t,e)=>{e||(e=Y);let r=await o.get("quietDomains");typeof r=="object"?r[t]=Date.now()+e:r={[t]:Date.now()+Y},o.set("quietDomains",r)},O=kt;var Ut=async({apiKey:t,walletAddress:e,cashbackUrl:r,lastActivation:i})=>{let n={walletAddress:e};return i&&(n.lastActivation=i),r&&(n.cashbackUrl=r),await E({path:"/check/notification",apiKey:t,method:"POST",params:n})},z=Ut;var Nt=(t,e)=>new Promise((n,s)=>{let a=d=>{chrome.tabs.get(t,m=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},c=>{chrome.runtime.lastError?d<4?setTimeout(()=>a(d+1),1e3*Math.pow(2,d)):n(null):n(c||null)})})};a(0)}),A=Nt;var Mt=async t=>{let e=await o.get("walletAddress");try{if(!t){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return e;t=i[0].id}let r=await A(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await o.set("walletAddress",e))}catch{}return e},P=Mt;var Wt=async(t,e,r)=>{let i={showNotification:!1,token:"",iframeUrl:""},n=await o.get("notificationCheck");if(n&&Date.now()<n)return i;let s=e?await P(e):await o.get("walletAddress");if(!s)return i;let a=await o.get("lastActivation"),d=await z({apiKey:t,walletAddress:s,cashbackUrl:r,lastActivation:a});o.set("notificationCheck",d.nextCall);let m={showNotification:d.showNotification,token:d.token,iframeUrl:d.iframeUrl,expiration:d.expiration};return m.showNotification&&await o.set("notification",m),m},D=Wt;var Lt=t=>t?chrome.runtime.getURL(t):"",C=Lt;var Rt=(t,e)=>{try{let r=p.getInstance().getWhitelistEndpoint();if(!e.length)return!!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(s=>{if(s.startsWith("*.")){let a=s.slice(2);return n.endsWith(a)}return!1})}catch{return console.error("Invalid URL:",t),!1}},I=Rt;var Ft=async(t,e,r,i,n,s,a)=>{if(e===chrome.runtime.id&&await o.set("lastActivation",Date.now()),t&&O(t,n||Date.now()+24*60*60*1e3),s&&a){let d=await o.get("redirectsWhitelist");(!d?.length||I(a,d))&&chrome.tabs.update(s,{url:a})}await D(r,void 0,C(i))},X=Ft;var Z=async t=>t<0?(await o.remove("optOut"),{isOptedOut:!1}):(await o.set("optOut",Date.now()+t),{isOptedOut:!0}),tt=async()=>{let t=await o.get("optOut");return{isOptedOut:!!(t&&t>Date.now())}};var et=async(t,e,r)=>{await A(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await w(),domain:r})},$t=async(t,e,r,i)=>{let n=await o.get("notification");if(n?.expiration<Date.now())await o.remove("notification");else if(n)return await et(e,n,i);let s=await D(t,e,C(r));if(s.showNotification)return await et(e,s,i)},rt=$t;var nt=async()=>{try{let t=p.getInstance().getWhitelistEndpoint();if(!t)return[];let e=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!e.ok)throw new Error("Failed to fetch whitelist");let r=await e.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(t){return console.error("Error fetching whitelist:",t),[]}};var Gt=t=>{let e=Date.now();return(t-e)/1e3/60},M=async t=>{let e=await Q(t);o.set("relevantDomains",e.relevantDomains);let r=await nt();r&&o.set("redirectsWhitelist",r);let{nextUpdateTimestamp:i}=e,n=Gt(i);return chrome.alarms.create(U,{delayInMinutes:n||60*24*2}),e.relevantDomains},Kt=async(t,e)=>{let r=await o.get("relevantDomains");if(r===void 0&&(r=await M(e)),!t||!r||!r.length)return"";let i=y(t);for(let n of r)if(i.startsWith(n)){let s=await o.get("quietDomains");return s&&s[n]&&Date.now()<s[n]?"":n}return""},N={},jt=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i})=>{if(!t||!e)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(e))throw new Error("unknown apiEndpoint");p.getInstance().setApiEndpoint(e),p.getInstance().setWhitelistEndpoint(i||""),await o.get("relevantDomains")||M(t),chrome.alarms.onAlarm.addListener(async n=>{let{name:s}=n;switch(s){case U:M(t);break;default:console.error("alarm with no use case:",s);break}}),chrome.runtime.onMessage.addListener((n,s,a)=>{if(n?.from!=="bringweb3")return;let{action:d}=n;switch(d){case"ACTIVATE":{let{domain:c,extensionId:u,time:f,redirectUrl:g}=n;return X(c,u,t,r,f,s.tab?.id,g).then(()=>a()),!0}case"GET_OPT_OUT":return tt().then(c=>a(c)),!0;case"OPT_OUT":{let{time:c}=n;return Z(c).then(u=>a(u)),!0}case"CLOSE":{let{time:c,domain:u}=n;return u&&(O(u,c),a({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:c}=n;return c?o.set("walletAddress",c).then(()=>a(c)):o.remove("walletAddress").then(()=>a({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>a({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${d}`),!0;case"OPEN_CASHBACK_PAGE":let{url:m}=n;return V(m||r),a({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,s,a)=>{if(!a?.url?.startsWith("http")||!a.url)return;let d=y(a.url),m=await o.get("optOut");if(m&&m>Date.now())return;m&&(o.remove("optOut"),o.remove("optOutKey"));let c=N[n];if(s.status!=="complete"||d===c)return;N[n]=d;let u=await Kt(a.url,t);if(!u||!u.length){await rt(t,n,r,d);return}let f=await P(n),{token:g,isValid:l,iframeUrl:T,networkUrl:v}=await J({apiKey:t,body:{domain:u,url:a.url,address:f}});if(!l){l===!1&&O(u);return}if(!I(v,await o.get("redirectsWhitelist")))return;let x=await w();A(n,{action:"INJECT",token:g,domain:d,iframeUrl:T,userId:x})}),chrome.tabs.onRemoved.addListener(n=>delete N[n])},it=jt;var st=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t({isTurnedOff:r.isOptedOut})})}),ot=t=>new Promise((e,r)=>{let i=t?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?e({isTurnedOff:n.isOptedOut}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getTurnOff,setTurnOff});
|
|
1
|
+
"use strict";var S=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var mt=Object.prototype.hasOwnProperty;var dt=(t,e)=>{for(var r in e)S(t,r,{get:e[r],enumerable:!0})},lt=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ct(e))!mt.call(t,n)&&n!==r&&S(t,n,{get:()=>e[n],enumerable:!(i=at(e,n))||i.enumerable});return t};var ut=t=>lt(S({},"__esModule",{value:!0}),t);var qt={};dt(qt,{bringInitBackground:()=>it,bringInitContentScript:()=>B,getTurnOff:()=>st,setTurnOff:()=>ot});module.exports=ut(qt);var ft=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,o])=>{o&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(o)):e.append(n,o))}),e.toString()},U=ft;var L={name:"@bringweb3/chrome-extension-kit",version:"1.3.2",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var gt=()=>L.version,b=gt;var ht=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:o,switchWallet:a})=>{let c=chrome.runtime.id,d=`bringweb3-iframe-${c}`,m=document.getElementById(d),f=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${o?"/"+o:""}`:n;if(m)return m;let p=U({query:{...t,extensionId:c,v:b(),themeMode:r,textMode:i,switchWallet:String(a)}}),g=e?`&${U({query:e,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=d,l.src=`${f}?${p}${g}`,l.setAttribute("sandbox","allow-scripts allow-same-origin"),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;",e?.popupShadow&&(l.style.boxShadow=e.popupShadow),document.documentElement.appendChild(l),l},R=ht;var wt=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},K=wt;var Et=t=>{if(!t||!t.length)return;let e=document.createElement("style");document.head.appendChild(e);let r=e.sheet;r?t.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},F=Et;var h={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"},At=[h.ACTIVATE],yt=({event:t,iframeEl:e,promptLogin:r})=>{let{data:i}=t,{from:n,action:o,style:a,keyFrames:c,time:d,extensionId:m,url:f,domain:p,redirectUrl:g}=i;if(n==="bringweb3"&&!(m!==chrome.runtime.id&&!At.includes(o)))switch(o){case h.OPEN:K(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),d&&chrome.runtime.sendMessage({action:o,time:d,domain:p,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",domain:p,extensionId:m,time:d,redirectUrl:g});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:o,time:d,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case h.ADD_KEYFRAMES:F(c);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:o,url:f,from:"bringweb3"});break;default:break}},$=yt;var G=async({iframeEl:t,getWalletAddress:e})=>{if(!t&&(t=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!t)||!t.contentWindow)return;let r=await e();t.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},bt=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>G({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let o=t[n];o&&window.addEventListener(o,async()=>G({iframeEl:i,getWalletAddress:r}))}},j=bt;var Ot=["www.","www1.","www2."],Tt=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of Ot)t.startsWith(e)&&(t=t.replace(e,""));return t},O=Tt;var M=null,q=!1,vt=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:o,theme:a,text:c,switchWallet:d=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");j({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:M}),window.addEventListener("message",m=>$({event:m,iframeEl:M,promptLogin:e})),chrome.runtime.onMessage.addListener((m,f,p)=>{if(m?.from!=="bringweb3")return;let{action:g}=m;switch(g){case"GET_WALLET_ADDRESS":return t().then(W=>p({status:"success",walletAddress:W})).catch(W=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":if(m.domain!==O(location.href)||q)return p({status:"Domain already changed"}),!0;let{token:l,iframeUrl:v,userId:x}=m,P={token:l};return x&&(P.userId=x),M=R({query:P,iframeUrl:v,theme:a==="dark"?o:n,themeMode:a||"light",text:c,switchWallet:d,page:m.page}),q=!0,p({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},B=vt;var V=t=>{t&&chrome.tabs.create({url:t})};var u=class t{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}setWhitelistEndpoint(e){this.whitelistEndpoint=e}setApiEndpoint(e){this.apiEndpoint=e==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}setApiKey(e){this.apiKey=e}getWhitelistEndpoint(){return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var xt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Pt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),Ct=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),s={set:xt,get:Pt,remove:Ct};var H=require("uuid"),Dt=async()=>{let t=await s.get("id");return t||(t=(0,H.v4)(),s.set("id",t)),t},w=Dt;var It=async t=>{let{path:e,method:r,apiKey:i,params:n}=t;if(!t||!e||!r||!n&&r==="POST"||!i)throw new Error("Missing endpoint or method");let o=u.getInstance().getApiEndpoint();if(o+=e,r==="GET"){let d=new URLSearchParams({...n,version:b(),opt_out:await s.get("optOut")||0,user_id:await w()||"undefined",wallet_address:await s.get("walletAddress")||"undefined"});o+=`?${d.toString()}`}else r==="POST"&&(n={...n,version:b(),optOut:await s.get("optOut")||0,userId:await w()||void 0,walletAddress:n?.walletAddress||await s.get("walletAddress")||void 0});return await(await fetch(o,{method:r,headers:{"Content-Type":"application/json","x-api-key":i},body:r==="POST"?JSON.stringify(n):void 0})).json()},E=It;var _t=async({apiKey:t,body:e})=>await E({path:"/check/popup",apiKey:t,method:"POST",params:e}),Q=_t;var C="updateCache";var J=30*60*1e3,kt=async(t,e)=>{e||(e=J);let r=await s.get("quietDomains");typeof r=="object"?r[t]=Date.now()+e:r={[t]:Date.now()+J},s.set("quietDomains",r)},T=kt;var St=async({apiKey:t,walletAddress:e,cashbackUrl:r,lastActivation:i})=>{let n={walletAddress:e};return i&&(n.lastActivation=i),r&&(n.cashbackUrl=r),await E({path:"/check/notification",apiKey:t,method:"POST",params:n})},Y=St;var Ut=(t,e)=>new Promise((n,o)=>{let a=c=>{chrome.tabs.get(t,d=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},m=>{chrome.runtime.lastError?c<4?setTimeout(()=>a(c+1),1e3*Math.pow(2,c)):n(null):n(m||null)})})};a(0)}),A=Ut;var Mt=async t=>{let e=await s.get("walletAddress");try{if(!t){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return e;t=i[0].id}let r=await A(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await s.set("walletAddress",e))}catch{}return e},D=Mt;var Nt=async(t,e,r)=>{let i={showNotification:!1,token:"",iframeUrl:""},n=await s.get("notificationCheck");if(n&&Date.now()<n)return i;let o=e?await D(e):await s.get("walletAddress");if(!o)return i;let a=await s.get("lastActivation"),c=await Y({apiKey:t,walletAddress:o,cashbackUrl:r,lastActivation:a});s.set("notificationCheck",c.nextCall);let d={showNotification:c.showNotification,token:c.token,iframeUrl:c.iframeUrl,expiration:c.expiration};return d.showNotification&&await s.set("notification",d),d},I=Nt;var Wt=t=>t?chrome.runtime.getURL(t):"",_=Wt;var Lt=async t=>{let e=u.getInstance().getWhitelistEndpoint(),r={path:"/domains",apiKey:t,method:"GET"};return e&&(r.params={whitelist:encodeURIComponent(e)}),await E(r)},z=Lt;var X=async()=>{try{let t=u.getInstance().getWhitelistEndpoint();if(!t)return[];let e=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!e.ok)throw new Error("Failed to fetch whitelist");let r=await e.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(t){return console.error("Error fetching whitelist:",t),[]}};var Rt=t=>{let e=Date.now();return(t-e)/1e3/60},y=async()=>{let t=await s.get("relevantDomainsCheck"),e=await s.get("relevantDomains"),r=await s.get("redirectsWhitelist"),i=u.getInstance().getApiKey(),n=u.getInstance().getWhitelistEndpoint();if(e?.length&&t&&t>Date.now()&&(!n||n&&r?.length))return e;let o=await z(i),{nextUpdateTimestamp:a,relevantDomains:c}=o;s.set("relevantDomains",c),s.set("relevantDomainsCheck",a),r=await X(),r&&s.set("redirectsWhitelist",r);let d=Rt(a);return chrome.alarms.create(C,{delayInMinutes:d||60*24*2}),c};var Kt=async(t,e)=>{try{let r=u.getInstance().getWhitelistEndpoint();if(r&&!e?.length&&(await y(),e=await s.get("redirectsWhitelist")),!e?.length)return!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(o=>{if(o.startsWith("*.")){let a=o.slice(2);return n.endsWith(a)}return!1})}catch{return console.error("Invalid URL:",t),!1}},k=Kt;var Ft=async(t,e,r,i,n,o,a)=>{if(e===chrome.runtime.id&&await s.set("lastActivation",Date.now()),t&&T(t,n||Date.now()+24*60*60*1e3),o&&a){let c=await s.get("redirectsWhitelist");(!c?.length||await k(a,c))&&chrome.tabs.update(o,{url:a})}await I(r,void 0,_(i))},Z=Ft;var tt=async t=>t<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+t),{isOptedOut:!0}),et=async()=>{let t=await s.get("optOut");return{isOptedOut:!!(t&&t>Date.now())}};var rt=async(t,e,r)=>{await A(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await w(),domain:r})},$t=async(t,e,r,i)=>{let n=await s.get("notification");if(n?.expiration<Date.now())await s.remove("notification");else if(n)return await rt(e,n,i);let o=await I(t,e,_(r));if(o.showNotification)return await rt(e,o,i)},nt=$t;var Gt=async t=>{let e=await y();if(!t||!e||!e.length)return"";let r=O(t);for(let i of e)if(r.startsWith(i)){let n=await s.get("quietDomains");return n&&n[i]&&Date.now()<n[i]?"":i}return""},N={},jt=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i})=>{if(!t||!e)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(e))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(e),u.getInstance().setWhitelistEndpoint(i||""),u.getInstance().setApiKey(t),y(),chrome.alarms.onAlarm.addListener(async n=>{let{name:o}=n;switch(o){case C:y();break;default:console.error("alarm with no use case:",o);break}}),chrome.runtime.onMessage.addListener((n,o,a)=>{if(n?.from!=="bringweb3")return;let{action:c}=n;switch(c){case"ACTIVATE":{let{domain:m,extensionId:f,time:p,redirectUrl:g}=n;return Z(m,f,t,r,p,o.tab?.id,g).then(()=>a()),!0}case"GET_OPT_OUT":return et().then(m=>a(m)),!0;case"OPT_OUT":{let{time:m}=n;return tt(m).then(f=>a(f)),!0}case"CLOSE":{let{time:m,domain:f}=n;return f&&(T(f,m),a({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:m}=n;return m?s.set("walletAddress",m).then(()=>a(m)):s.remove("walletAddress").then(()=>a({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>a({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${c}`),!0;case"OPEN_CASHBACK_PAGE":let{url:d}=n;return V(d||r),a({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,o,a)=>{if(!a?.url?.startsWith("http")||!a.url)return;let c=O(a.url),d=await s.get("optOut");if(d&&d>Date.now())return;d&&(s.remove("optOut"),s.remove("optOutKey"));let m=N[n];if(o.status!=="complete"||c===m)return;N[n]=c;let f=await Gt(a.url);if(!f||!f.length){await nt(t,n,r,c);return}let p=await D(n),{token:g,isValid:l,iframeUrl:v,networkUrl:x}=await Q({apiKey:t,body:{domain:f,url:a.url,address:p}});if(!l){l===!1&&T(f);return}if(!await k(x,await s.get("redirectsWhitelist")))return;let P=await w();A(n,{action:"INJECT",token:g,domain:c,iframeUrl:v,userId:P})}),chrome.tabs.onRemoved.addListener(n=>delete N[n])},it=jt;var st=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t({isTurnedOff:r.isOptedOut})})}),ot=t=>new Promise((e,r)=>{let i=t?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?e({isTurnedOff:n.isOptedOut}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getTurnOff,setTurnOff});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var et=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,s])=>{s&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(s)):e.append(n,s))}),e.toString()},_=et;var W={name:"@bringweb3/chrome-extension-kit",version:"1.3.0",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var nt=()=>W.version,b=nt;var it=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:s,switchWallet:a})=>{let d=chrome.runtime.id,m=`bringweb3-iframe-${d}`,c=document.getElementById(m),u=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:n;if(c)return c;let f=_({query:{...t,extensionId:d,v:b(),themeMode:r,textMode:i,switchWallet:String(a)}}),g=e?`&${_({query:e,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=m,l.src=`${u}?${f}${g}`,l.setAttribute("sandbox","allow-scripts allow-same-origin"),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;",e?.popupShadow&&(l.style.boxShadow=e.popupShadow),document.documentElement.appendChild(l),l},L=it;var st=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},R=st;var ot=t=>{if(!t||!t.length)return;let e=document.createElement("style");document.head.appendChild(e);let r=e.sheet;r?t.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},F=ot;var h={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"},at=[h.ACTIVATE],ct=({event:t,iframeEl:e,promptLogin:r})=>{let{data:i}=t,{from:n,action:s,style:a,keyFrames:d,time:m,extensionId:c,url:u,domain:f,redirectUrl:g}=i;if(n==="bringweb3"&&!(c!==chrome.runtime.id&&!at.includes(s)))switch(s){case h.OPEN:R(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),m&&chrome.runtime.sendMessage({action:s,time:m,domain:f,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:s,from:"bringweb3",domain:f,extensionId:c,time:m,redirectUrl:g});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:s,time:m,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:s,from:"bringweb3"});case h.ADD_KEYFRAMES:F(d);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:s,url:u,from:"bringweb3"});break;default:break}},$=ct;var G=async({iframeEl:t,getWalletAddress:e})=>{if(!t&&(t=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!t)||!t.contentWindow)return;let r=await e();t.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},dt=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>G({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let s=t[n];s&&window.addEventListener(s,async()=>G({iframeEl:i,getWalletAddress:r}))}},K=dt;var mt=["www.","www1.","www2."],lt=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of mt)t.startsWith(e)&&(t=t.replace(e,""));return t},y=lt;var S=null,j=!1,ut=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:s,theme:a,text:d,switchWallet:m=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");K({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:S}),window.addEventListener("message",c=>$({event:c,iframeEl:S,promptLogin:e})),chrome.runtime.onMessage.addListener((c,u,f)=>{if(c?.from!=="bringweb3")return;let{action:g}=c;switch(g){case"GET_WALLET_ADDRESS":return t().then(M=>f({status:"success",walletAddress:M})).catch(M=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":if(c.domain!==y(location.href)||j)return f({status:"Domain already changed"}),!0;let{token:l,iframeUrl:T,userId:v}=c,x={token:l};return v&&(x.userId=v),S=L({query:x,iframeUrl:T,theme:a==="dark"?s:n,themeMode:a||"light",text:d,switchWallet:m,page:c.page}),j=!0,f({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},ft=ut;var q=t=>{t&&chrome.tabs.create({url:t})};var p=class t{static instance=null;apiEndpoint="";whitelistEndpoint="";constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}setWhitelistEndpoint(e){this.whitelistEndpoint=e}setApiEndpoint(e){this.apiEndpoint=e==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}getWhitelistEndpoint(){if(!this.whitelistEndpoint)throw new Error("Whitelist endpoint not set. Call setWhitelistEndpoint first.");return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}};var pt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),gt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),ht=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),o={set:pt,get:gt,remove:ht};import{v4 as wt}from"uuid";var Et=async()=>{let t=await o.get("id");return t||(t=wt(),o.set("id",t)),t},w=Et;var At=async t=>{let{path:e,method:r,apiKey:i,params:n}=t;if(!t||!e||!r||!n&&r==="POST"||!i)throw new Error("Missing endpoint or method");let s=p.getInstance().getApiEndpoint();if(s+=e,r==="GET"){let m=new URLSearchParams({...n,version:b(),opt_out:await o.get("optOut")||0,user_id:await w()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});s+=`?${m.toString()}`}else r==="POST"&&(n={...n,version:b(),optOut:await o.get("optOut")||0,userId:await w()||void 0,walletAddress:n?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(s,{method:r,headers:{"Content-Type":"application/json","x-api-key":i},body:r==="POST"?JSON.stringify(n):void 0})).json()},E=At;var bt=async t=>{let e=p.getInstance().getWhitelistEndpoint(),r={path:"/domains",apiKey:t,method:"GET"};return e&&(r.params={whitelist:encodeURIComponent(e)}),await E(r)},B=bt;var yt=async({apiKey:t,body:e})=>await E({path:"/check/popup",apiKey:t,method:"POST",params:e}),V=yt;var k="updateCache";var H=30*60*1e3,Ot=async(t,e)=>{e||(e=H);let r=await o.get("quietDomains");typeof r=="object"?r[t]=Date.now()+e:r={[t]:Date.now()+H},o.set("quietDomains",r)},O=Ot;var Tt=async({apiKey:t,walletAddress:e,cashbackUrl:r,lastActivation:i})=>{let n={walletAddress:e};return i&&(n.lastActivation=i),r&&(n.cashbackUrl=r),await E({path:"/check/notification",apiKey:t,method:"POST",params:n})},Q=Tt;var vt=(t,e)=>new Promise((n,s)=>{let a=d=>{chrome.tabs.get(t,m=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},c=>{chrome.runtime.lastError?d<4?setTimeout(()=>a(d+1),1e3*Math.pow(2,d)):n(null):n(c||null)})})};a(0)}),A=vt;var xt=async t=>{let e=await o.get("walletAddress");try{if(!t){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return e;t=i[0].id}let r=await A(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await o.set("walletAddress",e))}catch{}return e},P=xt;var Pt=async(t,e,r)=>{let i={showNotification:!1,token:"",iframeUrl:""},n=await o.get("notificationCheck");if(n&&Date.now()<n)return i;let s=e?await P(e):await o.get("walletAddress");if(!s)return i;let a=await o.get("lastActivation"),d=await Q({apiKey:t,walletAddress:s,cashbackUrl:r,lastActivation:a});o.set("notificationCheck",d.nextCall);let m={showNotification:d.showNotification,token:d.token,iframeUrl:d.iframeUrl,expiration:d.expiration};return m.showNotification&&await o.set("notification",m),m},D=Pt;var Dt=t=>t?chrome.runtime.getURL(t):"",C=Dt;var Ct=(t,e)=>{try{let r=p.getInstance().getWhitelistEndpoint();if(!e.length)return!!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(s=>{if(s.startsWith("*.")){let a=s.slice(2);return n.endsWith(a)}return!1})}catch{return console.error("Invalid URL:",t),!1}},I=Ct;var It=async(t,e,r,i,n,s,a)=>{if(e===chrome.runtime.id&&await o.set("lastActivation",Date.now()),t&&O(t,n||Date.now()+24*60*60*1e3),s&&a){let d=await o.get("redirectsWhitelist");(!d?.length||I(a,d))&&chrome.tabs.update(s,{url:a})}await D(r,void 0,C(i))},J=It;var Y=async t=>t<0?(await o.remove("optOut"),{isOptedOut:!1}):(await o.set("optOut",Date.now()+t),{isOptedOut:!0}),z=async()=>{let t=await o.get("optOut");return{isOptedOut:!!(t&&t>Date.now())}};var X=async(t,e,r)=>{await A(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await w(),domain:r})},_t=async(t,e,r,i)=>{let n=await o.get("notification");if(n?.expiration<Date.now())await o.remove("notification");else if(n)return await X(e,n,i);let s=await D(t,e,C(r));if(s.showNotification)return await X(e,s,i)},Z=_t;var tt=async()=>{try{let t=p.getInstance().getWhitelistEndpoint();if(!t)return[];let e=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!e.ok)throw new Error("Failed to fetch whitelist");let r=await e.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(t){return console.error("Error fetching whitelist:",t),[]}};var St=t=>{let e=Date.now();return(t-e)/1e3/60},N=async t=>{let e=await B(t);o.set("relevantDomains",e.relevantDomains);let r=await tt();r&&o.set("redirectsWhitelist",r);let{nextUpdateTimestamp:i}=e,n=St(i);return chrome.alarms.create(k,{delayInMinutes:n||60*24*2}),e.relevantDomains},kt=async(t,e)=>{let r=await o.get("relevantDomains");if(r===void 0&&(r=await N(e)),!t||!r||!r.length)return"";let i=y(t);for(let n of r)if(i.startsWith(n)){let s=await o.get("quietDomains");return s&&s[n]&&Date.now()<s[n]?"":n}return""},U={},Ut=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i})=>{if(!t||!e)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(e))throw new Error("unknown apiEndpoint");p.getInstance().setApiEndpoint(e),p.getInstance().setWhitelistEndpoint(i||""),await o.get("relevantDomains")||N(t),chrome.alarms.onAlarm.addListener(async n=>{let{name:s}=n;switch(s){case k:N(t);break;default:console.error("alarm with no use case:",s);break}}),chrome.runtime.onMessage.addListener((n,s,a)=>{if(n?.from!=="bringweb3")return;let{action:d}=n;switch(d){case"ACTIVATE":{let{domain:c,extensionId:u,time:f,redirectUrl:g}=n;return J(c,u,t,r,f,s.tab?.id,g).then(()=>a()),!0}case"GET_OPT_OUT":return z().then(c=>a(c)),!0;case"OPT_OUT":{let{time:c}=n;return Y(c).then(u=>a(u)),!0}case"CLOSE":{let{time:c,domain:u}=n;return u&&(O(u,c),a({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:c}=n;return c?o.set("walletAddress",c).then(()=>a(c)):o.remove("walletAddress").then(()=>a({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>a({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${d}`),!0;case"OPEN_CASHBACK_PAGE":let{url:m}=n;return q(m||r),a({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,s,a)=>{if(!a?.url?.startsWith("http")||!a.url)return;let d=y(a.url),m=await o.get("optOut");if(m&&m>Date.now())return;m&&(o.remove("optOut"),o.remove("optOutKey"));let c=U[n];if(s.status!=="complete"||d===c)return;U[n]=d;let u=await kt(a.url,t);if(!u||!u.length){await Z(t,n,r,d);return}let f=await P(n),{token:g,isValid:l,iframeUrl:T,networkUrl:v}=await V({apiKey:t,body:{domain:u,url:a.url,address:f}});if(!l){l===!1&&O(u);return}if(!I(v,await o.get("redirectsWhitelist")))return;let x=await w();A(n,{action:"INJECT",token:g,domain:d,iframeUrl:T,userId:x})}),chrome.tabs.onRemoved.addListener(n=>delete U[n])},Nt=Ut;var Mt=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t({isTurnedOff:r.isOptedOut})})}),Wt=t=>new Promise((e,r)=>{let i=t?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?e({isTurnedOff:n.isOptedOut}):r("No response received")})});export{Nt as bringInitBackground,ft as bringInitContentScript,Mt as getTurnOff,Wt as setTurnOff};
|
|
1
|
+
var et=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,o])=>{o&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(o)):e.append(n,o))}),e.toString()},S=et;var W={name:"@bringweb3/chrome-extension-kit",version:"1.3.2",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var nt=()=>W.version,b=nt;var it=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:o,switchWallet:a})=>{let c=chrome.runtime.id,d=`bringweb3-iframe-${c}`,m=document.getElementById(d),f=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${o?"/"+o:""}`:n;if(m)return m;let p=S({query:{...t,extensionId:c,v:b(),themeMode:r,textMode:i,switchWallet:String(a)}}),g=e?`&${S({query:e,prefix:"t"})}`:"",l=document.createElement("iframe");return l.id=d,l.src=`${f}?${p}${g}`,l.setAttribute("sandbox","allow-scripts allow-same-origin"),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;",e?.popupShadow&&(l.style.boxShadow=e.popupShadow),document.documentElement.appendChild(l),l},L=it;var st=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},R=st;var ot=t=>{if(!t||!t.length)return;let e=document.createElement("style");document.head.appendChild(e);let r=e.sheet;r?t.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},K=ot;var h={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"},at=[h.ACTIVATE],ct=({event:t,iframeEl:e,promptLogin:r})=>{let{data:i}=t,{from:n,action:o,style:a,keyFrames:c,time:d,extensionId:m,url:f,domain:p,redirectUrl:g}=i;if(n==="bringweb3"&&!(m!==chrome.runtime.id&&!at.includes(o)))switch(o){case h.OPEN:R(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),d&&chrome.runtime.sendMessage({action:o,time:d,domain:p,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:o,from:"bringweb3",domain:p,extensionId:m,time:d,redirectUrl:g});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:o,time:d,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:o,from:"bringweb3"});case h.ADD_KEYFRAMES:K(c);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:o,url:f,from:"bringweb3"});break;default:break}},F=ct;var $=async({iframeEl:t,getWalletAddress:e})=>{if(!t&&(t=document.querySelector(`#bringweb3-iframe-${chrome.runtime.id}`),!t)||!t.contentWindow)return;let r=await e();t.contentWindow.postMessage({action:"WALLET_ADDRESS_UPDATE",walletAddress:r},"*"),chrome.runtime.sendMessage({action:"WALLET_ADDRESS_UPDATE",from:"bringweb3",walletAddress:r})},mt=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>$({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let o=t[n];o&&window.addEventListener(o,async()=>$({iframeEl:i,getWalletAddress:r}))}},G=mt;var dt=["www.","www1.","www2."],lt=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of dt)t.startsWith(e)&&(t=t.replace(e,""));return t},O=lt;var U=null,j=!1,ut=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:o,theme:a,text:c,switchWallet:d=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");G({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:U}),window.addEventListener("message",m=>F({event:m,iframeEl:U,promptLogin:e})),chrome.runtime.onMessage.addListener((m,f,p)=>{if(m?.from!=="bringweb3")return;let{action:g}=m;switch(g){case"GET_WALLET_ADDRESS":return t().then(N=>p({status:"success",walletAddress:N})).catch(N=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":if(m.domain!==O(location.href)||j)return p({status:"Domain already changed"}),!0;let{token:l,iframeUrl:v,userId:x}=m,P={token:l};return x&&(P.userId=x),U=L({query:P,iframeUrl:v,theme:a==="dark"?o:n,themeMode:a||"light",text:c,switchWallet:d,page:m.page}),j=!0,p({status:"success"}),!0;default:console.error(`Unknown action: ${g}`);break}})}},ft=ut;var q=t=>{t&&chrome.tabs.create({url:t})};var u=class t{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}setWhitelistEndpoint(e){this.whitelistEndpoint=e}setApiEndpoint(e){this.apiEndpoint=e==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}setApiKey(e){this.apiKey=e}getWhitelistEndpoint(){return this.whitelistEndpoint}getApiEndpoint(){if(!this.apiEndpoint)throw new Error("API endpoint not set. Call setApiEndpoint first.");return this.apiEndpoint}getApiKey(){if(!this.apiKey)throw new Error("API key not set. Call setApiKey first.");return this.apiKey}};var pt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),gt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),ht=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),s={set:pt,get:gt,remove:ht};import{v4 as wt}from"uuid";var Et=async()=>{let t=await s.get("id");return t||(t=wt(),s.set("id",t)),t},w=Et;var At=async t=>{let{path:e,method:r,apiKey:i,params:n}=t;if(!t||!e||!r||!n&&r==="POST"||!i)throw new Error("Missing endpoint or method");let o=u.getInstance().getApiEndpoint();if(o+=e,r==="GET"){let d=new URLSearchParams({...n,version:b(),opt_out:await s.get("optOut")||0,user_id:await w()||"undefined",wallet_address:await s.get("walletAddress")||"undefined"});o+=`?${d.toString()}`}else r==="POST"&&(n={...n,version:b(),optOut:await s.get("optOut")||0,userId:await w()||void 0,walletAddress:n?.walletAddress||await s.get("walletAddress")||void 0});return await(await fetch(o,{method:r,headers:{"Content-Type":"application/json","x-api-key":i},body:r==="POST"?JSON.stringify(n):void 0})).json()},E=At;var yt=async({apiKey:t,body:e})=>await E({path:"/check/popup",apiKey:t,method:"POST",params:e}),B=yt;var C="updateCache";var V=30*60*1e3,bt=async(t,e)=>{e||(e=V);let r=await s.get("quietDomains");typeof r=="object"?r[t]=Date.now()+e:r={[t]:Date.now()+V},s.set("quietDomains",r)},T=bt;var Ot=async({apiKey:t,walletAddress:e,cashbackUrl:r,lastActivation:i})=>{let n={walletAddress:e};return i&&(n.lastActivation=i),r&&(n.cashbackUrl=r),await E({path:"/check/notification",apiKey:t,method:"POST",params:n})},H=Ot;var Tt=(t,e)=>new Promise((n,o)=>{let a=c=>{chrome.tabs.get(t,d=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},m=>{chrome.runtime.lastError?c<4?setTimeout(()=>a(c+1),1e3*Math.pow(2,c)):n(null):n(m||null)})})};a(0)}),A=Tt;var vt=async t=>{let e=await s.get("walletAddress");try{if(!t){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return e;t=i[0].id}let r=await A(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await s.set("walletAddress",e))}catch{}return e},D=vt;var xt=async(t,e,r)=>{let i={showNotification:!1,token:"",iframeUrl:""},n=await s.get("notificationCheck");if(n&&Date.now()<n)return i;let o=e?await D(e):await s.get("walletAddress");if(!o)return i;let a=await s.get("lastActivation"),c=await H({apiKey:t,walletAddress:o,cashbackUrl:r,lastActivation:a});s.set("notificationCheck",c.nextCall);let d={showNotification:c.showNotification,token:c.token,iframeUrl:c.iframeUrl,expiration:c.expiration};return d.showNotification&&await s.set("notification",d),d},I=xt;var Pt=t=>t?chrome.runtime.getURL(t):"",_=Pt;var Ct=async t=>{let e=u.getInstance().getWhitelistEndpoint(),r={path:"/domains",apiKey:t,method:"GET"};return e&&(r.params={whitelist:encodeURIComponent(e)}),await E(r)},Q=Ct;var J=async()=>{try{let t=u.getInstance().getWhitelistEndpoint();if(!t)return[];let e=await fetch(t,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!e.ok)throw new Error("Failed to fetch whitelist");let r=await e.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(t){return console.error("Error fetching whitelist:",t),[]}};var Dt=t=>{let e=Date.now();return(t-e)/1e3/60},y=async()=>{let t=await s.get("relevantDomainsCheck"),e=await s.get("relevantDomains"),r=await s.get("redirectsWhitelist"),i=u.getInstance().getApiKey(),n=u.getInstance().getWhitelistEndpoint();if(e?.length&&t&&t>Date.now()&&(!n||n&&r?.length))return e;let o=await Q(i),{nextUpdateTimestamp:a,relevantDomains:c}=o;s.set("relevantDomains",c),s.set("relevantDomainsCheck",a),r=await J(),r&&s.set("redirectsWhitelist",r);let d=Dt(a);return chrome.alarms.create(C,{delayInMinutes:d||60*24*2}),c};var It=async(t,e)=>{try{let r=u.getInstance().getWhitelistEndpoint();if(r&&!e?.length&&(await y(),e=await s.get("redirectsWhitelist")),!e?.length)return!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(o=>{if(o.startsWith("*.")){let a=o.slice(2);return n.endsWith(a)}return!1})}catch{return console.error("Invalid URL:",t),!1}},k=It;var _t=async(t,e,r,i,n,o,a)=>{if(e===chrome.runtime.id&&await s.set("lastActivation",Date.now()),t&&T(t,n||Date.now()+24*60*60*1e3),o&&a){let c=await s.get("redirectsWhitelist");(!c?.length||await k(a,c))&&chrome.tabs.update(o,{url:a})}await I(r,void 0,_(i))},Y=_t;var z=async t=>t<0?(await s.remove("optOut"),{isOptedOut:!1}):(await s.set("optOut",Date.now()+t),{isOptedOut:!0}),X=async()=>{let t=await s.get("optOut");return{isOptedOut:!!(t&&t>Date.now())}};var Z=async(t,e,r)=>{await A(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await w(),domain:r})},kt=async(t,e,r,i)=>{let n=await s.get("notification");if(n?.expiration<Date.now())await s.remove("notification");else if(n)return await Z(e,n,i);let o=await I(t,e,_(r));if(o.showNotification)return await Z(e,o,i)},tt=kt;var St=async t=>{let e=await y();if(!t||!e||!e.length)return"";let r=O(t);for(let i of e)if(r.startsWith(i)){let n=await s.get("quietDomains");return n&&n[i]&&Date.now()<n[i]?"":i}return""},M={},Ut=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i})=>{if(!t||!e)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(e))throw new Error("unknown apiEndpoint");u.getInstance().setApiEndpoint(e),u.getInstance().setWhitelistEndpoint(i||""),u.getInstance().setApiKey(t),y(),chrome.alarms.onAlarm.addListener(async n=>{let{name:o}=n;switch(o){case C:y();break;default:console.error("alarm with no use case:",o);break}}),chrome.runtime.onMessage.addListener((n,o,a)=>{if(n?.from!=="bringweb3")return;let{action:c}=n;switch(c){case"ACTIVATE":{let{domain:m,extensionId:f,time:p,redirectUrl:g}=n;return Y(m,f,t,r,p,o.tab?.id,g).then(()=>a()),!0}case"GET_OPT_OUT":return X().then(m=>a(m)),!0;case"OPT_OUT":{let{time:m}=n;return z(m).then(f=>a(f)),!0}case"CLOSE":{let{time:m,domain:f}=n;return f&&(T(f,m),a({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:m}=n;return m?s.set("walletAddress",m).then(()=>a(m)):s.remove("walletAddress").then(()=>a({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return s.remove("notification").then(()=>a({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${c}`),!0;case"OPEN_CASHBACK_PAGE":let{url:d}=n;return q(d||r),a({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(n,o,a)=>{if(!a?.url?.startsWith("http")||!a.url)return;let c=O(a.url),d=await s.get("optOut");if(d&&d>Date.now())return;d&&(s.remove("optOut"),s.remove("optOutKey"));let m=M[n];if(o.status!=="complete"||c===m)return;M[n]=c;let f=await St(a.url);if(!f||!f.length){await tt(t,n,r,c);return}let p=await D(n),{token:g,isValid:l,iframeUrl:v,networkUrl:x}=await B({apiKey:t,body:{domain:f,url:a.url,address:p}});if(!l){l===!1&&T(f);return}if(!await k(x,await s.get("redirectsWhitelist")))return;let P=await w();A(n,{action:"INJECT",token:g,domain:c,iframeUrl:v,userId:P})}),chrome.tabs.onRemoved.addListener(n=>delete M[n])},Mt=Ut;var Nt=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_OPT_OUT"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t({isTurnedOff:r.isOptedOut})})}),Wt=t=>new Promise((e,r)=>{let i=t?Number.MAX_SAFE_INTEGER:-1;chrome.runtime.sendMessage({from:"bringweb3",action:"OPT_OUT",time:i},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?e({isTurnedOff:n.isOptedOut}):r("No response received")})});export{Mt as bringInitBackground,ft as bringInitContentScript,Nt as getTurnOff,Wt as setTurnOff};
|