@frak-labs/components 1.0.1-beta.307e0617 → 1.0.1-beta.7d1477b6
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 +1 -1
- package/cdn/loader.js +1 -1
- package/package.json +3 -3
package/cdn/components.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import(`https://cdn.jsdelivr.net/npm/@frak-labs/components@beta/cdn/loader.js?v=
|
|
1
|
+
import(`https://cdn.jsdelivr.net/npm/@frak-labs/components@beta/cdn/loader.js?v=1777305267475`);
|
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 Pn=(()=>{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 Fn(e){e?localStorage.setItem(J,e):localStorage.removeItem(J)}function In(e,t){try{let n=new URL(e);if(!n.searchParams.has(`u`))return e;let r=zn(window.location.href,t);return n.searchParams.delete(`u`),n.searchParams.append(`u`,r),n.toString()}catch{return e}}function Ln(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 Rn(e){return e.includes(`/common/social`)}function zn(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 Bn(e,t,n,r,i){if(i){let e=In(t,r);window.open(e,`_blank`);return}if(vn(t)){let i=In(t,r);_n(i,{onFallback:()=>{e.contentWindow?.postMessage({clientLifecycle:`deep-link-failed`,data:{originalUrl:i}},n)}})}else if(Pn&&Rn(t))Ln(r);else{let e=In(t,r);window.location.href=e}}function Vn({iframe:e,targetOrigin:t}){let n=new O;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`:Fn(a.backup);break;case`remove-backup`:localStorage.removeItem(J);break;case`show`:case`hide`:Cn({iframe:e,isVisible:i===`show`});break;case`redirect`:Bn(e,a.baseRedirectUrl,t,a.mergeToken,a.openInNewTab);break}},isConnected:n.promise}}function Hn({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:``);K.setCacheScope(a,i),K.reset();let o=K.isCacheFresh?void 0:K.resolve(e.domain,e.walletUrl,i),s=Vn({iframe:t,targetOrigin:n}),c=new O,l=Date.now(),u=new Nn(e,t);if(!t.contentWindow)throw new D(it.configError,`The iframe does not have a content window`);let d=at({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:n,middleware:[{async onRequest(e,t){if(!await s.isConnected)throw new D(it.clientNotConnected,`The iframe provider isn't connected yet`);return await c.promise,t}},{onRequest(e,t){return u.setLastRequest(e),t},onResponse(e,t){return u.setLastResponse(e,t),t}}],lifecycleHandlers:{iframeLifecycle:(e,t)=>{s.handleEvent(e)}}}),f=Un(d,s),p=async()=>{f(),d.cleanup(),t.remove(),Ct(),K.clearCache(),K.reset()},m;{console.log(`[Frak SDK] Initializing OpenPanel`),m=new fn({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.1`,userAnonymousClientId:k()}),!0)}),m.setGlobalProperties({sdkVersion:`1.0.1`,userAnonymousClientId:k()}),m.init(),m.track(`sdk_initialized`,{sdkVersion:`1.0.1`});let e=!1,t=setTimeout(()=>{e||(e=!0,m?.track(`sdk_iframe_handshake_failed`,{reason:`timeout`}))},3e4);s.isConnected.then(()=>{e||(e=!0,clearTimeout(t),m?.track(`sdk_iframe_connected`,{handshake_duration_ms:Date.now()-l}))}).catch(()=>{e||(e=!0,clearTimeout(t),m?.track(`sdk_iframe_handshake_failed`,{reason:`unknown`}))})}let h=Wn({config:e,rpcClient:d,lifecycleManager:s,configPromise:o,contextSent:c,openPanel:m}).then(()=>u.updateSetupStatus(!0)).catch(e=>{throw c.reject(e),e});return{config:e,debugInfo:u,waitForConnection:s.isConnected,waitForSetup:h,request:d.request,listenerRequest:d.listen,destroy:p,openPanel:m}}function Un(e,t){let n,r,i=()=>e.sendLifecycle({clientLifecycle:`heartbeat`});async function a(){i(),n=setInterval(i,250),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 Wn({config:e,rpcClient:t,lifecycleManager:n,configPromise:r,contextSent:i,openPanel:a}){await n.isConnected,Mn(t,n.isConnected);let o=new URL(window.location.href),s=o.searchParams.get(`fmt`)??void 0;s&&(o.searchParams.delete(`fmt`),window.history.replaceState({},``,o.toString()));let c=t=>{let n=t?.merchantId??e.metadata.merchantId??``,r=t?.domain??``,i=t?.allowedDomains??[],a=t?.sdkConfig,o=a?.attribution||e.attribution?{...e.attribution,...a?.attribution}:void 0;K.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,attribution:o}:{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,attribution:o})},l=!1,u=e=>{let n=l?void 0:s;l=!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,attribution:e.attribution}:e.attribution?{attribution:e.attribution}:void 0,i=k();if(a){let t=a.global??{};a.setGlobalProperties({...t,merchantId:e.merchantId,domain:e.domain??``})}t.sendLifecycle({clientLifecycle:`resolved-config`,data:{merchantId:e.merchantId,domain:e.domain??``,allowedDomains:e.allowedDomains??[],sourceUrl:window.location.href,...i&&{sdkAnonymousId:i},...n&&{pendingMergeToken:n},...r&&{sdkConfig:r}}})};K.isResolved&&(u(K.getConfig()),i.resolve()),r&&(c(await r),u(K.getConfig()),i.resolve());async function d(){let n=e.customizations?.css;n&&t.sendLifecycle({clientLifecycle:`modal-css`,data:{cssLink:n}})}async function f(){let n=e.customizations?.i18n;n&&t.sendLifecycle({clientLifecycle:`modal-i18n`,data:{i18n:n}})}async function p(){if(typeof window>`u`)return;let e=window.localStorage.getItem(J);e&&t.sendLifecycle({clientLifecycle:`restore-backup`,data:{backup:e}})}(await Promise.allSettled([d(),f(),p()])).some(e=>e.status===`rejected`)&&a?.track(`sdk_iframe_handshake_failed`,{reason:`asset_push`})}async function Gn({config:e}){let t=Kn(e),n=await Sn({config:t});if(!n){console.error(`Failed to create iframe`);return}let r=Hn({config:t,iframe:n});if(await r.waitForSetup,!await r.waitForConnection){console.error(`Failed to connect to client`);return}return r}function Kn(e){let t=X(e.metadata?.currency);return{...e,metadata:{...e.metadata,currency:t}}}var qn=t({DEEP_LINK_SCHEME:()=>mn,DebugInfoGatherer:()=>Nn,FrakContextManager:()=>Bt,base64urlDecode:()=>j,base64urlEncode:()=>A,baseIframeProps:()=>Z,clearAllCache:()=>Ct,compressJsonToB64:()=>dt,computeLegacyProductId:()=>ut,createIFrameFrakClient:()=>Hn,createIframe:()=>Sn,decompressJsonFromB64:()=>pn,findIframeInOpener:()=>wn,formatAmount:()=>bn,generateSsoUrl:()=>ft,getBackendUrl:()=>N,getCache:()=>St,getClientId:()=>k,getCurrencyAmountKey:()=>xn,getSupportedCurrency:()=>X,getSupportedLocale:()=>yn,isChromiumAndroid:()=>hn,isFrakDeepLink:()=>vn,isIOS:()=>Dn,isInAppBrowser:()=>kn,isV1Context:()=>wt,isV2Context:()=>R,locales:()=>Y,mergeAttribution:()=>jn,redirectToExternalBrowser:()=>An,sdkConfigStore:()=>K,setupClient:()=>Gn,ssoPopupFeatures:()=>mt,ssoPopupName:()=>ht,toAndroidIntentUrl:()=>gn,trackEvent:()=>M,triggerDeepLinkWithFallback:()=>_n,withCache:()=>L});function Jn(){return rt(96)}async function Yn(e,t,n){return await e.request({method:`frak_displayEmbeddedWallet`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Q(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 Xn(e,t,n){return await e.request({method:`frak_displaySharingPage`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Zn(e){if(typeof window>`u`)return;let t=k();if(!t)return;let n=await K.resolveMerchantId();if(!n)return;let r=`frak-identity-ensured-${n}`;if(!window.sessionStorage.getItem(r))try{let i=N();(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 Qn(e,t){return L(()=>e.request({method:`frak_getMerchantInformation`}),{cacheKey:`frak_getMerchantInformation`,cacheTime:t?.cacheTime})}async function $n(e,t){return L(()=>e.request({method:`frak_getMergeToken`}),{cacheKey:`frak_getMergeToken`,cacheTime:t?.cacheTime})}async function er(e,t){return L(()=>e.request({method:`frak_getUserReferralStatus`}),{cacheKey:`frak_getUserReferralStatus`,cacheTime:t?.cacheTime})}async function tr(e,t){let{metadata:n,customizations:r}=e.config;return await e.request({method:`frak_prepareSso`,params:[t,n.name,r?.css]})}async function nr(e,t){try{await e.request({method:`frak_sendInteraction`,params:[t,{clientId:k()}]})}catch{console.warn(`[Frak SDK] Failed to send interaction:`,t.type)}}function rr(e,t,n){let r=typeof window<`u`?window.location.href:void 0;return R(t)?(M(e,`user_referred_started`,{referrerClientId:t.c,referrerWallet:t.w,walletStatus:n?.key}),nr(e,{type:`arrival`,referrerClientId:t.c,referrerMerchantId:t.m,referrerWallet:t.w,referralTimestamp:t.t,landingUrl:r}),!0):wt(t)?(M(e,`user_referred_started`,{referrer:t.r,walletStatus:n?.key}),nr(e,{type:`arrival`,referrerWallet:t.r,landingUrl:r}),!0):!1}function ir(e,t){let n=k();return!n&&!t?null:{v:2,m:e,t:Math.floor(Date.now()/1e3),...n?{c:n}:{},...t?{w:t}:{}}}function ar(e,t){return R(e)?e.w&&t?.wallet?nt(e.w,t.wallet):e.c?k()===e.c:!1:wt(e)&&t?.wallet?nt(e.r,t.wallet):!1}function or(e,{walletStatus:t,frakContext:n,options:r}){if(!n)return`no-referrer`;if(ar(n,t))return`self-referral`;if(!rr(e,n,t))return`no-referrer`;let i=R(n)?n.m:r?.merchantId,a=r?.alwaysAppendUrl&&i?ir(i,t?.wallet):null;return Bt.replaceUrl({url:window.location?.href,context:a}),M(e,`user_referred_completed`,{status:`success`}),`success`}async function sr(e,{options:t}={}){let n=Bt.parse({url:window.location.href}),r=await dr(e);try{return or(e,{walletStatus:r,frakContext:n,options:t})}catch(e){console.warn(`Error processing referral`,{error:e})}}const cr=`frak:referral-success`;async function lr(e){try{await sr(e)===`success`&&window.dispatchEvent(new Event(cr))}catch(e){console.warn(`[Frak] Referral setup failed`,e)}}async function ur(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=k();if(!t&&!n){console.warn(`[Frak] No identity found, skipping purchase check`);return}let r=e.merchantId??await K.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=N();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 dr(e,t){if(!t)return e.request({method:`frak_listenToWalletStatus`}).then(t=>(fr(e,t),t));let n=new O,r=!1;return e.listenerRequest({method:`frak_listenToWalletStatus`},i=>{fr(e,i),t(i),r||=(n.resolve(i),!0)}),n.promise}function fr(e,t){typeof window>`u`||(e.openPanel?.setGlobalProperties({wallet:t.wallet??null}),t.interactionToken?(window.sessionStorage.setItem(`frak-wallet-interaction-token`,t.interactionToken),Zn(t.interactionToken)):window.sessionStorage.removeItem(`frak-wallet-interaction-token`))}function pr(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 Q(e,t,r)}return{params:t,sendTx:n,reward:r,sharing:i,display:a}}async function mr(e,{tx:t,metadata:n}){return(await Q(e,{metadata:n,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}async function hr(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 Q(e,{metadata:n,steps:{login:{},siweAuthenticate:{siwe:{...t,statement:i,nonce:t?.nonce??Jn(),uri:t?.uri??`https://${r}`,version:t?.version??`1`,domain:r}}}})).siweAuthenticate}var gr=t({REFERRAL_SUCCESS_EVENT:()=>cr,displayEmbeddedWallet:()=>Yn,displayModal:()=>Q,displaySharingPage:()=>Xn,ensureIdentity:()=>Zn,getMerchantInformation:()=>Qn,getMergeToken:()=>$n,getUserReferralStatus:()=>er,modalBuilder:()=>pr,openSso:()=>gt,prepareSso:()=>tr,processReferral:()=>or,referralInteraction:()=>sr,sendInteraction:()=>nr,sendTransaction:()=>mr,setupReferral:()=>lr,siweAuthenticate:()=>hr,trackPurchaseStatus:()=>ur,watchWalletStatus:()=>dr});async function _r(e,t){if(!window.FrakSetup?.client){console.error(`Frak client not found`);return}let n=window.FrakSetup?.modalWalletConfig??{};await Yn(window.FrakSetup.client,e?{...n,metadata:{...n.metadata,targetInteraction:e}}:n,t)}function vr(){`vibrate`in navigator?navigator.vibrate(10):console.log(`Vibration not supported`)}function yr(e,t){vr(),_r(e,t)}const br=`frak:client`;function xr(){let e=new CustomEvent(br);window.dispatchEvent(e)}function Sr(e,t){if(window.FrakSetup?.client&&e===`add`){t();return}(e===`add`?window.addEventListener:window.removeEventListener)(br,t,!1)}function Cr(){return window.FrakSetup.core={...qn,...gr},window.FrakSetup?.client?Promise.resolve():L(()=>wr(),{cacheKey:`frak-sdk-init`,cacheTime:1/0}).catch(e=>{M(window.FrakSetup?.client,`sdk_init_failed`,{reason:e instanceof Error?e.message:typeof e==`string`?e:`unknown`,config_missing:!window.FrakSetup?.config})})}async function wr(){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 Gn({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`),xr(),lr(e),Tr()}function Tr(){let e=new URLSearchParams(window.location.search).get(`frakAction`);e&&e===`share`&&(console.log(`[Frak SDK] Auto open query param found`),yr())}function Er(e){document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,1):document.addEventListener(`DOMContentLoaded`,e)}function Dr(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 Or(e,t){Dr(`frak-base-${e}`,t)}function kr(e,t,n){Dr(`frak-placement-${e}-${t}`,n)}const Ar={injectBase:Or,injectPlacement:kr};Ar.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; }`),Er(Cr);const jr={"button-share":()=>import(`./ButtonShare.CMAEVXOn.js`),"button-wallet":()=>import(`./ButtonWallet.Cwz9qFhE.js`),"open-in-app":()=>import(`./OpenInAppButton.Hq9EjwJE.js`),"post-purchase":()=>import(`./PostPurchase.CUYvAQqH.js`),banner:()=>import(`./Banner.1iUbfe7Z.js`)},Mr=new MutationObserver(e=>{for(let{addedNodes:t}of e)for(let e of Array.from(t))e.nodeType===Node.ELEMENT_NODE&&Nr(e)});async function Nr(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=>Pr(e)))}async function Pr(e){if(customElements.get(e))return Promise.resolve();try{let t=e.replace(/^frak-/i,``);if(!(t in jr))throw Error(`Component ${e} is not supported.`);await jr[t]()}catch(e){console.error(e)}}Nr(document.body),Mr.observe(document.documentElement,{subtree:!0,childList:!0});export{M as C,K as S,D as T,_n as _,yr as a,bn as b,ur as c,$n as d,Qn as f,xn as g,An as h,Sr as i,cr as l,Nn as m,Er as n,_r as o,Xn as p,Cr as r,pr as s,Ar as t,er as u,kn as v,it as w,X as x,mn as y};
|
|
14
|
+
`.trim()}};const Pn=(()=>{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 Fn(e){e?localStorage.setItem(J,e):localStorage.removeItem(J)}function In(e,t){try{let n=new URL(e);if(!n.searchParams.has(`u`))return e;let r=zn(window.location.href,t);return n.searchParams.delete(`u`),n.searchParams.append(`u`,r),n.toString()}catch{return e}}function Ln(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 Rn(e){return e.includes(`/common/social`)}function zn(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 Bn(e,t,n,r,i){if(i){let e=In(t,r);window.open(e,`_blank`);return}if(vn(t)){let i=In(t,r);_n(i,{onFallback:()=>{e.contentWindow?.postMessage({clientLifecycle:`deep-link-failed`,data:{originalUrl:i}},n)}})}else if(Pn&&Rn(t))Ln(r);else{let e=In(t,r);window.location.href=e}}function Vn({iframe:e,targetOrigin:t}){let n=new O;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`:Fn(a.backup);break;case`remove-backup`:localStorage.removeItem(J);break;case`show`:case`hide`:Cn({iframe:e,isVisible:i===`show`});break;case`redirect`:Bn(e,a.baseRedirectUrl,t,a.mergeToken,a.openInNewTab);break}},isConnected:n.promise}}function Hn({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:``);K.setCacheScope(a,i),K.reset();let o=K.isCacheFresh?void 0:K.resolve(e.domain,e.walletUrl,i),s=Vn({iframe:t,targetOrigin:n}),c=new O,l=Date.now(),u=new Nn(e,t);if(!t.contentWindow)throw new D(it.configError,`The iframe does not have a content window`);let d=at({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:n,middleware:[{async onRequest(e,t){if(!await s.isConnected)throw new D(it.clientNotConnected,`The iframe provider isn't connected yet`);return await c.promise,t}},{onRequest(e,t){return u.setLastRequest(e),t},onResponse(e,t){return u.setLastResponse(e,t),t}}],lifecycleHandlers:{iframeLifecycle:(e,t)=>{s.handleEvent(e)}}}),f=Un(d,s),p=async()=>{f(),d.cleanup(),t.remove(),Ct(),K.clearCache(),K.reset()},m;{console.log(`[Frak SDK] Initializing OpenPanel`),m=new fn({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.1`,userAnonymousClientId:k()}),!0)}),m.setGlobalProperties({sdkVersion:`1.0.1`,userAnonymousClientId:k()}),m.init(),m.track(`sdk_initialized`,{sdkVersion:`1.0.1`});let e=!1,t=setTimeout(()=>{e||(e=!0,m?.track(`sdk_iframe_handshake_failed`,{reason:`timeout`}))},3e4);s.isConnected.then(()=>{e||(e=!0,clearTimeout(t),m?.track(`sdk_iframe_connected`,{handshake_duration_ms:Date.now()-l}))}).catch(()=>{e||(e=!0,clearTimeout(t),m?.track(`sdk_iframe_handshake_failed`,{reason:`unknown`}))})}let h=Wn({config:e,rpcClient:d,lifecycleManager:s,configPromise:o,contextSent:c,openPanel:m}).then(()=>u.updateSetupStatus(!0)).catch(e=>{throw c.reject(e),e});return{config:e,debugInfo:u,waitForConnection:s.isConnected,waitForSetup:h,request:d.request,listenerRequest:d.listen,destroy:p,openPanel:m}}function Un(e,t){let n,r,i=()=>e.sendLifecycle({clientLifecycle:`heartbeat`});async function a(){i(),n=setInterval(i,250),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 Wn({config:e,rpcClient:t,lifecycleManager:n,configPromise:r,contextSent:i,openPanel:a}){await n.isConnected,Mn(t,n.isConnected);let o=new URL(window.location.href),s=o.searchParams.get(`fmt`)??void 0;s&&(o.searchParams.delete(`fmt`),window.history.replaceState({},``,o.toString()));let c=t=>{let n=t?.merchantId??e.metadata.merchantId??``,r=t?.domain??``,i=t?.allowedDomains??[],a=t?.sdkConfig,o=a?.attribution||e.attribution?{...e.attribution,...a?.attribution}:void 0;K.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,attribution:o}:{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,attribution:o})},l=!1,u=e=>{let n=l?void 0:s;l=!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,attribution:e.attribution}:e.attribution?{attribution:e.attribution}:void 0,i=k();if(a){let t=a.global??{};a.setGlobalProperties({...t,merchantId:e.merchantId,domain:e.domain??``})}t.sendLifecycle({clientLifecycle:`resolved-config`,data:{merchantId:e.merchantId,domain:e.domain??``,allowedDomains:e.allowedDomains??[],sourceUrl:window.location.href,...i&&{sdkAnonymousId:i},...n&&{pendingMergeToken:n},...r&&{sdkConfig:r}}})};K.isResolved&&(u(K.getConfig()),i.resolve()),r&&(c(await r),u(K.getConfig()),i.resolve());async function d(){let n=e.customizations?.css;n&&t.sendLifecycle({clientLifecycle:`modal-css`,data:{cssLink:n}})}async function f(){let n=e.customizations?.i18n;n&&t.sendLifecycle({clientLifecycle:`modal-i18n`,data:{i18n:n}})}async function p(){if(typeof window>`u`)return;let e=window.localStorage.getItem(J);e&&t.sendLifecycle({clientLifecycle:`restore-backup`,data:{backup:e}})}(await Promise.allSettled([d(),f(),p()])).some(e=>e.status===`rejected`)&&a?.track(`sdk_iframe_handshake_failed`,{reason:`asset_push`})}async function Gn({config:e}){let t=Kn(e),n=await Sn({config:t});if(!n){console.error(`Failed to create iframe`);return}let r=Hn({config:t,iframe:n});if(await r.waitForSetup,!await r.waitForConnection){console.error(`Failed to connect to client`);return}return r}function Kn(e){let t=X(e.metadata?.currency);return{...e,metadata:{...e.metadata,currency:t}}}var qn=t({DEEP_LINK_SCHEME:()=>mn,DebugInfoGatherer:()=>Nn,FrakContextManager:()=>Bt,base64urlDecode:()=>j,base64urlEncode:()=>A,baseIframeProps:()=>Z,clearAllCache:()=>Ct,compressJsonToB64:()=>dt,computeLegacyProductId:()=>ut,createIFrameFrakClient:()=>Hn,createIframe:()=>Sn,decompressJsonFromB64:()=>pn,findIframeInOpener:()=>wn,formatAmount:()=>bn,generateSsoUrl:()=>ft,getBackendUrl:()=>N,getCache:()=>St,getClientId:()=>k,getCurrencyAmountKey:()=>xn,getSupportedCurrency:()=>X,getSupportedLocale:()=>yn,isChromiumAndroid:()=>hn,isFrakDeepLink:()=>vn,isIOS:()=>Dn,isInAppBrowser:()=>kn,isV1Context:()=>wt,isV2Context:()=>R,locales:()=>Y,mergeAttribution:()=>jn,redirectToExternalBrowser:()=>An,sdkConfigStore:()=>K,setupClient:()=>Gn,ssoPopupFeatures:()=>mt,ssoPopupName:()=>ht,toAndroidIntentUrl:()=>gn,trackEvent:()=>M,triggerDeepLinkWithFallback:()=>_n,withCache:()=>L});function Jn(){return rt(96)}async function Yn(e,t,n){return await e.request({method:`frak_displayEmbeddedWallet`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Q(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 Xn(e,t,n){return await e.request({method:`frak_displaySharingPage`,params:n?[t,e.config.metadata,n]:[t,e.config.metadata]})}async function Zn(e){if(typeof window>`u`)return;let t=k();if(!t)return;let n=await K.resolveMerchantId();if(!n)return;let r=`frak-identity-ensured-${n}`;if(!window.sessionStorage.getItem(r))try{let i=N();(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 Qn(e,t){return L(()=>e.request({method:`frak_getMerchantInformation`}),{cacheKey:`frak_getMerchantInformation`,cacheTime:t?.cacheTime})}async function $n(e,t){return L(()=>e.request({method:`frak_getMergeToken`}),{cacheKey:`frak_getMergeToken`,cacheTime:t?.cacheTime})}async function er(e,t){return L(()=>e.request({method:`frak_getUserReferralStatus`}),{cacheKey:`frak_getUserReferralStatus`,cacheTime:t?.cacheTime})}async function tr(e,t){let{metadata:n,customizations:r}=e.config;return await e.request({method:`frak_prepareSso`,params:[t,n.name,r?.css]})}async function nr(e,t){try{await e.request({method:`frak_sendInteraction`,params:[t,{clientId:k()}]})}catch{console.warn(`[Frak SDK] Failed to send interaction:`,t.type)}}function rr(e,t,n){return R(t)?(M(e,`user_referred_started`,{referrerClientId:t.c,referrerWallet:t.w,walletStatus:n?.key}),nr(e,{type:`arrival`,referrerClientId:t.c,referrerMerchantId:t.m,referrerWallet:t.w,referralTimestamp:t.t}),!0):wt(t)?(M(e,`user_referred_started`,{referrer:t.r,walletStatus:n?.key}),nr(e,{type:`arrival`,referrerWallet:t.r}),!0):!1}function ir(e,t){let n=k();return!n&&!t?null:{v:2,m:e,t:Math.floor(Date.now()/1e3),...n?{c:n}:{},...t?{w:t}:{}}}function ar(e,t){return R(e)?e.w&&t?.wallet?nt(e.w,t.wallet):e.c?k()===e.c:!1:wt(e)&&t?.wallet?nt(e.r,t.wallet):!1}function or(e,{walletStatus:t,frakContext:n,options:r}){if(!n)return`no-referrer`;if(ar(n,t))return`self-referral`;if(!rr(e,n,t))return`no-referrer`;let i=R(n)?n.m:r?.merchantId,a=r?.alwaysAppendUrl&&i?ir(i,t?.wallet):null;return Bt.replaceUrl({url:window.location?.href,context:a}),M(e,`user_referred_completed`,{status:`success`}),`success`}async function sr(e,{options:t}={}){let n=Bt.parse({url:window.location.href}),r=await dr(e);try{return or(e,{walletStatus:r,frakContext:n,options:t})}catch(e){console.warn(`Error processing referral`,{error:e})}}const cr=`frak:referral-success`;async function lr(e){try{await sr(e)===`success`&&window.dispatchEvent(new Event(cr))}catch(e){console.warn(`[Frak] Referral setup failed`,e)}}async function ur(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=k();if(!t&&!n){console.warn(`[Frak] No identity found, skipping purchase check`);return}let r=e.merchantId??await K.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=N();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 dr(e,t){if(!t)return e.request({method:`frak_listenToWalletStatus`}).then(t=>(fr(e,t),t));let n=new O,r=!1;return e.listenerRequest({method:`frak_listenToWalletStatus`},i=>{fr(e,i),t(i),r||=(n.resolve(i),!0)}),n.promise}function fr(e,t){typeof window>`u`||(e.openPanel?.setGlobalProperties({wallet:t.wallet??null}),t.interactionToken?(window.sessionStorage.setItem(`frak-wallet-interaction-token`,t.interactionToken),Zn(t.interactionToken)):window.sessionStorage.removeItem(`frak-wallet-interaction-token`))}function pr(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 Q(e,t,r)}return{params:t,sendTx:n,reward:r,sharing:i,display:a}}async function mr(e,{tx:t,metadata:n}){return(await Q(e,{metadata:n,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}async function hr(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 Q(e,{metadata:n,steps:{login:{},siweAuthenticate:{siwe:{...t,statement:i,nonce:t?.nonce??Jn(),uri:t?.uri??`https://${r}`,version:t?.version??`1`,domain:r}}}})).siweAuthenticate}var gr=t({REFERRAL_SUCCESS_EVENT:()=>cr,displayEmbeddedWallet:()=>Yn,displayModal:()=>Q,displaySharingPage:()=>Xn,ensureIdentity:()=>Zn,getMerchantInformation:()=>Qn,getMergeToken:()=>$n,getUserReferralStatus:()=>er,modalBuilder:()=>pr,openSso:()=>gt,prepareSso:()=>tr,processReferral:()=>or,referralInteraction:()=>sr,sendInteraction:()=>nr,sendTransaction:()=>mr,setupReferral:()=>lr,siweAuthenticate:()=>hr,trackPurchaseStatus:()=>ur,watchWalletStatus:()=>dr});async function _r(e,t){if(!window.FrakSetup?.client){console.error(`Frak client not found`);return}let n=window.FrakSetup?.modalWalletConfig??{};await Yn(window.FrakSetup.client,e?{...n,metadata:{...n.metadata,targetInteraction:e}}:n,t)}function vr(){`vibrate`in navigator?navigator.vibrate(10):console.log(`Vibration not supported`)}function yr(e,t){vr(),_r(e,t)}const br=`frak:client`;function xr(){let e=new CustomEvent(br);window.dispatchEvent(e)}function Sr(e,t){if(window.FrakSetup?.client&&e===`add`){t();return}(e===`add`?window.addEventListener:window.removeEventListener)(br,t,!1)}function Cr(){return window.FrakSetup.core={...qn,...gr},window.FrakSetup?.client?Promise.resolve():L(()=>wr(),{cacheKey:`frak-sdk-init`,cacheTime:1/0}).catch(e=>{M(window.FrakSetup?.client,`sdk_init_failed`,{reason:e instanceof Error?e.message:typeof e==`string`?e:`unknown`,config_missing:!window.FrakSetup?.config})})}async function wr(){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 Gn({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`),xr(),lr(e),Tr()}function Tr(){let e=new URLSearchParams(window.location.search).get(`frakAction`);e&&e===`share`&&(console.log(`[Frak SDK] Auto open query param found`),yr())}function Er(e){document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,1):document.addEventListener(`DOMContentLoaded`,e)}function Dr(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 Or(e,t){Dr(`frak-base-${e}`,t)}function kr(e,t,n){Dr(`frak-placement-${e}-${t}`,n)}const Ar={injectBase:Or,injectPlacement:kr};Ar.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; }`),Er(Cr);const jr={"button-share":()=>import(`./ButtonShare.CMAEVXOn.js`),"button-wallet":()=>import(`./ButtonWallet.Cwz9qFhE.js`),"open-in-app":()=>import(`./OpenInAppButton.Hq9EjwJE.js`),"post-purchase":()=>import(`./PostPurchase.CUYvAQqH.js`),banner:()=>import(`./Banner.1iUbfe7Z.js`)},Mr=new MutationObserver(e=>{for(let{addedNodes:t}of e)for(let e of Array.from(t))e.nodeType===Node.ELEMENT_NODE&&Nr(e)});async function Nr(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=>Pr(e)))}async function Pr(e){if(customElements.get(e))return Promise.resolve();try{let t=e.replace(/^frak-/i,``);if(!(t in jr))throw Error(`Component ${e} is not supported.`);await jr[t]()}catch(e){console.error(e)}}Nr(document.body),Mr.observe(document.documentElement,{subtree:!0,childList:!0});export{M as C,K as S,D as T,_n as _,yr as a,bn as b,ur as c,$n as d,Qn as f,xn as g,An as h,Sr as i,cr as l,Nn as m,Er as n,_r as o,Xn as p,Cr as r,pr as s,Ar as t,er as u,kn as v,it as w,X as x,mn as y};
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"url": "https://twitter.com/QNivelais"
|
|
12
12
|
}
|
|
13
13
|
],
|
|
14
|
-
"version": "1.0.1-beta.
|
|
14
|
+
"version": "1.0.1-beta.7d1477b6",
|
|
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": "1.0.1-beta.
|
|
90
|
-
"@frak-labs/frame-connector": "0.2.0-beta.
|
|
89
|
+
"@frak-labs/core-sdk": "1.0.1-beta.7d1477b6",
|
|
90
|
+
"@frak-labs/frame-connector": "0.2.0-beta.7d1477b6",
|
|
91
91
|
"preact": "^10.29.0",
|
|
92
92
|
"preact-custom-element": "^4.6.0",
|
|
93
93
|
"@frak-labs/design-system": "0.0.0"
|