@frak-labs/components 0.0.15 → 0.0.16

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.
@@ -0,0 +1,13 @@
1
+ export const __webpack_ids__=["321"];export const __webpack_modules__={"./src/components/ButtonWallet/utils.ts":function(e,t,n){n.d(t,{G:()=>o});var r=n("../core/dist/actions.js");function o(){if(!window.FrakSetup?.client){console.error("Frak client not found");return}"vibrate"in navigator?navigator.vibrate(10):console.log("Vibration not supported"),(0,r.s9)(window.FrakSetup.client,window.FrakSetup?.modalWalletConfig??{})}},"./src/hooks/useClientReady.ts":function(e,t,n){n.d(t,{t:()=>a});var r=n("./src/utils/clientReady.ts"),o=n("../../node_modules/preact/hooks/dist/hooks.module.js");function a(){let[e,t]=(0,o.eJ)(!0),n=(0,o.I4)(()=>{t(!1)},[]);return(0,o.d4)(()=>((0,r.D)("add",n),()=>(0,r.D)("remove",n)),[n]),{isClientReady:!e}}},"./src/hooks/useReward.ts":function(e,t,n){n.d(t,{w:()=>s});var r=n("../core/dist/index.js"),o=n("../core/dist/actions.js");async function a({targetInteraction:e}){let t=window.FrakSetup?.client;if(!t){console.warn("Frak client not ready yet");return}let{maxReferrer:n,rewards:a}=await (0,o.pO)(t);if(!n)return;let i=(0,r.Up)(t.config.metadata?.currency),s=Math.ceil(n[i]);if(e){let t=a.filter(t=>t.interactionTypeKey===e).map(e=>e.referrer[i]).reduce((e,t)=>t>e?t:e,0);t>0&&(s=Math.ceil(t))}return(0,r.dN)(s,t.config.metadata?.currency)}var i=n("../../node_modules/preact/hooks/dist/hooks.module.js");function s(e,t){let[n,r]=(0,i.eJ)(void 0);return(0,i.d4)(()=>{e&&a({targetInteraction:t}).then(e=>{e&&r(e)})},[e,t]),{reward:n}}},"./src/utils/clientReady.ts":function(e,t,n){n.d(t,{D:()=>a,f:()=>o});let r="frakClientReady";function o(){let e=new CustomEvent(r);window.dispatchEvent(e)}function a(e,t){if(window.FrakSetup?.client&&"add"===e){t();return}("add"===e?window.addEventListener:window.removeEventListener)(r,t,!1)}},"./src/utils/registerWebComponent.ts":function(e,t,n){n.d(t,{A:()=>l});var r=n("../../node_modules/preact-custom-element/dist/preact-custom-element.esm.js"),o=n("../core/dist/index.js"),a=n("./src/components/ButtonWallet/utils.ts"),i=n("./src/utils/clientReady.ts"),s=n("./src/utils/setup.ts");async function c(){if(!(window.frakSetupInProgress?(console.log("[Frak SDK] Initialization already in progress"),!1):window.FrakSetup?.client?(console.log("[Frak SDK] Client already initialized"),!1):!!window.FrakSetup?.config||(console.error("[Frak SDK] Configuration not found. Please ensure window.FrakSetup.config is set."),!1)))return;if(console.log("[Frak SDK] Starting initialization"),window.frakSetupInProgress=!0,!window.FrakSetup.config){console.error("[Frak SDK] Configuration not found"),window.frakSetupInProgress=!1;return}let e=await (0,o.lD)({config:window.FrakSetup.config});if(!e){console.error("[Frak SDK] Failed to create client"),window.frakSetupInProgress=!1;return}window.FrakSetup.client=e,console.log("[Frak SDK] Client initialized successfully"),(0,i.f)(),(0,s.N3)(e),(0,s.zK)(e),window.frakSetupInProgress=!1,function(){let e=new URLSearchParams(window.location.search).get("frakAction");e&&"share"===e&&(console.log("[Frak SDK] Auto open query param found"),(0,a.G)())}()}function l(e,t,n=[],o={shadow:!1}){if("undefined"!=typeof window){var a;a=async function(){await c()},"complete"===document.readyState||"interactive"===document.readyState?setTimeout(a,1):document.addEventListener?document.addEventListener("DOMContentLoaded",a):document.attachEvent("onreadystatechange",()=>{"complete"===document.readyState&&a()}),customElements.get(t)||(0,r.Z)(e,t,n,o)}}},"./src/utils/setup.ts":function(e,t,n){n.d(t,{Gt:()=>i,N3:()=>o,zK:()=>a});var r=n("../core/dist/actions.js");function o(e){window.modalBuilderSteps=(0,r.jy)(e,window.FrakSetup?.modalConfig??{})}async function a(e){console.log("referral",await (0,r.KS)(e,{modalConfig:window.FrakSetup?.modalWalletConfig}))}function i(){if(!window.modalBuilderSteps)throw Error("modalBuilderSteps not found");return window.modalBuilderSteps}},"../core/dist/actions.js":function(e,t,n){n.d(t,{KS:()=>E,jy:()=>w,pO:()=>f,s9:()=>u});var r=n("../../node_modules/viem/_esm/utils/hash/keccak256.js"),o=n("../../node_modules/viem/_esm/utils/encoding/toHex.js"),a=n("../../node_modules/viem/_esm/utils/encoding/toBytes.js"),i=n("../../node_modules/viem/_esm/utils/data/concat.js"),s=n("../../node_modules/viem/_esm/utils/data/pad.js"),c=n("../../node_modules/viem/_esm/utils/address/isAddressEqual.js");async function l(e,{productId:t,interaction:n,validation:a}){let i=t??function({domain:e}){let t=(e??window.location.host).replace("www.","");return(0,r.w)((0,o.NC)(t))}(e.config);return await e.request({method:"frak_sendInteraction",params:[i,n,a]})}async function d(e,{steps:t,metadata:n}){return await e.request({method:"frak_displayModal",params:[t,n,e.config.metadata]})}async function u(e,t){return await e.request({method:"frak_displayEmbeddedWallet",params:[t,e.config.metadata]})}async function f(e){return await e.request({method:"frak_getProductInformation"})}function w(e,{metadata:t,login:n,openSession:r}){return function e(t,n){async function r(e){return e&&(n.metadata=e(n.metadata??{})),await d(t,n)}return{params:n,sendTx:function(r){return e(t,{...n,steps:{...n.steps,sendTransaction:r}})},reward:function(r){return e(t,{...n,steps:{...n.steps,final:{...r,action:{key:"reward"}}}})},sharing:function(r,o){return e(t,{...n,steps:{...n.steps,final:{...o,action:{key:"sharing",options:r}}}})},display:r}}(e,{steps:{login:n??{},openSession:r??{}},metadata:t})}let m="fCtx";function p({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(m);return t?function(e){if(e&&0!==e.length)try{let t;let n=(t=e.length%4,Uint8Array.from(atob(e.replace(/-/g,"+").replace(/_/g,"/").padEnd(e.length+(0===t?0:4-t),"=")),e=>e.charCodeAt(0)));return{r:(0,o.ci)(n,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}(t):null}let g={parse:p,replaceUrl:function({url:e,context:t}){let n,r;if(!window.location?.href||"undefined"==typeof window){console.error("No window found, can't update context");return}let o=e??window.location.href;(n=null!==t?function({url:e,context:t}){if(!e)return null;let n=p({url:e}),r=n?{...n,...t}:t;if(!r.r)return null;let o=function(e){if(e?.r)try{var t;return t=(0,a.nr)(e.r),btoa(Array.from(t,e=>String.fromCharCode(e)).join("")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}catch(t){console.error("Error compressing Frak context",{e:t,context:e})}}(r);if(!o)return null;let i=new URL(e);return i.searchParams.set(m,o),i.toString()}({url:o,context:t}):((r=new URL(o)).searchParams.delete(m),r.toString()))&&window.history.replaceState(null,"",n.toString())}},h={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31};Object.entries(h).reduce((e,[t,n])=>(e[t]=BigInt(1)<<BigInt(n),e),{});let y={createLink:()=>({handlerTypeDenominator:(0,o.NC)(h.referral),interactionData:"0xb2c0f17c"}),referred({referrer:e}){let t=(0,i.SM)(["0x010cc3b9",(0,s.vk)(e,{size:32})]);return{handlerTypeDenominator:(0,o.NC)(h.referral),interactionData:t}}};class v extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.data=n}}let k={walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006};async function S(e,{walletStatus:t,frakContext:n,modalConfig:r,productId:o,options:a}){let i=!1;async function s(){if(!i)return i=!0,C(e,{modalConfig:{...r,loggedIn:{action:{key:"referred"}}},walletStatus:t})}async function c(t){let n=y.referred({referrer:t});await l(e,{productId:o,interaction:n})}try{let{status:e,currentWallet:r}=await b({initialWalletStatus:t,getFreshWalletStatus:s,pushReferralInteraction:c,frakContext:n});return g.replaceUrl({url:window.location?.href,context:a?.alwaysAppendUrl?{r:r}:null}),e}catch(e){return console.log("Error processing referral",{error:e}),g.replaceUrl({url:window.location?.href,context:a?.alwaysAppendUrl?{r:t?.wallet}:null}),function(e){if(e instanceof v)switch(e.code){case k.walletNotConnected:return"no-wallet";case k.serverErrorForInteractionDelegation:return"no-session"}return"error"}(e)}}async function b({initialWalletStatus:e,getFreshWalletStatus:t,pushReferralInteraction:n,frakContext:r}){let o=e?.wallet;return r?.r?(o||(o=await t()),o&&(0,c.E)(r.r,o))?{status:"self-referral",currentWallet:o}:(e?.interactionSession||(o=await t()),await n(r.r),{status:"success",currentWallet:o}):{status:"no-referrer",currentWallet:o}}async function C(e,{modalConfig:t,walletStatus:n}){if(!n?.interactionSession){let n=await u(e,t??{});return n?.wallet??void 0}return n.wallet??void 0}async function E(e,{productId:t,modalConfig:n,options:r}={}){var o;let a=g.parse({url:window.location.href}),i=await e.request({method:"frak_listenToWalletStatus"}).then(e=>{var t;return t=e.interactionToken,"undefined"!=typeof window&&(t?window.sessionStorage.setItem("frak-wallet-interaction-token",t):window.sessionStorage.removeItem("frak.interaction-token")),e});try{return await S(e,{walletStatus:i,frakContext:a,modalConfig:n,productId:t,options:r})}catch(e){console.warn("Error processing referral",{error:e})}}},"../core/dist/index.js":function(e,t,n){n.d(t,{Up:()=>b,dN:()=>C,lD:()=>S,oC:()=>p,ss:()=>s,u:()=>a});var r=n("../../node_modules/@jsonjoy.com/json-pack/lib/cbor/index.js"),o=n("../../node_modules/viem/_esm/utils/hash/sha256.js");class a extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.data=n}}class i extends a{constructor(e){super(s.internalError,e)}}let s={parseError:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internalError:-32603,serverError:-32e3,clientNotConnected:-32001,configError:-32002,corruptedResponse:-32003,clientAborted:-32004,walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006};class c{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}}let l=new r.CborEncoder;function d(e){let t={...e,validationHash:u(e)};return l.encode(t)}function u(e){return(0,o.J)(l.encode(e))}let f=new r.CborDecoder;function w(e){if(!e.length)throw new a(s.corruptedResponse,"Missing compressed data");let t=function(e){try{return f.decode(e)}catch(t){return console.error("Invalid compressed data",{e:t,data:e}),null}}(e);if(!t)throw new a(s.corruptedResponse,"Invalid compressed data");if(!t?.validationHash)throw new a(s.corruptedResponse,"Missing validation hash");let{validationHash:n,...r}=t;if(u(r)!==t.validationHash)throw new a(s.corruptedResponse,"Invalid data validation hash");return t}let m="nexus-wallet-backup";class p{config;iframe;isSetupDone=!1;lastResponse=null;lastRequest=null;constructor(e,t){this.config=e,this.iframe=t,this.lastRequest=null,this.lastResponse=null}setLastResponse(e){this.lastResponse={event:e.data,origin:e.origin,timestamp:Date.now()}}setLastRequest(e,t){this.lastRequest={event:e,target:t,timestamp:Date.now()}}updateSetupStatus(e){this.isSetupDone=e}base64Encode(e){try{return btoa(JSON.stringify(e))}catch(e){return console.warn("Failed to encode debug data",e),btoa("Failed to encode data")}}getIframeStatus(){return this.iframe?{loading:this.iframe.hasAttribute("loading"),url:this.iframe.src,readyState:this.iframe.contentDocument?.readyState?+("complete"===this.iframe.contentDocument.readyState):-1,contentWindow:!!this.iframe.contentWindow,isConnected:this.iframe.isConnected}:null}getNavigatorInfo(){return navigator?{userAgent:navigator.userAgent,language:navigator.language,onLine:navigator.onLine,screenWidth:window.screen.width,screenHeight:window.screen.height,pixelRatio:window.devicePixelRatio}:null}gatherDebugInfo(e){let t=this.getIframeStatus(),n=this.getNavigatorInfo(),r="Unknown";return e instanceof a?r=`FrakRpcError: ${e.code} '${e.message}'`:e instanceof Error?r=e.message:"string"==typeof e&&(r=e),{timestamp:new Date().toISOString(),encodedUrl:btoa(window.location.href),encodedConfig:this.config?this.base64Encode(this.config):"no-config",navigatorInfo:n?this.base64Encode(n):"no-navigator",iframeStatus:t?this.base64Encode(t):"not-iframe",lastRequest:this.lastRequest?this.base64Encode(this.lastRequest):"No Frak request logged",lastResponse:this.lastResponse?this.base64Encode(this.lastResponse):"No Frak response logged",clientStatus:this.isSetupDone?"setup":"not-setup",error:r}}static empty(){return new p}formatDebugInfo(e){let t=this.gatherDebugInfo(e);return`
2
+ Debug Information:
3
+ -----------------
4
+ Timestamp: ${t.timestamp}
5
+ URL: ${t.encodedUrl}
6
+ Config: ${t.encodedConfig}
7
+ Navigator Info: ${t.navigatorInfo}
8
+ IFrame Status: ${t.iframeStatus}
9
+ Last Request: ${t.lastRequest}
10
+ Last Response: ${t.lastResponse}
11
+ Client Status: ${t.clientStatus}
12
+ Error: ${t.error}
13
+ `.trim()}}let g=2000001;function h({iframe:e,isVisible:t}){if(!t){e.style.width="0",e.style.height="0",e.style.border="0",e.style.position="fixed",e.style.top="-1000px",e.style.left="-1000px";return}e.style.position="fixed",e.style.top="0",e.style.left="0",e.style.width="100%",e.style.height="100%",e.style.pointerEvents="auto"}async function y({config:e,messageHandler:t,lifecycleManager:n}){async function r(){let n=e.customizations?.css;n&&t.sendEvent({clientLifecycle:"modal-css",data:{cssLink:n}})}async function o(){let n=e.customizations?.i18n;n&&t.sendEvent({clientLifecycle:"modal-i18n",data:{i18n:n}})}async function a(){if("undefined"==typeof window)return;let e=window.localStorage.getItem(m);e&&t.sendEvent({clientLifecycle:"restore-backup",data:{backup:e}})}await n.isConnected,await Promise.all([r(),o(),a()])}let v={eur:"fr-FR",usd:"en-US",gbp:"en-GB"};function k(e){return e&&e in v?e:"eur"}async function S({config:e}){let t;let n=(t=k(e.metadata?.currency),{...e,metadata:{...e.metadata,currency:t}}),r=await function({walletBaseUrl:e,config:t}){let n=document.querySelector("#frak-wallet");n&&n.remove();let r=document.createElement("iframe");return r.id="frak-wallet",r.name="frak-wallet",r.allow="publickey-credentials-get *; clipboard-write; web-share *",r.style.zIndex=g.toString(),h({iframe:r,isVisible:!1}),document.body.appendChild(r),new Promise(n=>{r?.addEventListener("load",()=>n(r)),r.src=`${t?.walletUrl??e??"https://wallet.frak.id"}/listener`})}({config:n});if(!r){console.error("Failed to create iframe");return}let o=function({config:e,iframe:t}){let n;let r=(n=new Map,{createChannel:e=>{let t=Math.random().toString(36).substring(7);return n.set(t,e),t},getRpcResolver:e=>n.get(e),removeChannel:e=>n.delete(e),destroy:()=>n.clear()}),o=function({iframe:e}){let t=new c;return{handleEvent:async n=>{switch(n.iframeLifecycle){case"connected":t.resolve(!0);break;case"do-backup":n.data.backup?localStorage.setItem(m,n.data.backup):localStorage.removeItem(m);break;case"remove-backup":localStorage.removeItem(m);break;case"show":case"hide":h({iframe:e,isVisible:"show"===n.iframeLifecycle});break;case"handshake":e.contentWindow?.postMessage({clientLifecycle:"handshake-response",data:{token:n.data.token,currentUrl:window.location.href}},"*")}},isConnected:t.promise}}({iframe:t}),l=new p(e,t),u=function({frakWalletUrl:e,iframe:t,channelManager:n,iframeLifecycleManager:r,debugInfo:o}){if("undefined"==typeof window)throw new a(s.configError,"iframe client should be used in the browser");if(!t.contentWindow)throw new a(s.configError,"The iframe does not have a product window");let i=t.contentWindow;async function c(t){if(!t.origin)return;try{if(new URL(t.origin).origin.toLowerCase()!==new URL(e).origin.toLowerCase())return}catch(e){console.log("Unable to check frak msg origin",e);return}if("object"!=typeof t.data)return;if(o.setLastResponse(t),"iframeLifecycle"in t.data){await r.handleEvent(t.data);return}if("clientLifecycle"in t.data){console.error("Client lifecycle event received on the client side, dismissing it");return}let a=t.data.id,i=n.getRpcResolver(a);i&&i(t.data)}return window.addEventListener("message",c),{sendEvent:function(t){i.postMessage(t,{targetOrigin:e}),o.setLastRequest(t,e)},cleanup:function(){window.removeEventListener("message",c)}}}({frakWalletUrl:e?.walletUrl??"https://wallet.frak.id",iframe:t,channelManager:r,iframeLifecycleManager:o,debugInfo:l}),f=async e=>{if(!await o.isConnected)throw new a(s.clientNotConnected,"The iframe provider isn't connected yet");let t=new c,n=r.createChannel(e=>{let o=w(e.data);o.error?t.reject(new a(o.error.code,o.error.message,o.error?.data)):t.resolve(o.result),r.removeChannel(n)}),i=d(e);return u.sendEvent({id:n,topic:e.method,data:i}),t.promise},g=async(e,t)=>{if(!await o.isConnected)throw new a(s.clientNotConnected,"The iframe provider isn't connected yet");let n=r.createChannel(e=>{let n=w(e.data);if(n.result)t(n.result);else throw new i("No valid result in the response")}),c=d(e);u.sendEvent({id:n,topic:e.method,data:c})},v=function(e,t){let n,r;let o=()=>e.sendEvent({clientLifecycle:"heartbeat"});function a(){n&&clearInterval(n),r&&clearTimeout(r)}return async function(){o(),n=setInterval(o,100),r=setTimeout(()=>{a(),console.log("Heartbeat timeout: connection failed")},3e4),await t.isConnected,a()}(),a}(u,o),k=async()=>{v(),r.destroy(),u.cleanup(),t.remove()},S=y({config:e,messageHandler:u,lifecycleManager:o}).then(()=>l.updateSetupStatus(!0));return{config:e,debugInfo:l,waitForConnection:o.isConnected,waitForSetup:S,request:f,listenerRequest:g,destroy:k}}({config:n,iframe:r});if(await o.waitForSetup,!await o.waitForConnection){console.error("Failed to connect to client");return}return o}function b(e){return e?`${e}Amount`:"eurAmount"}function C(e,t){let n=t?v[t]??v.eur:v.eur,r=k(t);return e.toLocaleString(n,{style:"currency",currency:r,minimumFractionDigits:0,maximumFractionDigits:2})}Object.entries({dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31}).reduce((e,[t,n])=>(e[t]=BigInt(1)<<BigInt(n),e),{})}};
package/cdn/components.js CHANGED
@@ -1 +1 @@
1
- import("https://cdn.jsdelivr.net/npm/@frak-labs/components@latest/cdn/loader.js?v=1743706264405");
1
+ import("https://cdn.jsdelivr.net/npm/@frak-labs/components@latest/cdn/loader.js?v=1744798015101");
package/cdn/loader.js CHANGED
@@ -1 +1 @@
1
- var e,t,r={},o={};function n(e){var t=o[e];if(void 0!==t)return t.exports;var i=o[e]={exports:{}};return r[e](i,i.exports,n),i.exports}n.m=r,n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce((t,r)=>(n.f[r](e,t),t),[])),n.u=e=>""+(({438:"button-wallet",766:"button-share"})[e]||e)+"."+({18:"dad4b5ac",321:"52f6fc94",438:"19a891ff",766:"0447f6d8"})[e]+".js",n.miniCssF=e=>""+({438:"button-wallet",766:"button-share"})[e]+"."+({438:"390d543a",766:"823884d0"})[e]+".css",n.h=()=>"e1378710c88b55a7",(()=>{n.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})()})(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;if("string"==typeof import.meta.url&&(e=import.meta.url),!e)throw Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{if("undefined"!=typeof document){var e=function(e,t,r,o,i){var a=document.createElement("link");return a.rel="stylesheet",a.type="text/css",n.nc&&(a.nonce=n.nc),a.onerror=a.onload=function(r){if(a.onerror=a.onload=null,"load"===r.type)o();else{var n=r&&("load"===r.type?"missing":r.type),s=r&&r.target&&r.target.href||t,l=Error("Loading CSS chunk "+e+" failed.\\n("+s+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=n,l.request=s,a.parentNode&&a.parentNode.removeChild(a),i(l)}},a.href=t,r?r.parentNode.insertBefore(a,r.nextSibling):document.head.appendChild(a),a},t=function(e,t){for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var n=r[o],i=n.getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(i===e||i===t))return n}for(var a=document.getElementsByTagName("style"),o=0;o<a.length;o++){var n=a[o],i=n.getAttribute("data-href");if(i===e||i===t)return n}},r={276:0};n.f.miniCss=function(o,i){if(r[o])i.push(r[o]);else if(0!==r[o]&&({438:1,766:1})[o])i.push(r[o]=new Promise(function(r,i){var a=n.miniCssF(o),s=n.p+a;if(t(a,s))return r();e(o,s,null,r,i)}).then(function(){r[o]=0},function(e){throw delete r[o],e}))}}})(),e={276:0},t=t=>{var r,o,i=t.__webpack_ids__,a=t.__webpack_modules__,s=t.__webpack_runtime__,l=0;for(r in a)n.o(a,r)&&(n.m[r]=a[r]);for(s&&s(n);l<i.length;l++)o=i[l],n.o(e,o)&&e[o]&&e[o][0](),e[i[l]]=0},n.f.j=function(r,o){var i=n.o(e,r)?e[r]:void 0;if(0!==i){if(i)o.push(i[1]);else{var a=import("./"+n.u(r)).then(t,t=>{throw 0!==e[r]&&(e[r]=void 0),t}),a=Promise.race([a,new Promise(t=>{i=e[r]=[t]})]);o.push(i[1]=a)}}};const i={"button-share":()=>Promise.all([n.e("18"),n.e("321"),n.e("766")]).then(n.bind(n,"./src/components/ButtonShare/index.ts")),"button-wallet":()=>Promise.all([n.e("18"),n.e("321"),n.e("438")]).then(n.bind(n,"./src/components/ButtonWallet/index.ts"))},a=new MutationObserver(e=>{for(let{addedNodes:t}of e)for(let e of Array.from(t))e.nodeType===Node.ELEMENT_NODE&&s(e)});async function s(e){let t=e instanceof Element?e.tagName.toLowerCase():"",r=t?.startsWith("frak-"),o=Array.from(e.querySelectorAll(":not(:defined)")).map(e=>e.tagName.toLowerCase()).filter(e=>e.startsWith("frak-"));r&&!customElements.get(t)&&o.push(t);let n=[...new Set(o)];await Promise.allSettled(n.map(e=>l(e)))}async function l(e){if(customElements.get(e))return Promise.resolve();try{let t=e.replace(/^frak-/i,"");if(!(t in i))throw Error(`Component ${e} is not supported.`);await i[t]()}catch(e){console.error(e)}}s(document.body),a.observe(document.documentElement,{subtree:!0,childList:!0});
1
+ var e,t,r={},o={};function n(e){var t=o[e];if(void 0!==t)return t.exports;var i=o[e]={exports:{}};return r[e](i,i.exports,n),i.exports}n.m=r,n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce((t,r)=>(n.f[r](e,t),t),[])),n.u=e=>""+(({438:"button-wallet",766:"button-share"})[e]||e)+"."+({18:"dad4b5ac",321:"67278847",438:"19a891ff",766:"0447f6d8"})[e]+".js",n.miniCssF=e=>""+({438:"button-wallet",766:"button-share"})[e]+"."+({438:"390d543a",766:"823884d0"})[e]+".css",n.h=()=>"72824c4c3420e59c",(()=>{n.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})()})(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;if("string"==typeof import.meta.url&&(e=import.meta.url),!e)throw Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{if("undefined"!=typeof document){var e=function(e,t,r,o,i){var a=document.createElement("link");return a.rel="stylesheet",a.type="text/css",n.nc&&(a.nonce=n.nc),a.onerror=a.onload=function(r){if(a.onerror=a.onload=null,"load"===r.type)o();else{var n=r&&("load"===r.type?"missing":r.type),s=r&&r.target&&r.target.href||t,l=Error("Loading CSS chunk "+e+" failed.\\n("+s+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=n,l.request=s,a.parentNode&&a.parentNode.removeChild(a),i(l)}},a.href=t,r?r.parentNode.insertBefore(a,r.nextSibling):document.head.appendChild(a),a},t=function(e,t){for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var n=r[o],i=n.getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(i===e||i===t))return n}for(var a=document.getElementsByTagName("style"),o=0;o<a.length;o++){var n=a[o],i=n.getAttribute("data-href");if(i===e||i===t)return n}},r={276:0};n.f.miniCss=function(o,i){if(r[o])i.push(r[o]);else if(0!==r[o]&&({438:1,766:1})[o])i.push(r[o]=new Promise(function(r,i){var a=n.miniCssF(o),s=n.p+a;if(t(a,s))return r();e(o,s,null,r,i)}).then(function(){r[o]=0},function(e){throw delete r[o],e}))}}})(),e={276:0},t=t=>{var r,o,i=t.__webpack_ids__,a=t.__webpack_modules__,s=t.__webpack_runtime__,l=0;for(r in a)n.o(a,r)&&(n.m[r]=a[r]);for(s&&s(n);l<i.length;l++)o=i[l],n.o(e,o)&&e[o]&&e[o][0](),e[i[l]]=0},n.f.j=function(r,o){var i=n.o(e,r)?e[r]:void 0;if(0!==i){if(i)o.push(i[1]);else{var a=import("./"+n.u(r)).then(t,t=>{throw 0!==e[r]&&(e[r]=void 0),t}),a=Promise.race([a,new Promise(t=>{i=e[r]=[t]})]);o.push(i[1]=a)}}};const i={"button-share":()=>Promise.all([n.e("18"),n.e("321"),n.e("766")]).then(n.bind(n,"./src/components/ButtonShare/index.ts")),"button-wallet":()=>Promise.all([n.e("18"),n.e("321"),n.e("438")]).then(n.bind(n,"./src/components/ButtonWallet/index.ts"))},a=new MutationObserver(e=>{for(let{addedNodes:t}of e)for(let e of Array.from(t))e.nodeType===Node.ELEMENT_NODE&&s(e)});async function s(e){let t=e instanceof Element?e.tagName.toLowerCase():"",r=t?.startsWith("frak-"),o=Array.from(e.querySelectorAll(":not(:defined)")).map(e=>e.tagName.toLowerCase()).filter(e=>e.startsWith("frak-"));r&&!customElements.get(t)&&o.push(t);let n=[...new Set(o)];await Promise.allSettled(n.map(e=>l(e)))}async function l(e){if(customElements.get(e))return Promise.resolve();try{let t=e.replace(/^frak-/i,"");if(!(t in i))throw Error(`Component ${e} is not supported.`);await i[t]()}catch(e){console.error(e)}}s(document.body),a.observe(document.documentElement,{subtree:!0,childList:!0});
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "url": "https://twitter.com/QNivelais"
12
12
  }
