@frak-labs/core-sdk 0.0.19 → 0.1.0
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/bundle.js +5 -5
- package/dist/actions.cjs +1 -1
- package/dist/actions.d.cts +60 -60
- package/dist/actions.d.ts +60 -60
- package/dist/actions.js +1 -1
- package/dist/bundle.cjs +2 -2
- package/dist/bundle.d.cts +80 -175
- package/dist/bundle.d.ts +80 -175
- package/dist/bundle.js +2 -2
- package/dist/index.cjs +11 -11
- package/dist/index.d.cts +69 -173
- package/dist/index.d.ts +69 -173
- package/dist/index.js +2 -2
- package/package.json +5 -1
package/dist/bundle.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{decompressJsonFromB64:()=>decompressJsonFromB64,PressInteractionEncoder:()=>PressInteractionEncoder,getProductInformation:()=>getProductInformation,
|
|
1
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{decompressJsonFromB64:()=>decompressJsonFromB64,PressInteractionEncoder:()=>PressInteractionEncoder,getProductInformation:()=>getProductInformation,createIFrameFrakClient:()=>createIFrameFrakClient,getCurrencyAmountKey:()=>getCurrencyAmountKey,sendInteraction:()=>sendInteraction,FrakContextManager:()=>FrakContextManager,getSupportedLocale:()=>getSupportedLocale,compressJsonToB64:()=>compressJsonToB64,baseIframeProps:()=>baseIframeProps,DebugInfoGatherer:()=>DebugInfoGatherer,base64urlEncode:()=>base64urlEncode,processReferral:()=>processReferral,ReferralInteractionEncoder:()=>ReferralInteractionEncoder,modalBuilder:()=>modalBuilder,productTypes:()=>productTypes,referralInteraction:()=>referralInteraction,siweAuthenticate:()=>siweAuthenticate,trackPurchaseStatus:()=>trackPurchaseStatus,locales:()=>locales,productTypesMask:()=>productTypesMask,interactionTypes:()=>interactionTypes,getSupportedCurrency:()=>getSupportedCurrency,PurchaseInteractionEncoder:()=>PurchaseInteractionEncoder,sendTransaction:()=>sendTransaction,formatAmount:()=>formatAmount,trackEvent:()=>trackEvent,base64urlDecode:()=>base64urlDecode,displayEmbeddedWallet:()=>displayEmbeddedWallet,displayModal:()=>displayModal,watchWalletStatus:()=>watchWalletStatus,RetailInteractionEncoder:()=>RetailInteractionEncoder,setupClient:()=>setupClient,createIframe:()=>createIframe,openSso:()=>openSso,WebShopInteractionEncoder:()=>WebShopInteractionEncoder});let frame_connector_namespaceObject=require("@frak-labs/frame-connector"),middleware_namespaceObject=require("@frak-labs/frame-connector/middleware"),web_namespaceObject=require("@openpanel/web"),BACKUP_KEY="nexus-wallet-backup";function setupSsoUrlListener(e,t){if("undefined"==typeof window)return;let r=new URL(window.location.href),a=r.searchParams.get("sso");a&&(t.then(()=>{e.sendLifecycle({clientLifecycle:"sso-redirect-complete",data:{compressed:a}}),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"))}class DebugInfoGatherer{config;iframe;isSetupDone=!1;lastResponse=null;lastRequest=null;constructor(e,t){this.config=e,this.iframe=t,this.lastRequest=null,this.lastResponse=null}setLastResponse(e,t){this.lastResponse={message:e,response:t,timestamp:Date.now()}}setLastRequest(e){this.lastRequest={event:e,timestamp:Date.now()}}updateSetupStatus(e){this.isSetupDone=e}base64Encode(e){try{return btoa(JSON.stringify(e))}catch(e){return console.warn("Failed to encode debug data",e),btoa("Failed to encode data")}}getIframeStatus(){return this.iframe?{loading:this.iframe.hasAttribute("loading"),url:this.iframe.src,readyState:this.iframe.contentDocument?.readyState?+("complete"===this.iframe.contentDocument.readyState):-1,contentWindow:!!this.iframe.contentWindow,isConnected:this.iframe.isConnected}:null}getNavigatorInfo(){return navigator?{userAgent:navigator.userAgent,language:navigator.language,onLine:navigator.onLine,screenWidth:window.screen.width,screenHeight:window.screen.height,pixelRatio:window.devicePixelRatio}:null}gatherDebugInfo(e){let t=this.getIframeStatus(),r=this.getNavigatorInfo(),a="Unknown";return e instanceof frame_connector_namespaceObject.FrakRpcError?a=`FrakRpcError: ${e.code} '${e.message}'`:e instanceof Error?a=e.message:"string"==typeof e&&(a=e),{timestamp:new Date().toISOString(),encodedUrl:btoa(window.location.href),encodedConfig:this.config?this.base64Encode(this.config):"no-config",navigatorInfo:r?this.base64Encode(r):"no-navigator",iframeStatus:t?this.base64Encode(t):"not-iframe",lastRequest:this.lastRequest?this.base64Encode(this.lastRequest):"No Frak request logged",lastResponse:this.lastResponse?this.base64Encode(this.lastResponse):"No Frak response logged",clientStatus:this.isSetupDone?"setup":"not-setup",error:a}}static empty(){return new DebugInfoGatherer}formatDebugInfo(e){let t=this.gatherDebugInfo(e);return`
|
|
2
2
|
Debug Information:
|
|
3
3
|
-----------------
|
|
4
4
|
Timestamp: ${t.timestamp}
|
|
@@ -10,4 +10,4 @@
|
|
|
10
10
|
Last Response: ${t.lastResponse}
|
|
11
11
|
Client Status: ${t.clientStatus}
|
|
12
12
|
Error: ${t.error}
|
|
13
|
-
`.trim()}}function createIFrameChannelManager(){let e=new Map;return{createChannel:t=>{let r=Math.random().toString(36).substring(7);return e.set(r,t),r},getRpcResolver:t=>e.get(t),removeChannel:t=>e.delete(t),destroy:()=>e.clear()}}let baseIframeProps={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 createIframe({walletBaseUrl:e,config:t}){let r=document.querySelector("#frak-wallet");r&&r.remove();let a=document.createElement("iframe");return a.id=baseIframeProps.id,a.name=baseIframeProps.name,a.allow=baseIframeProps.allow,a.style.zIndex=baseIframeProps.style.zIndex.toString(),changeIframeVisibility({iframe:a,isVisible:!1}),document.body.appendChild(a),new Promise(r=>{a?.addEventListener("load",()=>r(a)),a.src=`${t?.walletUrl??e??"https://wallet.frak.id"}/listener`})}function changeIframeVisibility({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 createIFrameLifecycleManager({iframe:e}){let t=new Deferred;return{handleEvent:async r=>{switch(r.iframeLifecycle){case"connected":t.resolve(!0);break;case"do-backup":r.data.backup?localStorage.setItem(BACKUP_KEY,r.data.backup):localStorage.removeItem(BACKUP_KEY);break;case"remove-backup":localStorage.removeItem(BACKUP_KEY);break;case"show":case"hide":changeIframeVisibility({iframe:e,isVisible:"show"===r.iframeLifecycle});break;case"handshake":e.contentWindow?.postMessage({clientLifecycle:"handshake-response",data:{token:r.data.token,currentUrl:window.location.href}},"*");break;case"redirect":window.location.href=`${r.data.baseRedirectUrl}${encodeURIComponent(window.location.href)}`}},isConnected:t.promise}}function createIFrameMessageHandler({frakWalletUrl:e,iframe:t,channelManager:r,iframeLifecycleManager:a,debugInfo:n}){if("undefined"==typeof window)throw new FrakRpcError(RpcErrorCodes.configError,"iframe client should be used in the browser");if(!t.contentWindow)throw new FrakRpcError(RpcErrorCodes.configError,"The iframe does not have a product window");let o=t.contentWindow;async function s(t){if(!t.origin)return;try{if(new URL(t.origin).origin.toLowerCase()!==new URL(e).origin.toLowerCase())return}catch(e){console.log("Unable to check frak msg origin",e);return}if("object"!=typeof t.data)return;if(n.setLastResponse(t),"iframeLifecycle"in t.data)return void await a.handleEvent(t.data);if("clientLifecycle"in t.data)return void console.error("Client lifecycle event received on the client side, dismissing it");let o=t.data.id,s=r.getRpcResolver(o);s&&s(t.data)}return window.addEventListener("message",s),{sendEvent:function(t){o.postMessage(t,{targetOrigin:e}),n.setLastRequest(t,e)},cleanup:function(){window.removeEventListener("message",s)}}}function createIFrameFrakClient({config:e,iframe:t}){let r,a=createIFrameChannelManager(),n=createIFrameLifecycleManager({iframe:t}),o=new DebugInfoGatherer(e,t),s=createIFrameMessageHandler({frakWalletUrl:e?.walletUrl??"https://wallet.frak.id",iframe:t,channelManager:a,iframeLifecycleManager:n,debugInfo:o}),c=async e=>{if(!await n.isConnected)throw new FrakRpcError(RpcErrorCodes.clientNotConnected,"The iframe provider isn't connected yet");let t=new Deferred,r=a.createChannel(e=>{let n=decompressDataAndCheckHash(e.data);n.error?t.reject(new FrakRpcError(n.error.code,n.error.message,n.error?.data)):t.resolve(n.result),a.removeChannel(r)}),o=hashAndCompressData(e);return s.sendEvent({id:r,topic:e.method,data:o}),t.promise},i=async(e,t)=>{if(!await n.isConnected)throw new FrakRpcError(RpcErrorCodes.clientNotConnected,"The iframe provider isn't connected yet");let r=a.createChannel(e=>{let r=decompressDataAndCheckHash(e.data);if(r.result)t(r.result);else throw new InternalError("No valid result in the response")}),o=hashAndCompressData(e);s.sendEvent({id:r,topic:e.method,data:o})},l=setupHeartbeat(s,n),p=async()=>{l(),a.destroy(),s.cleanup(),t.remove()};console.log("[Frak SDK] Initializing OpenPanel"),(r=new web_namespaceObject.OpenPanel({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.0.19"}),!0)})).setGlobalProperties({sdkVersion:"0.0.19"}),r.init();let d=postConnectionSetup({config:e,messageHandler:s,lifecycleManager:n}).then(()=>o.updateSetupStatus(!0));return{config:e,debugInfo:o,waitForConnection:n.isConnected,waitForSetup:d,request:c,listenerRequest:i,destroy:p,openPanel:r}}function setupHeartbeat(e,t){let r,a,n=()=>e.sendEvent({clientLifecycle:"heartbeat"});function o(){r&&clearInterval(r),a&&clearTimeout(a)}return async function(){n(),r=setInterval(n,100),a=setTimeout(()=>{o(),console.log("Heartbeat timeout: connection failed")},3e4),await t.isConnected,o()}(),o}async function postConnectionSetup({config:e,messageHandler:t,lifecycleManager:r}){async function a(){let r=e.customizations?.css;r&&t.sendEvent({clientLifecycle:"modal-css",data:{cssLink:r}})}async function n(){let r=e.customizations?.i18n;r&&t.sendEvent({clientLifecycle:"modal-i18n",data:{i18n:r}})}async function o(){if("undefined"==typeof window)return;let e=window.localStorage.getItem(BACKUP_KEY);e&&t.sendEvent({clientLifecycle:"restore-backup",data:{backup:e}})}await r.isConnected,await Promise.allSettled([a(),n(),o()])}let locales={eur:"fr-FR",usd:"en-US",gbp:"en-GB"};function getSupportedCurrency(e){return e&&e in locales?e:"eur"}async function setupClient({config:e}){let t=prepareConfig(e),r=await createIframe({config:t});if(!r)return void console.error("Failed to create iframe");let a=createIFrameFrakClient({config:t,iframe:r});return(await a.waitForSetup,await a.waitForConnection)?a:void console.error("Failed to connect to client")}function prepareConfig(e){let t=getSupportedCurrency(e.metadata?.currency);return{...e,metadata:{...e.metadata,currency:t}}}let contextKey="fCtx";function compress(e){if(e?.r)try{let t=(0,external_viem_namespaceObject.hexToBytes)(e.r);return base64urlEncode(t)}catch(t){console.error("Error compressing Frak context",{e:t,context:e})}}function decompress(e){if(e&&0!==e.length)try{let t=base64urlDecode(e);return{r:(0,external_viem_namespaceObject.bytesToHex)(t,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}function parse({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(contextKey);return t?decompress(t):null}function update({url:e,context:t}){if(!e)return null;let r=parse({url:e}),a=r?{...r,...t}:t;if(!a.r)return null;let n=compress(a);if(!n)return null;let o=new URL(e);return o.searchParams.set(contextKey,n),o.toString()}function remove(e){let t=new URL(e);return t.searchParams.delete(contextKey),t.toString()}function replaceUrl({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 a=e??window.location.href;(r=null!==t?update({url:a,context:t}):remove(a))&&window.history.replaceState(null,"",r.toString())}let FrakContextManager={compress,decompress,parse,update,remove,replaceUrl};function getSupportedLocale(e){return e?locales[e]??locales.eur:locales.eur}function getCurrencyAmountKey(e){return e?`${e}Amount`:"eurAmount"}function formatAmount(e,t){let r=getSupportedLocale(t),a=getSupportedCurrency(t);return e.toLocaleString(r,{style:"currency",currency:a,minimumFractionDigits:0,maximumFractionDigits:2})}function trackEvent(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 productTypes={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31},productTypesMask=Object.entries(productTypes).reduce((e,[t,r])=>(e[t]=BigInt(1)<<BigInt(r),e),{}),interactionTypes={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"}};function watchWalletStatus(e,t){if(!t)return e.request({method:"frak_listenToWalletStatus"}).then(t=>(walletStatusSideEffect(e,t),t));let r=new Deferred,a=!1;return e.listenerRequest({method:"frak_listenToWalletStatus"},n=>{walletStatusSideEffect(e,n),t(n),a||(r.resolve(n),a=!0)}).then(()=>r.promise)}function walletStatusSideEffect(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"))}function computeProductId({domain:e}){let t=(e??window.location.host).replace("www.","");return(0,external_viem_namespaceObject.keccak256)((0,external_viem_namespaceObject.toHex)(t))}async function sendInteraction(e,{productId:t,interaction:r,validation:a}){let n=t??computeProductId(e.config);return await e.request({method:"frak_sendInteraction",params:[n,r,a]})}async function displayModal(e,{steps:t,metadata:r}){return await e.request({method:"frak_displayModal",params:[t,r,e.config.metadata]})}async function displayEmbeddedWallet(e,t){return await e.request({method:"frak_displayEmbeddedWallet",params:[t,e.config.metadata]})}async function openSso(e,t){let{metadata:r,customizations:a}=e.config;await e.request({method:"frak_sso",params:[t,r.name,a?.css]})}async function getProductInformation(e){return await e.request({method:"frak_getProductInformation"})}async function trackPurchaseStatus(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)})}let siwe_namespaceObject=require("viem/siwe");async function siweAuthenticate(e,{siwe:t,metadata:r}){let a=e.config?.domain??window.location.host,n=t?.statement??`I confirm that I want to use my Frak wallet on: ${e.config.metadata.name}`,o={...t,statement:n,nonce:t?.nonce??(0,siwe_namespaceObject.generateSiweNonce)(),uri:t?.uri??`https://${a}`,version:t?.version??"1",domain:a};return(await displayModal(e,{metadata:r,steps:{login:{},siweAuthenticate:{siwe:o}}})).siweAuthenticate}async function sendTransaction(e,{tx:t,metadata:r}){return(await displayModal(e,{metadata:r,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}function modalBuilder(e,{metadata:t,login:r,openSession:a}){return modalStepsBuilder(e,{steps:{login:r??{},openSession:a??{}},metadata:t})}function modalStepsBuilder(e,t){async function r(r){return r&&(t.metadata=r(t.metadata??{})),await displayModal(e,t)}return{params:t,sendTx:function(r){return modalStepsBuilder(e,{...t,steps:{...t.steps,sendTransaction:r}})},reward:function(r){return modalStepsBuilder(e,{...t,steps:{...t.steps,final:{...r,action:{key:"reward"}}}})},sharing:function(r,a){return modalStepsBuilder(e,{...t,steps:{...t.steps,final:{...a,action:{key:"sharing",options:r}}}})},display:r}}let ReferralInteractionEncoder={createLink:()=>({handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.referral),interactionData:interactionTypes.referral.createLink}),referred({referrer:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.referral.referred,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.referral),interactionData:t}}};async function processReferral(e,{walletStatus:t,frakContext:r,modalConfig:a,productId:n,options:o}){let s=!1;async function c(){if(!s)return s=!0,ensureWalletConnected(e,{modalConfig:{...a,loggedIn:{action:{key:"referred"}}},walletStatus:t})}async function i(t){let r=ReferralInteractionEncoder.referred({referrer:t});await Promise.allSettled([sendInteraction(e,{productId:n,interaction:r}),trackEvent(e,"user_referred",{properties:{referrer:t}})])}try{let{status:e,currentWallet:a}=await processReferralLogic({initialWalletStatus:t,getFreshWalletStatus:c,pushReferralInteraction:i,frakContext:r});return FrakContextManager.replaceUrl({url:window.location?.href,context:o?.alwaysAppendUrl?{r:a}:null}),e}catch(e){return console.log("Error processing referral",{error:e}),FrakContextManager.replaceUrl({url:window.location?.href,context:o?.alwaysAppendUrl?{r:t?.wallet}:null}),mapErrorToState(e)}}async function processReferralLogic({initialWalletStatus:e,getFreshWalletStatus:t,pushReferralInteraction:r,frakContext:a}){let n=e?.wallet;return a?.r?(n||(n=await t()),n&&(0,external_viem_namespaceObject.isAddressEqual)(a.r,n))?{status:"self-referral",currentWallet:n}:(e?.interactionSession||(n=await t()),await r(a.r),{status:"success",currentWallet:n}):{status:"no-referrer",currentWallet:n}}async function ensureWalletConnected(e,{modalConfig:t,walletStatus:r}){if(!r?.interactionSession){let r=await displayEmbeddedWallet(e,t??{});return r?.wallet??void 0}return r.wallet??void 0}function mapErrorToState(e){if(e instanceof FrakRpcError)switch(e.code){case RpcErrorCodes.walletNotConnected:return"no-wallet";case RpcErrorCodes.serverErrorForInteractionDelegation:return"no-session"}return"error"}async function referralInteraction(e,{productId:t,modalConfig:r,options:a}={}){let n=FrakContextManager.parse({url:window.location.href}),o=await watchWalletStatus(e);try{return await processReferral(e,{walletStatus:o,frakContext:n,modalConfig:r,productId:t,options:a})}catch(e){console.warn("Error processing referral",{error:e})}}let PressInteractionEncoder={openArticle({articleId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.press.openArticle,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.press),interactionData:t}},readArticle({articleId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.press.readArticle,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.press),interactionData:t}}},PurchaseInteractionEncoder={startPurchase({purchaseId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.purchase.started,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.purchase),interactionData:t}},completedPurchase({purchaseId:e,proof:t}){let r=(0,external_viem_namespaceObject.encodeAbiParameters)([{type:"uint256"},{type:"bytes32[]"}],[BigInt(e),t]),a=(0,external_viem_namespaceObject.concatHex)([interactionTypes.purchase.completed,r]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.purchase),interactionData:a}},unsafeCompletedPurchase({purchaseId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.purchase.unsafeCompleted,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.purchase),interactionData:t}}},WebShopInteractionEncoder={open:()=>({handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.webshop),interactionData:interactionTypes.webshop.open})},RetailInteractionEncoder={customerMeeting({agencyId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.retail.customerMeeting,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.retail),interactionData:t}}};for(var __webpack_i__ in exports.ClientNotFound=__webpack_exports__.ClientNotFound,exports.DebugInfoGatherer=__webpack_exports__.DebugInfoGatherer,exports.Deferred=__webpack_exports__.Deferred,exports.FrakContextManager=__webpack_exports__.FrakContextManager,exports.FrakRpcError=__webpack_exports__.FrakRpcError,exports.PressInteractionEncoder=__webpack_exports__.PressInteractionEncoder,exports.PurchaseInteractionEncoder=__webpack_exports__.PurchaseInteractionEncoder,exports.ReferralInteractionEncoder=__webpack_exports__.ReferralInteractionEncoder,exports.RetailInteractionEncoder=__webpack_exports__.RetailInteractionEncoder,exports.RpcErrorCodes=__webpack_exports__.RpcErrorCodes,exports.WebShopInteractionEncoder=__webpack_exports__.WebShopInteractionEncoder,exports.base64urlDecode=__webpack_exports__.base64urlDecode,exports.base64urlEncode=__webpack_exports__.base64urlEncode,exports.baseIframeProps=__webpack_exports__.baseIframeProps,exports.compressJson=__webpack_exports__.compressJson,exports.compressJsonToB64=__webpack_exports__.compressJsonToB64,exports.createIFrameFrakClient=__webpack_exports__.createIFrameFrakClient,exports.createIframe=__webpack_exports__.createIframe,exports.decompressDataAndCheckHash=__webpack_exports__.decompressDataAndCheckHash,exports.decompressJson=__webpack_exports__.decompressJson,exports.decompressJsonFromB64=__webpack_exports__.decompressJsonFromB64,exports.displayEmbeddedWallet=__webpack_exports__.displayEmbeddedWallet,exports.displayModal=__webpack_exports__.displayModal,exports.formatAmount=__webpack_exports__.formatAmount,exports.getCurrencyAmountKey=__webpack_exports__.getCurrencyAmountKey,exports.getProductInformation=__webpack_exports__.getProductInformation,exports.getSupportedCurrency=__webpack_exports__.getSupportedCurrency,exports.getSupportedLocale=__webpack_exports__.getSupportedLocale,exports.hashAndCompressData=__webpack_exports__.hashAndCompressData,exports.interactionTypes=__webpack_exports__.interactionTypes,exports.locales=__webpack_exports__.locales,exports.modalBuilder=__webpack_exports__.modalBuilder,exports.openSso=__webpack_exports__.openSso,exports.processReferral=__webpack_exports__.processReferral,exports.productTypes=__webpack_exports__.productTypes,exports.productTypesMask=__webpack_exports__.productTypesMask,exports.referralInteraction=__webpack_exports__.referralInteraction,exports.sendInteraction=__webpack_exports__.sendInteraction,exports.sendTransaction=__webpack_exports__.sendTransaction,exports.setupClient=__webpack_exports__.setupClient,exports.siweAuthenticate=__webpack_exports__.siweAuthenticate,exports.trackEvent=__webpack_exports__.trackEvent,exports.trackPurchaseStatus=__webpack_exports__.trackPurchaseStatus,exports.watchWalletStatus=__webpack_exports__.watchWalletStatus,__webpack_exports__)-1===["ClientNotFound","DebugInfoGatherer","Deferred","FrakContextManager","FrakRpcError","PressInteractionEncoder","PurchaseInteractionEncoder","ReferralInteractionEncoder","RetailInteractionEncoder","RpcErrorCodes","WebShopInteractionEncoder","base64urlDecode","base64urlEncode","baseIframeProps","compressJson","compressJsonToB64","createIFrameFrakClient","createIframe","decompressDataAndCheckHash","decompressJson","decompressJsonFromB64","displayEmbeddedWallet","displayModal","formatAmount","getCurrencyAmountKey","getProductInformation","getSupportedCurrency","getSupportedLocale","hashAndCompressData","interactionTypes","locales","modalBuilder","openSso","processReferral","productTypes","productTypesMask","referralInteraction","sendInteraction","sendTransaction","setupClient","siweAuthenticate","trackEvent","trackPurchaseStatus","watchWalletStatus"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
13
|
+
`.trim()}}let baseIframeProps={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 createIframe({walletBaseUrl:e,config:t}){let r=document.querySelector("#frak-wallet");r&&r.remove();let a=document.createElement("iframe");return a.id=baseIframeProps.id,a.name=baseIframeProps.name,a.allow=baseIframeProps.allow,a.style.zIndex=baseIframeProps.style.zIndex.toString(),changeIframeVisibility({iframe:a,isVisible:!1}),document.body.appendChild(a),new Promise(r=>{a?.addEventListener("load",()=>r(a)),a.src=`${t?.walletUrl??e??"https://wallet.frak.id"}/listener`})}function changeIframeVisibility({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 createIFrameLifecycleManager({iframe:e}){let t=new frame_connector_namespaceObject.Deferred;return{handleEvent:async r=>{if(!("iframeLifecycle"in r))return;let{iframeLifecycle:a,data:n}=r;switch(a){case"connected":t.resolve(!0);break;case"do-backup":n.backup?localStorage.setItem(BACKUP_KEY,n.backup):localStorage.removeItem(BACKUP_KEY);break;case"remove-backup":localStorage.removeItem(BACKUP_KEY);break;case"show":case"hide":changeIframeVisibility({iframe:e,isVisible:"show"===a});break;case"handshake":e.contentWindow?.postMessage({clientLifecycle:"handshake-response",data:{token:n.token,currentUrl:window.location.href}},"*");break;case"redirect":{let e=new URL(n.baseRedirectUrl);e.searchParams.has("u")?(e.searchParams.delete("u"),e.searchParams.append("u",window.location.href),window.location.href=e.toString()):window.location.href=n.baseRedirectUrl}}},isConnected:t.promise}}function createIFrameFrakClient({config:e,iframe:t}){let r,a=e?.walletUrl??"https://wallet.frak.id",n=createIFrameLifecycleManager({iframe:t}),o=new DebugInfoGatherer(e,t);if(!t.contentWindow)throw new frame_connector_namespaceObject.FrakRpcError(frame_connector_namespaceObject.RpcErrorCodes.configError,"The iframe does not have a content window");let s=(0,frame_connector_namespaceObject.createRpcClient)({emittingTransport:t.contentWindow,listeningTransport:window,targetOrigin:a,middleware:[{async onRequest(e,t){if(!await n.isConnected)throw new frame_connector_namespaceObject.FrakRpcError(frame_connector_namespaceObject.RpcErrorCodes.clientNotConnected,"The iframe provider isn't connected yet");return t}},(0,middleware_namespaceObject.createClientCompressionMiddleware)(),{onRequest:(e,t)=>(o.setLastRequest(e),t),onResponse:(e,t)=>(o.setLastResponse(e,t),t)}],lifecycleHandlers:{iframeLifecycle:async(e,t)=>{await n.handleEvent(e)}}}),c=setupHeartbeat(s,n),i=async()=>{c(),s.cleanup(),t.remove()};console.log("[Frak SDK] Initializing OpenPanel"),(r=new web_namespaceObject.OpenPanel({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 l=postConnectionSetup({config:e,rpcClient:s,lifecycleManager:n}).then(()=>o.updateSetupStatus(!0));return{config:e,debugInfo:o,waitForConnection:n.isConnected,waitForSetup:l,request:s.request,listenerRequest:s.listen,destroy:i,openPanel:r}}function setupHeartbeat(e,t){let r,a,n=()=>e.sendLifecycle({clientLifecycle:"heartbeat"});function o(){r&&clearInterval(r),a&&clearTimeout(a)}return async function(){n(),r=setInterval(n,1e3),a=setTimeout(()=>{o(),console.log("Heartbeat timeout: connection failed")},3e4),await t.isConnected,o()}(),o}async function postConnectionSetup({config:e,rpcClient:t,lifecycleManager:r}){async function a(){let r=e.customizations?.css;r&&t.sendLifecycle({clientLifecycle:"modal-css",data:{cssLink:r}})}async function n(){let r=e.customizations?.i18n;r&&t.sendLifecycle({clientLifecycle:"modal-i18n",data:{i18n:r}})}async function o(){if("undefined"==typeof window)return;let e=window.localStorage.getItem(BACKUP_KEY);e&&t.sendLifecycle({clientLifecycle:"restore-backup",data:{backup:e}})}await r.isConnected,setupSsoUrlListener(t,r.isConnected),await Promise.allSettled([a(),n(),o()])}let locales={eur:"fr-FR",usd:"en-US",gbp:"en-GB"};function getSupportedCurrency(e){return e&&e in locales?e:"eur"}async function setupClient({config:e}){let t=prepareConfig(e),r=await createIframe({config:t});if(!r)return void console.error("Failed to create iframe");let a=createIFrameFrakClient({config:t,iframe:r});return(await a.waitForSetup,await a.waitForConnection)?a:void console.error("Failed to connect to client")}function prepareConfig(e){let t=getSupportedCurrency(e.metadata?.currency);return{...e,metadata:{...e.metadata,currency:t}}}function base64urlEncode(e){return btoa(Array.from(e,e=>String.fromCharCode(e)).join("")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function base64urlDecode(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 compressJsonToB64(e){return base64urlEncode((0,frame_connector_namespaceObject.compressJson)(e))}function decompressJsonFromB64(e){return(0,frame_connector_namespaceObject.decompressJson)(base64urlDecode(e))}let external_viem_namespaceObject=require("viem"),contextKey="fCtx";function compress(e){if(e?.r)try{let t=(0,external_viem_namespaceObject.hexToBytes)(e.r);return base64urlEncode(t)}catch(t){console.error("Error compressing Frak context",{e:t,context:e})}}function decompress(e){if(e&&0!==e.length)try{let t=base64urlDecode(e);return{r:(0,external_viem_namespaceObject.bytesToHex)(t,{size:20})}}catch(t){console.error("Error decompressing Frak context",{e:t,context:e})}}function parse({url:e}){if(!e)return null;let t=new URL(e).searchParams.get(contextKey);return t?decompress(t):null}function update({url:e,context:t}){if(!e)return null;let r=parse({url:e}),a=r?{...r,...t}:t;if(!a.r)return null;let n=compress(a);if(!n)return null;let o=new URL(e);return o.searchParams.set(contextKey,n),o.toString()}function remove(e){let t=new URL(e);return t.searchParams.delete(contextKey),t.toString()}function replaceUrl({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 a=e??window.location.href;(r=null!==t?update({url:a,context:t}):remove(a))&&window.history.replaceState(null,"",r.toString())}let FrakContextManager={compress,decompress,parse,update,remove,replaceUrl};function getSupportedLocale(e){return e?locales[e]??locales.eur:locales.eur}function getCurrencyAmountKey(e){return e?`${e}Amount`:"eurAmount"}function formatAmount(e,t){let r=getSupportedLocale(t),a=getSupportedCurrency(t);return e.toLocaleString(r,{style:"currency",currency:a,minimumFractionDigits:0,maximumFractionDigits:2})}function trackEvent(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 productTypes={dapp:1,press:2,webshop:3,retail:4,referral:30,purchase:31},productTypesMask=Object.entries(productTypes).reduce((e,[t,r])=>(e[t]=BigInt(1)<<BigInt(r),e),{}),interactionTypes={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"}};function watchWalletStatus(e,t){if(!t)return e.request({method:"frak_listenToWalletStatus"}).then(t=>(walletStatusSideEffect(e,t),t));let r=new frame_connector_namespaceObject.Deferred,a=!1;return e.listenerRequest({method:"frak_listenToWalletStatus"},n=>{walletStatusSideEffect(e,n),t(n),a||(r.resolve(n),a=!0)}),r.promise}function walletStatusSideEffect(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"))}function computeProductId({domain:e}){let t=(e??window.location.host).replace("www.","");return(0,external_viem_namespaceObject.keccak256)((0,external_viem_namespaceObject.toHex)(t))}async function sendInteraction(e,{productId:t,interaction:r,validation:a}){let n=t??computeProductId(e.config);return await e.request({method:"frak_sendInteraction",params:[n,r,a]})}async function displayModal(e,{steps:t,metadata:r}){return await e.request({method:"frak_displayModal",params:[t,r,e.config.metadata]})}async function displayEmbeddedWallet(e,t){return await e.request({method:"frak_displayEmbeddedWallet",params:[t,e.config.metadata]})}async function openSso(e,t){let{metadata:r,customizations:a}=e.config;return await e.request({method:"frak_sso",params:[t,r.name,a?.css]})??{}}async function getProductInformation(e){return await e.request({method:"frak_getProductInformation"})}async function trackPurchaseStatus(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)})}let siwe_namespaceObject=require("viem/siwe");async function siweAuthenticate(e,{siwe:t,metadata:r}){let a=e.config?.domain??window.location.host,n=t?.statement??`I confirm that I want to use my Frak wallet on: ${e.config.metadata.name}`,o={...t,statement:n,nonce:t?.nonce??(0,siwe_namespaceObject.generateSiweNonce)(),uri:t?.uri??`https://${a}`,version:t?.version??"1",domain:a};return(await displayModal(e,{metadata:r,steps:{login:{},siweAuthenticate:{siwe:o}}})).siweAuthenticate}async function sendTransaction(e,{tx:t,metadata:r}){return(await displayModal(e,{metadata:r,steps:{login:{},sendTransaction:{tx:t}}})).sendTransaction}function modalBuilder(e,{metadata:t,login:r,openSession:a}){return modalStepsBuilder(e,{steps:{login:r??{},openSession:a??{}},metadata:t})}function modalStepsBuilder(e,t){async function r(r){return r&&(t.metadata=r(t.metadata??{})),await displayModal(e,t)}return{params:t,sendTx:function(r){return modalStepsBuilder(e,{...t,steps:{...t.steps,sendTransaction:r}})},reward:function(r){return modalStepsBuilder(e,{...t,steps:{...t.steps,final:{...r,action:{key:"reward"}}}})},sharing:function(r,a){return modalStepsBuilder(e,{...t,steps:{...t.steps,final:{...a,action:{key:"sharing",options:r}}}})},display:r}}let ReferralInteractionEncoder={createLink:()=>({handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.referral),interactionData:interactionTypes.referral.createLink}),referred({referrer:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.referral.referred,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.referral),interactionData:t}}};async function processReferral(e,{walletStatus:t,frakContext:r,modalConfig:a,productId:n,options:o}){let s=!1;async function c(){if(!s)return s=!0,ensureWalletConnected(e,{modalConfig:{...a,loggedIn:{action:{key:"referred"}}},walletStatus:t})}async function i(t){let r=ReferralInteractionEncoder.referred({referrer:t});await Promise.allSettled([sendInteraction(e,{productId:n,interaction:r}),trackEvent(e,"user_referred",{properties:{referrer:t}})])}try{let{status:e,currentWallet:a}=await processReferralLogic({initialWalletStatus:t,getFreshWalletStatus:c,pushReferralInteraction:i,frakContext:r});return FrakContextManager.replaceUrl({url:window.location?.href,context:o?.alwaysAppendUrl?{r:a}:null}),e}catch(e){return console.log("Error processing referral",{error:e}),FrakContextManager.replaceUrl({url:window.location?.href,context:o?.alwaysAppendUrl?{r:t?.wallet}:null}),mapErrorToState(e)}}async function processReferralLogic({initialWalletStatus:e,getFreshWalletStatus:t,pushReferralInteraction:r,frakContext:a}){let n=e?.wallet;return a?.r?(n||(n=await t()),n&&(0,external_viem_namespaceObject.isAddressEqual)(a.r,n))?{status:"self-referral",currentWallet:n}:(e?.interactionSession||(n=await t()),await r(a.r),{status:"success",currentWallet:n}):{status:"no-referrer",currentWallet:n}}async function ensureWalletConnected(e,{modalConfig:t,walletStatus:r}){if(!r?.interactionSession){let r=await displayEmbeddedWallet(e,t??{});return r?.wallet??void 0}return r.wallet??void 0}function mapErrorToState(e){if(e instanceof frame_connector_namespaceObject.FrakRpcError)switch(e.code){case frame_connector_namespaceObject.RpcErrorCodes.walletNotConnected:return"no-wallet";case frame_connector_namespaceObject.RpcErrorCodes.serverErrorForInteractionDelegation:return"no-session"}return"error"}async function referralInteraction(e,{productId:t,modalConfig:r,options:a}={}){let n=FrakContextManager.parse({url:window.location.href}),o=await watchWalletStatus(e);try{return await processReferral(e,{walletStatus:o,frakContext:n,modalConfig:r,productId:t,options:a})}catch(e){console.warn("Error processing referral",{error:e})}}let PressInteractionEncoder={openArticle({articleId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.press.openArticle,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.press),interactionData:t}},readArticle({articleId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.press.readArticle,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.press),interactionData:t}}},PurchaseInteractionEncoder={startPurchase({purchaseId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.purchase.started,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.purchase),interactionData:t}},completedPurchase({purchaseId:e,proof:t}){let r=(0,external_viem_namespaceObject.encodeAbiParameters)([{type:"uint256"},{type:"bytes32[]"}],[BigInt(e),t]),a=(0,external_viem_namespaceObject.concatHex)([interactionTypes.purchase.completed,r]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.purchase),interactionData:a}},unsafeCompletedPurchase({purchaseId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.purchase.unsafeCompleted,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.purchase),interactionData:t}}},WebShopInteractionEncoder={open:()=>({handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.webshop),interactionData:interactionTypes.webshop.open})},RetailInteractionEncoder={customerMeeting({agencyId:e}){let t=(0,external_viem_namespaceObject.concatHex)([interactionTypes.retail.customerMeeting,(0,external_viem_namespaceObject.pad)(e,{size:32})]);return{handlerTypeDenominator:(0,external_viem_namespaceObject.toHex)(productTypes.retail),interactionData:t}}};for(var __webpack_i__ in exports.DebugInfoGatherer=__webpack_exports__.DebugInfoGatherer,exports.FrakContextManager=__webpack_exports__.FrakContextManager,exports.PressInteractionEncoder=__webpack_exports__.PressInteractionEncoder,exports.PurchaseInteractionEncoder=__webpack_exports__.PurchaseInteractionEncoder,exports.ReferralInteractionEncoder=__webpack_exports__.ReferralInteractionEncoder,exports.RetailInteractionEncoder=__webpack_exports__.RetailInteractionEncoder,exports.WebShopInteractionEncoder=__webpack_exports__.WebShopInteractionEncoder,exports.base64urlDecode=__webpack_exports__.base64urlDecode,exports.base64urlEncode=__webpack_exports__.base64urlEncode,exports.baseIframeProps=__webpack_exports__.baseIframeProps,exports.compressJsonToB64=__webpack_exports__.compressJsonToB64,exports.createIFrameFrakClient=__webpack_exports__.createIFrameFrakClient,exports.createIframe=__webpack_exports__.createIframe,exports.decompressJsonFromB64=__webpack_exports__.decompressJsonFromB64,exports.displayEmbeddedWallet=__webpack_exports__.displayEmbeddedWallet,exports.displayModal=__webpack_exports__.displayModal,exports.formatAmount=__webpack_exports__.formatAmount,exports.getCurrencyAmountKey=__webpack_exports__.getCurrencyAmountKey,exports.getProductInformation=__webpack_exports__.getProductInformation,exports.getSupportedCurrency=__webpack_exports__.getSupportedCurrency,exports.getSupportedLocale=__webpack_exports__.getSupportedLocale,exports.interactionTypes=__webpack_exports__.interactionTypes,exports.locales=__webpack_exports__.locales,exports.modalBuilder=__webpack_exports__.modalBuilder,exports.openSso=__webpack_exports__.openSso,exports.processReferral=__webpack_exports__.processReferral,exports.productTypes=__webpack_exports__.productTypes,exports.productTypesMask=__webpack_exports__.productTypesMask,exports.referralInteraction=__webpack_exports__.referralInteraction,exports.sendInteraction=__webpack_exports__.sendInteraction,exports.sendTransaction=__webpack_exports__.sendTransaction,exports.setupClient=__webpack_exports__.setupClient,exports.siweAuthenticate=__webpack_exports__.siweAuthenticate,exports.trackEvent=__webpack_exports__.trackEvent,exports.trackPurchaseStatus=__webpack_exports__.trackPurchaseStatus,exports.watchWalletStatus=__webpack_exports__.watchWalletStatus,__webpack_exports__)-1===["DebugInfoGatherer","FrakContextManager","PressInteractionEncoder","PurchaseInteractionEncoder","ReferralInteractionEncoder","RetailInteractionEncoder","WebShopInteractionEncoder","base64urlDecode","base64urlEncode","baseIframeProps","compressJsonToB64","createIFrameFrakClient","createIframe","decompressJsonFromB64","displayEmbeddedWallet","displayModal","formatAmount","getCurrencyAmountKey","getProductInformation","getSupportedCurrency","getSupportedLocale","interactionTypes","locales","modalBuilder","openSso","processReferral","productTypes","productTypesMask","referralInteraction","sendInteraction","sendTransaction","setupClient","siweAuthenticate","trackEvent","trackPurchaseStatus","watchWalletStatus"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
package/dist/bundle.d.cts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Address } from 'viem';
|
|
2
2
|
import { Hex } from 'viem';
|
|
3
|
+
import type { LifecycleMessage } from '@frak-labs/frame-connector';
|
|
3
4
|
import type { OpenPanel } from '@openpanel/web';
|
|
4
|
-
import type {
|
|
5
|
-
import
|
|
5
|
+
import type { RpcClient } from '@frak-labs/frame-connector';
|
|
6
|
+
import { RpcMessage } from '@frak-labs/frame-connector';
|
|
7
|
+
import { RpcResponse } from '@frak-labs/frame-connector';
|
|
6
8
|
import type { SiweMessage } from 'viem/siwe';
|
|
7
9
|
|
|
8
10
|
/**
|
|
@@ -44,12 +46,7 @@ export declare const baseIframeProps: {
|
|
|
44
46
|
* Event related to the iframe lifecycle
|
|
45
47
|
* @ignore
|
|
46
48
|
*/
|
|
47
|
-
export declare type ClientLifecycleEvent = CustomCssEvent | CustomI18nEvent | RestoreBackupEvent | HearbeatEvent | HandshakeResponse;
|
|
48
|
-
|
|
49
|
-
/** @ignore */
|
|
50
|
-
export declare class ClientNotFound extends FrakRpcError {
|
|
51
|
-
constructor();
|
|
52
|
-
}
|
|
49
|
+
export declare type ClientLifecycleEvent = CustomCssEvent | CustomI18nEvent | RestoreBackupEvent | HearbeatEvent | HandshakeResponse | SsoRedirectCompleteEvent;
|
|
53
50
|
|
|
54
51
|
/**
|
|
55
52
|
* Compress the current Frak context
|
|
@@ -65,13 +62,6 @@ declare function compress(context?: Partial<FrakContext>): string | undefined;
|
|
|
65
62
|
*/
|
|
66
63
|
export declare type CompressedData = Uint8Array;
|
|
67
64
|
|
|
68
|
-
/**
|
|
69
|
-
* Compress json data
|
|
70
|
-
* @param data
|
|
71
|
-
* @ignore
|
|
72
|
-
*/
|
|
73
|
-
export declare function compressJson(data: unknown): Uint8Array;
|
|
74
|
-
|
|
75
65
|
/**
|
|
76
66
|
* Compress json data
|
|
77
67
|
* @param data
|
|
@@ -139,8 +129,8 @@ export declare class DebugInfoGatherer {
|
|
|
139
129
|
private lastResponse;
|
|
140
130
|
private lastRequest;
|
|
141
131
|
constructor(config?: FrakWalletSdkConfig, iframe?: HTMLIFrameElement);
|
|
142
|
-
setLastResponse(
|
|
143
|
-
setLastRequest(event:
|
|
132
|
+
setLastResponse(message: RpcMessage, response: RpcResponse): void;
|
|
133
|
+
setLastRequest(event: RpcMessage): void;
|
|
144
134
|
updateSetupStatus(status: boolean): void;
|
|
145
135
|
private base64Encode;
|
|
146
136
|
/**
|
|
@@ -163,20 +153,6 @@ export declare class DebugInfoGatherer {
|
|
|
163
153
|
*/
|
|
164
154
|
declare function decompress(context?: string): FrakContext | undefined;
|
|
165
155
|
|
|
166
|
-
/**
|
|
167
|
-
* Decompress the given string
|
|
168
|
-
* @param compressedData The params to encode
|
|
169
|
-
* @ignore
|
|
170
|
-
*/
|
|
171
|
-
export declare function decompressDataAndCheckHash<T>(compressedData: CompressedData): HashProtectedData<T>;
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Decompress json data
|
|
175
|
-
* @param data
|
|
176
|
-
* @ignore
|
|
177
|
-
*/
|
|
178
|
-
export declare function decompressJson<T>(data: Uint8Array): T | null;
|
|
179
|
-
|
|
180
156
|
/**
|
|
181
157
|
* Decompress json data
|
|
182
158
|
* @param data
|
|
@@ -184,20 +160,6 @@ export declare function decompressJson<T>(data: Uint8Array): T | null;
|
|
|
184
160
|
*/
|
|
185
161
|
export declare function decompressJsonFromB64<T>(data: string): T | null;
|
|
186
162
|
|
|
187
|
-
/**
|
|
188
|
-
* Simple deferred promise wrapper
|
|
189
|
-
* @ignore
|
|
190
|
-
*/
|
|
191
|
-
export declare class Deferred<T> {
|
|
192
|
-
private readonly _promise;
|
|
193
|
-
private _resolve;
|
|
194
|
-
private _reject;
|
|
195
|
-
constructor();
|
|
196
|
-
get promise(): Promise<T>;
|
|
197
|
-
resolve: (value: T | PromiseLike<T>) => void;
|
|
198
|
-
reject: (reason?: unknown) => void;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
163
|
/**
|
|
202
164
|
* Function used to display the Frak embedded wallet popup
|
|
203
165
|
* @param client - The current Frak Client
|
|
@@ -433,34 +395,6 @@ export declare type EmbeddedViewActionSharing = {
|
|
|
433
395
|
|
|
434
396
|
declare type EventProps = Record<string, unknown>;
|
|
435
397
|
|
|
436
|
-
/**
|
|
437
|
-
* Type that extract the possible return type from a RPC Schema
|
|
438
|
-
* @ignore
|
|
439
|
-
*/
|
|
440
|
-
declare type ExtractedMethodFromRpc<TRpcSchema extends RpcSchema, TMethod extends ExtractedParametersFromRpc<TRpcSchema>["method"] = ExtractedParametersFromRpc<TRpcSchema>["method"]> = Extract<TRpcSchema[number], {
|
|
441
|
-
Method: TMethod;
|
|
442
|
-
}>;
|
|
443
|
-
|
|
444
|
-
/**
|
|
445
|
-
* Type that extract the possible parameters from a RPC Schema
|
|
446
|
-
* @ignore
|
|
447
|
-
*/
|
|
448
|
-
export declare type ExtractedParametersFromRpc<TRpcSchema extends RpcSchema> = {
|
|
449
|
-
[K in keyof TRpcSchema]: Prettify<{
|
|
450
|
-
method: TRpcSchema[K] extends TRpcSchema[number] ? TRpcSchema[K]["Method"] : string;
|
|
451
|
-
} & (TRpcSchema[K] extends TRpcSchema[number] ? TRpcSchema[K]["Parameters"] extends undefined ? {
|
|
452
|
-
params?: never;
|
|
453
|
-
} : {
|
|
454
|
-
params: TRpcSchema[K]["Parameters"];
|
|
455
|
-
} : never)>;
|
|
456
|
-
}[number];
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* Type that extract the possible return type from a RPC Schema
|
|
460
|
-
* @ignore
|
|
461
|
-
*/
|
|
462
|
-
export declare type ExtractedReturnTypeFromRpc<TRpcSchema extends RpcSchema, TParameters extends ExtractedParametersFromRpc<TRpcSchema> = ExtractedParametersFromRpc<TRpcSchema>> = ExtractedMethodFromRpc<TRpcSchema, TParameters["method"]>["ReturnType"];
|
|
463
|
-
|
|
464
398
|
/**
|
|
465
399
|
* The different types of final actions we can display in the final step
|
|
466
400
|
* @group Modal Display
|
|
@@ -522,7 +456,7 @@ export declare type FrakContext = {
|
|
|
522
456
|
};
|
|
523
457
|
|
|
524
458
|
/**
|
|
525
|
-
* Export our frak context
|
|
459
|
+
* Export our frak context
|
|
526
460
|
*/
|
|
527
461
|
export declare const FrakContextManager: {
|
|
528
462
|
compress: typeof compress;
|
|
@@ -536,14 +470,9 @@ export declare const FrakContextManager: {
|
|
|
536
470
|
declare type FrakEvent = "share_button_clicked" | "wallet_button_clicked" | "share_modal_error" | "user_referred";
|
|
537
471
|
|
|
538
472
|
/**
|
|
539
|
-
*
|
|
540
|
-
* @ignore
|
|
473
|
+
* Represent an iframe event
|
|
541
474
|
*/
|
|
542
|
-
export declare
|
|
543
|
-
code: number;
|
|
544
|
-
data?: T | undefined;
|
|
545
|
-
constructor(code: number, message: string, data?: T | undefined);
|
|
546
|
-
}
|
|
475
|
+
export declare type FrakLifecycleEvent = IFrameLifecycleEvent | ClientLifecycleEvent;
|
|
547
476
|
|
|
548
477
|
/**
|
|
549
478
|
* Configuration for the Frak Wallet SDK
|
|
@@ -710,13 +639,6 @@ declare type HandshakeResponse = {
|
|
|
710
639
|
};
|
|
711
640
|
};
|
|
712
641
|
|
|
713
|
-
/**
|
|
714
|
-
* Compress the given params, and add hash protection to (rapidly) prevent interception modification
|
|
715
|
-
* @param data The params to encode
|
|
716
|
-
* @ignore
|
|
717
|
-
*/
|
|
718
|
-
export declare function hashAndCompressData<T>(data: T): CompressedData;
|
|
719
|
-
|
|
720
642
|
/**
|
|
721
643
|
* The encoded data to send to a client / received by a client
|
|
722
644
|
* @ignore
|
|
@@ -727,6 +649,7 @@ export declare type HashProtectedData<DataType> = Readonly<DataType & {
|
|
|
727
649
|
|
|
728
650
|
declare type HearbeatEvent = {
|
|
729
651
|
clientLifecycle: "heartbeat";
|
|
652
|
+
data?: never;
|
|
730
653
|
};
|
|
731
654
|
|
|
732
655
|
/**
|
|
@@ -764,66 +687,63 @@ declare type HearbeatEvent = {
|
|
|
764
687
|
*/
|
|
765
688
|
export declare type I18nConfig = Record<Language, LocalizedI18nConfig> | LocalizedI18nConfig;
|
|
766
689
|
|
|
767
|
-
/**
|
|
768
|
-
* Represent an iframe event
|
|
769
|
-
*/
|
|
770
|
-
export declare type IFrameEvent = IFrameRpcEvent | IFrameLifecycleEvent | ClientLifecycleEvent;
|
|
771
|
-
|
|
772
690
|
/**
|
|
773
691
|
* Event related to the iframe lifecycle
|
|
774
692
|
* @ignore
|
|
775
693
|
*/
|
|
776
694
|
export declare type IFrameLifecycleEvent = {
|
|
777
|
-
iframeLifecycle: "connected" | "show" | "hide";
|
|
695
|
+
iframeLifecycle: "connected" | "show" | "hide" | "remove-backup";
|
|
778
696
|
data?: never;
|
|
779
|
-
} | DoBackupEvent |
|
|
780
|
-
|
|
781
|
-
/**
|
|
782
|
-
* Represent an iframe rpc event
|
|
783
|
-
*/
|
|
784
|
-
export declare type IFrameRpcEvent = {
|
|
785
|
-
id: string;
|
|
786
|
-
topic: ExtractedParametersFromRpc<IFrameRpcSchema>["method"];
|
|
787
|
-
data: CompressedData;
|
|
788
|
-
};
|
|
697
|
+
} | DoBackupEvent | HandshakeRequestEvent | RedirectRequestEvent;
|
|
789
698
|
|
|
790
699
|
/**
|
|
791
700
|
* RPC interface that's used for the iframe communication
|
|
792
701
|
*
|
|
793
|
-
* Define all the methods available within the iFrame RPC client
|
|
702
|
+
* Define all the methods available within the iFrame RPC client with response type annotations
|
|
794
703
|
*
|
|
795
704
|
* @group RPC Schema
|
|
796
705
|
*
|
|
797
706
|
* @remarks
|
|
798
|
-
*
|
|
707
|
+
* Each method in the schema now includes a ResponseType field that indicates:
|
|
708
|
+
* - "promise": One-shot request that resolves once
|
|
709
|
+
* - "stream": Streaming request that can emit multiple values
|
|
710
|
+
*
|
|
711
|
+
* ### Methods:
|
|
799
712
|
*
|
|
800
|
-
*
|
|
713
|
+
* #### frak_listenToWalletStatus
|
|
801
714
|
* - Params: None
|
|
802
715
|
* - Returns: {@link WalletStatusReturnType}
|
|
716
|
+
* - Response Type: stream (emits updates when wallet status changes)
|
|
803
717
|
*
|
|
804
|
-
*
|
|
805
|
-
* - Params: [{@link ModalRpcStepsInput},
|
|
718
|
+
* #### frak_displayModal
|
|
719
|
+
* - Params: [requests: {@link ModalRpcStepsInput}, metadata?: {@link ModalRpcMetadata}, configMetadata: {@link FrakWalletSdkConfig}["metadata"]]
|
|
806
720
|
* - Returns: {@link ModalRpcStepsResultType}
|
|
721
|
+
* - Response Type: promise (one-shot)
|
|
807
722
|
*
|
|
808
|
-
*
|
|
723
|
+
* #### frak_sendInteraction
|
|
809
724
|
* - Params: [productId: Hex, interaction: {@link PreparedInteraction}, signature?: Hex]
|
|
810
725
|
* - Returns: {@link SendInteractionReturnType}
|
|
726
|
+
* - Response Type: promise (one-shot)
|
|
811
727
|
*
|
|
812
|
-
*
|
|
813
|
-
* - Params [params: {@link OpenSsoParamsType}, name: string, customCss?: string]
|
|
814
|
-
* - Returns:
|
|
728
|
+
* #### frak_sso
|
|
729
|
+
* - Params: [params: {@link OpenSsoParamsType}, name: string, customCss?: string]
|
|
730
|
+
* - Returns: {@link OpenSsoReturnType}
|
|
731
|
+
* - Response Type: promise (one-shot)
|
|
815
732
|
*
|
|
816
|
-
*
|
|
733
|
+
* #### frak_getProductInformation
|
|
817
734
|
* - Params: None
|
|
818
735
|
* - Returns: {@link GetProductInformationReturnType}
|
|
736
|
+
* - Response Type: promise (one-shot)
|
|
819
737
|
*
|
|
820
|
-
*
|
|
821
|
-
* - Params: [{@link DisplayEmbeddedWalletParamsType}]
|
|
738
|
+
* #### frak_displayEmbeddedWallet
|
|
739
|
+
* - Params: [request: {@link DisplayEmbeddedWalletParamsType}, metadata: {@link FrakWalletSdkConfig}["metadata"]]
|
|
822
740
|
* - Returns: {@link DisplayEmbeddedWalletResultType}
|
|
741
|
+
* - Response Type: promise (one-shot)
|
|
823
742
|
*/
|
|
824
743
|
export declare type IFrameRpcSchema = [
|
|
825
744
|
/**
|
|
826
745
|
* Method used to listen to the wallet status
|
|
746
|
+
* This is a streaming method that emits updates when wallet status changes
|
|
827
747
|
*/
|
|
828
748
|
{
|
|
829
749
|
Method: "frak_listenToWalletStatus";
|
|
@@ -832,6 +752,7 @@ export declare type IFrameRpcSchema = [
|
|
|
832
752
|
},
|
|
833
753
|
/**
|
|
834
754
|
* Method to display a modal with the provided steps
|
|
755
|
+
* This is a one-shot request
|
|
835
756
|
*/
|
|
836
757
|
{
|
|
837
758
|
Method: "frak_displayModal";
|
|
@@ -844,6 +765,7 @@ export declare type IFrameRpcSchema = [
|
|
|
844
765
|
},
|
|
845
766
|
/**
|
|
846
767
|
* Method to transmit a user interaction
|
|
768
|
+
* This is a one-shot request
|
|
847
769
|
*/
|
|
848
770
|
{
|
|
849
771
|
Method: "frak_sendInteraction";
|
|
@@ -856,7 +778,7 @@ export declare type IFrameRpcSchema = [
|
|
|
856
778
|
},
|
|
857
779
|
/**
|
|
858
780
|
* Method to start a SSO
|
|
859
|
-
*
|
|
781
|
+
* This is a one-shot request
|
|
860
782
|
*/
|
|
861
783
|
{
|
|
862
784
|
Method: "frak_sso";
|
|
@@ -865,13 +787,14 @@ export declare type IFrameRpcSchema = [
|
|
|
865
787
|
name: string,
|
|
866
788
|
customCss?: string
|
|
867
789
|
];
|
|
868
|
-
ReturnType:
|
|
790
|
+
ReturnType: OpenSsoReturnType;
|
|
869
791
|
},
|
|
870
792
|
/**
|
|
871
793
|
* Method to get current product information's
|
|
872
794
|
* - Is product minted?
|
|
873
795
|
* - Does it have running campaign?
|
|
874
796
|
* - Estimated reward on actions
|
|
797
|
+
* This is a one-shot request
|
|
875
798
|
*/
|
|
876
799
|
{
|
|
877
800
|
Method: "frak_getProductInformation";
|
|
@@ -880,6 +803,7 @@ export declare type IFrameRpcSchema = [
|
|
|
880
803
|
},
|
|
881
804
|
/**
|
|
882
805
|
* Method to show the embedded wallet, with potential customization
|
|
806
|
+
* This is a one-shot request
|
|
883
807
|
*/
|
|
884
808
|
{
|
|
885
809
|
Method: "frak_displayEmbeddedWallet";
|
|
@@ -906,11 +830,11 @@ export declare type IFrameTransport = {
|
|
|
906
830
|
/**
|
|
907
831
|
* Function used to perform a single request via the iframe transport
|
|
908
832
|
*/
|
|
909
|
-
request:
|
|
833
|
+
request: RpcClient<IFrameRpcSchema, LifecycleMessage>["request"];
|
|
910
834
|
/**
|
|
911
835
|
* Function used to listen to a request response via the iframe transport
|
|
912
836
|
*/
|
|
913
|
-
listenerRequest:
|
|
837
|
+
listenerRequest: RpcClient<IFrameRpcSchema, LifecycleMessage>["listen"];
|
|
914
838
|
/**
|
|
915
839
|
* Function used to destroy the iframe transport
|
|
916
840
|
*/
|
|
@@ -966,12 +890,6 @@ export declare type KeyProvider<DataType> = (value: DataType) => string[];
|
|
|
966
890
|
*/
|
|
967
891
|
export declare type Language = "fr" | "en";
|
|
968
892
|
|
|
969
|
-
/**
|
|
970
|
-
* Type used for a listening request
|
|
971
|
-
* @inline
|
|
972
|
-
*/
|
|
973
|
-
declare type ListenerRequestFn<TRpcSchema extends RpcSchema> = <TParameters extends ExtractedParametersFromRpc<TRpcSchema> = ExtractedParametersFromRpc<TRpcSchema>, _ReturnType = ExtractedReturnTypeFromRpc<TRpcSchema, TParameters>>(args: TParameters, callback: (result: _ReturnType) => void) => Promise<void>;
|
|
974
|
-
|
|
975
893
|
/**
|
|
976
894
|
* Map the currency to the locale
|
|
977
895
|
*/
|
|
@@ -1283,9 +1201,18 @@ export declare type OpenInteractionSessionReturnType = {
|
|
|
1283
1201
|
* metadata,
|
|
1284
1202
|
* });
|
|
1285
1203
|
* ```
|
|
1204
|
+
* ```ts [With tracking]
|
|
1205
|
+
* // Trigger an sso with consumeKey for tracking
|
|
1206
|
+
* const result = await openSso(frakConfig, {
|
|
1207
|
+
* directExit: true,
|
|
1208
|
+
* generateConsumeKey: true,
|
|
1209
|
+
* metadata,
|
|
1210
|
+
* });
|
|
1211
|
+
* console.log(result.consumeKey); // Use this to track SSO status
|
|
1212
|
+
* ```
|
|
1286
1213
|
* :::
|
|
1287
1214
|
*/
|
|
1288
|
-
export declare function openSso(client: FrakClient, args: OpenSsoParamsType): Promise<
|
|
1215
|
+
export declare function openSso(client: FrakClient, args: OpenSsoParamsType): Promise<OpenSsoReturnType>;
|
|
1289
1216
|
|
|
1290
1217
|
/**
|
|
1291
1218
|
* Params to start a SSO
|
|
@@ -1301,6 +1228,11 @@ export declare type OpenSsoParamsType = {
|
|
|
1301
1228
|
* @defaultValue true
|
|
1302
1229
|
*/
|
|
1303
1230
|
directExit?: boolean;
|
|
1231
|
+
/**
|
|
1232
|
+
* If true, opens SSO in same window instead of popup
|
|
1233
|
+
* Defaults to true when redirectUrl is provided, false otherwise
|
|
1234
|
+
*/
|
|
1235
|
+
openInSameWindow?: boolean;
|
|
1304
1236
|
/**
|
|
1305
1237
|
* Language of the SSO page (optional)
|
|
1306
1238
|
* It will default to the current user language (or "en" if unsupported language)
|
|
@@ -1312,6 +1244,17 @@ export declare type OpenSsoParamsType = {
|
|
|
1312
1244
|
metadata: SsoMetadata;
|
|
1313
1245
|
};
|
|
1314
1246
|
|
|
1247
|
+
/**
|
|
1248
|
+
* Response after an SSO has been openned
|
|
1249
|
+
*/
|
|
1250
|
+
export declare type OpenSsoReturnType = {
|
|
1251
|
+
/**
|
|
1252
|
+
* Optional wallet address, returned when SSO completes via postMessage
|
|
1253
|
+
* Note: Only present when SSO flow completes (not immediately on open)
|
|
1254
|
+
*/
|
|
1255
|
+
wallet?: Hex;
|
|
1256
|
+
};
|
|
1257
|
+
|
|
1315
1258
|
/**
|
|
1316
1259
|
* Parse the current URL into a Frak Context
|
|
1317
1260
|
* @param args
|
|
@@ -1497,7 +1440,8 @@ declare type RedirectRequestEvent = {
|
|
|
1497
1440
|
iframeLifecycle: "redirect";
|
|
1498
1441
|
data: {
|
|
1499
1442
|
/**
|
|
1500
|
-
* The base url to redirect to
|
|
1443
|
+
* The base url to redirect to
|
|
1444
|
+
* If it contain a query param `u`, the client need will suffix the current url to the base url
|
|
1501
1445
|
*/
|
|
1502
1446
|
baseRedirectUrl: string;
|
|
1503
1447
|
};
|
|
@@ -1567,10 +1511,6 @@ declare type ReferralState = "idle" | "processing" | "success" | "no-wallet" | "
|
|
|
1567
1511
|
*/
|
|
1568
1512
|
declare function remove(url: string): string;
|
|
1569
1513
|
|
|
1570
|
-
declare type RemoveBackupEvent = {
|
|
1571
|
-
iframeLifecycle: "remove-backup";
|
|
1572
|
-
};
|
|
1573
|
-
|
|
1574
1514
|
/**
|
|
1575
1515
|
* Replace the current url with the given Frak context
|
|
1576
1516
|
* @param args
|
|
@@ -1582,12 +1522,6 @@ declare function replaceUrl({ url: baseUrl, context, }: {
|
|
|
1582
1522
|
context: Partial<FrakContext> | null;
|
|
1583
1523
|
}): void;
|
|
1584
1524
|
|
|
1585
|
-
/**
|
|
1586
|
-
* Type used for a one shot request function
|
|
1587
|
-
* @inline
|
|
1588
|
-
*/
|
|
1589
|
-
declare type RequestFn<TRpcSchema extends RpcSchema> = <TParameters extends ExtractedParametersFromRpc<TRpcSchema> = ExtractedParametersFromRpc<TRpcSchema>, _ReturnType = ExtractedReturnTypeFromRpc<TRpcSchema, TParameters>>(args: TParameters) => Promise<_ReturnType>;
|
|
1590
|
-
|
|
1591
1525
|
declare type RestoreBackupEvent = {
|
|
1592
1526
|
clientLifecycle: "restore-backup";
|
|
1593
1527
|
data: {
|
|
@@ -1621,42 +1555,6 @@ export declare const RetailInteractionEncoder: {
|
|
|
1621
1555
|
}): PreparedInteraction;
|
|
1622
1556
|
};
|
|
1623
1557
|
|
|
1624
|
-
/**
|
|
1625
|
-
* The different Frak RPC error codes
|
|
1626
|
-
*/
|
|
1627
|
-
export declare const RpcErrorCodes: {
|
|
1628
|
-
readonly parseError: -32700;
|
|
1629
|
-
readonly invalidRequest: -32600;
|
|
1630
|
-
readonly methodNotFound: -32601;
|
|
1631
|
-
readonly invalidParams: -32602;
|
|
1632
|
-
readonly internalError: -32603;
|
|
1633
|
-
readonly serverError: -32000;
|
|
1634
|
-
readonly clientNotConnected: -32001;
|
|
1635
|
-
readonly configError: -32002;
|
|
1636
|
-
readonly corruptedResponse: -32003;
|
|
1637
|
-
readonly clientAborted: -32004;
|
|
1638
|
-
readonly walletNotConnected: -32005;
|
|
1639
|
-
readonly serverErrorForInteractionDelegation: -32006;
|
|
1640
|
-
};
|
|
1641
|
-
|
|
1642
|
-
/**
|
|
1643
|
-
* Raw response that we will receive after an rpc request
|
|
1644
|
-
* @ignore
|
|
1645
|
-
*/
|
|
1646
|
-
export declare type RpcResponse<TRpcSchema extends RpcSchema, TMethod extends TRpcSchema[number]["Method"] = TRpcSchema[number]["Method"]> = {
|
|
1647
|
-
result: Extract<TRpcSchema[number], {
|
|
1648
|
-
Method: TMethod;
|
|
1649
|
-
}>["ReturnType"];
|
|
1650
|
-
error?: never;
|
|
1651
|
-
} | {
|
|
1652
|
-
result?: never;
|
|
1653
|
-
error: {
|
|
1654
|
-
code: number;
|
|
1655
|
-
message: string;
|
|
1656
|
-
data?: unknown;
|
|
1657
|
-
};
|
|
1658
|
-
};
|
|
1659
|
-
|
|
1660
1558
|
/**
|
|
1661
1559
|
* Function used to send an interaction
|
|
1662
1560
|
* @param client - The current Frak Client
|
|
@@ -1892,6 +1790,13 @@ export declare type SsoMetadata = {
|
|
|
1892
1790
|
homepageLink?: string;
|
|
1893
1791
|
};
|
|
1894
1792
|
|
|
1793
|
+
declare type SsoRedirectCompleteEvent = {
|
|
1794
|
+
clientLifecycle: "sso-redirect-complete";
|
|
1795
|
+
data: {
|
|
1796
|
+
compressed: string;
|
|
1797
|
+
};
|
|
1798
|
+
};
|
|
1799
|
+
|
|
1895
1800
|
/**
|
|
1896
1801
|
* The type for the amount of tokens
|
|
1897
1802
|
*/
|
|
@@ -1982,7 +1887,7 @@ export declare type WalletStatusReturnType = WalletConnected | WalletNotConnecte
|
|
|
1982
1887
|
* Function used to watch the current frak wallet status
|
|
1983
1888
|
* @param client - The current Frak Client
|
|
1984
1889
|
* @param callback - The callback that will receive any wallet status change
|
|
1985
|
-
* @returns A
|
|
1890
|
+
* @returns A promise resolving with the initial wallet status
|
|
1986
1891
|
*
|
|
1987
1892
|
* @description This function will return the current wallet status, and will listen to any change in the wallet status.
|
|
1988
1893
|
*
|