@radish-la/world-auth
Version:
Extending World Auth SDK for React
2 lines (1 loc) • 3.17 kB
JavaScript
;"use client";var x=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var R=(e,t)=>{for(var s in t)x(e,s,{get:t[s],enumerable:!0})},B=(e,t,s,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of V(t))!O.call(e,n)&&n!==s&&x(e,n,{get:()=>t[n],enumerable:!(r=P(t,n))||r.enumerable});return e};var T=e=>B(x({},"__esModule",{value:!0}),e);var F={};R(F,{WorldAppProvider:()=>b,generateNonce:()=>A,useWorldAuth:()=>E,useWorldUser:()=>$});module.exports=T(F);var A=()=>crypto.randomUUID().replace(/-/g,""),p=e=>`__session__world__${encodeURIComponent(e||"__")}`;function W(e){let t=localStorage.getItem(e);return t?JSON.parse(t):null}var f=require("react"),U=require("@worldcoin/minikit-js");var D=require("react"),m=require("jotai");var J=(0,m.atom)({}),S=()=>(0,m.useAtom)(J),L=(0,m.atom)(null),u=()=>{let[e]=S(),[t,s]=(0,m.useAtom)(L);return(0,D.useEffect)(()=>{let r=W(p(e.appName));s(r?.user||null)},[e.appName]),[t,s]};var E=({onWrongEnvironment:e,onLoginSuccess:t,onLoginError:s}={})=>{let[r]=S(),[n,g]=(0,f.useState)(!1),[w,I]=(0,f.useState)(!0),[o,c]=u(),a=p(r.appName),K=()=>{localStorage.removeItem(a),c(v())},v=()=>(g(!1),null),_=async()=>{if(!w)return console.error("MiniKit:NotInstalled"),(e||r.onWrongEnvironment)?.(),v();try{g(!0);let i=A(),{finalPayload:y}=await U.MiniKit.commandsAsync.walletAuth({nonce:i,expirationTime:new Date(new Date().getTime()+7*24*60*60*1e3),notBefore:new Date(new Date().getTime()-24*60*60*1e3),statement:`Allow ${r.appName||"this app"} to view your wallet.`});if(y.status==="error")throw new Error("PayloadError");if(typeof r.withValidator!="function")throw new Error("NoValidatorFound");let{isValid:C}=await r.withValidator({nonce:i,payload:y});if(!C)throw new Error("InvalidSession");let d=U.MiniKit.user;return d||(d={walletAddress:y.address,username:"",profilePictureUrl:""}),localStorage.setItem(a,JSON.stringify({nonce:i,payload:y,user:d})),t?.(d),c(d),d}catch(i){console.error("Error:",i),s?.(i)}return v()};(0,f.useEffect)(()=>{o?.walletAddress&&g(!1),!o?.username&&o?.walletAddress&&U.MiniKit.getUserByAddress(o.walletAddress).then(i=>{i.walletAddress&&c(i)})},[o]),(0,f.useEffect)(()=>{I(U.MiniKit?.isInstalled())},[r.appName,r.appId]);let M=!!o?.walletAddress;return{signIn:_,address:o?.walletAddress,user:M?o:null,recklesslySetUser:c,signOut:K,isConnecting:n,isMiniApp:w,isConnected:M}};var $=()=>{let[e]=u();return e?.walletAddress?e:null};var N=require("@worldcoin/minikit-js"),l=require("react");var h=require("react/jsx-runtime");function b({children:e,appId:t,appName:s,withValidator:r,onWrongEnvironment:n}){let[,g]=S(),[,w]=u(),{signOut:I}=E(),o=(0,l.useRef)(r),c=(0,l.useRef)(n);return(0,l.useEffect)(()=>{o.current=r,c.current=n}),(0,l.useEffect)(()=>{g(a=>({...a,appId:t,appName:s,withValidator:o.current,onWrongEnvironment:c.current}))},[t,s]),(0,l.useEffect)(()=>{let a=W(p(s));a&&o.current(a).then(({isValid:K})=>{K?w(a.user):I()})},[s]),(0,l.useEffect)(()=>{N.MiniKit.install()},[]),(0,h.jsx)(h.Fragment,{children:e})}0&&(module.exports={WorldAppProvider,generateNonce,useWorldAuth,useWorldUser});