@frak-labs/react-sdk
Version:
React SDK of the Frak wallet, low level library to interact directly with the frak ecosystem.
1 lines • 4.05 kB
JavaScript
import*as e from"react";import*as t from"@frak-labs/core-sdk";import*as n from"@frak-labs/core-sdk/actions";import*as r from"@tanstack/react-query";let o=(0,e.createContext)(void 0);function a(t){let{children:n,config:r}=t;return(0,e.createElement)(o.Provider,{value:{...r,walletUrl:r.walletUrl??"https://wallet.frak.id",domain:r.domain??("undefined"!=typeof window?window?.location?.host:void 0)??"not-found"}},n)}function u(){let n=(0,e.useContext)(o);if(!n)throw new t.FrakRpcError(t.RpcErrorCodes.configError,"Frak config not found");return n}let i=(0,e.createContext)(void 0);function s({style:n,children:r}){let o=u(),[a,s]=(0,e.useState)(void 0),l=(0,e.createElement)("iframe",{...t.baseIframeProps,src:`${o.walletUrl}/listener`,style:n??t.baseIframeProps.style,ref:e=>{e&&!a&&s((0,t.createIFrameFrakClient)({iframe:e,config:o}))}}),f=(0,e.createElement)(i.Provider,{value:a},r);return(0,e.createElement)(e.Fragment,null,l,f)}function l(){return(0,e.useContext)(i)}function f(){let o=(0,r.useQueryClient)(),a=l(),u=(0,e.useCallback)(e=>{o.setQueryData(["frak-sdk","wallet-status-listener"],e)},[o]);return(0,r.useQuery)({gcTime:0,staleTime:0,queryKey:["frak-sdk","wallet-status-listener"],queryFn:async()=>{if(!a)throw new t.ClientNotFound;return(0,n.watchWalletStatus)(a,u)},enabled:!!a})}function c({productId:o,modalConfig:a,options:u}={}){let i=l(),{frakContext:s}=function(){let{location:n}=function(){let t=function(){let[t,n]=(0,e.useState)(!1);return(0,e.useEffect)(()=>{n(!0)},[]),t}(),[n,r]=(0,e.useState)(t?window.location:void 0);(0,e.useEffect)(()=>{if(t)return n||e(),window.addEventListener("popstate",e),()=>{window.removeEventListener("popstate",e)};function e(){r(window.location)}},[t,n]);let o=(0,e.useMemo)(()=>n?.href,[n?.href]);return{location:n,href:o}}();return{frakContext:(0,e.useMemo)(()=>n?.href?t.FrakContextManager.parse({url:n.href}):null,[n?.href]),updateContext:(0,e.useCallback)(e=>{console.log("Updating context",{newContext:e}),t.FrakContextManager.replaceUrl({url:n?.href,context:e})},[n?.href])}}(),{data:d}=f(),{data:m,error:w,status:k}=(0,r.useQuery)({gcTime:0,staleTime:0,queryKey:["frak-sdk","auto-referral-interaction",s?.r??"no-referrer",d?.key??"no-wallet-status",o??"no-product-id"],queryFn:()=>{if(!i)throw new t.ClientNotFound;return(0,n.processReferral)(i,{walletStatus:d,frakContext:s,modalConfig:a,productId:o,options:u})},enabled:!!d});return(0,e.useMemo)(()=>"pending"===k?"processing":"error"===k?w:m||"idle",[m,k,w])}function d({query:e}={}){let o=l();return(0,r.useQuery)({...e,queryKey:["frak-sdk","get-product-information"],queryFn:async()=>{if(!o)throw new t.ClientNotFound;return(0,n.getProductInformation)(o)}})}function m({mutations:e}={}){let o=l();return(0,r.useMutation)({...e,mutationKey:["frak-sdk","siwe-authenticate",o?.config.domain??"no-domain"],mutationFn:async e=>{if(!o)throw new t.ClientNotFound;return(0,n.siweAuthenticate)(o,e)}})}function w({mutations:e}={}){let o=l();return(0,r.useMutation)({...e,mutationKey:["frak-sdk","open-sso"],mutationFn:async e=>{if(!o)throw new t.ClientNotFound;return(0,n.openSso)(o,e)}})}function k({mutations:e}={}){let o=l();return(0,r.useMutation)({...e,mutationKey:["frak-sdk","send-interaction"],mutationFn:async e=>{if(!o)throw new t.ClientNotFound;return(0,n.sendInteraction)(o,e)}})}function y({mutations:e}={}){let o=l();return(0,r.useMutation)({...e,mutationKey:["frak-sdk","display-modal"],mutationFn:async e=>{if(!o)throw new t.ClientNotFound;return(0,n.displayModal)(o,e)}})}function F({mutations:e}={}){let o=l();return(0,r.useMutation)({...e,mutationKey:["frak-sdk","send-transaction"],mutationFn:async e=>{if(!o)throw new t.ClientNotFound;return(0,n.sendTransaction)(o,e)}})}export{o as FrakConfigContext,a as FrakConfigProvider,i as FrakIFrameClientContext,s as FrakIFrameClientProvider,y as useDisplayModal,l as useFrakClient,u as useFrakConfig,d as useGetProductInformation,w as useOpenSso,c as useReferralInteraction,k as useSendInteraction,F as useSendTransactionAction,m as useSiweAuthenticate,f as useWalletStatus};