@frak-labs/components 0.0.26-beta.eb3cff34 → 1.0.0-beta.bd7d4823

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/cdn/components.js CHANGED
@@ -1 +1 @@
1
- import(`https://cdn.jsdelivr.net/npm/@frak-labs/components@beta/cdn/loader.js?v=1776252367929`);
1
+ import(`https://cdn.jsdelivr.net/npm/@frak-labs/components@beta/cdn/loader.js?v=1776259408260`);
package/cdn/loader.js CHANGED
@@ -11,4 +11,4 @@ var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],en
11
11
  Last Response: ${t.lastResponse}
12
12
  Client Status: ${t.clientStatus}
13
13
  Error: ${t.error}
14
- `.trim()}};const wn=(()=>{if(typeof navigator>`u`)return!1;let e=navigator.userAgent;if(!(/iPhone|iPad|iPod/i.test(e)||/Macintosh/i.test(e)&&navigator.maxTouchPoints>1))return!1;let t=e.toLowerCase();return t.includes(`instagram`)||t.includes(`fban`)||t.includes(`fbav`)||t.includes(`facebook`)})();function Tn(e){e?localStorage.setItem(q,e):localStorage.removeItem(q)}function En(e,t){try{let n=new URL(e);if(!n.searchParams.has(`u`))return e;let r=kn(window.location.href,t);return n.searchParams.delete(`u`),n.searchParams.append(`u`,r),n.toString()}catch{return e}}function Dn(e){let t=new URL(window.location.href);e&&t.searchParams.set(`fmt`,e);let n=t.protocol===`http:`?`x-safari-http`:`x-safari-https`;window.location.href=`${n}://${t.host}${t.pathname}${t.search}${t.hash}`}function On(e){return e.includes(`/common/social`)}function kn(e,t){if(!t)return e;try{let n=new URL(e);return n.searchParams.set(`fmt`,t),n.toString()}catch{return`${e}${e.includes(`?`)?`&`:`?`}fmt=${encodeURIComponent(t)}`}}function An(e,t,n,r,i){if(i){let e=En(t,r);window.open(e,`_blank`);return}if(un(t)){let i=En(t,r);ln(i,{onFallback:()=>{e.contentWindow?.postMessage({clientLifecycle:`deep-link-failed`,data:{originalUrl:i}},n)}})}else if(wn&&On(t))Dn(r);else{let e=En(t,r);window.location.href=e}}function jn({iframe:e,targetOrigin:t}){let n=new k;return{handleEvent:r=>{if(!(`iframeLifecycle`in r))return;let{iframeLifecycle:i,data:a}=r;switch(i){case`connected`:n.resolve(!0);break;case`do-backup`:Tn(a.backup);break;case`remove-backup`:localStorage.removeItem(q);break;case`show`:case`hide`:hn({iframe:e,isVisible:i===`show`});break;case`redirect`:An(e,a.baseRedirectUrl,t,a.mergeToken,a.openInNewTab);break}},isConnected:n.promise}}function Mn({config:e,iframe:t}){let n=e?.walletUrl??`https://wallet.frak.id`,r=typeof navigator<`u`?navigator.language?.split(`-`)[0]:void 0,i=e.metadata.lang??(r===`en`||r===`fr`?r:void 0),a=e.domain??(typeof window<`u`?window.location.hostname:``);W.setCacheScope(a,i),W.reset();let o=W.isCacheFresh?void 0:W.resolve(e.domain,e.walletUrl,i),s=jn({iframe:t,targetOrigin:n}),c=new k,l=new Cn(e,t);if(!t.contentWindow)throw new O(D.configError,`The iframe does not have a content window`);let u=it({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:n,middleware:[{async onRequest(e,t){if(!await s.isConnected)throw new O(D.clientNotConnected,`The iframe provider isn't connected yet`);return await c.promise,t}},{onRequest(e,t){return l.setLastRequest(e),t},onResponse(e,t){return l.setLastResponse(e,t),t}}],lifecycleHandlers:{iframeLifecycle:(e,t)=>{s.handleEvent(e)}}}),d=Nn(u,s),f=async()=>{d(),u.cleanup(),t.remove(),wt(),W.clearCache(),W.reset()},p;console.log(`[Frak SDK] Initializing OpenPanel`),p=new an({apiUrl:`https://op-api.gcp.frak.id`,clientId:`6eacc8d7-49ac-4936-95e9-81ef29449570`,trackScreenViews:!0,trackOutgoingLinks:!0,trackAttributes:!1,filter:({type:e,payload:t})=>(e!==`track`||!t?.properties||`sdkVersion`in t.properties||(t.properties={...t.properties,sdkVersion:`0.2.1`,userAnonymousClientId:A()}),!0)}),p.setGlobalProperties({sdkVersion:`0.2.1`,userAnonymousClientId:A()}),p.init();let m=Pn({config:e,rpcClient:u,lifecycleManager:s,configPromise:o,contextSent:c}).then(()=>l.updateSetupStatus(!0)).catch(e=>{throw c.reject(e),e});return{config:e,debugInfo:l,waitForConnection:s.isConnected,waitForSetup:m,request:u.request,listenerRequest:u.listen,destroy:f,openPanel:p}}function Nn(e,t){let n,r,i=()=>e.sendLifecycle({clientLifecycle:`heartbeat`});async function a(){i(),n=setInterval(i,1e3),r=setTimeout(()=>{o(),console.log(`Heartbeat timeout: connection failed`)},3e4),await t.isConnected,o()}function o(){n&&clearInterval(n),r&&clearTimeout(r)}return a(),o}async function Pn({config:e,rpcClient:t,lifecycleManager:n,configPromise:r,contextSent:i}){await n.isConnected,Sn(t,n.isConnected);let a=new URL(window.location.href),o=a.searchParams.get(`fmt`)??void 0;o&&(a.searchParams.delete(`fmt`),window.history.replaceState({},``,a.toString()));let s=t=>{let n=t?.merchantId??e.metadata.merchantId??``,r=t?.domain??``,i=t?.allowedDomains??[],a=t?.sdkConfig;W.setConfig(a?{isResolved:!0,merchantId:n,domain:r,allowedDomains:i,hasRawSdkConfig:!0,name:a.name??e.metadata.name,logoUrl:a.logoUrl??e.metadata.logoUrl,homepageLink:a.homepageLink??e.metadata.homepageLink,lang:a.lang??e.metadata.lang,currency:a.currency??e.metadata.currency,hidden:a.hidden,css:a.css,translations:a.translations,placements:a.placements,components:a.components}:{isResolved:!0,merchantId:n,domain:r,allowedDomains:i,name:e.metadata.name,logoUrl:e.metadata.logoUrl,homepageLink:e.metadata.homepageLink,lang:e.metadata.lang,currency:e.metadata.currency})},c=!1,l=e=>{let n=c?void 0:o;c=!0;let r=e.hasRawSdkConfig?{name:e.name,logoUrl:e.logoUrl,homepageLink:e.homepageLink,lang:e.lang,currency:e.currency,hidden:e.hidden,css:e.css,translations:e.translations,placements:e.placements}:void 0;t.sendLifecycle({clientLifecycle:`resolved-config`,data:{merchantId:e.merchantId,domain:e.domain??``,allowedDomains:e.allowedDomains??[],sourceUrl:window.location.href,...n&&{pendingMergeToken:n},...r&&{sdkConfig:r}}})};W.isResolved&&(l(W.getConfig()),i.resolve()),r&&(s(await r),l(W.getConfig()),i.resolve());async function u(){let n=e.customizations?.css;n&&t.sendLifecycle({clientLifecycle:`modal-css`,data:{cssLink:n}})}async function d(){let n=e.customizations?.i18n;n&&t.sendLifecycle({clientLifecycle:`modal-i18n`,data:{i18n:n}})}async function f(){if(typeof window>`u`)return;let e=window.localStorage.getItem(q);e&&t.sendLifecycle({clientLifecycle:`restore-backup`,data:{backup:e}})}await Promise.allSettled([u(),d(),f()])}async function Fn({config:e}){let t=In(e),n=await mn({config:t});if(!n){console.error(`Failed to create iframe`);return}let r=Mn({config:t,iframe:n});if(await r.waitForSetup,!await r.waitForConnection){console.error(`Failed to connect to client`);return}return r}function In(e){let t=Y(e.metadata?.currency);return{...e,metadata:{...e.metadata,currency:t}}}var Ln=t({DEEP_LINK_SCHEME:()=>on,DebugInfoGatherer:()=>Cn,FrakContextManager:()=>Nt,base64urlDecode:()=>dt,base64urlEncode:()=>ut,baseIframeProps:()=>X,clearAllCache:()=>wt,compressJsonToB64:()=>ft,computeLegacyProductId:()=>lt,createIFrameFrakClient:()=>Mn,createIframe:()=>mn,decompressJsonFromB64:()=>Tt,findIframeInOpener:()=>gn,formatAmount:()=>fn,generateSsoUrl:()=>pt,getBackendUrl:()=>j,getCache:()=>Ct,getClientId:()=>A,getCurrencyAmountKey:()=>pn,getSupportedCurrency:()=>Y,getSupportedLocale:()=>dn,isChromiumAndroid:()=>sn,isFrakDeepLink:()=>un,isIOS:()=>vn,isInAppBrowser:()=>bn,isV1Context:()=>I,isV2Context:()=>L,locales:()=>J,redirectToExternalBrowser:()=>xn,sdkConfigStore:()=>W,setupClient:()=>Fn,ssoPopupFeatures:()=>ht,ssoPopupName:()=>gt,toAndroidIntentUrl:()=>cn,trackEvent:()=>G,triggerDeepLinkWithFallback:()=>ln,withCache:()=>F});function Rn(){return rt(96)}async function zn(e,t,n){return await e.request({method:`frak_displayEmbeddedWallet`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Z(e,{steps:t,metadata:n},r){return await e.request({method:`frak_displayModal`,params:r?[t,n,e.config.metadata,r]:[t,n,e.config.metadata]})}async function Bn(e,t,n){return await e.request({method:`frak_displaySharingPage`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Vn(e){if(typeof window>`u`)return;let t=A();if(!t)return;let n=await W.resolveMerchantId();if(!n)return;let r=`frak-identity-ensured-${n}`;if(!window.sessionStorage.getItem(r))try{let i=j();(await fetch(`${i}/user/identity/ensure`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`,"x-wallet-sdk-auth":e,"x-frak-client-id":t},body:JSON.stringify({merchantId:n})})).ok&&window.sessionStorage.setItem(r,`1`)}catch{}}async function Hn(e,t){return F(()=>e.request({method:`frak_getMerchantInformation`}),{cacheKey:`frak_getMerchantInformation`,cacheTime:t?.cacheTime})}async function Un(e,t){return F(()=>e.request({method:`frak_getMergeToken`}),{cacheKey:`frak_getMergeToken`,cacheTime:t?.cacheTime})}async function Wn(e,t){return F(()=>e.request({method:`frak_getUserReferralStatus`}),{cacheKey:`frak_getUserReferralStatus`,cacheTime:t?.cacheTime})}async function Gn(e,t){let{metadata:n,customizations:r}=e.config;return await e.request({method:`frak_prepareSso`,params:[t,n.name,r?.css]})}async function Kn(e,t){try{await e.request({method:`frak_sendInteraction`,params:[t,{clientId:A()}]})}catch{console.warn(`[Frak SDK] Failed to send interaction:`,t.type)}}function qn(e,t,n){let r=typeof window<`u`?window.location.href:void 0;return L(t)?(G(e,`user_referred_started`,{properties:{referrerClientId:t.c,walletStatus:n?.key}}),Kn(e,{type:`arrival`,referrerClientId:t.c,referrerMerchantId:t.m,referralTimestamp:t.t,landingUrl:r}),!0):I(t)?(G(e,`user_referred_started`,{properties:{referrer:t.r,walletStatus:n?.key}}),Kn(e,{type:`arrival`,referrerWallet:t.r,landingUrl:r}),!0):!1}function Jn(e){let t=A();return t?{v:2,c:t,m:e,t:Math.floor(Date.now()/1e3)}:null}function Yn(e,t){return L(e)?A()===e.c:I(e)&&t?.wallet?nt(e.r,t.wallet):!1}function Xn(e,{walletStatus:t,frakContext:n,options:r}){if(!n)return`no-referrer`;if(Yn(n,t))return`self-referral`;if(!qn(e,n,t))return`no-referrer`;let i=L(n)?n.m:r?.merchantId,a=r?.alwaysAppendUrl&&i?Jn(i):null;return Nt.replaceUrl({url:window.location?.href,context:a}),G(e,`user_referred_completed`,{properties:{status:`success`}}),`success`}async function Zn(e,{options:t}={}){let n=Nt.parse({url:window.location.href}),r=await er(e);try{return Xn(e,{walletStatus:r,frakContext:n,options:t})}catch(e){console.warn(`Error processing referral`,{error:e})}}const Q=`frak:referral-success`;async function Qn(e){try{await Zn(e)===`success`&&window.dispatchEvent(new Event(Q))}catch(e){console.warn(`[Frak] Referral setup failed`,e)}}async function $n(e){if(typeof window>`u`){console.warn(`[Frak] No window found, can't track purchase`);return}let t=window.sessionStorage.getItem(`frak-wallet-interaction-token`),n=A();if(!t&&!n){console.warn(`[Frak] No identity found, skipping purchase check`);return}let r=e.merchantId??await W.resolveMerchantId();if(!r){console.warn(`[Frak] No merchant id found, skipping purchase check`);return}let i={Accept:`application/json`,"Content-Type":`application/json`};t&&(i[`x-wallet-sdk-auth`]=t),n&&(i[`x-frak-client-id`]=n);let a=j();await fetch(`${a}/user/track/purchase`,{method:`POST`,headers:i,body:JSON.stringify({customerId:e.customerId,orderId:e.orderId,token:e.token,merchantId:r})})}function er(e,t){if(!t)return e.request({method:`frak_listenToWalletStatus`}).then(t=>(tr(e,t),t));let n=new k,r=!1;return e.listenerRequest({method:`frak_listenToWalletStatus`},i=>{tr(e,i),t(i),r||=(n.resolve(i),!0)}),n.promise}function tr(e,t){typeof window>`u`||(e.openPanel?.setGlobalProperties({wallet:t.wallet??null}),t.interactionToken?(window.sessionStorage.setItem(`frak-wallet-interaction-token`,t.interactionToken),Vn(t.interactionToken)):window.sessionStorage.removeItem(`frak-wallet-interaction-token`))}function nr(e,{metadata:t,login:n}){return $(e,{steps:{login:n??{}},metadata:t})}function $(e,t){function n(n){return $(e,{...t,steps:{...t.steps,sendTransaction:n}})}function r(n){return $(e,{...t,steps:{...t.steps,final:{...n,action:{key:`reward`}}}})}function i(n,r){return $(e,{...t,steps:{...t.steps,final:{...r,action:{key:`sharing`,options:n}}}})}async function a(n,r){return n&&(t.metadata=n(t.metadata??{})),await Z(e,t,r)}return{params:t,sendTx:n,reward:r,sharing:i,display:a}}async function rr(e,{tx:t,metadata:n}){return(await Z(e,{metadata:n,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}async function ir(e,{siwe:t,metadata:n}){let r=e.config?.domain??window.location.host,i=t?.statement??`I confirm that I want to use my Frak wallet on: ${e.config.metadata.name}`;return(await Z(e,{metadata:n,steps:{login:{},siweAuthenticate:{siwe:{...t,statement:i,nonce:t?.nonce??Rn(),uri:t?.uri??`https://${r}`,version:t?.version??`1`,domain:r}}}})).siweAuthenticate}var ar=t({REFERRAL_SUCCESS_EVENT:()=>Q,displayEmbeddedWallet:()=>zn,displayModal:()=>Z,displaySharingPage:()=>Bn,ensureIdentity:()=>Vn,getMerchantInformation:()=>Hn,getMergeToken:()=>Un,getUserReferralStatus:()=>Wn,modalBuilder:()=>nr,openSso:()=>_t,prepareSso:()=>Gn,processReferral:()=>Xn,referralInteraction:()=>Zn,sendInteraction:()=>Kn,sendTransaction:()=>rr,setupReferral:()=>Qn,siweAuthenticate:()=>ir,trackPurchaseStatus:()=>$n,watchWalletStatus:()=>er});async function or(e,t){if(!window.FrakSetup?.client){console.error(`Frak client not found`);return}let n=window.FrakSetup?.modalWalletConfig??{};await zn(window.FrakSetup.client,e?{...n,metadata:{...n.metadata,targetInteraction:e}}:n,t)}function sr(){`vibrate`in navigator?navigator.vibrate(10):console.log(`Vibration not supported`)}function cr(e,t){sr(),or(e,t)}const lr=`frak:client`;function ur(){let e=new CustomEvent(lr);window.dispatchEvent(e)}function dr(e,t){if(window.FrakSetup?.client&&e===`add`){t();return}(e===`add`?window.addEventListener:window.removeEventListener)(lr,t,!1)}function fr(){return window.FrakSetup.core={...Ln,...ar},window.FrakSetup?.client?Promise.resolve():F(()=>pr(),{cacheKey:`frak-sdk-init`,cacheTime:1/0}).catch(()=>{})}async function pr(){if(!window.FrakSetup?.config)throw Error(`[Frak SDK] Configuration not found. Please ensure window.FrakSetup.config is set.`);console.log(`[Frak SDK] Starting initialization`);let e=await Fn({config:window.FrakSetup.config});if(!e)throw Error(`[Frak SDK] Failed to create client`);window.FrakSetup.client=e,console.log(`[Frak SDK] Client initialized successfully`),ur(),Qn(e),mr()}function mr(){let e=new URLSearchParams(window.location.search).get(`frakAction`);e&&e===`share`&&(console.log(`[Frak SDK] Auto open query param found`),cr())}function hr(e){document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,1):document.addEventListener(`DOMContentLoaded`,e)}function gr(e,t){let n=document.getElementById(e);if(n){n.textContent!==t&&(n.textContent=t);return}let r=document.createElement(`style`);r.id=e,r.textContent=t,document.head.appendChild(r)}function _r(e,t){gr(`frak-base-${e}`,t)}function vr(e,t,n){gr(`frak-placement-${e}-${t}`,n)}const yr={injectBase:_r,injectPlacement:vr};yr.injectBase(`fouce`,`frak-button-share:not(:defined), frak-button-wallet:not(:defined), frak-open-in-app:not(:defined), frak-post-purchase:not(:defined), frak-banner:not(:defined) { display: none !important; }`),hr(fr);const br={"button-share":()=>import(`./ButtonShare.BDS1fgma.js`),"button-wallet":()=>import(`./ButtonWallet.Be1UyRm8.js`),"open-in-app":()=>import(`./OpenInAppButton.Diqt07eo.js`),"post-purchase":()=>import(`./PostPurchase.DqFhm-Jn.js`),banner:()=>import(`./Banner.Ws9o79lU.js`)},xr=new MutationObserver(e=>{for(let{addedNodes:t}of e)for(let e of Array.from(t))e.nodeType===Node.ELEMENT_NODE&&Sr(e)});async function Sr(e){let t=e instanceof Element?e.tagName.toLowerCase():``,n=t?.startsWith(`frak-`),r=Array.from(e.querySelectorAll(`:not(:defined)`)).map(e=>e.tagName.toLowerCase()).filter(e=>e.startsWith(`frak-`));n&&!customElements.get(t)&&r.push(t);let i=[...new Set(r)];await Promise.allSettled(i.map(e=>Cr(e)))}async function Cr(e){if(customElements.get(e))return Promise.resolve();try{let t=e.replace(/^frak-/i,``);if(!(t in br))throw Error(`Component ${e} is not supported.`);await br[t]()}catch(e){console.error(e)}}Sr(document.body),xr.observe(document.documentElement,{subtree:!0,childList:!0});export{G as C,W as S,O as T,ln as _,cr as a,on as b,$n as c,Un as d,Hn as f,fn as g,bn as h,dr as i,Q as l,xn as m,hr as n,or as o,Bn as p,fr as r,nr as s,yr as t,Wn as u,Y as v,D as w,pn as x,Cn as y};
14
+ `.trim()}};const wn=(()=>{if(typeof navigator>`u`)return!1;let e=navigator.userAgent;if(!(/iPhone|iPad|iPod/i.test(e)||/Macintosh/i.test(e)&&navigator.maxTouchPoints>1))return!1;let t=e.toLowerCase();return t.includes(`instagram`)||t.includes(`fban`)||t.includes(`fbav`)||t.includes(`facebook`)})();function Tn(e){e?localStorage.setItem(q,e):localStorage.removeItem(q)}function En(e,t){try{let n=new URL(e);if(!n.searchParams.has(`u`))return e;let r=kn(window.location.href,t);return n.searchParams.delete(`u`),n.searchParams.append(`u`,r),n.toString()}catch{return e}}function Dn(e){let t=new URL(window.location.href);e&&t.searchParams.set(`fmt`,e);let n=t.protocol===`http:`?`x-safari-http`:`x-safari-https`;window.location.href=`${n}://${t.host}${t.pathname}${t.search}${t.hash}`}function On(e){return e.includes(`/common/social`)}function kn(e,t){if(!t)return e;try{let n=new URL(e);return n.searchParams.set(`fmt`,t),n.toString()}catch{return`${e}${e.includes(`?`)?`&`:`?`}fmt=${encodeURIComponent(t)}`}}function An(e,t,n,r,i){if(i){let e=En(t,r);window.open(e,`_blank`);return}if(un(t)){let i=En(t,r);ln(i,{onFallback:()=>{e.contentWindow?.postMessage({clientLifecycle:`deep-link-failed`,data:{originalUrl:i}},n)}})}else if(wn&&On(t))Dn(r);else{let e=En(t,r);window.location.href=e}}function jn({iframe:e,targetOrigin:t}){let n=new k;return{handleEvent:r=>{if(!(`iframeLifecycle`in r))return;let{iframeLifecycle:i,data:a}=r;switch(i){case`connected`:n.resolve(!0);break;case`do-backup`:Tn(a.backup);break;case`remove-backup`:localStorage.removeItem(q);break;case`show`:case`hide`:hn({iframe:e,isVisible:i===`show`});break;case`redirect`:An(e,a.baseRedirectUrl,t,a.mergeToken,a.openInNewTab);break}},isConnected:n.promise}}function Mn({config:e,iframe:t}){let n=e?.walletUrl??`https://wallet.frak.id`,r=typeof navigator<`u`?navigator.language?.split(`-`)[0]:void 0,i=e.metadata.lang??(r===`en`||r===`fr`?r:void 0),a=e.domain??(typeof window<`u`?window.location.hostname:``);W.setCacheScope(a,i),W.reset();let o=W.isCacheFresh?void 0:W.resolve(e.domain,e.walletUrl,i),s=jn({iframe:t,targetOrigin:n}),c=new k,l=new Cn(e,t);if(!t.contentWindow)throw new O(D.configError,`The iframe does not have a content window`);let u=it({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:n,middleware:[{async onRequest(e,t){if(!await s.isConnected)throw new O(D.clientNotConnected,`The iframe provider isn't connected yet`);return await c.promise,t}},{onRequest(e,t){return l.setLastRequest(e),t},onResponse(e,t){return l.setLastResponse(e,t),t}}],lifecycleHandlers:{iframeLifecycle:(e,t)=>{s.handleEvent(e)}}}),d=Nn(u,s),f=async()=>{d(),u.cleanup(),t.remove(),wt(),W.clearCache(),W.reset()},p;console.log(`[Frak SDK] Initializing OpenPanel`),p=new an({apiUrl:`https://op-api.gcp.frak.id`,clientId:`6eacc8d7-49ac-4936-95e9-81ef29449570`,trackScreenViews:!0,trackOutgoingLinks:!0,trackAttributes:!1,filter:({type:e,payload:t})=>(e!==`track`||!t?.properties||`sdkVersion`in t.properties||(t.properties={...t.properties,sdkVersion:`1.0.0`,userAnonymousClientId:A()}),!0)}),p.setGlobalProperties({sdkVersion:`1.0.0`,userAnonymousClientId:A()}),p.init();let m=Pn({config:e,rpcClient:u,lifecycleManager:s,configPromise:o,contextSent:c}).then(()=>l.updateSetupStatus(!0)).catch(e=>{throw c.reject(e),e});return{config:e,debugInfo:l,waitForConnection:s.isConnected,waitForSetup:m,request:u.request,listenerRequest:u.listen,destroy:f,openPanel:p}}function Nn(e,t){let n,r,i=()=>e.sendLifecycle({clientLifecycle:`heartbeat`});async function a(){i(),n=setInterval(i,1e3),r=setTimeout(()=>{o(),console.log(`Heartbeat timeout: connection failed`)},3e4),await t.isConnected,o()}function o(){n&&clearInterval(n),r&&clearTimeout(r)}return a(),o}async function Pn({config:e,rpcClient:t,lifecycleManager:n,configPromise:r,contextSent:i}){await n.isConnected,Sn(t,n.isConnected);let a=new URL(window.location.href),o=a.searchParams.get(`fmt`)??void 0;o&&(a.searchParams.delete(`fmt`),window.history.replaceState({},``,a.toString()));let s=t=>{let n=t?.merchantId??e.metadata.merchantId??``,r=t?.domain??``,i=t?.allowedDomains??[],a=t?.sdkConfig;W.setConfig(a?{isResolved:!0,merchantId:n,domain:r,allowedDomains:i,hasRawSdkConfig:!0,name:a.name??e.metadata.name,logoUrl:a.logoUrl??e.metadata.logoUrl,homepageLink:a.homepageLink??e.metadata.homepageLink,lang:a.lang??e.metadata.lang,currency:a.currency??e.metadata.currency,hidden:a.hidden,css:a.css,translations:a.translations,placements:a.placements,components:a.components}:{isResolved:!0,merchantId:n,domain:r,allowedDomains:i,name:e.metadata.name,logoUrl:e.metadata.logoUrl,homepageLink:e.metadata.homepageLink,lang:e.metadata.lang,currency:e.metadata.currency})},c=!1,l=e=>{let n=c?void 0:o;c=!0;let r=e.hasRawSdkConfig?{name:e.name,logoUrl:e.logoUrl,homepageLink:e.homepageLink,lang:e.lang,currency:e.currency,hidden:e.hidden,css:e.css,translations:e.translations,placements:e.placements}:void 0;t.sendLifecycle({clientLifecycle:`resolved-config`,data:{merchantId:e.merchantId,domain:e.domain??``,allowedDomains:e.allowedDomains??[],sourceUrl:window.location.href,...n&&{pendingMergeToken:n},...r&&{sdkConfig:r}}})};W.isResolved&&(l(W.getConfig()),i.resolve()),r&&(s(await r),l(W.getConfig()),i.resolve());async function u(){let n=e.customizations?.css;n&&t.sendLifecycle({clientLifecycle:`modal-css`,data:{cssLink:n}})}async function d(){let n=e.customizations?.i18n;n&&t.sendLifecycle({clientLifecycle:`modal-i18n`,data:{i18n:n}})}async function f(){if(typeof window>`u`)return;let e=window.localStorage.getItem(q);e&&t.sendLifecycle({clientLifecycle:`restore-backup`,data:{backup:e}})}await Promise.allSettled([u(),d(),f()])}async function Fn({config:e}){let t=In(e),n=await mn({config:t});if(!n){console.error(`Failed to create iframe`);return}let r=Mn({config:t,iframe:n});if(await r.waitForSetup,!await r.waitForConnection){console.error(`Failed to connect to client`);return}return r}function In(e){let t=Y(e.metadata?.currency);return{...e,metadata:{...e.metadata,currency:t}}}var Ln=t({DEEP_LINK_SCHEME:()=>on,DebugInfoGatherer:()=>Cn,FrakContextManager:()=>Nt,base64urlDecode:()=>dt,base64urlEncode:()=>ut,baseIframeProps:()=>X,clearAllCache:()=>wt,compressJsonToB64:()=>ft,computeLegacyProductId:()=>lt,createIFrameFrakClient:()=>Mn,createIframe:()=>mn,decompressJsonFromB64:()=>Tt,findIframeInOpener:()=>gn,formatAmount:()=>fn,generateSsoUrl:()=>pt,getBackendUrl:()=>j,getCache:()=>Ct,getClientId:()=>A,getCurrencyAmountKey:()=>pn,getSupportedCurrency:()=>Y,getSupportedLocale:()=>dn,isChromiumAndroid:()=>sn,isFrakDeepLink:()=>un,isIOS:()=>vn,isInAppBrowser:()=>bn,isV1Context:()=>I,isV2Context:()=>L,locales:()=>J,redirectToExternalBrowser:()=>xn,sdkConfigStore:()=>W,setupClient:()=>Fn,ssoPopupFeatures:()=>ht,ssoPopupName:()=>gt,toAndroidIntentUrl:()=>cn,trackEvent:()=>G,triggerDeepLinkWithFallback:()=>ln,withCache:()=>F});function Rn(){return rt(96)}async function zn(e,t,n){return await e.request({method:`frak_displayEmbeddedWallet`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Z(e,{steps:t,metadata:n},r){return await e.request({method:`frak_displayModal`,params:r?[t,n,e.config.metadata,r]:[t,n,e.config.metadata]})}async function Bn(e,t,n){return await e.request({method:`frak_displaySharingPage`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Vn(e){if(typeof window>`u`)return;let t=A();if(!t)return;let n=await W.resolveMerchantId();if(!n)return;let r=`frak-identity-ensured-${n}`;if(!window.sessionStorage.getItem(r))try{let i=j();(await fetch(`${i}/user/identity/ensure`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`,"x-wallet-sdk-auth":e,"x-frak-client-id":t},body:JSON.stringify({merchantId:n})})).ok&&window.sessionStorage.setItem(r,`1`)}catch{}}async function Hn(e,t){return F(()=>e.request({method:`frak_getMerchantInformation`}),{cacheKey:`frak_getMerchantInformation`,cacheTime:t?.cacheTime})}async function Un(e,t){return F(()=>e.request({method:`frak_getMergeToken`}),{cacheKey:`frak_getMergeToken`,cacheTime:t?.cacheTime})}async function Wn(e,t){return F(()=>e.request({method:`frak_getUserReferralStatus`}),{cacheKey:`frak_getUserReferralStatus`,cacheTime:t?.cacheTime})}async function Gn(e,t){let{metadata:n,customizations:r}=e.config;return await e.request({method:`frak_prepareSso`,params:[t,n.name,r?.css]})}async function Kn(e,t){try{await e.request({method:`frak_sendInteraction`,params:[t,{clientId:A()}]})}catch{console.warn(`[Frak SDK] Failed to send interaction:`,t.type)}}function qn(e,t,n){let r=typeof window<`u`?window.location.href:void 0;return L(t)?(G(e,`user_referred_started`,{properties:{referrerClientId:t.c,walletStatus:n?.key}}),Kn(e,{type:`arrival`,referrerClientId:t.c,referrerMerchantId:t.m,referralTimestamp:t.t,landingUrl:r}),!0):I(t)?(G(e,`user_referred_started`,{properties:{referrer:t.r,walletStatus:n?.key}}),Kn(e,{type:`arrival`,referrerWallet:t.r,landingUrl:r}),!0):!1}function Jn(e){let t=A();return t?{v:2,c:t,m:e,t:Math.floor(Date.now()/1e3)}:null}function Yn(e,t){return L(e)?A()===e.c:I(e)&&t?.wallet?nt(e.r,t.wallet):!1}function Xn(e,{walletStatus:t,frakContext:n,options:r}){if(!n)return`no-referrer`;if(Yn(n,t))return`self-referral`;if(!qn(e,n,t))return`no-referrer`;let i=L(n)?n.m:r?.merchantId,a=r?.alwaysAppendUrl&&i?Jn(i):null;return Nt.replaceUrl({url:window.location?.href,context:a}),G(e,`user_referred_completed`,{properties:{status:`success`}}),`success`}async function Zn(e,{options:t}={}){let n=Nt.parse({url:window.location.href}),r=await er(e);try{return Xn(e,{walletStatus:r,frakContext:n,options:t})}catch(e){console.warn(`Error processing referral`,{error:e})}}const Q=`frak:referral-success`;async function Qn(e){try{await Zn(e)===`success`&&window.dispatchEvent(new Event(Q))}catch(e){console.warn(`[Frak] Referral setup failed`,e)}}async function $n(e){if(typeof window>`u`){console.warn(`[Frak] No window found, can't track purchase`);return}let t=window.sessionStorage.getItem(`frak-wallet-interaction-token`),n=A();if(!t&&!n){console.warn(`[Frak] No identity found, skipping purchase check`);return}let r=e.merchantId??await W.resolveMerchantId();if(!r){console.warn(`[Frak] No merchant id found, skipping purchase check`);return}let i={Accept:`application/json`,"Content-Type":`application/json`};t&&(i[`x-wallet-sdk-auth`]=t),n&&(i[`x-frak-client-id`]=n);let a=j();await fetch(`${a}/user/track/purchase`,{method:`POST`,headers:i,body:JSON.stringify({customerId:e.customerId,orderId:e.orderId,token:e.token,merchantId:r})})}function er(e,t){if(!t)return e.request({method:`frak_listenToWalletStatus`}).then(t=>(tr(e,t),t));let n=new k,r=!1;return e.listenerRequest({method:`frak_listenToWalletStatus`},i=>{tr(e,i),t(i),r||=(n.resolve(i),!0)}),n.promise}function tr(e,t){typeof window>`u`||(e.openPanel?.setGlobalProperties({wallet:t.wallet??null}),t.interactionToken?(window.sessionStorage.setItem(`frak-wallet-interaction-token`,t.interactionToken),Vn(t.interactionToken)):window.sessionStorage.removeItem(`frak-wallet-interaction-token`))}function nr(e,{metadata:t,login:n}){return $(e,{steps:{login:n??{}},metadata:t})}function $(e,t){function n(n){return $(e,{...t,steps:{...t.steps,sendTransaction:n}})}function r(n){return $(e,{...t,steps:{...t.steps,final:{...n,action:{key:`reward`}}}})}function i(n,r){return $(e,{...t,steps:{...t.steps,final:{...r,action:{key:`sharing`,options:n}}}})}async function a(n,r){return n&&(t.metadata=n(t.metadata??{})),await Z(e,t,r)}return{params:t,sendTx:n,reward:r,sharing:i,display:a}}async function rr(e,{tx:t,metadata:n}){return(await Z(e,{metadata:n,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}async function ir(e,{siwe:t,metadata:n}){let r=e.config?.domain??window.location.host,i=t?.statement??`I confirm that I want to use my Frak wallet on: ${e.config.metadata.name}`;return(await Z(e,{metadata:n,steps:{login:{},siweAuthenticate:{siwe:{...t,statement:i,nonce:t?.nonce??Rn(),uri:t?.uri??`https://${r}`,version:t?.version??`1`,domain:r}}}})).siweAuthenticate}var ar=t({REFERRAL_SUCCESS_EVENT:()=>Q,displayEmbeddedWallet:()=>zn,displayModal:()=>Z,displaySharingPage:()=>Bn,ensureIdentity:()=>Vn,getMerchantInformation:()=>Hn,getMergeToken:()=>Un,getUserReferralStatus:()=>Wn,modalBuilder:()=>nr,openSso:()=>_t,prepareSso:()=>Gn,processReferral:()=>Xn,referralInteraction:()=>Zn,sendInteraction:()=>Kn,sendTransaction:()=>rr,setupReferral:()=>Qn,siweAuthenticate:()=>ir,trackPurchaseStatus:()=>$n,watchWalletStatus:()=>er});async function or(e,t){if(!window.FrakSetup?.client){console.error(`Frak client not found`);return}let n=window.FrakSetup?.modalWalletConfig??{};await zn(window.FrakSetup.client,e?{...n,metadata:{...n.metadata,targetInteraction:e}}:n,t)}function sr(){`vibrate`in navigator?navigator.vibrate(10):console.log(`Vibration not supported`)}function cr(e,t){sr(),or(e,t)}const lr=`frak:client`;function ur(){let e=new CustomEvent(lr);window.dispatchEvent(e)}function dr(e,t){if(window.FrakSetup?.client&&e===`add`){t();return}(e===`add`?window.addEventListener:window.removeEventListener)(lr,t,!1)}function fr(){return window.FrakSetup.core={...Ln,...ar},window.FrakSetup?.client?Promise.resolve():F(()=>pr(),{cacheKey:`frak-sdk-init`,cacheTime:1/0}).catch(()=>{})}async function pr(){if(!window.FrakSetup?.config)throw Error(`[Frak SDK] Configuration not found. Please ensure window.FrakSetup.config is set.`);console.log(`[Frak SDK] Starting initialization`);let e=await Fn({config:window.FrakSetup.config});if(!e)throw Error(`[Frak SDK] Failed to create client`);window.FrakSetup.client=e,console.log(`[Frak SDK] Client initialized successfully`),ur(),Qn(e),mr()}function mr(){let e=new URLSearchParams(window.location.search).get(`frakAction`);e&&e===`share`&&(console.log(`[Frak SDK] Auto open query param found`),cr())}function hr(e){document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,1):document.addEventListener(`DOMContentLoaded`,e)}function gr(e,t){let n=document.getElementById(e);if(n){n.textContent!==t&&(n.textContent=t);return}let r=document.createElement(`style`);r.id=e,r.textContent=t,document.head.appendChild(r)}function _r(e,t){gr(`frak-base-${e}`,t)}function vr(e,t,n){gr(`frak-placement-${e}-${t}`,n)}const yr={injectBase:_r,injectPlacement:vr};yr.injectBase(`fouce`,`frak-button-share:not(:defined), frak-button-wallet:not(:defined), frak-open-in-app:not(:defined), frak-post-purchase:not(:defined), frak-banner:not(:defined) { display: none !important; }`),hr(fr);const br={"button-share":()=>import(`./ButtonShare.BDS1fgma.js`),"button-wallet":()=>import(`./ButtonWallet.Be1UyRm8.js`),"open-in-app":()=>import(`./OpenInAppButton.Diqt07eo.js`),"post-purchase":()=>import(`./PostPurchase.DqFhm-Jn.js`),banner:()=>import(`./Banner.Ws9o79lU.js`)},xr=new MutationObserver(e=>{for(let{addedNodes:t}of e)for(let e of Array.from(t))e.nodeType===Node.ELEMENT_NODE&&Sr(e)});async function Sr(e){let t=e instanceof Element?e.tagName.toLowerCase():``,n=t?.startsWith(`frak-`),r=Array.from(e.querySelectorAll(`:not(:defined)`)).map(e=>e.tagName.toLowerCase()).filter(e=>e.startsWith(`frak-`));n&&!customElements.get(t)&&r.push(t);let i=[...new Set(r)];await Promise.allSettled(i.map(e=>Cr(e)))}async function Cr(e){if(customElements.get(e))return Promise.resolve();try{let t=e.replace(/^frak-/i,``);if(!(t in br))throw Error(`Component ${e} is not supported.`);await br[t]()}catch(e){console.error(e)}}Sr(document.body),xr.observe(document.documentElement,{subtree:!0,childList:!0});export{G as C,W as S,O as T,ln as _,cr as a,on as b,$n as c,Un as d,Hn as f,fn as g,bn as h,dr as i,Q as l,xn as m,hr as n,or as o,Bn as p,fr as r,nr as s,yr as t,Wn as u,Y as v,D as w,pn as x,Cn as y};
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "url": "https://twitter.com/QNivelais"
12
12
  }
13
13
  ],
14
- "version": "0.0.26-beta.eb3cff34",
14
+ "version": "1.0.0-beta.bd7d4823",
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",
@@ -86,8 +86,8 @@
86
86
  "publish": "echo 'Publishing components...'"
87
87
  },
88
88
  "dependencies": {
89
- "@frak-labs/core-sdk": "0.2.1-beta.eb3cff34",
90
- "@frak-labs/frame-connector": "0.2.0-beta.eb3cff34",
89
+ "@frak-labs/core-sdk": "1.0.0-beta.bd7d4823",
90
+ "@frak-labs/frame-connector": "0.2.0-beta.bd7d4823",
91
91
  "preact": "^10.29.0",
92
92
  "preact-custom-element": "^4.6.0",
93
93
  "@frak-labs/design-system": "0.0.0"