11import { useMutation , useQueryClient , UseQueryOptions } from "@tanstack/react-query" ;
2+ import { useContext } from "react" ;
23import { SiweMessage } from "siwe" ;
34import { useAccount , useNetwork , useSignMessage } from "wagmi" ;
4- import { siweContext as context } from "./siweProvider.js" ;
5+ import { parseOptions } from "./parseOptions.js" ;
6+ import { optionsContext , queryContext } from "./siweProvider.js" ;
7+ import { UseSiweOptions } from "./types.js" ;
58import { useSession } from "./useSession.js" ;
69
710type UseSignInOptions = Pick < UseQueryOptions < void > , "onSuccess" | "onError" >
11+ type MessageArgs = {
12+ address : string ,
13+ chainId : number ,
14+ nonce : string ,
15+ } ;
16+ type VerifyArgs = {
17+ message : string ,
18+ signature : string ,
19+ } ;
820
9- export const createMessage = ( options : { address : string , chainId : number , nonce : string } ) =>
21+ export const createMessage = ( args : MessageArgs ) =>
1022 new SiweMessage ( {
11- ...options ,
23+ ...args ,
1224 domain : window . location . host ,
1325 uri : window . location . origin ,
1426 version : "1" ,
@@ -17,10 +29,11 @@ export const createMessage = (options: { address: string, chainId: number, nonce
1729export const getMessageBody = ( { message } : { message : SiweMessage } ) =>
1830 message . prepareMessage ( ) ;
1931
20- export const verify = async ( { message, signature} : { message : string , signature : string } ) => {
21- const res = await fetch ( "/api/auth/signin" , {
32+ export const verify = async ( args : VerifyArgs , options ?: UseSiweOptions ) => {
33+ const { baseUrl } = parseOptions ( options ) ;
34+ const res = await fetch ( `${ baseUrl } /signin` , {
2235 method : "POST" ,
23- body : JSON . stringify ( { message , signature } ) ,
36+ body : JSON . stringify ( args ) ,
2437 } ) ;
2538
2639 return res . ok ;
@@ -31,14 +44,17 @@ export const useSignIn = ({ onSuccess, onError }: UseSignInOptions = {}) => {
3144 const { chain } = useNetwork ( ) ;
3245 const { nonce } = useSession ( ) ;
3346 const { signMessageAsync } = useSignMessage ( ) ;
34- const queryClient = useQueryClient ( { context } ) ;
47+ const queryClient = useQueryClient ( {
48+ context : queryContext ,
49+ } ) ;
50+ const options = useContext ( optionsContext ) ;
3551
3652 const { mutate, mutateAsync, ...rest } = useMutation (
3753 async ( ) => {
3854 const rawMessage = createMessage ( { address, chainId : chain . id , nonce } ) ;
3955 const message = getMessageBody ( { message : rawMessage } ) ;
4056 const signature = await signMessageAsync ( { message } ) ;
41- const result = await verify ( { message, signature } ) ;
57+ const result = await verify ( { message, signature } , options ) ;
4258 if ( ! result ) throw new Error ( "Verification Failed" ) ;
4359 } ,
4460 {
@@ -47,7 +63,7 @@ export const useSignIn = ({ onSuccess, onError }: UseSignInOptions = {}) => {
4763 if ( onSuccess ) onSuccess ( ) ;
4864 } ,
4965 onError,
50- context,
66+ context : queryContext ,
5167 } ,
5268 ) ;
5369
0 commit comments