@@ -195,7 +195,14 @@ type UseFarcasterMultiIdentityOptions = {
195195 onLogOut ?: ( identity : FarcasterSigner ) => void ;
196196 onIdentityRemove ?: ( identity : FarcasterSigner ) => void ;
197197 onIdentitySelect ?: ( identity : FarcasterSigner ) => void ;
198+ /**
199+ * Function used to generate a unique user id for signer._id property value
200+ */
198201 generateUserId ?: ( ) => string | number ;
202+ /**
203+ * Custom fetch function used to do requests
204+ */
205+ fetchFn ?: typeof fetch ;
199206} ;
200207
201208export type FarcasterMultiSignerInstance =
@@ -210,6 +217,7 @@ export type FarcasterMultiSignerInstance =
210217
211218const defaultStorage = new WebStorage ( ) ;
212219const defaultGenerateUserId = ( ) : number => Date . now ( ) ;
220+ const defaultFetchFn : typeof fetch = ( ...args ) => fetch ( ...args ) ;
213221
214222type SignedKeyRequestSponsorship = {
215223 sponsorFid : number ;
@@ -229,6 +237,7 @@ export function useFarcasterMultiIdentity({
229237 onIdentityRemove,
230238 onIdentitySelect,
231239 generateUserId = defaultGenerateUserId ,
240+ fetchFn = defaultFetchFn ,
232241} : UseFarcasterMultiIdentityOptions ) : FarcasterMultiSignerInstance {
233242 const storageRef = useRef ( storage ) ;
234243 const identityPoller = useRef ( new IdentityPoller ( ) ) . current ;
@@ -268,13 +277,14 @@ export function useFarcasterMultiIdentity({
268277 const onIdentitySelectRef = useFreshRef ( onIdentitySelect ) ;
269278 const generateUserIdRef = useFreshRef ( generateUserId ) ;
270279 const onMissingIdentityRef = useFreshRef ( onMissingIdentity ) ;
280+ const fetchFnRef = useFreshRef ( fetchFn ) ;
271281
272282 const createFarcasterSigner =
273283 useCallback ( async ( ) : Promise < FarcasterCreateSignerResult > => {
274284 try {
275285 const keypair = await createKeypairEDDSA ( ) ;
276286 const keypairString = convertKeypairToHex ( keypair ) ;
277- const authorizationResponse = await fetch (
287+ const authorizationResponse = await fetchFnRef . current (
278288 // real signer or local one are handled by local route so we don't need to expose anything to client side bundle
279289 signerUrl ,
280290 {
@@ -312,19 +322,22 @@ export function useFarcasterMultiIdentity({
312322 const {
313323 result : { signedKeyRequest } ,
314324 } = ( await (
315- await fetch ( `https://api.warpcast.com/v2/signed-key-requests` , {
316- method : "POST" ,
317- headers : {
318- "Content-Type" : "application/json" ,
319- } ,
320- body : JSON . stringify ( {
321- key : keypairString . publicKey ,
322- signature,
323- requestFid,
324- deadline,
325- sponsorship,
326- } ) ,
327- } )
325+ await fetchFnRef . current (
326+ "https://api.warpcast.com/v2/signed-key-requests" ,
327+ {
328+ method : "POST" ,
329+ headers : {
330+ "Content-Type" : "application/json" ,
331+ } ,
332+ body : JSON . stringify ( {
333+ key : keypairString . publicKey ,
334+ signature,
335+ requestFid,
336+ deadline,
337+ sponsorship,
338+ } ) ,
339+ }
340+ )
328341 ) . json ( ) ) as {
329342 result : {
330343 signedKeyRequest : {
@@ -383,7 +396,7 @@ export function useFarcasterMultiIdentity({
383396 console . error ( "@frames.js/render: API Call failed" , error ) ;
384397 throw error ;
385398 }
386- } , [ generateUserIdRef , onLogInStartRef , setState , signerUrl ] ) ;
399+ } , [ fetchFnRef , generateUserIdRef , onLogInStartRef , setState , signerUrl ] ) ;
387400
388401 const impersonateUser = useCallback (
389402 async ( fid : number ) => {
0 commit comments