13
13
  ],
14
- "version": "0.0.15",
14
+ "version": "0.0.16",
15
15
  "description": "Frak Wallet components, helping any person to interact with the Frak wallet.",
16
16
  "repository": {
17
17
  "url": "https://github.com/frak-id/wallet",
@@ -52,7 +52,7 @@
52
52
  "publish": "echo 'Publishing components...'"
53
53
  },
54
54
  "dependencies": {
55
- "@frak-labs/core-sdk": "0.0.12",
55
+ "@frak-labs/core-sdk": "0.0.13",
56
56
  "class-variance-authority": "^0.7.1",
57
57
  "preact": "^10.26.4",
58
58
  "preact-custom-element": "^4.3.0"
@@ -1,13 +0,0 @@
1
- export const __webpack_ids__=["321"];export const __webpack_modules__={"./src/components/ButtonWallet/utils.ts":function(e,t,n){n.d(t,{G:()=>o});var r=n("../core/dist/actions.js");function o(){if(!window.FrakSetup?.client){console.error("Frak client not found");return}"vibrate"in navigator?navigator.vibrate(10):console.log("Vibration not supported"),(0,r.s9)(window.FrakSetup.client,window.FrakSetup?.modalWalletConfig??{})}},"./src/hooks/useClientReady.ts":function(e,t,n){n.d(t,{t:()=>a});var r=n("./src/utils/clientReady.ts"),o=n("../../node_modules/preact/hooks/dist/hooks.module.js");function a(){let[e,t]=(0,o.eJ)(!0),n=(0,o.I4)(()=>{t(!1)},[]);return(0,o.d4)(()=>((0,r.D)("add",n),()=>(0,r.D)("remove",n)),[n]),{isClientReady:!e}}},"./src/hooks/useReward.ts":function(e,t,n){n.d(t,{w:()=>s});var r=n("../core/dist/index.js"),o=n("../core/dist/actions.js");async function a({targetInteraction:e}){let t=window.FrakSetup?.client;if(!t){console.warn("Frak client not ready yet");return}let{maxReferrer:n,rewards:a}=await (0,o.pO)(t);if(!n)return;let i=(0,r.Up)(t.config.metadata?.currency),s=Math.ceil(n[i]);if(e){let t=a.filter(t=>t.interactionTypeKey===e).map(e=>e.referrer[i]).reduce((e,t)=>t>e?t:e,0);t>0&&(s=Math.ceil(t))}return(0,r.dN)(s,t.config.metadata?.currency)}var i=n("../../node_modules/preact/hooks/dist/hooks.module.js");function s(e,t){let[n,r]=(0,i.eJ)(void 0);return(0,i.d4)(()=>{e&&a({targetInteraction:t}).then(e=>{e&&r(e)})},[e,t]),{reward:n}}},"./src/utils/clientReady.ts":function(e,t,n){n.d(t,{D:()=>a,f:()=>o});let r="frakClientReady";function o(){let e=new CustomEvent(r);window.dispatchEvent(e)}function a(e,t){if(window.FrakSetup?.client&&"add"===e){t();return}("add"===e?window.addEventListener:window.removeEventListener)(r,t,!1)}},"./src/utils/registerWebComponent.ts":function(e,t,n){n.d(t,{A:()=>l});var r=n("../../node_modules/preact-custom-element/dist/preact-custom-element.esm.js"),o=n("../core/dist/index.js"),a=n("./src/components/ButtonWallet/utils.ts"),i=n("./src/utils/clientReady.ts"),s=n("./src/utils/setup.ts");async function c(){if(!(window.frakSetupInProgress?(console.log("[Frak SDK] Initialization already in progress"),!1):window.FrakSetup?.client?(console.log("[Frak SDK] Client already initialized"),!1):!!window.FrakSetup?.config||(console.error("[Frak SDK] Configuration not found. Please ensure window.FrakSetup.config is set."),!1)))return;if(console.log("[Frak SDK] Starting initialization"),window.frakSetupInProgress=!0,!window.FrakSetup.config){console.error("[Frak SDK] Configuration not found"),window.frakSetupInProgress=!1;return}let e=await (0,o.lD)({config:window.FrakSetup.config});if(!e){console.error("[Frak SDK] Failed to create client"),window.frakSetupInProgress=!1;return}window.FrakSetup.client=e,console.log("[Frak SDK] Client initialized successfully"),(0,i.f)(),(0,s.N3)(e),(0,s.zK)(e),window.frakSetupInProgress=!1,function(){let e=new URLSearchParams(window.location.search).get("frakAction");e&&"share"===e&&(console.log("[Frak SDK] Auto open query param found"),(0,a.G)())}()}function l(e,t,n=[],o={shadow:!1}){if("undefined"!=typeof window){var a;a=async function(){await c()},"complete"===document.readyState||"interactive"===document.readyState?setTimeout(a,1):document.addEventListener?document.addEventListener("DOMContentLoaded",a):document.attachEvent("onreadystatechange",()=>{"complete"===document.readyState&&a()}),customElements.get(t)||(0,r.Z)(e,t,n,o)}}},"./src/utils/setup.ts":function(e,t,n){n.d(t,{Gt:()=>i,N3:()=>o,zK:()=>a});var r=n("../core/dist/actions.js");function o(e){window.modalBuilderSteps=(0,r.jy)(e,window.FrakSetup?.modalConfig??{})}async function a(e){console.log("referral",await (0,r.KS)(e,{modalConfig:window.FrakSetup?.modalWalletConfig}))}function i(){if(!window.modalBuilderSteps)throw Error("modalBuilderSteps not found");return window.modalBuilderSteps}},"../core/dist/actions.js":function(e,t,n){n.d(t,{KS:()=>E,jy:()=>w,pO:()=>f,s9:()=>u});var r=n("../../node_modules/viem/_esm/utils/hash/keccak256.js"),o=n("../../node_modules/viem/_esm/utils/encoding/toHex.js"),a=n("../../node_modules/viem/_esm/utils/encoding/toBytes.js"),i=n("../../node_modules/viem/_esm/utils/data/concat.js"),s=n("../../node_modules/viem/_esm/utils/data/pad.js"),c=n("../../node_modules/viem/_esm/utils/address/isAddressEqual.js");async function l(e,{productId:t,interaction:n,validation:a}){let i=t??function({domain:e}){let t=e??window.location.host;return(0,r.w)((0,o.NC)(t))}(e.config);return await e.request({method:"frak_sendInteraction",params:[i,n,a]})}async function d(e,{steps:t,metadata:n}){return await e.request({method:"frak_displayModal",params:[t,n,e.config.metadata]})}async function u(e,t){return await e.request({method:"frak_displayEmbeddedWallet",params:[t,e.config.metadata]})}async function f(e){return await e.request({method:"frak_getProductInformation"})}function w(e,{metadata:t,login:n,openSession:r}){return function e(t,n){async function r(e){return e&&(n.metadata=e(n.metadata??{})),await d(t,n)}return{params:n,sendTx:function(r){return e(t,{...n,steps:{...n.steps,sendTransaction:r}})},reward:function(r){return e(t,{...n,steps:{...n.steps,final:{...r,action:{key:"reward"}}}})},sharing:function(r,o){return e(t,{...n,steps:{...n.steps,final:{...o,action:{key:"sharing",options:r}}}})},display:r}}(e,{steps:{login:n??{},openSession:r??{}},metadata:t})}let m="fCtx";function p({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(m);return t?function(e){if(e&&0!==e.length)try{let t;let n=(t=e.length%4,Uint8Array.from(atob(e.replace(/-/g,"+").replace(/_/g,"/").padEnd(e.length+(0===t?0:4-t),"=")),e=>e.charCodeAt(0)));return{r:(0,o.ci)(n,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}(t):null}let g={parse:p,replaceUrl:function({url:e,context:t}){let n,r;if(!window.location?.href||"undefined"==typeof window){console.error("No window found, can't update context");return}let o=e??window.location.href;(n=null!==t?function({url:e,context:t}){if(!e)return null;let n=p({url:e}),r=n?{...n,...t}:t;if(!r.r)return null;let o=function(e){if(e?.r)try{var t;return t=(0,a.nr)(e.r),btoa(Array.from(t,e=>String.fromCharCode(e)).join("")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}catch(t){console.error("Error compressing Frak context",{e:t,context:e})}}(r);if(!o)return null;let i=new URL(e);return i.searchParams.set(m,o),i.toString()}({url:o,context:t}):((r=new URL(o)).searchParams.delete(m),r.toString()))&&window.history.replaceState(null,"",n.toString())}},h={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31};Object.entries(h).reduce((e,[t,n])=>(e[t]=BigInt(1)<<BigInt(n),e),{});let y={createLink:()=>({handlerTypeDenominator:(0,o.NC)(h.referral),interactionData:"0xb2c0f17c"}),referred({referrer:e}){let t=(0,i.SM)(["0x010cc3b9",(0,s.vk)(e,{size:32})]);return{handlerTypeDenominator:(0,o.NC)(h.referral),interactionData:t}}};class v extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.data=n}}let k={walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006};async function S(e,{walletStatus:t,frakContext:n,modalConfig:r,productId:o,options:a}){let i=!1;async function s(){if(!i)return i=!0,C(e,{modalConfig:{...r,loggedIn:{action:{key:"referred"}}},walletStatus:t})}async function c(t){let n=y.referred({referrer:t});await l(e,{productId:o,interaction:n})}try{let{status:e,currentWallet:r}=await b({initialWalletStatus:t,getFreshWalletStatus:s,pushReferralInteraction:c,frakContext:n});return g.replaceUrl({url:window.location?.href,context:a?.alwaysAppendUrl?{r:r}:null}),e}catch(e){return console.log("Error processing referral",{error:e}),g.replaceUrl({url:window.location?.href,context:a?.alwaysAppendUrl?{r:t?.wallet}:null}),function(e){if(e instanceof v)switch(e.code){case k.walletNotConnected:return"no-wallet";case k.serverErrorForInteractionDelegation:return"no-session"}return"error"}(e)}}async function b({initialWalletStatus:e,getFreshWalletStatus:t,pushReferralInteraction:n,frakContext:r}){let o=e?.wallet;return r?.r?(o||(o=await t()),o&&(0,c.E)(r.r,o))?{status:"self-referral",currentWallet:o}:(e?.interactionSession||(o=await t()),await n(r.r),{status:"success",currentWallet:o}):{status:"no-referrer",currentWallet:o}}async function C(e,{modalConfig:t,walletStatus:n}){if(!n?.interactionSession){let n=await u(e,t??{});return n?.wallet??void 0}return n.wallet??void 0}async function E(e,{productId:t,modalConfig:n,options:r}={}){var o;let a=g.parse({url:window.location.href}),i=await e.request({method:"frak_listenToWalletStatus"}).then(e=>{var t;return t=e.interactionToken,"undefined"!=typeof window&&(t?window.sessionStorage.setItem("frak-wallet-interaction-token",t):window.sessionStorage.removeItem("frak.interaction-token")),e});try{return await S(e,{walletStatus:i,frakContext:a,modalConfig:n,productId:t,options:r})}catch(e){console.warn("Error processing referral",{error:e})}}},"../core/dist/index.js":function(e,t,n){n.d(t,{Up:()=>b,dN:()=>C,lD:()=>S,oC:()=>c,ss:()=>s,u:()=>a});var r=n("../../node_modules/@jsonjoy.com/json-pack/lib/cbor/index.js"),o=n("../../node_modules/viem/_esm/utils/hash/sha256.js");class a extends Error{code;data;constructor(e,t,n){super(t),this.code=e,this.data=n}}class i extends a{constructor(e){super(s.internalError,e)}}let s={parseError:-32700,invalidRequest:-32600,methodNotFound:-32601,invalidParams:-32602,internalError:-32603,serverError:-32e3,clientNotConnected:-32001,configError:-32002,corruptedResponse:-32003,clientAborted:-32004,walletNotConnected:-32005,serverErrorForInteractionDelegation:-32006};class c{config;iframe;isSetupDone=!1;lastResponse=null;lastRequest=null;constructor(e,t){this.config=e,this.iframe=t,this.lastRequest=null,this.lastResponse=null}setLastResponse(e){this.lastResponse={event:e.data,origin:e.origin,timestamp:Date.now()}}setLastRequest(e,t){this.lastRequest={event:e,target:t,timestamp:Date.now()}}updateSetupStatus(e){this.isSetupDone=e}base64Encode(e){try{return btoa(JSON.stringify(e))}catch(e){return console.warn("Failed to encode debug data",e),btoa("Failed to encode data")}}getIframeStatus(){return this.iframe?{loading:this.iframe.hasAttribute("loading"),url:this.iframe.src,readyState:this.iframe.contentDocument?.readyState?+("complete"===this.iframe.contentDocument.readyState):-1,contentWindow:!!this.iframe.contentWindow,isConnected:this.iframe.isConnected}:null}getNavigatorInfo(){return navigator?{userAgent:navigator.userAgent,language:navigator.language,onLine:navigator.onLine,screenWidth:window.screen.width,screenHeight:window.screen.height,pixelRatio:window.devicePixelRatio}:null}gatherDebugInfo(e){let t=this.getIframeStatus(),n=this.getNavigatorInfo(),r="Unknown";return e instanceof a?r=`FrakRpcError: ${e.code} '${e.message}'`:e instanceof Error?r=e.message:"string"==typeof e&&(r=e),{timestamp:new Date().toISOString(),encodedUrl:btoa(window.location.href),encodedConfig:this.config?this.base64Encode(this.config):"no-config",navigatorInfo:n?this.base64Encode(n):"no-navigator",iframeStatus:t?this.base64Encode(t):"not-iframe",lastRequest:this.lastRequest?this.base64Encode(this.lastRequest):"No Frak request logged",lastResponse:this.lastResponse?this.base64Encode(this.lastResponse):"No Frak response logged",clientStatus:this.isSetupDone?"setup":"not-setup",error:r}}static empty(){return new c}formatDebugInfo(e){let t=this.gatherDebugInfo(e);return`
2
- Debug Information:
3
- -----------------
4
- Timestamp: ${t.timestamp}
5
- URL: ${t.encodedUrl}
6
- Config: ${t.encodedConfig}
7
- Navigator Info: ${t.navigatorInfo}
8
- IFrame Status: ${t.iframeStatus}
9
- Last Request: ${t.lastRequest}
10
- Last Response: ${t.lastResponse}
11
- Client Status: ${t.clientStatus}
12
- Error: ${t.error}
13
- `.trim()}}class l{_promise;_resolve;_reject;constructor(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get promise(){return this._promise}resolve=e=>{this._resolve?.(e)};reject=e=>{this._reject?.(e)}}let d=new r.CborEncoder;function u(e){let t={...e,validationHash:f(e)};return d.encode(t)}function f(e){return(0,o.J)(d.encode(e))}let w=new r.CborDecoder;function m(e){if(!e.length)throw new a(s.corruptedResponse,"Missing compressed data");let t=function(e){try{return w.decode(e)}catch(t){return console.error("Invalid compressed data",{e:t,data:e}),null}}(e);if(!t)throw new a(s.corruptedResponse,"Invalid compressed data");if(!t?.validationHash)throw new a(s.corruptedResponse,"Missing validation hash");let{validationHash:n,...r}=t;if(f(r)!==t.validationHash)throw new a(s.corruptedResponse,"Invalid data validation hash");return t}let p="nexus-wallet-backup",g=2000001;function h({iframe:e,isVisible:t}){if(!t){e.style.width="0",e.style.height="0",e.style.border="0",e.style.position="fixed",e.style.top="-1000px",e.style.left="-1000px";return}e.style.position="fixed",e.style.top="0",e.style.left="0",e.style.width="100%",e.style.height="100%",e.style.pointerEvents="auto"}async function y({config:e,messageHandler:t,lifecycleManager:n}){async function r(){let n=e.customizations?.css;n&&t.sendEvent({clientLifecycle:"modal-css",data:{cssLink:n}})}async function o(){let n=e.customizations?.i18n;n&&t.sendEvent({clientLifecycle:"modal-i18n",data:{i18n:n}})}async function a(){if("undefined"==typeof window)return;let e=window.localStorage.getItem(p);e&&t.sendEvent({clientLifecycle:"restore-backup",data:{backup:e}})}await n.isConnected,await Promise.all([r(),o(),a()])}let v={eur:"fr-FR",usd:"en-US",gbp:"en-GB"};function k(e){return e&&e in v?e:"eur"}async function S({config:e}){let t;let n=(t=k(e.metadata?.currency),{...e,metadata:{...e.metadata,currency:t}}),r=await function({walletBaseUrl:e,config:t}){let n=document.querySelector("#frak-wallet");n&&n.remove();let r=document.createElement("iframe");return r.id="frak-wallet",r.name="frak-wallet",r.allow="publickey-credentials-get *; clipboard-write; web-share *",r.style.zIndex=g.toString(),h({iframe:r,isVisible:!1}),document.body.appendChild(r),new Promise(n=>{r?.addEventListener("load",()=>n(r)),r.src=`${t?.walletUrl??e??"https://wallet.frak.id"}/listener`})}({config:n});if(!r){console.error("Failed to create iframe");return}let o=function({config:e,iframe:t}){let n;let r=(n=new Map,{createChannel:e=>{let t=Math.random().toString(36).substring(7);return n.set(t,e),t},getRpcResolver:e=>n.get(e),removeChannel:e=>n.delete(e),destroy:()=>n.clear()}),o=function({iframe:e}){let t=new l;return{handleEvent:async n=>{switch(n.iframeLifecycle){case"connected":t.resolve(!0);break;case"do-backup":n.data.backup?localStorage.setItem(p,n.data.backup):localStorage.removeItem(p);break;case"remove-backup":localStorage.removeItem(p);break;case"show":case"hide":h({iframe:e,isVisible:"show"===n.iframeLifecycle});break;case"handshake":e.contentWindow?.postMessage({clientLifecycle:"handshake-response",data:{token:n.data.token,currentUrl:window.location.href}},"*")}},isConnected:t.promise}}({iframe:t}),d=new c(e,t),f=function({frakWalletUrl:e,iframe:t,channelManager:n,iframeLifecycleManager:r,debugInfo:o}){if("undefined"==typeof window)throw new a(s.configError,"iframe client should be used in the browser");if(!t.contentWindow)throw new a(s.configError,"The iframe does not have a product window");let i=t.contentWindow;async function c(t){if(!t.origin)return;try{if(new URL(t.origin).origin.toLowerCase()!==new URL(e).origin.toLowerCase())return}catch(e){console.log("Unable to check frak msg origin",e);return}if("object"!=typeof t.data)return;if(o.setLastResponse(t),"iframeLifecycle"in t.data){await r.handleEvent(t.data);return}if("clientLifecycle"in t.data){console.error("Client lifecycle event received on the client side, dismissing it");return}let a=t.data.id,i=n.getRpcResolver(a);i&&i(t.data)}return window.addEventListener("message",c),{sendEvent:function(t){i.postMessage(t,{targetOrigin:e}),o.setLastRequest(t,e)},cleanup:function(){window.removeEventListener("message",c)}}}({frakWalletUrl:e?.walletUrl??"https://wallet.frak.id",iframe:t,channelManager:r,iframeLifecycleManager:o,debugInfo:d}),w=async e=>{if(!await o.isConnected)throw new a(s.clientNotConnected,"The iframe provider isn't connected yet");let t=new l,n=r.createChannel(e=>{let o=m(e.data);o.error?t.reject(new a(o.error.code,o.error.message,o.error?.data)):t.resolve(o.result),r.removeChannel(n)}),i=u(e);return f.sendEvent({id:n,topic:e.method,data:i}),t.promise},g=async(e,t)=>{if(!await o.isConnected)throw new a(s.clientNotConnected,"The iframe provider isn't connected yet");let n=r.createChannel(e=>{let n=m(e.data);if(n.result)t(n.result);else throw new i("No valid result in the response")}),c=u(e);f.sendEvent({id:n,topic:e.method,data:c})},v=function(e,t){let n,r;let o=()=>e.sendEvent({clientLifecycle:"heartbeat"});function a(){n&&clearInterval(n),r&&clearTimeout(r)}return async function(){o(),n=setInterval(o,100),r=setTimeout(()=>{a(),console.log("Heartbeat timeout: connection failed")},3e4),await t.isConnected,a()}(),a}(f,o),k=async()=>{v(),r.destroy(),f.cleanup(),t.remove()},S=y({config:e,messageHandler:f,lifecycleManager:o}).then(()=>d.updateSetupStatus(!0));return{config:e,debugInfo:d,waitForConnection:o.isConnected,waitForSetup:S,request:w,listenerRequest:g,destroy:k}}({config:n,iframe:r});if(await o.waitForSetup,!await o.waitForConnection){console.error("Failed to connect to client");return}return o}function b(e){return e?`${e}Amount`:"eurAmount"}function C(e,t){let n=t?v[t]??v.eur:v.eur,r=k(t);return e.toLocaleString(n,{style:"currency",currency:r,minimumFractionDigits:0,maximumFractionDigits:2})}Object.entries({dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31}).reduce((e,[t,n])=>(e[t]=BigInt(1)<<BigInt(n),e),{})}};