@randombits/use-siwe
Version:
React hook and API endpoints that provide Sign In With Ethereum support
2 lines • 2.49 kB
JavaScript
import{QueryClient as v,QueryClientProvider as M}from"@tanstack/react-query";import S,{createContext as d}from"react";var o=d(void 0),n=d({}),q=new v({defaultOptions:{queries:{staleTime:30*1e3}}}),Q=({children:e,options:s={}})=>S.createElement(n.Provider,{value:s},S.createElement(M,{client:q,context:o},e));import{useQuery as k}from"@tanstack/react-query";import{useContext as T}from"react";import{useContext as A}from"react";var I={baseUrl:"/api/auth"},i=(e={})=>({...I,...e}),b=()=>{let e=A(n);return i(e)};var x=async e=>{let{baseUrl:s}=i(e),t=await fetch(s);if(!t.ok)throw new Error(t.statusText);return t.json()},r=()=>{let e=T(n),{data:s,...t}=k({queryKey:["session"],queryFn:()=>x(e),context:o});return{...t,...s}};import{useMutation as E,useQueryClient as j}from"@tanstack/react-query";import{useContext as B}from"react";import{SiweMessage as K}from"siwe";import{useAccount as V,useNetwork as F,useSignMessage as G}from"wagmi";var w=e=>new K({...e,domain:window.location.host,uri:window.location.origin,version:"1"}),O=({message:e})=>e.prepareMessage(),l=async(e,s)=>{let{baseUrl:t}=i(s);return(await fetch(`${t}/signin`,{headers:{"Content-Type":"application/json"},method:"POST",body:JSON.stringify(e)})).ok},N=({onSuccess:e,onError:s}={})=>{let{address:t}=V(),{chain:p}=F(),{nonce:u}=r(),{signMessageAsync:c}=G(),a=j({context:o}),m=B(n),{mutate:y,mutateAsync:f,...U}=E(async()=>{let g=w({address:t,chainId:p.id,nonce:u}),h=O({message:g}),P=await c({message:h});if(!await l({message:g,signature:P},m))throw new Error("Verification Failed")},{onSuccess:()=>{a.invalidateQueries({queryKey:["session"]}),e&&e()},onError:s,context:o});return{...U,signIn:y,SignInAsync:f}};import{useMutation as R,useQueryClient as W}from"@tanstack/react-query";import{useContext as $}from"react";import{useAccount as D,useDisconnect as J}from"wagmi";var C=async e=>{let{baseUrl:s}=i(e),t=await fetch(`${s}/signout`,{method:"POST"});if(!t.ok)throw new Error(t.statusText)},z=({onSuccess:e,onError:s}={})=>{let{authenticated:t}=r(),{isConnected:p}=D(),{disconnectAsync:u}=J(),c=W({context:o}),a=$(n),{mutate:m,mutateAsync:y,...f}=R(async()=>{t&&await C(a),p&&await u()},{onSuccess:()=>{c.invalidateQueries({queryKey:["session"]}),e&&e()},onError:s,context:o});return{...f,signOut:m,SignOutAsync:y}};export{Q as SiweProvider,w as createMessage,O as getMessageBody,x as getSession,C as signOut,b as useOptions,r as useSession,N as useSignIn,z as useSignOut,l as verify};
//# sourceMappingURL=index.js.map