@bringweb3/chrome-extension-kit 1.4.2 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var L=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Pe=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var ve=(e,t)=>{for(var r in t)L(e,r,{get:t[r],enumerable:!0})},De=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Pe(t))!Te.call(e,i)&&i!==r&&L(e,i,{get:()=>t[i],enumerable:!(n=Oe(t,i))||n.enumerable});return e};var xe=e=>De(L({},"__esModule",{value:!0}),e);var mt={};ve(mt,{bringInitBackground:()=>fe,bringInitContentScript:()=>X,getPopupEnabled:()=>we,getTurnOff:()=>ge,setPopupEnabled:()=>Ee,setTurnOff:()=>he});module.exports=xe(mt);var Ie=e=>{let t=new URLSearchParams,{query:r,prefix:n}=e;return Object.entries(r).forEach(([i,s])=>{s&&(n&&(i=`${n}_${i}`),i==="url"?t.append(i,encodeURIComponent(s)):t.append(i,s))}),t.toString()},W=Ie;var j={name:"@bringweb3/chrome-extension-kit",version:"1.4.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 Se=()=>j.version,D=Se;var _e=({query:e,theme:t,themeMode:r,text:n,iframeUrl:i,page:s,switchWallet:m})=>{let l=chrome.runtime.id,c=`bringweb3-iframe-${l}`,u=document.getElementById(c),d=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:i;if(u)return u;let p=W({query:{...e,extensionId:l,v:D(),themeMode:r,textMode:n,switchWallet:String(m)}}),h=t?`&${W({query:t,prefix:"t"})}`:"",a=document.createElement("iframe");return a.id=c,a.src=`${d}?${p}${h}`,a.setAttribute("sandbox","allow-scripts allow-same-origin"),a.style.position="fixed",a.scrolling="no",a.style.overflow="hidden",a.style.width="1px",a.style.height="1px",a.style.right="8px",a.style.borderRadius="10px",a.style.border="none",a.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(a.style.boxShadow=t.popupShadow),document.documentElement.appendChild(a),a},V=_e;var Ue=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,n])=>{r in e.style&&(e.style[r]=n)})},Q=Ue;var ke=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")},q=ke;var E={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},Ne=[E.ACTIVATE],Le=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:n,action:i,style:s,keyFrames:m,time:l,extensionId:c,url:u,domain:d,redirectUrl:p}=e.data;if(n==="bringweb3"&&!(c!==chrome.runtime.id&&!Ne.includes(i)))switch(i){case E.OPEN:Q(t,s);break;case E.CLOSE:t&&t.parentNode?.removeChild(t),l&&chrome.runtime.sendMessage({action:i,time:l,domain:d,from:"bringweb3"});break;case E.PROMPT_LOGIN:r();break;case E.ACTIVATE:chrome.runtime.sendMessage({action:i,from:"bringweb3",domain:d,extensionId:c,time:l,redirectUrl:p});break;case E.OPT_OUT:chrome.runtime.sendMessage({action:i,time:l,from:"bringweb3"});break;case E.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:i,domain:d,time:l,from:"bringweb3"});break;case E.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:i,from:"bringweb3"});case E.ADD_KEYFRAMES:q(m);break;case E.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:i,url:u,from:"bringweb3"});break;default:break}},H=Le;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})},We=({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 s=e[i];s&&window.addEventListener(s,async()=>J({iframeEl:n,getWalletAddress:r}))}},Y=We;var Me=e=>e.endsWith("/")?e.slice(0,-1):e,x=Me;var Re=["www.","www1.","www2."],Fe=e=>{for(let r of Re)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=x(t),t},b=Fe;var M=null,z=!1,Ke=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:n,lightTheme:i,darkTheme:s,theme:m,text:l,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof n!="function")throw new Error("Missing configuration");Y({walletAddressListeners:r,walletAddressUpdateCallback:n,getWalletAddress:e,iframeEl:M}),window.addEventListener("message",u=>H({event:u,iframeEl:M,promptLogin:t})),chrome.runtime.onMessage.addListener((u,d,p)=>{if(u?.from!=="bringweb3")return;let{action:h}=u;switch(h){case"GET_WALLET_ADDRESS":return e().then(a=>p({status:"success",walletAddress:a})).catch(a=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:a}=document,f=u.portalReferrers||[];if(b(location.href)!==b(u.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(z)return p({status:"failed",message:"iframe already open"}),!0;if(a&&f.includes(b(a)))return p({status:"failed",message:`already activated by ${b(a)}`,action:"activate"}),!0;let{token:A,iframeUrl:w,userId:v}=u,S={token:A};return v&&(S.userId=v),M=V({query:S,iframeUrl:w,theme:m==="dark"?s:i,themeMode:m||"light",text:l,switchWallet:c,page:u.page}),z=!0,p({status:"success"}),!0}catch(a){return a instanceof Error?p({status:"failed",message:a.message}):p({status:"failed",message:String(a)}),!0}default:console.error(`Unknown action: ${h}`);break}})}},X=Ke;var Z=e=>{e&&chrome.tabs.create({url:e})};var g=class e{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}setApiKey(t){this.apiKey=t}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 $e=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}`])})}),Be=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),o={set:$e,get:Ge,remove:Be};var ee=require("uuid"),je=async()=>{let e=await o.get("id");return e||(e=(0,ee.v4)(),o.set("id",e)),e},O=je;var Ve=async e=>{let{path:t,method:r,params:n}=e;if(!e||!t||!r||!n&&r==="POST")throw new Error("Missing endpoint or method");let i=g.getInstance().getApiEndpoint();i+=t;let s=g.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...n,version:D(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await O()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});i+=`?${c.toString()}`}else r==="POST"&&(n={...n,version:D(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await O()||void 0,walletAddress:n?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(i,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(n):void 0})).json()},y=Ve;var Qe=async({body:e})=>await y({path:"/check/popup",method:"POST",params:e}),te=Qe;var qe=["www.","www1.","www2."],He=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of qe)e.startsWith(t)&&(e=e.replace(t,""));return e},re=He;var ie="quietDomains",Je=async(e,t)=>{let r=await o.get(ie);typeof r=="object"?r[e]=t:r={[e]:t},o.set(ie,r)},I=Je;var Ye=async({walletAddress:e,cashbackUrl:t,lastActivation:r})=>{let n={walletAddress:e};return r&&(n.lastActivation=r),t&&(n.cashbackUrl=t),await y({path:"/check/notification",method:"POST",params:n})},ne=Ye;var ze=(e,t)=>new Promise((i,s)=>{let m=l=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){i(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},u=>{chrome.runtime.lastError?l<4?setTimeout(()=>m(l+1),1e3*Math.pow(2,l)):i(null):i(u||null)})})};m(0)}),T=ze;var Xe=async e=>{let t=await o.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 T(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},_=Xe;var Ze=async(e,t,r)=>{let n={showNotification:!1,token:"",iframeUrl:""},i=await o.get("notificationCheck");if(i&&Date.now()<i)return n;let s=t?await _(t):await o.get("walletAddress");if(!s)return n;let m=await o.get("lastActivation"),l=await ne({walletAddress:s,cashbackUrl:r,lastActivation:m});o.set("notificationCheck",l.nextCall);let c={showNotification:l.showNotification,token:l.token,iframeUrl:l.iframeUrl,expiration:l.expiration};return c.showNotification&&await o.set("notification",c),c},U=Ze;var et=e=>e?chrome.runtime.getURL(e):"",k=et;var tt=async e=>{let t=g.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},t&&(r.params.whitelist=encodeURIComponent(t)),e&&(r.params.trigger=e),await y(r)},oe=tt;var se=async()=>{try{let e=g.getInstance().getWhitelistEndpoint();if(!e)return[];let t=await fetch(e,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!t.ok)throw new Error("Failed to fetch whitelist");let r=await t.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(e){return console.error("Error fetching whitelist:",e),[]}};var C=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),n=g.getInstance().getWhitelistEndpoint(),i=null;if(t?t.length?e?e<=Date.now()?i="cache expired":n&&!r?.length&&(i="missing whitelist data"):i="no domains timestamp check found":i="empty domains list":i="no domains in cache",!i)return t;let s=await oe(i),{nextUpdateTimestamp:m,relevantDomains:l}=s;return o.set("relevantDomains",l),o.set("relevantDomainsCheck",m),r=await se(),r&&o.set("redirectsWhitelist",r),l};var rt=async(e,t)=>{try{let r=g.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await C(),t=await o.get("redirectsWhitelist")),!t?.length)return!r;let i=new URL(e).hostname.toLowerCase();return i=i.replace("www.",""),t.includes(i)?!0:t.some(s=>{if(s.startsWith("*.")){let m=s.slice(2);return i.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",e),!1}},N=rt;var it=async(e,t,r,n,i,s,m)=>{if(t===chrome.runtime.id&&await o.set("lastActivation",Date.now()),e&&I(e,i||Date.now()+24*60*60*1e3),s&&m){let l=await o.get("redirectsWhitelist");await N(m,l)&&chrome.tabs.update(s,{url:m})}await U(r,void 0,k(n))},R=it;var ae=async e=>e<0?(await o.remove("optOut"),{isOptedOut:!1}):(await o.set("optOut",Date.now()+e),{isOptedOut:!0}),ce=async()=>{let e=await o.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var le=async(e,t,r)=>{await T(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await O(),domain:r})},nt=async(e,t,r,n,i,s)=>{let m=await o.get("notification");if(m?.expiration<Date.now())await o.remove("notification");else if(m)return await le(t,m,n);let l=await U(e,t,k(r));l.showNotification&&(i&&await le(t,l,n),s&&s())},me=nt;var ot=async e=>{e.category=e?.category||"system",await y({path:"/analytics",method:"POST",params:e})},de=ot;var ue="optOutDomains",st=async(e,t)=>{if(!e)return;let r=await o.get(ue);typeof r=="object"?r[e]=t:r={[e]:t},o.set(ue,r)},pe=st;var at=["www.","www1.","www2."],ct=async e=>{let t=await C();if(!e||!t||!t.length)return"";let r=null;try{r=new URL(e)}catch{r=new URL(`https://${e}`)}let n=r.hostname,i=x(r.pathname);for(let s of at)n=n.replace(s,"");for(let s of t){let m=s;s=x(s);let l=!1;s.startsWith("*.")&&(l=!0);let c="/"+s.split("/").slice(1).join("/")||"";if(c!=="/"&&i.startsWith(c)&&(n+=c),n===s||l&&n.endsWith(s.replace("*.",""))){let u=await o.get("quietDomains");return u&&u[s]&&Date.now()<u[s]&&u[s]<Date.now()+60*24*60*60*1e3?"":m}}return""},F={},lt=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:n,isEnabledByDefault:i=!0,showNotifications:s=!0,notificationCallback:m})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");g.getInstance().setApiEndpoint(t),g.getInstance().setWhitelistEndpoint(n||""),g.getInstance().setApiKey(e),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",i),C(),chrome.runtime.onMessage.addListener((c,u,d)=>{if(c?.from!=="bringweb3")return;let{action:p}=c;switch(p){case"ACTIVATE":{let{domain:a,extensionId:f,time:A,redirectUrl:w}=c;return R(a,f,e,r,A,u.tab?.id,w).then(()=>d()),!0}case"GET_OPT_OUT":return ce().then(a=>d(a)),!0;case"OPT_OUT":{let{time:a}=c;return ae(a).then(f=>d(f)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:f}=c;return pe(a,f).then(A=>d(A)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(a=>d({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=c;return o.set("popupEnabled",a).then(()=>{d({isPopupEnabled:a})}).catch(f=>{console.error("Error setting popup enabled:",f),d({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:f}=c;return f&&(I(f,a),d({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=c;return a?o.set("walletAddress",a).then(()=>d(a)):o.remove("walletAddress").then(()=>d({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>d({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:h}=c;return Z(h||r),d({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,d)=>{if(!d?.url?.startsWith("http")||!d.url)return;let p=re(d.url),h=await o.get("optOut");if(!await o.get("popupEnabled")||h&&h>Date.now())return;h&&(o.remove("optOut"),o.remove("optOutKey"));let f=await o.get("optOutDomains");if(f&&f[b(p)]&&f[b(p)]>Date.now())return;let A=F[c];if(u.status!=="complete"||p===A)return;F[c]=p;let w=await ct(d.url);if(!w||!w.length){await me(e,c,r,p,s,m);return}let v=await _(c),{token:S,isValid:K,iframeUrl:$,networkUrl:be,flowId:ye,portalReferrers:Ae,time:G=Date.now()+24*60*60*1e3}=await te({body:{domain:w,url:d.url,address:v}});if(!K){K===!1&&I(w,G);return}if(!await N(be,await o.get("redirectsWhitelist")))return;let B=await O(),P=await T(c,{action:"INJECT",token:S,domain:p,iframeUrl:$,userId:B,portalReferrers:Ae});if(P?.action)switch(P.action){case"activate":R(w,chrome.runtime.id,e,r,G,c);break;default:console.error(`Unknown action: ${P.action}`);break}P?.status!=="success"&&de({type:"no_popup",userId:B,walletAddress:v,details:{url:d.url,match:w,iframeUrl:$,reason:P?.message,status:P?.status},flowId:ye})}),chrome.tabs.onRemoved.addListener(c=>delete F[c])},fe=lt;var ge=()=>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})})}),he=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")})});var we=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e(r)})}),Ee=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},n=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}n?t({isPopupEnabled:n.isPopupEnabled}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getPopupEnabled,getTurnOff,setPopupEnabled,setTurnOff});
|
|
1
|
+
"use strict";var $=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var Nt=Object.getOwnPropertyNames;var Ut=Object.prototype.hasOwnProperty;var kt=(t,e)=>{for(var r in e)$(t,r,{get:e[r],enumerable:!0})},Mt=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Nt(e))!Ut.call(t,n)&&n!==r&&$(t,n,{get:()=>e[n],enumerable:!(i=Ct(e,n))||i.enumerable});return t};var Rt=t=>Mt($({},"__esModule",{value:!0}),t);var Ae={};kt(Ae,{bringInitBackground:()=>Ot,bringInitContentScript:()=>rt,getPopupEnabled:()=>_t,getTurnOff:()=>Pt,setPopupEnabled:()=>xt,setTurnOff:()=>Tt});module.exports=Rt(Ae);var Lt=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,a])=>{a&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(a)):e.append(n,a))}),e.toString()},F=Lt;var Q={name:"@bringweb3/chrome-extension-kit",version:"1.4.4",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var $t=()=>Q.version,S=$t;var Ft=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:a,switchWallet:m})=>{let d=chrome.runtime.id,c=`bringweb3-iframe-${d}`,u=document.getElementById(c),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${a?"/"+a:""}`:n;if(u)return u;let f=F({query:{...t,extensionId:d,v:S(),themeMode:r,textMode:i,switchWallet:String(m)}}),E=e?`&${F({query:e,prefix:"t"})}`:"",s=document.createElement("iframe");return s.id=c,s.src=encodeURI(`${l}?${f}${E}`),s.setAttribute("sandbox","allow-scripts allow-same-origin"),s.style.position="fixed",s.scrolling="no",s.style.overflow="hidden",s.style.width="1px",s.style.height="1px",s.style.right="8px",s.style.borderRadius="10px",s.style.border="none",s.style.cssText+="z-index: 99999999999999 !important;",e?.popupShadow&&(s.style.boxShadow=e.popupShadow),document.documentElement.appendChild(s),s},J=Ft;var jt=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},Y=jt;var Kt=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")},z=Kt;var h={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},Gt=[h.ACTIVATE],Bt=({event:t,iframeEl:e,promptLogin:r})=>{if(!t?.data)return;let{from:i,action:n,style:a,keyFrames:m,time:d,extensionId:c,url:u,domain:l,redirectUrl:f}=t.data;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!Gt.includes(n)))switch(n){case h.OPEN:Y(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),d&&chrome.runtime.sendMessage({action:n,time:d,domain:l,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:l,extensionId:c,time:d,redirectUrl:f});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:n,time:d,from:"bringweb3"});break;case h.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:l,time:d,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case h.ADD_KEYFRAMES:z(m);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:u,from:"bringweb3"});break;default:break}},X=Bt;var Z=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})},Vt=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>Z({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let a=t[n];a&&window.addEventListener(a,async()=>Z({iframeEl:i,getWalletAddress:r}))}},tt=Vt;var Ht=t=>t.endsWith("/")?t.slice(0,-1):t,I=Ht;var qt=["www.","www1.","www2."],Qt=t=>{for(let r of qt)t=t.replace(r,"");let e="";try{e=new URL(t).host}catch{e=new URL(`https://${t}`).host}return e=I(e),e},P=Qt;var j=null,et=!1,Jt=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:a,theme:m,text:d,switchWallet:c=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");tt({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:j}),window.addEventListener("message",u=>X({event:u,iframeEl:j,promptLogin:e})),chrome.runtime.onMessage.addListener((u,l,f)=>{if(u?.from!=="bringweb3")return;let{action:E}=u;switch(E){case"GET_WALLET_ADDRESS":return t().then(s=>f({status:"success",walletAddress:s})).catch(s=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:s}=document,g=u.portalReferrers||[];if(P(location.href)!==P(u.domain))return f({status:"failed",message:"Domain already changed"}),!0;if(et)return f({status:"failed",message:"iframe already open"}),!0;if(s&&g.includes(P(s)))return f({status:"failed",message:`already activated by ${P(s)}`,action:"activate"}),!0;let{token:y,iframeUrl:v,userId:b}=u,D={token:y};return b&&(D.userId=b),j=J({query:D,iframeUrl:v,theme:m==="dark"?a:n,themeMode:m||"light",text:d,switchWallet:c,page:u.page}),et=!0,f({status:"success"}),!0}catch(s){return s instanceof Error?f({status:"failed",message:s.message}):f({status:"failed",message:String(s)}),!0}default:console.error(`Unknown action: ${E}`);break}})}},rt=Jt;var nt=t=>{t&&chrome.tabs.create({url:t})};var p=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 Yt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),zt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),Xt=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),o={set:Yt,get:zt,remove:Xt};var it=require("uuid"),Zt=async()=>{let t=await o.get("id");return t||(t=(0,it.v4)(),o.set("id",t)),t},T=Zt;var te=async t=>{let{path:e,method:r,params:i}=t;if(!t||!e||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let n=p.getInstance().getApiEndpoint();n+=e;let a=p.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...i,version:S(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await T()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${c.toString()}`}else r==="POST"&&(i={...i,version:S(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await T()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":a},body:r==="POST"?JSON.stringify(i):void 0})).json()},A=te;var ee=async({body:t})=>await A({path:"/check/popup",method:"POST",params:t}),ot=ee;var re=["www.","www1.","www2."],ne=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of re)t.startsWith(e)&&(t=t.replace(e,""));return t},st=ne;var at="quietDomains",ie=async(t,e)=>{let r=await o.get(at);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(at,r)},C=ie;var oe=async({walletAddress:t,cashbackUrl:e,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:t};return r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),e&&(n.cashbackUrl=e),await A({path:"/check/notification",method:"POST",params:n})},ct=oe;var se=(t,e)=>new Promise((n,a)=>{let m=d=>{chrome.tabs.get(t,c=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},u=>{chrome.runtime.lastError?d<4?setTimeout(()=>m(d+1),1e3*Math.pow(2,d)):n(null):n(u||null)})})};m(0)}),x=se;var ae=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 x(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await o.set("walletAddress",e))}catch{}return e},k=ae;var ce=t=>{if(!t||!Array.isArray(t)||t.length!==2)return!1;let[e,r]=t;return typeof e=="number"&&typeof r=="number"&&e<=r},N=(t,e)=>{if(!ce(t))return!0;let[r,i]=t;return e=e??Date.now(),e<r||e>i},O=(t,e)=>!N(t,e);var me=async(t,e)=>{let r={showNotification:!1,token:"",iframeUrl:""},i=Date.now(),n=await o.get("notificationCheck");if(O(n,i))return r;let a=t?await k(t):await o.get("walletAddress");if(!a)return r;let m=await o.get("lastActivation"),d=m?i-m:void 0,c=await ct({walletAddress:a,cashbackUrl:e,lastActivation:m,timeSinceLastActivation:d});o.set("notificationCheck",[i,i+c.nextCall]);let u={showNotification:c.showNotification,token:c.token,iframeUrl:c.iframeUrl,expiration:[i,i+c.expiration]};return u.showNotification&&await o.set("notification",u),u},M=me;var le=t=>t?chrome.runtime.getURL(t):"",R=le;var ue=async t=>{let e=p.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},e&&(r.params.whitelist=encodeURIComponent(e)),t&&(r.params.trigger=t),await A(r)},mt=ue;var lt=t=>{if(t===void 0)return"undefined";if(t===null)return"null";if(typeof t=="string")return`"${t}"`;if(typeof t=="number")return Number.isNaN(t)?"NaN":String(t);if(typeof t=="boolean")return String(t);if(Array.isArray(t))return`[${t.map(e=>e===void 0?"undefined":e===null?"null":lt(e)).join(", ")}]`;if(typeof t=="object")try{return JSON.stringify(t,(e,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(t)}}`}return String(t)},w=lt;var ut=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 U=async()=>{let t=await o.get("relevantDomainsCheck"),e=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=p.getInstance().getWhitelistEndpoint(),n=null,a=Date.now();if(e?Array.isArray(e)?t?Array.isArray(t)?t.length!==2?n=`invalid domains timestamp check format__length: ${t.length} - value: ${w(t)}`:t[0]>=a?n=`cache expired - range start is bigger than Date.now()__value: ${w(t)}, now: ${a}`:a>=t[1]?n=`cache expired - range end is smaller than Date.now()__value: ${w(t)}, now: ${a}`:i&&!r?.length?n=`missing whitelist data__endpoint: ${i}, whitelist: ${w(r)}`:N(t,a)&&(n=`cache expired - range is expired__range: ${w(t)}, now: ${a}`):n=`invalid domains timestamp check format - not an array__value: ${w(t)}`:n=`no domains timestamp check found__value: ${w(t)}`:n=`domains list isn't an array__value: ${w(e)}`:n=`no domains in cache__value: ${w(e)}`,!n)return e;let m=await mt(n),{nextUpdateTimestamp:d,relevantDomains:c}=m;return o.set("relevantDomains",c),o.set("relevantDomainsCheck",[a,a+d]),r=await ut(),r&&o.set("redirectsWhitelist",r),c};var de=async(t,e)=>{try{let r=p.getInstance().getWhitelistEndpoint();if(r&&!e?.length&&(await U(),e=await o.get("redirectsWhitelist")),!e?.length)return!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(a=>{if(a.startsWith("*.")){let m=a.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",t),!1}},L=de;var fe=async(t,e,r,i,n,a)=>{let m=Date.now();if(e===chrome.runtime.id&&await o.set("lastActivation",m),t&&C(t,i||864e5),n&&a){let d=await o.get("redirectsWhitelist");await L(a,d)&&chrome.tabs.update(n,{url:a})}await M(void 0,R(r))},K=fe;var dt=async t=>{if(t<0)return await o.remove("optOut"),{isOptedOut:!1};{let e=Date.now();return await o.set("optOut",[e,e+t]),{isOptedOut:!0}}},ft=async()=>{let t=await o.get("optOut");return{isOptedOut:O(t)}};var pt=async(t,e,r)=>{await x(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await T(),domain:r})},pe=async(t,e,r,i,n)=>{let a=await o.get("notification"),m=Date.now(),d=a?.expiration;if(N(d,m))await o.remove("notification");else if(a)return await pt(t,a,r);let c=await M(t,R(e));c.showNotification&&(i&&await pt(t,c,r),n&&n())},gt=pe;var ge=async t=>{t.category=t?.category||"system",await A({path:"/analytics",method:"POST",params:t})},ht=ge;var wt="optOutDomains",he=async(t,e)=>{if(!t)return;let r=await o.get(wt);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(wt,r)},Et=he;var bt=1,yt=async(t,e)=>{let r=await o.get(t);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>e?r[i]=[e,n]:delete r[i];o.set(t,r)}},we=async()=>{try{let t=Date.now(),e=await o.get("optOut");return e&&typeof e=="number"&&e>t?await o.set("optOut",[t,e]):await o.remove("optOut"),await yt("optOutDomains",t),await yt("quietDomains",t),!0}catch{return!1}},At=async()=>{(await o.get("migrationVersion")||0)<bt&&await we()&&await o.set("migrationVersion",bt)};var Ee=["www.","www1.","www2."],be=async t=>{let e=await U();if(!t||!e||!e.length)return"";let r=null;try{r=new URL(t)}catch{r=new URL(`https://${t}`)}let i=r.hostname,n=I(r.pathname);for(let m of Ee)i=i.replace(m,"");let a=Date.now();for(let m of e){let d=m;m=I(m);let c=!1;m.startsWith("*.")&&(c=!0);let u="/"+m.split("/").slice(1).join("/")||"";if(u!=="/"&&n.startsWith(u)&&(i+=u),i===m||c&&i.endsWith(m.replace("*.",""))){let l=await o.get("quietDomains");return l&&l[m]&&O(l[m])&&l[m][1]<a+60*864e5?"":d}}return""},G={},ye=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:a=!0,notificationCallback:m})=>{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||""),p.getInstance().setApiKey(t),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await At(),U(),chrome.runtime.onMessage.addListener((c,u,l)=>{if(c?.from!=="bringweb3")return;let{action:f}=c;switch(f){case"ACTIVATE":{let{domain:s,extensionId:g,time:y,redirectUrl:v}=c;return K(s,g,r,y,u.tab?.id,v).then(()=>l()),!0}case"GET_OPT_OUT":return ft().then(s=>l(s)),!0;case"OPT_OUT":{let{time:s}=c;return dt(s).then(g=>l(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:g}=c;return Et(s,g).then(y=>l(y)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>l({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=c;return o.set("popupEnabled",s).then(()=>{l({isPopupEnabled:s})}).catch(g=>{console.error("Error setting popup enabled:",g),l({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:g}=c;return g&&(C(g,s),l({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=c;return s?o.set("walletAddress",s).then(()=>l(s)):o.remove("walletAddress").then(()=>l({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>l({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${f}`),!0;case"OPEN_CASHBACK_PAGE":let{url:E}=c;return nt(E||r),l({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,l)=>{if(!u.url||!l?.url?.startsWith("http"))return;let f=st(l.url),E=await o.get("optOut"),s=await o.get("popupEnabled"),g=Date.now();if(!s||O(E,g))return;E&&o.remove("optOut");let y=await o.get("optOutDomains");if(y&&O(y[P(f)],g))return;let v=G[c];if(f===v)return;G[c]=f;let b=await be(l.url);if(!b||!b.length){await gt(c,r,f,a,m);return}let D=await k(c),{token:vt,isValid:B,iframeUrl:V,networkUrl:Dt,flowId:St,portalReferrers:It,time:H=864e5}=await ot({body:{domain:b,url:l.url,address:D}});if(!B){B===!1&&C(b,H);return}if(!await L(Dt,await o.get("redirectsWhitelist")))return;let q=await T(),_=await x(c,{action:"INJECT",token:vt,domain:f,iframeUrl:V,userId:q,portalReferrers:It});if(_?.action)switch(_.action){case"activate":K(b,chrome.runtime.id,r,H,c);break;default:console.error(`Unknown action: ${_.action}`);break}_?.status!=="success"&&ht({type:"no_popup",userId:q,walletAddress:D,details:{url:l.url,match:b,iframeUrl:V,reason:_?.message,status:_?.status},flowId:St})}),chrome.tabs.onRemoved.addListener(c=>delete G[c])},Ot=ye;var Pt=()=>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})})}),Tt=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")})});var _t=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t(r)})}),xt=t=>new Promise((e,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:t},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?e({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});0&&(module.exports={bringInitBackground,bringInitContentScript,getPopupEnabled,getTurnOff,setPopupEnabled,setTurnOff});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var fe=e=>{let t=new URLSearchParams,{query:r,prefix:i}=e;return Object.entries(r).forEach(([n,s])=>{s&&(i&&(n=`${i}_${n}`),n==="url"?t.append(n,encodeURIComponent(s)):t.append(n,s))}),t.toString()},L=fe;var B={name:"@bringweb3/chrome-extension-kit",version:"1.4.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 he=()=>B.version,D=he;var we=({query:e,theme:t,themeMode:r,text:i,iframeUrl:n,page:s,switchWallet:m})=>{let l=chrome.runtime.id,c=`bringweb3-iframe-${l}`,u=document.getElementById(c),d=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${s?"/"+s:""}`:n;if(u)return u;let p=L({query:{...e,extensionId:l,v:D(),themeMode:r,textMode:i,switchWallet:String(m)}}),h=t?`&${L({query:t,prefix:"t"})}`:"",a=document.createElement("iframe");return a.id=c,a.src=`${d}?${p}${h}`,a.setAttribute("sandbox","allow-scripts allow-same-origin"),a.style.position="fixed",a.scrolling="no",a.style.overflow="hidden",a.style.width="1px",a.style.height="1px",a.style.right="8px",a.style.borderRadius="10px",a.style.border="none",a.style.cssText+="z-index: 99999999999999 !important;",t?.popupShadow&&(a.style.boxShadow=t.popupShadow),document.documentElement.appendChild(a),a},j=we;var Ee=(e,t)=>{!e||!t||!Object.keys(t).length||Object.entries(t).forEach(([r,i])=>{r in e.style&&(e.style[r]=i)})},V=Ee;var be=e=>{if(!e||!e.length)return;let t=document.createElement("style");document.head.appendChild(t);let r=t.sheet;r?e.forEach(({name:i,rules:n})=>{r.insertRule(`@keyframes ${i} { ${n} }`,r.cssRules.length)}):console.error("Failed to create stylesheet")},Q=be;var E={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},ye=[E.ACTIVATE],Ae=({event:e,iframeEl:t,promptLogin:r})=>{if(!e?.data)return;let{from:i,action:n,style:s,keyFrames:m,time:l,extensionId:c,url:u,domain:d,redirectUrl:p}=e.data;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!ye.includes(n)))switch(n){case E.OPEN:V(t,s);break;case E.CLOSE:t&&t.parentNode?.removeChild(t),l&&chrome.runtime.sendMessage({action:n,time:l,domain:d,from:"bringweb3"});break;case E.PROMPT_LOGIN:r();break;case E.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:d,extensionId:c,time:l,redirectUrl:p});break;case E.OPT_OUT:chrome.runtime.sendMessage({action:n,time:l,from:"bringweb3"});break;case E.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:d,time:l,from:"bringweb3"});break;case E.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case E.ADD_KEYFRAMES:Q(m);break;case E.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:u,from:"bringweb3"});break;default:break}},q=Ae;var H=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})},Oe=({walletAddressListeners:e,walletAddressUpdateCallback:t,getWalletAddress:r,iframeEl:i})=>{if(t)t(()=>H({iframeEl:i,getWalletAddress:r}));else if(e)for(let n=0;n<e.length;n++){let s=e[n];s&&window.addEventListener(s,async()=>H({iframeEl:i,getWalletAddress:r}))}},J=Oe;var Pe=e=>e.endsWith("/")?e.slice(0,-1):e,x=Pe;var Te=["www.","www1.","www2."],ve=e=>{for(let r of Te)e=e.replace(r,"");let t="";try{t=new URL(e).host}catch{t=new URL(`https://${e}`).host}return t=x(t),t},b=ve;var W=null,Y=!1,De=async({getWalletAddress:e,promptLogin:t,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:s,theme:m,text:l,switchWallet:c=!1})=>{if(window.self===window.top){if(!e||!t||!r?.length&&typeof i!="function")throw new Error("Missing configuration");J({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:e,iframeEl:W}),window.addEventListener("message",u=>q({event:u,iframeEl:W,promptLogin:t})),chrome.runtime.onMessage.addListener((u,d,p)=>{if(u?.from!=="bringweb3")return;let{action:h}=u;switch(h){case"GET_WALLET_ADDRESS":return e().then(a=>p({status:"success",walletAddress:a})).catch(a=>p({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:a}=document,f=u.portalReferrers||[];if(b(location.href)!==b(u.domain))return p({status:"failed",message:"Domain already changed"}),!0;if(Y)return p({status:"failed",message:"iframe already open"}),!0;if(a&&f.includes(b(a)))return p({status:"failed",message:`already activated by ${b(a)}`,action:"activate"}),!0;let{token:A,iframeUrl:w,userId:v}=u,S={token:A};return v&&(S.userId=v),W=j({query:S,iframeUrl:w,theme:m==="dark"?s:n,themeMode:m||"light",text:l,switchWallet:c,page:u.page}),Y=!0,p({status:"success"}),!0}catch(a){return a instanceof Error?p({status:"failed",message:a.message}):p({status:"failed",message:String(a)}),!0}default:console.error(`Unknown action: ${h}`);break}})}},xe=De;var z=e=>{e&&chrome.tabs.create({url:e})};var g=class e{static instance=null;apiEndpoint="";whitelistEndpoint="";apiKey="";constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}setWhitelistEndpoint(t){this.whitelistEndpoint=t}setApiEndpoint(t){this.apiEndpoint=t==="prod"?"https://api.bringweb3.io/v1/extension":"https://sandbox-api.bringweb3.io/v1/extension"}setApiKey(t){this.apiKey=t}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 Ie=async(e,t)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${e}`]:t},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Ce=async e=>new Promise((t,r)=>{chrome.storage.local.get([`bring_${e}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t(i[`bring_${e}`])})}),Se=async e=>new Promise((t,r)=>{chrome.storage.local.remove([`bring_${e}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):t()})}),o={set:Ie,get:Ce,remove:Se};import{v4 as _e}from"uuid";var Ue=async()=>{let e=await o.get("id");return e||(e=_e(),o.set("id",e)),e},O=Ue;var ke=async e=>{let{path:t,method:r,params:i}=e;if(!e||!t||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let n=g.getInstance().getApiEndpoint();n+=t;let s=g.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...i,version:D(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await O()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${c.toString()}`}else r==="POST"&&(i={...i,version:D(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await O()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":s},body:r==="POST"?JSON.stringify(i):void 0})).json()},y=ke;var Ne=async({body:e})=>await y({path:"/check/popup",method:"POST",params:e}),X=Ne;var Le=["www.","www1.","www2."],We=e=>{if(!e)return"";e=e.split("://").reverse()[0]||"";for(let t of Le)e.startsWith(t)&&(e=e.replace(t,""));return e},Z=We;var ee="quietDomains",Me=async(e,t)=>{let r=await o.get(ee);typeof r=="object"?r[e]=t:r={[e]:t},o.set(ee,r)},I=Me;var Re=async({walletAddress:e,cashbackUrl:t,lastActivation:r})=>{let i={walletAddress:e};return r&&(i.lastActivation=r),t&&(i.cashbackUrl=t),await y({path:"/check/notification",method:"POST",params:i})},te=Re;var Fe=(e,t)=>new Promise((n,s)=>{let m=l=>{chrome.tabs.get(e,c=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(e,{...t,from:"bringweb3"},u=>{chrome.runtime.lastError?l<4?setTimeout(()=>m(l+1),1e3*Math.pow(2,l)):n(null):n(u||null)})})};m(0)}),T=Fe;var Ke=async e=>{let t=await o.get("walletAddress");try{if(!e){let i=await chrome.tabs.query({active:!0,currentWindow:!0});if(!i||!i[0]||!i[0].id)return t;e=i[0].id}let r=await T(e,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&t!==r?.walletAddress&&(t=r?.walletAddress,await o.set("walletAddress",t))}catch{}return t},_=Ke;var $e=async(e,t,r)=>{let i={showNotification:!1,token:"",iframeUrl:""},n=await o.get("notificationCheck");if(n&&Date.now()<n)return i;let s=t?await _(t):await o.get("walletAddress");if(!s)return i;let m=await o.get("lastActivation"),l=await te({walletAddress:s,cashbackUrl:r,lastActivation:m});o.set("notificationCheck",l.nextCall);let c={showNotification:l.showNotification,token:l.token,iframeUrl:l.iframeUrl,expiration:l.expiration};return c.showNotification&&await o.set("notification",c),c},U=$e;var Ge=e=>e?chrome.runtime.getURL(e):"",k=Ge;var Be=async e=>{let t=g.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},t&&(r.params.whitelist=encodeURIComponent(t)),e&&(r.params.trigger=e),await y(r)},re=Be;var ie=async()=>{try{let e=g.getInstance().getWhitelistEndpoint();if(!e)return[];let t=await fetch(e,{method:"GET",cache:"no-store",headers:{"Cache-Control":"no-store, no-cache, must-revalidate, max-age=0",Pragma:"no-cache"}});if(!t.ok)throw new Error("Failed to fetch whitelist");let r=await t.json();if(!Array.isArray(r))throw new Error("whitelist isn't an array");return r}catch(e){return console.error("Error fetching whitelist:",e),[]}};var C=async()=>{let e=await o.get("relevantDomainsCheck"),t=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=g.getInstance().getWhitelistEndpoint(),n=null;if(t?t.length?e?e<=Date.now()?n="cache expired":i&&!r?.length&&(n="missing whitelist data"):n="no domains timestamp check found":n="empty domains list":n="no domains in cache",!n)return t;let s=await re(n),{nextUpdateTimestamp:m,relevantDomains:l}=s;return o.set("relevantDomains",l),o.set("relevantDomainsCheck",m),r=await ie(),r&&o.set("redirectsWhitelist",r),l};var je=async(e,t)=>{try{let r=g.getInstance().getWhitelistEndpoint();if(r&&!t?.length&&(await C(),t=await o.get("redirectsWhitelist")),!t?.length)return!r;let n=new URL(e).hostname.toLowerCase();return n=n.replace("www.",""),t.includes(n)?!0:t.some(s=>{if(s.startsWith("*.")){let m=s.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",e),!1}},N=je;var Ve=async(e,t,r,i,n,s,m)=>{if(t===chrome.runtime.id&&await o.set("lastActivation",Date.now()),e&&I(e,n||Date.now()+24*60*60*1e3),s&&m){let l=await o.get("redirectsWhitelist");await N(m,l)&&chrome.tabs.update(s,{url:m})}await U(r,void 0,k(i))},M=Ve;var ne=async e=>e<0?(await o.remove("optOut"),{isOptedOut:!1}):(await o.set("optOut",Date.now()+e),{isOptedOut:!0}),oe=async()=>{let e=await o.get("optOut");return{isOptedOut:!!(e&&e>Date.now())}};var se=async(e,t,r)=>{await T(e,{action:"INJECT",page:"notification",token:t.token,iframeUrl:t.iframeUrl,userId:await O(),domain:r})},Qe=async(e,t,r,i,n,s)=>{let m=await o.get("notification");if(m?.expiration<Date.now())await o.remove("notification");else if(m)return await se(t,m,i);let l=await U(e,t,k(r));l.showNotification&&(n&&await se(t,l,i),s&&s())},ae=Qe;var qe=async e=>{e.category=e?.category||"system",await y({path:"/analytics",method:"POST",params:e})},ce=qe;var le="optOutDomains",He=async(e,t)=>{if(!e)return;let r=await o.get(le);typeof r=="object"?r[e]=t:r={[e]:t},o.set(le,r)},me=He;var Je=["www.","www1.","www2."],Ye=async e=>{let t=await C();if(!e||!t||!t.length)return"";let r=null;try{r=new URL(e)}catch{r=new URL(`https://${e}`)}let i=r.hostname,n=x(r.pathname);for(let s of Je)i=i.replace(s,"");for(let s of t){let m=s;s=x(s);let l=!1;s.startsWith("*.")&&(l=!0);let c="/"+s.split("/").slice(1).join("/")||"";if(c!=="/"&&n.startsWith(c)&&(i+=c),i===s||l&&i.endsWith(s.replace("*.",""))){let u=await o.get("quietDomains");return u&&u[s]&&Date.now()<u[s]&&u[s]<Date.now()+60*24*60*60*1e3?"":m}}return""},R={},ze=async({identifier:e,apiEndpoint:t,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:s=!0,notificationCallback:m})=>{if(!e||!t)throw new Error("Missing configuration");if(!["prod","sandbox"].includes(t))throw new Error("unknown apiEndpoint");g.getInstance().setApiEndpoint(t),g.getInstance().setWhitelistEndpoint(i||""),g.getInstance().setApiKey(e),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),C(),chrome.runtime.onMessage.addListener((c,u,d)=>{if(c?.from!=="bringweb3")return;let{action:p}=c;switch(p){case"ACTIVATE":{let{domain:a,extensionId:f,time:A,redirectUrl:w}=c;return M(a,f,e,r,A,u.tab?.id,w).then(()=>d()),!0}case"GET_OPT_OUT":return oe().then(a=>d(a)),!0;case"OPT_OUT":{let{time:a}=c;return ne(a).then(f=>d(f)),!0}case"OPT_OUT_SPECIFIC":{let{domain:a,time:f}=c;return me(a,f).then(A=>d(A)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(a=>d({isPopupEnabled:a})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:a}=c;return o.set("popupEnabled",a).then(()=>{d({isPopupEnabled:a})}).catch(f=>{console.error("Error setting popup enabled:",f),d({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:a,domain:f}=c;return f&&(I(f,a),d({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:a}=c;return a?o.set("walletAddress",a).then(()=>d(a)):o.remove("walletAddress").then(()=>d({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>d({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${p}`),!0;case"OPEN_CASHBACK_PAGE":let{url:h}=c;return z(h||r),d({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,d)=>{if(!d?.url?.startsWith("http")||!d.url)return;let p=Z(d.url),h=await o.get("optOut");if(!await o.get("popupEnabled")||h&&h>Date.now())return;h&&(o.remove("optOut"),o.remove("optOutKey"));let f=await o.get("optOutDomains");if(f&&f[b(p)]&&f[b(p)]>Date.now())return;let A=R[c];if(u.status!=="complete"||p===A)return;R[c]=p;let w=await Ye(d.url);if(!w||!w.length){await ae(e,c,r,p,s,m);return}let v=await _(c),{token:S,isValid:F,iframeUrl:K,networkUrl:de,flowId:ue,portalReferrers:pe,time:$=Date.now()+24*60*60*1e3}=await X({body:{domain:w,url:d.url,address:v}});if(!F){F===!1&&I(w,$);return}if(!await N(de,await o.get("redirectsWhitelist")))return;let G=await O(),P=await T(c,{action:"INJECT",token:S,domain:p,iframeUrl:K,userId:G,portalReferrers:pe});if(P?.action)switch(P.action){case"activate":M(w,chrome.runtime.id,e,r,$,c);break;default:console.error(`Unknown action: ${P.action}`);break}P?.status!=="success"&&ce({type:"no_popup",userId:G,walletAddress:v,details:{url:d.url,match:w,iframeUrl:K,reason:P?.message,status:P?.status},flowId:ue})}),chrome.tabs.onRemoved.addListener(c=>delete R[c])},Xe=ze;var Ze=()=>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})})}),et=e=>new Promise((t,r)=>{let i=e?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?t({isTurnedOff:n.isOptedOut}):r("No response received")})});var tt=()=>new Promise((e,t)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),t(chrome.runtime.lastError);return}e(r)})}),rt=e=>new Promise((t,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:e},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?t({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});export{Xe as bringInitBackground,xe as bringInitContentScript,tt as getPopupEnabled,Ze as getTurnOff,rt as setPopupEnabled,et as setTurnOff};
|
|
1
|
+
var Pt=t=>{let e=new URLSearchParams,{query:r,prefix:i}=t;return Object.entries(r).forEach(([n,a])=>{a&&(i&&(n=`${i}_${n}`),n==="url"?e.append(n,encodeURIComponent(a)):e.append(n,a))}),e.toString()},$=Pt;var q={name:"@bringweb3/chrome-extension-kit",version:"1.4.4",description:"Crypto cashback integration kit for crypto outlets extension",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",license:"MIT",private:!1,publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/Bring-Web3-LTD/chromeExtension.git"},scripts:{watch:"tsup index.ts --env.IFRAME_URL=http://localhost:5173 --format cjs,esm --dts --watch",build:"tsup index.ts --format cjs,esm --dts --minify",lint:"tsc",test:"vitest --coverage",release:"yarn build && changeset publish"},files:["dist","README.md"],devDependencies:{"@changesets/cli":"^2.27.7","@types/chrome":"^0.0.268","@vitest/coverage-v8":"^2.0.5",tsup:"^8.2.1",typescript:"^5.5.3",vitest:"^2.0.5"},keywords:["cashback","crypto","bringweb3"],dependencies:{uuid:"^11.0.3"}};var _t=()=>q.version,S=_t;var xt=({query:t,theme:e,themeMode:r,text:i,iframeUrl:n,page:a,switchWallet:m})=>{let d=chrome.runtime.id,c=`bringweb3-iframe-${d}`,u=document.getElementById(c),l=process?.env?.IFRAME_URL?`${process.env.IFRAME_URL}${a?"/"+a:""}`:n;if(u)return u;let f=$({query:{...t,extensionId:d,v:S(),themeMode:r,textMode:i,switchWallet:String(m)}}),E=e?`&${$({query:e,prefix:"t"})}`:"",s=document.createElement("iframe");return s.id=c,s.src=encodeURI(`${l}?${f}${E}`),s.setAttribute("sandbox","allow-scripts allow-same-origin"),s.style.position="fixed",s.scrolling="no",s.style.overflow="hidden",s.style.width="1px",s.style.height="1px",s.style.right="8px",s.style.borderRadius="10px",s.style.border="none",s.style.cssText+="z-index: 99999999999999 !important;",e?.popupShadow&&(s.style.boxShadow=e.popupShadow),document.documentElement.appendChild(s),s},Q=xt;var vt=(t,e)=>{!t||!e||!Object.keys(e).length||Object.entries(e).forEach(([r,i])=>{r in t.style&&(t.style[r]=i)})},J=vt;var Dt=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")},Y=Dt;var h={OPEN:"OPEN",CLOSE:"CLOSE",ACTIVATE:"ACTIVATE",PROMPT_LOGIN:"PROMPT_LOGIN",OPT_OUT:"OPT_OUT",OPT_OUT_SPECIFIC:"OPT_OUT_SPECIFIC",ADD_KEYFRAMES:"ADD_KEYFRAMES",ERASE_NOTIFICATION:"ERASE_NOTIFICATION",OPEN_CASHBACK_PAGE:"OPEN_CASHBACK_PAGE"},St=[h.ACTIVATE],It=({event:t,iframeEl:e,promptLogin:r})=>{if(!t?.data)return;let{from:i,action:n,style:a,keyFrames:m,time:d,extensionId:c,url:u,domain:l,redirectUrl:f}=t.data;if(i==="bringweb3"&&!(c!==chrome.runtime.id&&!St.includes(n)))switch(n){case h.OPEN:J(e,a);break;case h.CLOSE:e&&e.parentNode?.removeChild(e),d&&chrome.runtime.sendMessage({action:n,time:d,domain:l,from:"bringweb3"});break;case h.PROMPT_LOGIN:r();break;case h.ACTIVATE:chrome.runtime.sendMessage({action:n,from:"bringweb3",domain:l,extensionId:c,time:d,redirectUrl:f});break;case h.OPT_OUT:chrome.runtime.sendMessage({action:n,time:d,from:"bringweb3"});break;case h.OPT_OUT_SPECIFIC:chrome.runtime.sendMessage({action:n,domain:l,time:d,from:"bringweb3"});break;case h.ERASE_NOTIFICATION:chrome.runtime.sendMessage({action:n,from:"bringweb3"});case h.ADD_KEYFRAMES:Y(m);break;case h.OPEN_CASHBACK_PAGE:chrome.runtime.sendMessage({action:n,url:u,from:"bringweb3"});break;default:break}},z=It;var X=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})},Ct=({walletAddressListeners:t,walletAddressUpdateCallback:e,getWalletAddress:r,iframeEl:i})=>{if(e)e(()=>X({iframeEl:i,getWalletAddress:r}));else if(t)for(let n=0;n<t.length;n++){let a=t[n];a&&window.addEventListener(a,async()=>X({iframeEl:i,getWalletAddress:r}))}},Z=Ct;var Nt=t=>t.endsWith("/")?t.slice(0,-1):t,I=Nt;var Ut=["www.","www1.","www2."],kt=t=>{for(let r of Ut)t=t.replace(r,"");let e="";try{e=new URL(t).host}catch{e=new URL(`https://${t}`).host}return e=I(e),e},P=kt;var F=null,tt=!1,Mt=async({getWalletAddress:t,promptLogin:e,walletAddressListeners:r,walletAddressUpdateCallback:i,lightTheme:n,darkTheme:a,theme:m,text:d,switchWallet:c=!1})=>{if(window.self===window.top){if(!t||!e||!r?.length&&typeof i!="function")throw new Error("Missing configuration");Z({walletAddressListeners:r,walletAddressUpdateCallback:i,getWalletAddress:t,iframeEl:F}),window.addEventListener("message",u=>z({event:u,iframeEl:F,promptLogin:e})),chrome.runtime.onMessage.addListener((u,l,f)=>{if(u?.from!=="bringweb3")return;let{action:E}=u;switch(E){case"GET_WALLET_ADDRESS":return t().then(s=>f({status:"success",walletAddress:s})).catch(s=>f({status:"success",walletAddress:void 0})),!0;case"INJECT":try{let{referrer:s}=document,g=u.portalReferrers||[];if(P(location.href)!==P(u.domain))return f({status:"failed",message:"Domain already changed"}),!0;if(tt)return f({status:"failed",message:"iframe already open"}),!0;if(s&&g.includes(P(s)))return f({status:"failed",message:`already activated by ${P(s)}`,action:"activate"}),!0;let{token:y,iframeUrl:v,userId:b}=u,D={token:y};return b&&(D.userId=b),F=Q({query:D,iframeUrl:v,theme:m==="dark"?a:n,themeMode:m||"light",text:d,switchWallet:c,page:u.page}),tt=!0,f({status:"success"}),!0}catch(s){return s instanceof Error?f({status:"failed",message:s.message}):f({status:"failed",message:String(s)}),!0}default:console.error(`Unknown action: ${E}`);break}})}},Rt=Mt;var et=t=>{t&&chrome.tabs.create({url:t})};var p=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 Lt=async(t,e)=>new Promise((r,i)=>{chrome.storage.local.set({[`bring_${t}`]:e},()=>{chrome.runtime.lastError?i(chrome.runtime.lastError):r()})}),Wt=async t=>new Promise((e,r)=>{chrome.storage.local.get([`bring_${t}`],i=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e(i[`bring_${t}`])})}),$t=async t=>new Promise((e,r)=>{chrome.storage.local.remove([`bring_${t}`],()=>{chrome.runtime.lastError?r(chrome.runtime.lastError):e()})}),o={set:Lt,get:Wt,remove:$t};import{v4 as Ft}from"uuid";var jt=async()=>{let t=await o.get("id");return t||(t=Ft(),o.set("id",t)),t},T=jt;var Kt=async t=>{let{path:e,method:r,params:i}=t;if(!t||!e||!r||!i&&r==="POST")throw new Error("Missing endpoint or method");let n=p.getInstance().getApiEndpoint();n+=e;let a=p.getInstance().getApiKey();if(r==="GET"){let c=new URLSearchParams({...i,version:S(),timestamp:Date.now().toString(),opt_out:await o.get("optOut")||0,user_id:await T()||"undefined",wallet_address:await o.get("walletAddress")||"undefined"});n+=`?${c.toString()}`}else r==="POST"&&(i={...i,version:S(),timestamp:Date.now(),optOut:await o.get("optOut")||0,userId:await T()||void 0,walletAddress:i?.walletAddress||await o.get("walletAddress")||void 0});return await(await fetch(n,{method:r,headers:{"Content-Type":"application/json","x-api-key":a},body:r==="POST"?JSON.stringify(i):void 0})).json()},A=Kt;var Gt=async({body:t})=>await A({path:"/check/popup",method:"POST",params:t}),rt=Gt;var Bt=["www.","www1.","www2."],Vt=t=>{if(!t)return"";t=t.split("://").reverse()[0]||"";for(let e of Bt)t.startsWith(e)&&(t=t.replace(e,""));return t},nt=Vt;var it="quietDomains",Ht=async(t,e)=>{let r=await o.get(it);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(it,r)},C=Ht;var qt=async({walletAddress:t,cashbackUrl:e,lastActivation:r,timeSinceLastActivation:i})=>{let n={walletAddress:t};return r&&(n.lastActivation=r),i&&(n.timeSinceLastActivation=i),e&&(n.cashbackUrl=e),await A({path:"/check/notification",method:"POST",params:n})},ot=qt;var Qt=(t,e)=>new Promise((n,a)=>{let m=d=>{chrome.tabs.get(t,c=>{if(chrome.runtime.lastError){n(null);return}chrome.tabs.sendMessage(t,{...e,from:"bringweb3"},u=>{chrome.runtime.lastError?d<4?setTimeout(()=>m(d+1),1e3*Math.pow(2,d)):n(null):n(u||null)})})};m(0)}),x=Qt;var Jt=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 x(t,{action:"GET_WALLET_ADDRESS"});r?.walletAddress&&e!==r?.walletAddress&&(e=r?.walletAddress,await o.set("walletAddress",e))}catch{}return e},k=Jt;var Yt=t=>{if(!t||!Array.isArray(t)||t.length!==2)return!1;let[e,r]=t;return typeof e=="number"&&typeof r=="number"&&e<=r},N=(t,e)=>{if(!Yt(t))return!0;let[r,i]=t;return e=e??Date.now(),e<r||e>i},O=(t,e)=>!N(t,e);var zt=async(t,e)=>{let r={showNotification:!1,token:"",iframeUrl:""},i=Date.now(),n=await o.get("notificationCheck");if(O(n,i))return r;let a=t?await k(t):await o.get("walletAddress");if(!a)return r;let m=await o.get("lastActivation"),d=m?i-m:void 0,c=await ot({walletAddress:a,cashbackUrl:e,lastActivation:m,timeSinceLastActivation:d});o.set("notificationCheck",[i,i+c.nextCall]);let u={showNotification:c.showNotification,token:c.token,iframeUrl:c.iframeUrl,expiration:[i,i+c.expiration]};return u.showNotification&&await o.set("notification",u),u},M=zt;var Xt=t=>t?chrome.runtime.getURL(t):"",R=Xt;var Zt=async t=>{let e=p.getInstance().getWhitelistEndpoint(),r={path:"/domains",method:"GET"};return r.params={},e&&(r.params.whitelist=encodeURIComponent(e)),t&&(r.params.trigger=t),await A(r)},st=Zt;var at=t=>{if(t===void 0)return"undefined";if(t===null)return"null";if(typeof t=="string")return`"${t}"`;if(typeof t=="number")return Number.isNaN(t)?"NaN":String(t);if(typeof t=="boolean")return String(t);if(Array.isArray(t))return`[${t.map(e=>e===void 0?"undefined":e===null?"null":at(e)).join(", ")}]`;if(typeof t=="object")try{return JSON.stringify(t,(e,r)=>r===void 0?"undefined":Number.isNaN(r)?"NaN":r)}catch{return`{object: ${Object.prototype.toString.call(t)}}`}return String(t)},w=at;var ct=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 U=async()=>{let t=await o.get("relevantDomainsCheck"),e=await o.get("relevantDomains"),r=await o.get("redirectsWhitelist"),i=p.getInstance().getWhitelistEndpoint(),n=null,a=Date.now();if(e?Array.isArray(e)?t?Array.isArray(t)?t.length!==2?n=`invalid domains timestamp check format__length: ${t.length} - value: ${w(t)}`:t[0]>=a?n=`cache expired - range start is bigger than Date.now()__value: ${w(t)}, now: ${a}`:a>=t[1]?n=`cache expired - range end is smaller than Date.now()__value: ${w(t)}, now: ${a}`:i&&!r?.length?n=`missing whitelist data__endpoint: ${i}, whitelist: ${w(r)}`:N(t,a)&&(n=`cache expired - range is expired__range: ${w(t)}, now: ${a}`):n=`invalid domains timestamp check format - not an array__value: ${w(t)}`:n=`no domains timestamp check found__value: ${w(t)}`:n=`domains list isn't an array__value: ${w(e)}`:n=`no domains in cache__value: ${w(e)}`,!n)return e;let m=await st(n),{nextUpdateTimestamp:d,relevantDomains:c}=m;return o.set("relevantDomains",c),o.set("relevantDomainsCheck",[a,a+d]),r=await ct(),r&&o.set("redirectsWhitelist",r),c};var te=async(t,e)=>{try{let r=p.getInstance().getWhitelistEndpoint();if(r&&!e?.length&&(await U(),e=await o.get("redirectsWhitelist")),!e?.length)return!r;let n=new URL(t).hostname.toLowerCase();return n=n.replace("www.",""),e.includes(n)?!0:e.some(a=>{if(a.startsWith("*.")){let m=a.slice(2);return n.endsWith(m)}return!1})}catch{return console.error("Invalid URL:",t),!1}},L=te;var ee=async(t,e,r,i,n,a)=>{let m=Date.now();if(e===chrome.runtime.id&&await o.set("lastActivation",m),t&&C(t,i||864e5),n&&a){let d=await o.get("redirectsWhitelist");await L(a,d)&&chrome.tabs.update(n,{url:a})}await M(void 0,R(r))},j=ee;var mt=async t=>{if(t<0)return await o.remove("optOut"),{isOptedOut:!1};{let e=Date.now();return await o.set("optOut",[e,e+t]),{isOptedOut:!0}}},lt=async()=>{let t=await o.get("optOut");return{isOptedOut:O(t)}};var ut=async(t,e,r)=>{await x(t,{action:"INJECT",page:"notification",token:e.token,iframeUrl:e.iframeUrl,userId:await T(),domain:r})},re=async(t,e,r,i,n)=>{let a=await o.get("notification"),m=Date.now(),d=a?.expiration;if(N(d,m))await o.remove("notification");else if(a)return await ut(t,a,r);let c=await M(t,R(e));c.showNotification&&(i&&await ut(t,c,r),n&&n())},dt=re;var ne=async t=>{t.category=t?.category||"system",await A({path:"/analytics",method:"POST",params:t})},ft=ne;var pt="optOutDomains",ie=async(t,e)=>{if(!t)return;let r=await o.get(pt);(typeof r!="object"||r===null)&&(r={});let i=Date.now(),n=i+e;r[t]=[i,n],o.set(pt,r)},gt=ie;var ht=1,wt=async(t,e)=>{let r=await o.get(t);if(r&&typeof r=="object"){for(let[i,n]of Object.entries(r))typeof n=="number"&&n>e?r[i]=[e,n]:delete r[i];o.set(t,r)}},oe=async()=>{try{let t=Date.now(),e=await o.get("optOut");return e&&typeof e=="number"&&e>t?await o.set("optOut",[t,e]):await o.remove("optOut"),await wt("optOutDomains",t),await wt("quietDomains",t),!0}catch{return!1}},Et=async()=>{(await o.get("migrationVersion")||0)<ht&&await oe()&&await o.set("migrationVersion",ht)};var se=["www.","www1.","www2."],ae=async t=>{let e=await U();if(!t||!e||!e.length)return"";let r=null;try{r=new URL(t)}catch{r=new URL(`https://${t}`)}let i=r.hostname,n=I(r.pathname);for(let m of se)i=i.replace(m,"");let a=Date.now();for(let m of e){let d=m;m=I(m);let c=!1;m.startsWith("*.")&&(c=!0);let u="/"+m.split("/").slice(1).join("/")||"";if(u!=="/"&&n.startsWith(u)&&(i+=u),i===m||c&&i.endsWith(m.replace("*.",""))){let l=await o.get("quietDomains");return l&&l[m]&&O(l[m])&&l[m][1]<a+60*864e5?"":d}}return""},K={},ce=async({identifier:t,apiEndpoint:e,cashbackPagePath:r,whitelistEndpoint:i,isEnabledByDefault:n=!0,showNotifications:a=!0,notificationCallback:m})=>{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||""),p.getInstance().setApiKey(t),await o.get("popupEnabled")===void 0&&await o.set("popupEnabled",n),await Et(),U(),chrome.runtime.onMessage.addListener((c,u,l)=>{if(c?.from!=="bringweb3")return;let{action:f}=c;switch(f){case"ACTIVATE":{let{domain:s,extensionId:g,time:y,redirectUrl:v}=c;return j(s,g,r,y,u.tab?.id,v).then(()=>l()),!0}case"GET_OPT_OUT":return lt().then(s=>l(s)),!0;case"OPT_OUT":{let{time:s}=c;return mt(s).then(g=>l(g)),!0}case"OPT_OUT_SPECIFIC":{let{domain:s,time:g}=c;return gt(s,g).then(y=>l(y)),!0}case"GET_POPUP_ENABLED":return o.get("popupEnabled").then(s=>l({isPopupEnabled:s})),!0;case"SET_POPUP_ENABLED":{let{isPopupEnabled:s}=c;return o.set("popupEnabled",s).then(()=>{l({isPopupEnabled:s})}).catch(g=>{console.error("Error setting popup enabled:",g),l({error:"Failed to set popup enabled state"})}),!0}case"CLOSE":{let{time:s,domain:g}=c;return g&&(C(g,s),l({message:"domain added to quiet list"})),!0}case"WALLET_ADDRESS_UPDATE":{let{walletAddress:s}=c;return s?o.set("walletAddress",s).then(()=>l(s)):o.remove("walletAddress").then(()=>l({message:"wallet address removed successfully"})),!0}case"ERASE_NOTIFICATION":return o.remove("notification").then(()=>l({message:"notification erased successfully"})),!0;default:return console.warn(`Bring unknown action: ${f}`),!0;case"OPEN_CASHBACK_PAGE":let{url:E}=c;return et(E||r),l({message:"cashback page opened successfully"}),!0}}),chrome.tabs.onUpdated.addListener(async(c,u,l)=>{if(!u.url||!l?.url?.startsWith("http"))return;let f=nt(l.url),E=await o.get("optOut"),s=await o.get("popupEnabled"),g=Date.now();if(!s||O(E,g))return;E&&o.remove("optOut");let y=await o.get("optOutDomains");if(y&&O(y[P(f)],g))return;let v=K[c];if(f===v)return;K[c]=f;let b=await ae(l.url);if(!b||!b.length){await dt(c,r,f,a,m);return}let D=await k(c),{token:bt,isValid:G,iframeUrl:B,networkUrl:yt,flowId:At,portalReferrers:Ot,time:V=864e5}=await rt({body:{domain:b,url:l.url,address:D}});if(!G){G===!1&&C(b,V);return}if(!await L(yt,await o.get("redirectsWhitelist")))return;let H=await T(),_=await x(c,{action:"INJECT",token:bt,domain:f,iframeUrl:B,userId:H,portalReferrers:Ot});if(_?.action)switch(_.action){case"activate":j(b,chrome.runtime.id,r,V,c);break;default:console.error(`Unknown action: ${_.action}`);break}_?.status!=="success"&&ft({type:"no_popup",userId:H,walletAddress:D,details:{url:l.url,match:b,iframeUrl:B,reason:_?.message,status:_?.status},flowId:At})}),chrome.tabs.onRemoved.addListener(c=>delete K[c])},me=ce;var le=()=>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})})}),ue=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")})});var de=()=>new Promise((t,e)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"GET_POPUP_ENABLED"},r=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),e(chrome.runtime.lastError);return}t(r)})}),fe=t=>new Promise((e,r)=>{chrome.runtime.sendMessage({from:"bringweb3",action:"SET_POPUP_ENABLED",isPopupEnabled:t},i=>{if(chrome.runtime.lastError){console.error(chrome.runtime.lastError),r(chrome.runtime.lastError);return}i?e({isPopupEnabled:i.isPopupEnabled}):r("No response received")})});export{me as bringInitBackground,Rt as bringInitContentScript,de as getPopupEnabled,le as getTurnOff,fe as setPopupEnabled,ue as setTurnOff};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bringweb3/chrome-extension-kit",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.4",
|
|
4
4
|
"description": "Crypto cashback integration kit for crypto outlets extension",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -41,4 +41,4 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"uuid": "^11.0.3"
|
|
43
43
|
}
|
|
44
|
-
}
|
|
44
|
+
}
|