@frak-labs/nexus-sdk 0.0.40-beta.f259d7fc → 0.0.41

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.
@@ -11,7 +11,7 @@
11
11
  Last Response: ${t.lastResponse}
12
12
  Client Status: ${t.clientStatus}
13
13
  Error: ${t.error}
14
- `.trim()}}let em={id:"frak-wallet",name:"frak-wallet",title:"Frak Wallet",allow:"publickey-credentials-get *; clipboard-write; web-share *",style:{width:"0",height:"0",border:"0",position:"absolute",zIndex:2000001,top:"-1000px",left:"-1000px",colorScheme:"auto"}};function eg({walletBaseUrl:e,config:t}){let r=document.querySelector("#frak-wallet");r&&r.remove();let n=document.createElement("iframe");return n.id=em.id,n.name=em.name,n.allow=em.allow,n.style.zIndex=em.style.zIndex.toString(),ex({iframe:n,isVisible:!1}),document.body.appendChild(n),new Promise(r=>{n?.addEventListener("load",()=>r(n)),n.src=`${t?.walletUrl??e??"https://wallet.frak.id"}/listener`})}function ex({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"}function ev({config:e,iframe:t}){let r,n=e?.walletUrl??"https://wallet.frak.id",i=function({iframe:e}){let t=new l;return{handleEvent:async r=>{if(!("iframeLifecycle"in r))return;let{iframeLifecycle:n,data:i}=r;switch(n){case"connected":t.resolve(!0);break;case"do-backup":i.backup?localStorage.setItem(ew,i.backup):localStorage.removeItem(ew);break;case"remove-backup":localStorage.removeItem(ew);break;case"show":case"hide":ex({iframe:e,isVisible:"show"===n});break;case"handshake":e.contentWindow?.postMessage({clientLifecycle:"handshake-response",data:{token:i.token,currentUrl:window.location.href}},"*");break;case"redirect":{let e=new URL(i.baseRedirectUrl);e.searchParams.has("u")?(e.searchParams.delete("u"),e.searchParams.append("u",window.location.href),window.location.href=e.toString()):window.location.href=i.baseRedirectUrl}}},isConnected:t.promise}}({iframe:t}),s=new ey(e,t);if(!t.contentWindow)throw new c(a.configError,"The iframe does not have a content window");let o=function(e){let{emittingTransport:t,listeningTransport:r,targetOrigin:n,middleware:i=[],lifecycleHandlers:s}=e,o=new Map;async function a(e){try{"clientLifecycle"in e&&s?.clientLifecycle?await s.clientLifecycle(e,{origin:n,source:null}):"iframeLifecycle"in e&&s?.iframeLifecycle&&await s.iframeLifecycle(e,{origin:n,source:null})}catch(e){console.error("[RPC Client] Lifecycle handler error:",e)}}async function u(e){let t={origin:n,source:null};for(let r of i)r.onRequest&&await r.onRequest(e,t);return e}async function d(e,t){let r={origin:n,source:null},s=t;for(let t of i)t.onResponse&&(s=await t.onResponse(e,s,r));return s}async function f(e){var t,r;let i;try{let t=new URL(e.origin).origin.toLowerCase(),r=new URL(n).origin.toLowerCase();if(t!==r)return void console.log("Not expected origin",t,r)}catch(e){console.error("[RPC Client] Invalid origin",e);return}if("object"==typeof(t=e.data)&&t&&("clientLifecycle"in t||"iframeLifecycle"in t))return void await a(e.data);if(!("object"==typeof(r=e.data)&&r&&"id"in r&&"topic"in r&&"data"in r))return;try{let t=e.data.data,r=t instanceof Uint8Array||ArrayBuffer.isView(t);i=await d(e.data,r?{result:t}:t)}catch(e){console.error("[RPC Client] Middleware error on response:",e);return}let s=o.get(e.data.id);s&&s(i)}async function h(e){let r=e;try{r=await u(e)}catch(e){throw console.error("[RPC Client] Middleware error on request:",e),e}t.postMessage(r,n)}function p(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}return r.addEventListener("message",f),{request:function(e){let t=p(),r=new l;return o.set(t,e=>{e.error?r.reject(new c(e.error.code,e.error.message,e.error.data)):r.resolve(e.result),o.delete(t)}),h({id:t,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{o.delete(t),r.reject(e)}),r.promise},listen:function(e,t){let r=p();return o.set(r,e=>{e.error?(console.error("[RPC Client] Listener error:",e.error),o.delete(r)):t(e.result)}),h({id:r,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error("[RPC Client] Failed to send listener request:",e),o.delete(r)}),()=>{o.delete(r)}},sendLifecycle:function(e){t.postMessage(e,n)},cleanup:function(){r.removeEventListener("message",f),o.clear()}}}({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:n,middleware:[{async onRequest(e,t){if(!await i.isConnected)throw new c(a.clientNotConnected,"The iframe provider isn't connected yet");return t}},ef(),{onRequest:(e,t)=>(s.setLastRequest(e),t),onResponse:(e,t)=>(s.setLastResponse(e,t),t)}],lifecycleHandlers:{iframeLifecycle:async(e,t)=>{await i.handleEvent(e)}}}),u=function(e,t){let r,n,i=()=>e.sendLifecycle({clientLifecycle:"heartbeat"});function s(){r&&clearInterval(r),n&&clearTimeout(n)}return async function(){i(),r=setInterval(i,1e3),n=setTimeout(()=>{s(),console.log("Heartbeat timeout: connection failed")},3e4),await t.isConnected,s()}(),s}(o,i),d=async()=>{u(),o.cleanup(),t.remove()};console.log("[Frak SDK] Initializing OpenPanel"),(r=new eb({apiUrl:"https://op-api.gcp.frak.id",clientId:"6eacc8d7-49ac-4936-95e9-81ef29449570",trackScreenViews:!0,trackOutgoingLinks:!0,trackAttributes:!1,filter:({type:e,payload:t})=>!("track"===e&&t?.properties)||("sdkVersion"in t.properties||(t.properties={...t.properties,sdkVersion:"0.0.19"}),!0)})).setGlobalProperties({sdkVersion:"0.0.19"}),r.init();let f=ej({config:e,rpcClient:o,lifecycleManager:i}).then(()=>s.updateSetupStatus(!0));return{config:e,debugInfo:s,waitForConnection:i.isConnected,waitForSetup:f,request:o.request,listenerRequest:o.listen,destroy:d,openPanel:r}}async function ej({config:e,rpcClient:t,lifecycleManager:r}){async function n(){let r=e.customizations?.css;r&&t.sendLifecycle({clientLifecycle:"modal-css",data:{cssLink:r}})}async function i(){let r=e.customizations?.i18n;r&&t.sendLifecycle({clientLifecycle:"modal-i18n",data:{i18n:r}})}async function s(){if("undefined"==typeof window)return;let e=window.localStorage.getItem(ew);e&&t.sendLifecycle({clientLifecycle:"restore-backup",data:{backup:e}})}await r.isConnected,function(e,t){if("undefined"==typeof window)return;let r=new URL(window.location.href),n=r.searchParams.get("sso");n&&(t.then(()=>{e.sendLifecycle({clientLifecycle:"sso-redirect-complete",data:{compressed:n}}),console.log("[SSO URL Listener] Forwarded compressed SSO data to iframe")}).catch(e=>{console.error("[SSO URL Listener] Failed to forward SSO data:",e)}),r.searchParams.delete("sso"),window.history.replaceState({},"",r.toString()),console.log("[SSO URL Listener] SSO parameter detected and URL cleaned"))}(t,r.isConnected),await Promise.allSettled([n(),i(),s()])}let ek={eur:"fr-FR",usd:"en-US",gbp:"en-GB"};function e_(e){return e&&e in ek?e:"eur"}async function eS({config:e}){let t,r=(t=e_(e.metadata?.currency),{...e,metadata:{...e.metadata,currency:t}}),n=await eg({config:r});if(!n)return void console.error("Failed to create iframe");let i=ev({config:r,iframe:n});return(await i.waitForSetup,await i.waitForConnection)?i:void console.error("Failed to connect to client")}function eA(e){return btoa(Array.from(e,e=>String.fromCharCode(e)).join("")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function eE(e){let t=e.length%4;return Uint8Array.from(atob(e.replace(/-/g,"+").replace(/_/g,"/").padEnd(e.length+(0===t?0:4-t),"=")),e=>e.charCodeAt(0))}function eC(e){return eA(u.encode(e))}function eI(e){var t=eE(e);try{return d.decode(t)}catch(e){return console.error("Invalid compressed data",{e:e,data:t}),null}}let eO="fCtx";function eP(e){if(e?.r)try{let t=es(e.r);return eA(t)}catch(t){console.error("Error compressing Frak context",{e:t,context:e})}}function eU(e){if(e&&0!==e.length)try{let t=eE(e);return{r:Q(t,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}function eL({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(eO);return t?eU(t):null}function eR({url:e,context:t}){if(!e)return null;let r=eL({url:e}),n=r?{...r,...t}:t;if(!n.r)return null;let i=eP(n);if(!i)return null;let s=new URL(e);return s.searchParams.set(eO,i),s.toString()}function eD(e){let t=new URL(e);return t.searchParams.delete(eO),t.toString()}let eM={compress:eP,decompress:eU,parse:eL,update:eR,remove:eD,replaceUrl:function({url:e,context:t}){let r;if(!window.location?.href||"undefined"==typeof window)return void console.error("No window found, can't update context");let n=e??window.location.href;(r=null!==t?eR({url:n,context:t}):eD(n))&&window.history.replaceState(null,"",r.toString())}};function eT(e){return e?ek[e]??ek.eur:ek.eur}function eB(e){return e?`${e}Amount`:"eurAmount"}function eF(e,t){let r=eT(t),n=e_(t);return e.toLocaleString(r,{style:"currency",currency:n,minimumFractionDigits:0,maximumFractionDigits:2})}function eN(e,t,r={}){if(!e)return void console.debug("[Frak] No client provided, skipping event tracking");try{e.openPanel?.track(t,r)}catch(e){console.debug("[Frak] Failed to track event:",t,e)}}let e$={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31},ez=Object.entries(e$).reduce((e,[t,r])=>(e[t]=BigInt(1)<<BigInt(r),e),{}),eV={press:{openArticle:"0xc0a24ffb",readArticle:"0xd5bd0fbe"},dapp:{proofVerifiableStorageUpdate:"0x2ab2aeef",callableVerifiableStorageUpdate:"0xa07da986"},webshop:{open:"0xb311798f"},referral:{referred:"0x010cc3b9",createLink:"0xb2c0f17c"},purchase:{started:"0xd87e90c3",completed:"0x8403aeb4",unsafeCompleted:"0x4d5b14e0"},retail:{customerMeeting:"0x74489004"}};async function eH(e,t,r="text/javascript"){return document.getElementById(e)?Promise.resolve(!0):new Promise((n,i)=>{let s=document.createElement("script");s.id=e,s.src=t,s.defer=!0,s.type=r,s.onload=()=>n(!0),s.onerror=()=>i(Error(`Script load error for ${t}`)),document.head.appendChild(s)})}let eW={"gapianne.com":function(){window.FrakSetup.config={walletUrl:"https://wallet.frak.id",metadata:{name:"Gapianne",lang:"fr",currency:"eur",logoUrl:"https://gapianne.com/cdn/shop/files/logo-gapianne_7a65f4c4-54e8-4831-afa2-0849e4c5f8de.png",homepageLink:"https://gapianne.com/"},customizations:{i18n:{"sharing.title":"Pr\xeat(e) \xe0 r\xe9v\xe9ler un secret bien-\xeatre ?","sharing.text":"D\xe9couvre ce produit chez Gapianne","sdk.wallet.login.text":"Cr\xe9ez votre porte-monnaie avec **{{ productName }}** et recevez **{{ estimatedReward }}** par ami(e) parrain\xe9(e)"}},domain:window.location.host},window.FrakSetup.modalConfig={login:{allowSso:!0},metadata:{isDismissible:!0}},window.FrakSetup.modalShareConfig={link:window.location.href},window.FrakSetup.modalWalletConfig={metadata:{position:"left"}},function(){for(let e of Array.from(document.querySelectorAll("#nexus-share-button > button"))){let t=document.createElement("frak-button-share");t.setAttribute("text","PARTAGE ET GAGNE {REWARD} !"),t.setAttribute("no-reward-text","PARTAGE ET GAGNE"),t.setAttribute("use-reward","true"),t.setAttribute("show-wallet","true"),t.setAttribute("classname","button w-full"),e.replaceWith(t)}}()}},eq=BigInt(0),eJ=BigInt(1),eG=BigInt(2),eK=BigInt(7),eX=BigInt(256),eQ=BigInt(113),eY=[],eZ=[],e0=[];for(let e=0,t=eJ,r=1,n=0;e<24;e++){[r,n]=[n,(2*r+3*n)%5],eY.push(2*(5*n+r)),eZ.push((e+1)*(e+2)/2%64);let i=eq;for(let e=0;e<7;e++)(t=(t<<eJ^(t>>eK)*eQ)%eX)&eG&&(i^=eJ<<(eJ<<BigInt(e))-eJ);e0.push(i)}let e2=E(e0,!0),e1=e2[0],e8=e2[1],e3=(e,t,r)=>r>32?O(e,t,r):C(e,t,r),e6=(e,t,r)=>r>32?P(e,t,r):I(e,t,r);class e5 extends v{constructor(e,t,r,n=!1,i=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=e,this.suffix=t,this.outputLen=r,this.enableXOF=n,this.rounds=i,f(r),!(0<e&&e<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=function(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}(this.state)}clone(){return this._cloneInto()}keccak(){g(this.state32),function(e,t=24){let r=new Uint32Array(10);for(let n=24-t;n<24;n++){for(let t=0;t<10;t++)r[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let n=(t+8)%10,i=(t+2)%10,s=r[i],o=r[i+1],a=e3(s,o,1)^r[n],c=e6(s,o,1)^r[n+1];for(let r=0;r<50;r+=10)e[t+r]^=a,e[t+r+1]^=c}let t=e[2],i=e[3];for(let r=0;r<24;r++){let n=eZ[r],s=e3(t,i,n),o=e6(t,i,n),a=eY[r];t=e[a],i=e[a+1],e[a]=s,e[a+1]=o}for(let t=0;t<50;t+=10){for(let n=0;n<10;n++)r[n]=e[t+n];for(let n=0;n<10;n++)e[t+n]^=~r[(n+2)%10]&r[(n+4)%10]}e[0]^=e1[n],e[1]^=e8[n]}w(r)}(this.state32,this.rounds),g(this.state32),this.posOut=0,this.pos=0}update(e){p(this),h(e=x(e));let{blockLen:t,state:r}=this,n=e.length;for(let i=0;i<n;){let s=Math.min(t-this.pos,n-i);for(let t=0;t<s;t++)r[this.pos++]^=e[i++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:e,suffix:t,pos:r,blockLen:n}=this;e[r]^=t,(128&t)!=0&&r===n-1&&this.keccak(),e[n-1]^=128,this.keccak()}writeInto(e){p(this,!1),h(e),this.finish();let t=this.state,{blockLen:r}=this;for(let n=0,i=e.length;n<i;){this.posOut>=r&&this.keccak();let s=Math.min(r-this.posOut,i-n);e.set(t.subarray(this.posOut,this.posOut+s),n),this.posOut+=s,n+=s}return e}xofInto(e){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return f(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(b(e,this),this.finished)throw Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,w(this.state)}_cloneInto(e){let{blockLen:t,suffix:r,outputLen:n,rounds:i,enableXOF:s}=this;return e||(e=new e5(t,r,n,s,i)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=i,e.suffix=r,e.outputLen=n,e.enableXOF=s,e.destroyed=this.destroyed,e}}let e4=(t=1,i=136,s=32,j(()=>new e5(i,t,s)));function e7(e,t){let r=e4(M(e,{strict:!1})?er(e):e);return"bytes"===(t||"hex")?r:K(r)}function e9(e){return"string"==typeof e[0]?te(e):function(e){let t=0;for(let r of e)t+=r.length;let r=new Uint8Array(t),n=0;for(let t of e)r.set(t,n),n+=t.length;return r}(e)}function te(e){return`0x${e.reduce((e,t)=>e+t.replace("0x",""),"")}`}class tt extends F{constructor({address:e}){super(`Address "${e}" is invalid.`,{metaMessages:["- Address must be a hex value of 20 bytes (40 hex characters).","- Address must match its checksum counterpart."],name:"InvalidAddressError"})}}class tr extends Map{constructor(e){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=e}get(e){let t=super.get(e);return super.has(e)&&void 0!==t&&(this.delete(e),super.set(e,t)),t}set(e,t){if(super.set(e,t),this.maxSize&&this.size>this.maxSize){let e=this.keys().next().value;e&&this.delete(e)}return this}}let tn=new tr(8192),ti=/^0x[a-fA-F0-9]{40}$/,ts=new tr(8192);function to(e,t){let{strict:r=!0}=t??{},n=`${e}.${r}`;if(ts.has(n))return ts.get(n);let i=!!ti.test(e)&&(e.toLowerCase()===e||!r||function(e,t){if(tn.has(`${e}.${void 0}`))return tn.get(`${e}.${t}`);let r=t?`${t}${e.toLowerCase()}`:e.substring(2).toLowerCase(),n=e7(eo(r),"bytes"),i=(t?r.substring(`${t}0x`.length):r).split("");for(let e=0;e<40;e+=2)n[e>>1]>>4>=8&&i[e]&&(i[e]=i[e].toUpperCase()),(15&n[e>>1])>=8&&i[e+1]&&(i[e+1]=i[e+1].toUpperCase());let s=`0x${i.join("")}`;return tn.set(`${e}.${t}`,s),s}(e)===e);return ts.set(n,i),i}let ta=256;function tc(e,t){if(!t)return e.request({method:"frak_listenToWalletStatus"}).then(t=>(tl(e,t),t));let r=new l,n=!1;return e.listenerRequest({method:"frak_listenToWalletStatus"},i=>{tl(e,i),t(i),n||(r.resolve(i),n=!0)}),r.promise}function tl(e,t){"undefined"!=typeof window&&(e.openPanel?.setGlobalProperties({wallet:t.wallet??null}),t.interactionToken?window.sessionStorage.setItem("frak-wallet-interaction-token",t.interactionToken):window.sessionStorage.removeItem("frak-wallet-interaction-token"))}async function tu(e,{productId:t,interaction:r,validation:n}){let i=t??function({domain:e}){return e7(K((e??window.location.host).replace("www.","")))}(e.config);return await e.request({method:"frak_sendInteraction",params:[i,r,n]})}async function td(e,{steps:t,metadata:r}){return await e.request({method:"frak_displayModal",params:[t,r,e.config.metadata]})}async function tf(e,t){return await e.request({method:"frak_displayEmbeddedWallet",params:[t,e.config.metadata]})}async function th(e,t){let{metadata:r,customizations:n}=e.config;return await e.request({method:"frak_sso",params:[t,r.name,n?.css]})??{}}async function tp(e){return await e.request({method:"frak_getProductInformation"})}async function tb(e){if("undefined"==typeof window)return void console.warn("[Frak] No window found, can't track purchase");let t=window.sessionStorage.getItem("frak-wallet-interaction-token");if(!t)return void console.warn("[Frak] No frak session found, skipping purchase check");await fetch("https://backend.frak.id/interactions/listenForPurchase",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","x-wallet-sdk-auth":t},body:JSON.stringify(e)})}async function tw(t,{siwe:r,metadata:n}){let i=t.config?.domain??window.location.host,s=r?.statement??`I confirm that I want to use my Frak wallet on: ${t.config.metadata.name}`,o={...r,statement:s,nonce:r?.nonce??function(t=11){if(!e||ta+t>512){e="",ta=0;for(let t=0;t<256;t++)e+=(256+256*Math.random()|0).toString(16).substring(1)}return e.substring(ta,ta+++t)}(96),uri:r?.uri??`https://${i}`,version:r?.version??"1",domain:i};return(await td(t,{metadata:n,steps:{login:{},siweAuthenticate:{siwe:o}}})).siweAuthenticate}async function ty(e,{tx:t,metadata:r}){return(await td(e,{metadata:r,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}function tm(e,{metadata:t,login:r,openSession:n}){return function e(t,r){async function n(e){return e&&(r.metadata=e(r.metadata??{})),await td(t,r)}return{params:r,sendTx:function(n){return e(t,{...r,steps:{...r.steps,sendTransaction:n}})},reward:function(n){return e(t,{...r,steps:{...r.steps,final:{...n,action:{key:"reward"}}}})},sharing:function(n,i){return e(t,{...r,steps:{...r.steps,final:{...i,action:{key:"sharing",options:n}}}})},display:n}}(e,{steps:{login:r??{},openSession:n??{}},metadata:t})}let tg="fCtx";function tx({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(tg);return t?function(e){if(e&&0!==e.length)try{let t,r=(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:Q(r,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}(t):null}let tv={parse:tx,replaceUrl:function({url:e,context:t}){let r,n;if(!window.location?.href||"undefined"==typeof window)return void console.error("No window found, can't update context");let i=e??window.location.href;(r=null!==t?function({url:e,context:t}){if(!e)return null;let r=tx({url:e}),n=r?{...r,...t}:t;if(!n.r)return null;let i=function(e){if(e?.r)try{var t;return t=es(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})}}(n);if(!i)return null;let s=new URL(e);return s.searchParams.set(tg,i),s.toString()}({url:i,context:t}):((n=new URL(i)).searchParams.delete(tg),n.toString()))&&window.history.replaceState(null,"",r.toString())}},tj={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31};Object.entries(tj).reduce((e,[t,r])=>(e[t]=BigInt(1)<<BigInt(r),e),{});let tk={createLink:()=>({handlerTypeDenominator:K(tj.referral),interactionData:"0xb2c0f17c"}),referred({referrer:e}){let t=te(["0x010cc3b9",z(e,{size:32})]);return{handlerTypeDenominator:K(tj.referral),interactionData:t}}};async function t_(e,{walletStatus:t,frakContext:r,modalConfig:n,productId:i,options:s}){let o=!1;async function l(){if(!o)return o=!0,tA(e,{modalConfig:{...n,loggedIn:{action:{key:"referred"}}},walletStatus:t})}async function u(t){let r=tk.referred({referrer:t});await Promise.allSettled([tu(e,{productId:i,interaction:r}),function(e,t,r={}){if(!e)return void console.debug("[Frak] No client provided, skipping event tracking");try{e.openPanel?.track(t,r)}catch(e){console.debug("[Frak] Failed to track event:",t,e)}}(e,"user_referred",{properties:{referrer:t}})])}try{let{status:e,currentWallet:n}=await tS({initialWalletStatus:t,getFreshWalletStatus:l,pushReferralInteraction:u,frakContext:r});return tv.replaceUrl({url:window.location?.href,context:s?.alwaysAppendUrl?{r:n}:null}),e}catch(e){return console.log("Error processing referral",{error:e}),tv.replaceUrl({url:window.location?.href,context:s?.alwaysAppendUrl?{r:t?.wallet}:null}),function(e){if(e instanceof c)switch(e.code){case a.walletNotConnected:return"no-wallet";case a.serverErrorForInteractionDelegation:return"no-session"}return"error"}(e)}}async function tS({initialWalletStatus:e,getFreshWalletStatus:t,pushReferralInteraction:r,frakContext:n}){let i=e?.wallet;return n?.r?(i||(i=await t()),i&&function(e,t){if(!to(e,{strict:!1}))throw new tt({address:e});if(!to(t,{strict:!1}))throw new tt({address:t});return e.toLowerCase()===t.toLowerCase()}(n.r,i))?{status:"self-referral",currentWallet:i}:(e?.interactionSession||(i=await t()),await r(n.r),{status:"success",currentWallet:i}):{status:"no-referrer",currentWallet:i}}async function tA(e,{modalConfig:t,walletStatus:r}){if(!r?.interactionSession){let r=await tf(e,t??{});return r?.wallet??void 0}return r.wallet??void 0}async function tE(e,{productId:t,modalConfig:r,options:n}={}){let i=tv.parse({url:window.location.href}),s=await tc(e);try{return await t_(e,{walletStatus:s,frakContext:i,modalConfig:r,productId:t,options:n})}catch(e){console.warn("Error processing referral",{error:e})}}class tC extends F{constructor({expectedLength:e,givenLength:t,type:r}){super(`ABI encoding array length mismatch for type ${r}.
14
+ `.trim()}}let em={id:"frak-wallet",name:"frak-wallet",title:"Frak Wallet",allow:"publickey-credentials-get *; clipboard-write; web-share *",style:{width:"0",height:"0",border:"0",position:"absolute",zIndex:2000001,top:"-1000px",left:"-1000px",colorScheme:"auto"}};function eg({walletBaseUrl:e,config:t}){let r=document.querySelector("#frak-wallet");r&&r.remove();let n=document.createElement("iframe");return n.id=em.id,n.name=em.name,n.allow=em.allow,n.style.zIndex=em.style.zIndex.toString(),ex({iframe:n,isVisible:!1}),document.body.appendChild(n),new Promise(r=>{n?.addEventListener("load",()=>r(n)),n.src=`${t?.walletUrl??e??"https://wallet.frak.id"}/listener`})}function ex({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"}function ev({config:e,iframe:t}){let r,n=e?.walletUrl??"https://wallet.frak.id",i=function({iframe:e}){let t=new l;return{handleEvent:async r=>{if(!("iframeLifecycle"in r))return;let{iframeLifecycle:n,data:i}=r;switch(n){case"connected":t.resolve(!0);break;case"do-backup":i.backup?localStorage.setItem(ew,i.backup):localStorage.removeItem(ew);break;case"remove-backup":localStorage.removeItem(ew);break;case"show":case"hide":ex({iframe:e,isVisible:"show"===n});break;case"handshake":e.contentWindow?.postMessage({clientLifecycle:"handshake-response",data:{token:i.token,currentUrl:window.location.href}},"*");break;case"redirect":{let e=new URL(i.baseRedirectUrl);e.searchParams.has("u")?(e.searchParams.delete("u"),e.searchParams.append("u",window.location.href),window.location.href=e.toString()):window.location.href=i.baseRedirectUrl}}},isConnected:t.promise}}({iframe:t}),s=new ey(e,t);if(!t.contentWindow)throw new c(a.configError,"The iframe does not have a content window");let o=function(e){let{emittingTransport:t,listeningTransport:r,targetOrigin:n,middleware:i=[],lifecycleHandlers:s}=e,o=new Map;async function a(e){try{"clientLifecycle"in e&&s?.clientLifecycle?await s.clientLifecycle(e,{origin:n,source:null}):"iframeLifecycle"in e&&s?.iframeLifecycle&&await s.iframeLifecycle(e,{origin:n,source:null})}catch(e){console.error("[RPC Client] Lifecycle handler error:",e)}}async function u(e){let t={origin:n,source:null};for(let r of i)r.onRequest&&await r.onRequest(e,t);return e}async function d(e,t){let r={origin:n,source:null},s=t;for(let t of i)t.onResponse&&(s=await t.onResponse(e,s,r));return s}async function f(e){var t,r;let i;try{let t=new URL(e.origin).origin.toLowerCase(),r=new URL(n).origin.toLowerCase();if(t!==r)return void console.log("Not expected origin",t,r)}catch(e){console.error("[RPC Client] Invalid origin",e);return}if("object"==typeof(t=e.data)&&t&&("clientLifecycle"in t||"iframeLifecycle"in t))return void await a(e.data);if(!("object"==typeof(r=e.data)&&r&&"id"in r&&"topic"in r&&"data"in r))return;try{let t=e.data.data,r=t instanceof Uint8Array||ArrayBuffer.isView(t);i=await d(e.data,r?{result:t}:t)}catch(e){console.error("[RPC Client] Middleware error on response:",e);return}let s=o.get(e.data.id);s&&s(i)}async function h(e){let r=e;try{r=await u(e)}catch(e){throw console.error("[RPC Client] Middleware error on request:",e),e}t.postMessage(r,n)}function p(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}return r.addEventListener("message",f),{request:function(e){let t=p(),r=new l;return o.set(t,e=>{e.error?r.reject(new c(e.error.code,e.error.message,e.error.data)):r.resolve(e.result),o.delete(t)}),h({id:t,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{o.delete(t),r.reject(e)}),r.promise},listen:function(e,t){let r=p();return o.set(r,e=>{e.error?(console.error("[RPC Client] Listener error:",e.error),o.delete(r)):t(e.result)}),h({id:r,topic:e.method,data:{method:e.method,params:e.params}}).catch(e=>{console.error("[RPC Client] Failed to send listener request:",e),o.delete(r)}),()=>{o.delete(r)}},sendLifecycle:function(e){t.postMessage(e,n)},cleanup:function(){r.removeEventListener("message",f),o.clear()}}}({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:n,middleware:[{async onRequest(e,t){if(!await i.isConnected)throw new c(a.clientNotConnected,"The iframe provider isn't connected yet");return t}},ef(),{onRequest:(e,t)=>(s.setLastRequest(e),t),onResponse:(e,t)=>(s.setLastResponse(e,t),t)}],lifecycleHandlers:{iframeLifecycle:async(e,t)=>{await i.handleEvent(e)}}}),u=function(e,t){let r,n,i=()=>e.sendLifecycle({clientLifecycle:"heartbeat"});function s(){r&&clearInterval(r),n&&clearTimeout(n)}return async function(){i(),r=setInterval(i,1e3),n=setTimeout(()=>{s(),console.log("Heartbeat timeout: connection failed")},3e4),await t.isConnected,s()}(),s}(o,i),d=async()=>{u(),o.cleanup(),t.remove()};console.log("[Frak SDK] Initializing OpenPanel"),(r=new eb({apiUrl:"https://op-api.gcp.frak.id",clientId:"f305d11d-b93b-487c-80d4-92deb7903e98",trackScreenViews:!0,trackOutgoingLinks:!0,trackAttributes:!1,filter:({type:e,payload:t})=>!("track"===e&&t?.properties)||("sdkVersion"in t.properties||(t.properties={...t.properties,sdkVersion:"0.1.0"}),!0)})).setGlobalProperties({sdkVersion:"0.1.0"}),r.init();let f=ej({config:e,rpcClient:o,lifecycleManager:i}).then(()=>s.updateSetupStatus(!0));return{config:e,debugInfo:s,waitForConnection:i.isConnected,waitForSetup:f,request:o.request,listenerRequest:o.listen,destroy:d,openPanel:r}}async function ej({config:e,rpcClient:t,lifecycleManager:r}){async function n(){let r=e.customizations?.css;r&&t.sendLifecycle({clientLifecycle:"modal-css",data:{cssLink:r}})}async function i(){let r=e.customizations?.i18n;r&&t.sendLifecycle({clientLifecycle:"modal-i18n",data:{i18n:r}})}async function s(){if("undefined"==typeof window)return;let e=window.localStorage.getItem(ew);e&&t.sendLifecycle({clientLifecycle:"restore-backup",data:{backup:e}})}await r.isConnected,function(e,t){if("undefined"==typeof window)return;let r=new URL(window.location.href),n=r.searchParams.get("sso");n&&(t.then(()=>{e.sendLifecycle({clientLifecycle:"sso-redirect-complete",data:{compressed:n}}),console.log("[SSO URL Listener] Forwarded compressed SSO data to iframe")}).catch(e=>{console.error("[SSO URL Listener] Failed to forward SSO data:",e)}),r.searchParams.delete("sso"),window.history.replaceState({},"",r.toString()),console.log("[SSO URL Listener] SSO parameter detected and URL cleaned"))}(t,r.isConnected),await Promise.allSettled([n(),i(),s()])}let ek={eur:"fr-FR",usd:"en-US",gbp:"en-GB"};function e_(e){return e&&e in ek?e:"eur"}async function eS({config:e}){let t,r=(t=e_(e.metadata?.currency),{...e,metadata:{...e.metadata,currency:t}}),n=await eg({config:r});if(!n)return void console.error("Failed to create iframe");let i=ev({config:r,iframe:n});return(await i.waitForSetup,await i.waitForConnection)?i:void console.error("Failed to connect to client")}function eA(e){return btoa(Array.from(e,e=>String.fromCharCode(e)).join("")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function eE(e){let t=e.length%4;return Uint8Array.from(atob(e.replace(/-/g,"+").replace(/_/g,"/").padEnd(e.length+(0===t?0:4-t),"=")),e=>e.charCodeAt(0))}function eC(e){return eA(u.encode(e))}function eI(e){var t=eE(e);try{return d.decode(t)}catch(e){return console.error("Invalid compressed data",{e:e,data:t}),null}}let eO="fCtx";function eP(e){if(e?.r)try{let t=es(e.r);return eA(t)}catch(t){console.error("Error compressing Frak context",{e:t,context:e})}}function eU(e){if(e&&0!==e.length)try{let t=eE(e);return{r:Q(t,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}function eL({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(eO);return t?eU(t):null}function eR({url:e,context:t}){if(!e)return null;let r=eL({url:e}),n=r?{...r,...t}:t;if(!n.r)return null;let i=eP(n);if(!i)return null;let s=new URL(e);return s.searchParams.set(eO,i),s.toString()}function eD(e){let t=new URL(e);return t.searchParams.delete(eO),t.toString()}let eM={compress:eP,decompress:eU,parse:eL,update:eR,remove:eD,replaceUrl:function({url:e,context:t}){let r;if(!window.location?.href||"undefined"==typeof window)return void console.error("No window found, can't update context");let n=e??window.location.href;(r=null!==t?eR({url:n,context:t}):eD(n))&&window.history.replaceState(null,"",r.toString())}};function eT(e){return e?ek[e]??ek.eur:ek.eur}function eB(e){return e?`${e}Amount`:"eurAmount"}function eF(e,t){let r=eT(t),n=e_(t);return e.toLocaleString(r,{style:"currency",currency:n,minimumFractionDigits:0,maximumFractionDigits:2})}function eN(e,t,r={}){if(!e)return void console.debug("[Frak] No client provided, skipping event tracking");try{e.openPanel?.track(t,r)}catch(e){console.debug("[Frak] Failed to track event:",t,e)}}let e$={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31},ez=Object.entries(e$).reduce((e,[t,r])=>(e[t]=BigInt(1)<<BigInt(r),e),{}),eV={press:{openArticle:"0xc0a24ffb",readArticle:"0xd5bd0fbe"},dapp:{proofVerifiableStorageUpdate:"0x2ab2aeef",callableVerifiableStorageUpdate:"0xa07da986"},webshop:{open:"0xb311798f"},referral:{referred:"0x010cc3b9",createLink:"0xb2c0f17c"},purchase:{started:"0xd87e90c3",completed:"0x8403aeb4",unsafeCompleted:"0x4d5b14e0"},retail:{customerMeeting:"0x74489004"}};async function eH(e,t,r="text/javascript"){return document.getElementById(e)?Promise.resolve(!0):new Promise((n,i)=>{let s=document.createElement("script");s.id=e,s.src=t,s.defer=!0,s.type=r,s.onload=()=>n(!0),s.onerror=()=>i(Error(`Script load error for ${t}`)),document.head.appendChild(s)})}let eW={"gapianne.com":function(){window.FrakSetup.config={walletUrl:"https://wallet.frak.id",metadata:{name:"Gapianne",lang:"fr",currency:"eur",logoUrl:"https://gapianne.com/cdn/shop/files/logo-gapianne_7a65f4c4-54e8-4831-afa2-0849e4c5f8de.png",homepageLink:"https://gapianne.com/"},customizations:{i18n:{"sharing.title":"Pr\xeat(e) \xe0 r\xe9v\xe9ler un secret bien-\xeatre ?","sharing.text":"D\xe9couvre ce produit chez Gapianne","sdk.wallet.login.text":"Cr\xe9ez votre porte-monnaie avec **{{ productName }}** et recevez **{{ estimatedReward }}** par ami(e) parrain\xe9(e)"}},domain:window.location.host},window.FrakSetup.modalConfig={login:{allowSso:!0},metadata:{isDismissible:!0}},window.FrakSetup.modalShareConfig={link:window.location.href},window.FrakSetup.modalWalletConfig={metadata:{position:"left"}},function(){for(let e of Array.from(document.querySelectorAll("#nexus-share-button > button"))){let t=document.createElement("frak-button-share");t.setAttribute("text","PARTAGE ET GAGNE {REWARD} !"),t.setAttribute("no-reward-text","PARTAGE ET GAGNE"),t.setAttribute("use-reward","true"),t.setAttribute("show-wallet","true"),t.setAttribute("classname","button w-full"),e.replaceWith(t)}}()}},eq=BigInt(0),eJ=BigInt(1),eG=BigInt(2),eK=BigInt(7),eX=BigInt(256),eQ=BigInt(113),eY=[],eZ=[],e0=[];for(let e=0,t=eJ,r=1,n=0;e<24;e++){[r,n]=[n,(2*r+3*n)%5],eY.push(2*(5*n+r)),eZ.push((e+1)*(e+2)/2%64);let i=eq;for(let e=0;e<7;e++)(t=(t<<eJ^(t>>eK)*eQ)%eX)&eG&&(i^=eJ<<(eJ<<BigInt(e))-eJ);e0.push(i)}let e2=E(e0,!0),e1=e2[0],e8=e2[1],e3=(e,t,r)=>r>32?O(e,t,r):C(e,t,r),e5=(e,t,r)=>r>32?P(e,t,r):I(e,t,r);class e6 extends v{constructor(e,t,r,n=!1,i=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=e,this.suffix=t,this.outputLen=r,this.enableXOF=n,this.rounds=i,f(r),!(0<e&&e<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=function(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}(this.state)}clone(){return this._cloneInto()}keccak(){g(this.state32),function(e,t=24){let r=new Uint32Array(10);for(let n=24-t;n<24;n++){for(let t=0;t<10;t++)r[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let n=(t+8)%10,i=(t+2)%10,s=r[i],o=r[i+1],a=e3(s,o,1)^r[n],c=e5(s,o,1)^r[n+1];for(let r=0;r<50;r+=10)e[t+r]^=a,e[t+r+1]^=c}let t=e[2],i=e[3];for(let r=0;r<24;r++){let n=eZ[r],s=e3(t,i,n),o=e5(t,i,n),a=eY[r];t=e[a],i=e[a+1],e[a]=s,e[a+1]=o}for(let t=0;t<50;t+=10){for(let n=0;n<10;n++)r[n]=e[t+n];for(let n=0;n<10;n++)e[t+n]^=~r[(n+2)%10]&r[(n+4)%10]}e[0]^=e1[n],e[1]^=e8[n]}w(r)}(this.state32,this.rounds),g(this.state32),this.posOut=0,this.pos=0}update(e){p(this),h(e=x(e));let{blockLen:t,state:r}=this,n=e.length;for(let i=0;i<n;){let s=Math.min(t-this.pos,n-i);for(let t=0;t<s;t++)r[this.pos++]^=e[i++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:e,suffix:t,pos:r,blockLen:n}=this;e[r]^=t,(128&t)!=0&&r===n-1&&this.keccak(),e[n-1]^=128,this.keccak()}writeInto(e){p(this,!1),h(e),this.finish();let t=this.state,{blockLen:r}=this;for(let n=0,i=e.length;n<i;){this.posOut>=r&&this.keccak();let s=Math.min(r-this.posOut,i-n);e.set(t.subarray(this.posOut,this.posOut+s),n),this.posOut+=s,n+=s}return e}xofInto(e){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return f(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(b(e,this),this.finished)throw Error("digest() was already called");return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,w(this.state)}_cloneInto(e){let{blockLen:t,suffix:r,outputLen:n,rounds:i,enableXOF:s}=this;return e||(e=new e6(t,r,n,s,i)),e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=i,e.suffix=r,e.outputLen=n,e.enableXOF=s,e.destroyed=this.destroyed,e}}let e4=(t=1,i=136,s=32,j(()=>new e6(i,t,s)));function e7(e,t){let r=e4(M(e,{strict:!1})?er(e):e);return"bytes"===(t||"hex")?r:K(r)}function e9(e){return"string"==typeof e[0]?te(e):function(e){let t=0;for(let r of e)t+=r.length;let r=new Uint8Array(t),n=0;for(let t of e)r.set(t,n),n+=t.length;return r}(e)}function te(e){return`0x${e.reduce((e,t)=>e+t.replace("0x",""),"")}`}class tt extends F{constructor({address:e}){super(`Address "${e}" is invalid.`,{metaMessages:["- Address must be a hex value of 20 bytes (40 hex characters).","- Address must match its checksum counterpart."],name:"InvalidAddressError"})}}class tr extends Map{constructor(e){super(),Object.defineProperty(this,"maxSize",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.maxSize=e}get(e){let t=super.get(e);return super.has(e)&&void 0!==t&&(this.delete(e),super.set(e,t)),t}set(e,t){if(super.set(e,t),this.maxSize&&this.size>this.maxSize){let e=this.keys().next().value;e&&this.delete(e)}return this}}let tn=new tr(8192),ti=/^0x[a-fA-F0-9]{40}$/,ts=new tr(8192);function to(e,t){let{strict:r=!0}=t??{},n=`${e}.${r}`;if(ts.has(n))return ts.get(n);let i=!!ti.test(e)&&(e.toLowerCase()===e||!r||function(e,t){if(tn.has(`${e}.${void 0}`))return tn.get(`${e}.${t}`);let r=t?`${t}${e.toLowerCase()}`:e.substring(2).toLowerCase(),n=e7(eo(r),"bytes"),i=(t?r.substring(`${t}0x`.length):r).split("");for(let e=0;e<40;e+=2)n[e>>1]>>4>=8&&i[e]&&(i[e]=i[e].toUpperCase()),(15&n[e>>1])>=8&&i[e+1]&&(i[e+1]=i[e+1].toUpperCase());let s=`0x${i.join("")}`;return tn.set(`${e}.${t}`,s),s}(e)===e);return ts.set(n,i),i}let ta=256;function tc(e,t){if(!t)return e.request({method:"frak_listenToWalletStatus"}).then(t=>(tl(e,t),t));let r=new l,n=!1;return e.listenerRequest({method:"frak_listenToWalletStatus"},i=>{tl(e,i),t(i),n||(r.resolve(i),n=!0)}),r.promise}function tl(e,t){"undefined"!=typeof window&&(e.openPanel?.setGlobalProperties({wallet:t.wallet??null}),t.interactionToken?window.sessionStorage.setItem("frak-wallet-interaction-token",t.interactionToken):window.sessionStorage.removeItem("frak-wallet-interaction-token"))}async function tu(e,{productId:t,interaction:r,validation:n}){let i=t??function({domain:e}){return e7(K((e??window.location.host).replace("www.","")))}(e.config);return await e.request({method:"frak_sendInteraction",params:[i,r,n]})}async function td(e,{steps:t,metadata:r}){return await e.request({method:"frak_displayModal",params:[t,r,e.config.metadata]})}async function tf(e,t){return await e.request({method:"frak_displayEmbeddedWallet",params:[t,e.config.metadata]})}async function th(e,t){let{metadata:r,customizations:n}=e.config;return await e.request({method:"frak_sso",params:[t,r.name,n?.css]})??{}}async function tp(e){return await e.request({method:"frak_getProductInformation"})}async function tb(e){if("undefined"==typeof window)return void console.warn("[Frak] No window found, can't track purchase");let t=window.sessionStorage.getItem("frak-wallet-interaction-token");if(!t)return void console.warn("[Frak] No frak session found, skipping purchase check");await fetch("https://backend.frak.id/interactions/listenForPurchase",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","x-wallet-sdk-auth":t},body:JSON.stringify(e)})}async function tw(t,{siwe:r,metadata:n}){let i=t.config?.domain??window.location.host,s=r?.statement??`I confirm that I want to use my Frak wallet on: ${t.config.metadata.name}`,o={...r,statement:s,nonce:r?.nonce??function(t=11){if(!e||ta+t>512){e="",ta=0;for(let t=0;t<256;t++)e+=(256+256*Math.random()|0).toString(16).substring(1)}return e.substring(ta,ta+++t)}(96),uri:r?.uri??`https://${i}`,version:r?.version??"1",domain:i};return(await td(t,{metadata:n,steps:{login:{},siweAuthenticate:{siwe:o}}})).siweAuthenticate}async function ty(e,{tx:t,metadata:r}){return(await td(e,{metadata:r,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}function tm(e,{metadata:t,login:r,openSession:n}){return function e(t,r){async function n(e){return e&&(r.metadata=e(r.metadata??{})),await td(t,r)}return{params:r,sendTx:function(n){return e(t,{...r,steps:{...r.steps,sendTransaction:n}})},reward:function(n){return e(t,{...r,steps:{...r.steps,final:{...n,action:{key:"reward"}}}})},sharing:function(n,i){return e(t,{...r,steps:{...r.steps,final:{...i,action:{key:"sharing",options:n}}}})},display:n}}(e,{steps:{login:r??{},openSession:n??{}},metadata:t})}let tg="fCtx";function tx({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(tg);return t?function(e){if(e&&0!==e.length)try{let t,r=(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:Q(r,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}(t):null}let tv={parse:tx,replaceUrl:function({url:e,context:t}){let r,n;if(!window.location?.href||"undefined"==typeof window)return void console.error("No window found, can't update context");let i=e??window.location.href;(r=null!==t?function({url:e,context:t}){if(!e)return null;let r=tx({url:e}),n=r?{...r,...t}:t;if(!n.r)return null;let i=function(e){if(e?.r)try{var t;return t=es(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})}}(n);if(!i)return null;let s=new URL(e);return s.searchParams.set(tg,i),s.toString()}({url:i,context:t}):((n=new URL(i)).searchParams.delete(tg),n.toString()))&&window.history.replaceState(null,"",r.toString())}},tj={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31};Object.entries(tj).reduce((e,[t,r])=>(e[t]=BigInt(1)<<BigInt(r),e),{});let tk={createLink:()=>({handlerTypeDenominator:K(tj.referral),interactionData:"0xb2c0f17c"}),referred({referrer:e}){let t=te(["0x010cc3b9",z(e,{size:32})]);return{handlerTypeDenominator:K(tj.referral),interactionData:t}}};async function t_(e,{walletStatus:t,frakContext:r,modalConfig:n,productId:i,options:s}){let o=!1;async function l(){if(!o)return o=!0,tA(e,{modalConfig:{...n,loggedIn:{action:{key:"referred"}}},walletStatus:t})}async function u(t){let r=tk.referred({referrer:t});await Promise.allSettled([tu(e,{productId:i,interaction:r}),function(e,t,r={}){if(!e)return void console.debug("[Frak] No client provided, skipping event tracking");try{e.openPanel?.track(t,r)}catch(e){console.debug("[Frak] Failed to track event:",t,e)}}(e,"user_referred",{properties:{referrer:t}})])}try{let{status:e,currentWallet:n}=await tS({initialWalletStatus:t,getFreshWalletStatus:l,pushReferralInteraction:u,frakContext:r});return tv.replaceUrl({url:window.location?.href,context:s?.alwaysAppendUrl?{r:n}:null}),e}catch(e){return console.log("Error processing referral",{error:e}),tv.replaceUrl({url:window.location?.href,context:s?.alwaysAppendUrl?{r:t?.wallet}:null}),function(e){if(e instanceof c)switch(e.code){case a.walletNotConnected:return"no-wallet";case a.serverErrorForInteractionDelegation:return"no-session"}return"error"}(e)}}async function tS({initialWalletStatus:e,getFreshWalletStatus:t,pushReferralInteraction:r,frakContext:n}){let i=e?.wallet;return n?.r?(i||(i=await t()),i&&function(e,t){if(!to(e,{strict:!1}))throw new tt({address:e});if(!to(t,{strict:!1}))throw new tt({address:t});return e.toLowerCase()===t.toLowerCase()}(n.r,i))?{status:"self-referral",currentWallet:i}:(e?.interactionSession||(i=await t()),await r(n.r),{status:"success",currentWallet:i}):{status:"no-referrer",currentWallet:i}}async function tA(e,{modalConfig:t,walletStatus:r}){if(!r?.interactionSession){let r=await tf(e,t??{});return r?.wallet??void 0}return r.wallet??void 0}async function tE(e,{productId:t,modalConfig:r,options:n}={}){let i=tv.parse({url:window.location.href}),s=await tc(e);try{return await t_(e,{walletStatus:s,frakContext:i,modalConfig:r,productId:t,options:n})}catch(e){console.warn("Error processing referral",{error:e})}}class tC extends F{constructor({expectedLength:e,givenLength:t,type:r}){super(`ABI encoding array length mismatch for type ${r}.
15
15
  Expected length: ${e}
16
16
  Given length: ${t}`,{name:"AbiEncodingArrayLengthMismatchError"})}}class tI extends F{constructor({expectedSize:e,value:t}){super(`Size of bytes "${t}" (bytes${q(t)}) does not match expected size (bytes${e}).`,{name:"AbiEncodingBytesSizeMismatchError"})}}class tO extends F{constructor({expectedLength:e,givenLength:t}){super(`ABI encoding params/values length mismatch.
17
17
  Expected length (params): ${e}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "url": "https://twitter.com/QNivelais"
12
12
  }
13
13
  ],
14
- "version": "0.0.40-beta.f259d7fc",
14
+ "version": "0.0.41",
15
15
  "description": "Legacy SDK, only used here to provide nice wrapper and redirection for older implementation, to not break anything and keep them updated with latest security updates.",
16
16
  "repository": {
17
17
  "url": "https://github.com/frak-id/wallet",