@miden-sdk/miden-wallet-adapter-react 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/MidenFiSignerProvider.tsx +732 -0
  2. package/WalletProvider.tsx +443 -0
  3. package/__tests__/MidenFiSignerProvider.test.tsx +426 -0
  4. package/dist/MidenFiSignerProvider.d.ts +113 -0
  5. package/dist/MidenFiSignerProvider.js +501 -0
  6. package/dist/MidenFiSignerProvider.js.map +1 -0
  7. package/dist/WalletProvider.d.ts +13 -0
  8. package/dist/WalletProvider.js +302 -0
  9. package/dist/WalletProvider.js.map +1 -0
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.js +7 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/useLocalStorage.d.ts +2 -0
  14. package/dist/useLocalStorage.js +39 -0
  15. package/dist/useLocalStorage.js.map +1 -0
  16. package/dist/useWallet.d.ts +30 -0
  17. package/dist/useWallet.js +81 -0
  18. package/dist/useWallet.js.map +1 -0
  19. package/dist/vitest.config.d.ts +2 -0
  20. package/dist/vitest.config.js +8 -0
  21. package/dist/vitest.config.js.map +1 -0
  22. package/docs/README.md +30 -0
  23. package/docs/functions/useLocalStorage.md +29 -0
  24. package/docs/functions/useMidenFiWallet.md +28 -0
  25. package/docs/functions/useWallet.md +13 -0
  26. package/docs/interfaces/MidenFiSignerProviderProps.md +87 -0
  27. package/docs/interfaces/Wallet.md +19 -0
  28. package/docs/interfaces/WalletContextState.md +235 -0
  29. package/docs/interfaces/WalletProviderProps.md +65 -0
  30. package/docs/variables/MidenFiSignerProvider.md +54 -0
  31. package/docs/variables/WalletContext.md +9 -0
  32. package/docs/variables/WalletProvider.md +9 -0
  33. package/index.ts +15 -0
  34. package/package.json +42 -0
  35. package/tsconfig.json +16 -0
  36. package/useLocalStorage.ts +39 -0
  37. package/useWallet.ts +197 -0
  38. package/vitest.config.ts +8 -0
@@ -0,0 +1,501 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback, useMemo, useRef, createContext, useContext, } from 'react';
3
+ import { SignerContext } from '@miden-sdk/react';
4
+ import { AllowedPrivateData, PrivateDataPermission, WalletAdapterNetwork, WalletNotConnectedError, WalletNotReadyError, WalletNotSelectedError, WalletReadyState, } from '@miden-sdk/miden-wallet-adapter-base';
5
+ import { MidenWalletAdapter } from '@miden-sdk/miden-wallet-adapter-miden';
6
+ import { useLocalStorage } from './useLocalStorage';
7
+ const WalletContext = createContext({});
8
+ const initialState = {
9
+ wallet: null,
10
+ adapter: null,
11
+ address: null,
12
+ publicKey: null,
13
+ connected: false,
14
+ };
15
+ /**
16
+ * MidenFiSignerProvider bridges the MidenFi wallet with MidenProvider.
17
+ *
18
+ * This is a unified provider that handles both wallet connection and signer context.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * // Simplest usage - uses MidenWalletAdapter by default
23
+ * <MidenFiSignerProvider>
24
+ * <MidenProvider config={{ rpcUrl: "testnet" }}>
25
+ * <App />
26
+ * </MidenProvider>
27
+ * </MidenFiSignerProvider>
28
+ *
29
+ * // With custom options
30
+ * <MidenFiSignerProvider
31
+ * appName="My DApp"
32
+ * network={WalletAdapterNetwork.Testnet}
33
+ * autoConnect={true}
34
+ * >
35
+ * <MidenProvider config={{ rpcUrl: "testnet" }}>
36
+ * <App />
37
+ * </MidenProvider>
38
+ * </MidenFiSignerProvider>
39
+ *
40
+ * // With custom wallets
41
+ * <MidenFiSignerProvider wallets={[new CustomWalletAdapter()]}>
42
+ * <MidenProvider config={{ rpcUrl: "testnet" }}>
43
+ * <App />
44
+ * </MidenProvider>
45
+ * </MidenFiSignerProvider>
46
+ * ```
47
+ *
48
+ * For wallet operations, use the useMidenFiWallet hook:
49
+ *
50
+ * @example
51
+ * ```tsx
52
+ * const { connected, connect, disconnect, select, wallets } = useMidenFiWallet();
53
+ *
54
+ * // If multiple wallets, select one first
55
+ * select(wallets[0].adapter.name);
56
+ *
57
+ * // Then connect
58
+ * await connect();
59
+ * ```
60
+ */
61
+ export const MidenFiSignerProvider = ({ children, wallets: walletsProp, appName = 'Miden DApp', network = WalletAdapterNetwork.Testnet, autoConnect = true, privateDataPermission = PrivateDataPermission.UponRequest, allowedPrivateData = AllowedPrivateData.None, onError, localStorageKey = 'walletName', }) => {
62
+ // Create default wallets if not provided
63
+ const adapters = useMemo(() => walletsProp ?? [new MidenWalletAdapter({ appName })], [walletsProp, appName]);
64
+ const [name, setName] = useLocalStorage(localStorageKey, null);
65
+ const [{ wallet, adapter, address, publicKey, connected }, setState] = useState(initialState);
66
+ const readyState = adapter?.readyState || WalletReadyState.Unsupported;
67
+ const [connecting, setConnecting] = useState(false);
68
+ const [disconnecting, setDisconnecting] = useState(false);
69
+ const isConnecting = useRef(false);
70
+ const isDisconnecting = useRef(false);
71
+ const isUnloading = useRef(false);
72
+ // Wrap adapters to conform to the `Wallet` interface
73
+ const [wallets, setWallets] = useState(() => adapters.map((adapter) => ({
74
+ adapter,
75
+ readyState: adapter.readyState,
76
+ })));
77
+ // When the adapters change, start to listen for changes to their `readyState`
78
+ useEffect(() => {
79
+ setWallets((wallets) => adapters.map((adapter, index) => {
80
+ const wallet = wallets[index];
81
+ return wallet &&
82
+ wallet.adapter === adapter &&
83
+ wallet.readyState === adapter.readyState
84
+ ? wallet
85
+ : {
86
+ adapter: adapter,
87
+ readyState: adapter.readyState,
88
+ };
89
+ }));
90
+ function handleReadyStateChange(readyState) {
91
+ setWallets((prevWallets) => {
92
+ const index = prevWallets.findIndex(({ adapter }) => adapter === this);
93
+ if (index === -1)
94
+ return prevWallets;
95
+ const { adapter } = prevWallets[index];
96
+ return [
97
+ ...prevWallets.slice(0, index),
98
+ { adapter, readyState },
99
+ ...prevWallets.slice(index + 1),
100
+ ];
101
+ });
102
+ }
103
+ adapters.forEach((adapter) => adapter.on('readyStateChange', handleReadyStateChange, adapter));
104
+ return () => adapters.forEach((adapter) => adapter.off('readyStateChange', handleReadyStateChange, adapter));
105
+ }, [adapters]);
106
+ // When the selected wallet changes, initialize the state.
107
+ // Use a functional update to bail out when nothing has actually changed,
108
+ // preventing unnecessary re-renders that cause WASM concurrency races.
109
+ useEffect(() => {
110
+ const found = name && wallets.find(({ adapter }) => adapter.name === name);
111
+ if (found) {
112
+ setState((prev) => {
113
+ if (prev.wallet === found &&
114
+ prev.adapter === found.adapter &&
115
+ prev.connected === found.adapter.connected &&
116
+ prev.address === found.adapter.address &&
117
+ prev.publicKey === found.adapter.publicKey)
118
+ return prev;
119
+ return {
120
+ wallet: found,
121
+ adapter: found.adapter,
122
+ connected: found.adapter.connected,
123
+ address: found.adapter.address,
124
+ publicKey: found.adapter.publicKey,
125
+ };
126
+ });
127
+ }
128
+ else {
129
+ setState((prev) => (prev === initialState ? prev : initialState));
130
+ }
131
+ }, [name, wallets]);
132
+ // If the window is closing or reloading, ignore disconnect and error events
133
+ useEffect(() => {
134
+ function listener() {
135
+ isUnloading.current = true;
136
+ }
137
+ window.addEventListener('beforeunload', listener);
138
+ return () => window.removeEventListener('beforeunload', listener);
139
+ }, [isUnloading]);
140
+ // Handle the adapter's connect event.
141
+ // Functional update bails out when values haven't changed to prevent re-render loops.
142
+ const handleConnect = useCallback(() => {
143
+ if (!adapter)
144
+ return;
145
+ setState((prev) => {
146
+ if (prev.connected === adapter.connected &&
147
+ prev.address === adapter.address &&
148
+ prev.publicKey === adapter.publicKey)
149
+ return prev;
150
+ return {
151
+ ...prev,
152
+ connected: adapter.connected,
153
+ address: adapter.address,
154
+ publicKey: adapter.publicKey,
155
+ };
156
+ });
157
+ }, [adapter]);
158
+ // Handle the adapter's disconnect event
159
+ const handleDisconnect = useCallback(() => {
160
+ if (!isUnloading.current)
161
+ setName(null);
162
+ }, [isUnloading, setName]);
163
+ // Handle the adapter's error event
164
+ const handleError = useCallback((error) => {
165
+ if (!isUnloading.current)
166
+ (onError || console.error)(error);
167
+ return error;
168
+ }, [isUnloading, onError]);
169
+ // Setup and teardown event listeners when the adapter changes
170
+ useEffect(() => {
171
+ if (adapter) {
172
+ adapter.on('connect', handleConnect);
173
+ adapter.on('disconnect', handleDisconnect);
174
+ adapter.on('error', handleError);
175
+ return () => {
176
+ adapter.off('connect', handleConnect);
177
+ adapter.off('disconnect', handleDisconnect);
178
+ adapter.off('error', handleError);
179
+ };
180
+ }
181
+ }, [adapter, handleConnect, handleDisconnect, handleError]);
182
+ // When the adapter changes, disconnect the old one
183
+ useEffect(() => {
184
+ return () => {
185
+ adapter?.disconnect();
186
+ };
187
+ }, [adapter]);
188
+ // Auto-select the first wallet if only one is available and none selected
189
+ useEffect(() => {
190
+ if (!name && wallets.length === 1) {
191
+ setName(wallets[0].adapter.name);
192
+ }
193
+ }, [name, wallets, setName]);
194
+ // If autoConnect is enabled, try to connect when the adapter changes and is ready
195
+ useEffect(() => {
196
+ if (isConnecting.current ||
197
+ connected ||
198
+ !autoConnect ||
199
+ !adapter ||
200
+ !(readyState === WalletReadyState.Installed ||
201
+ readyState === WalletReadyState.Loadable))
202
+ return;
203
+ (async function () {
204
+ isConnecting.current = true;
205
+ setConnecting(true);
206
+ try {
207
+ await adapter.connect(privateDataPermission, network, allowedPrivateData);
208
+ }
209
+ catch (error) {
210
+ setName(null);
211
+ }
212
+ finally {
213
+ setConnecting(false);
214
+ isConnecting.current = false;
215
+ }
216
+ })();
217
+ }, [isConnecting, connected, autoConnect, adapter, readyState, setName, privateDataPermission, network, allowedPrivateData]);
218
+ // Connect the adapter to the wallet
219
+ const connect = useCallback(async () => {
220
+ if (isConnecting.current || isDisconnecting.current || connected)
221
+ return;
222
+ if (!adapter)
223
+ throw handleError(new WalletNotSelectedError());
224
+ if (!(readyState === WalletReadyState.Installed ||
225
+ readyState === WalletReadyState.Loadable)) {
226
+ setName(null);
227
+ if (typeof window !== 'undefined') {
228
+ window.open(adapter.url, '_blank');
229
+ }
230
+ throw handleError(new WalletNotReadyError());
231
+ }
232
+ isConnecting.current = true;
233
+ setConnecting(true);
234
+ try {
235
+ await adapter.connect(privateDataPermission, network, allowedPrivateData);
236
+ }
237
+ catch (error) {
238
+ setName(null);
239
+ throw error;
240
+ }
241
+ finally {
242
+ setConnecting(false);
243
+ isConnecting.current = false;
244
+ }
245
+ }, [
246
+ isConnecting,
247
+ isDisconnecting,
248
+ connected,
249
+ adapter,
250
+ readyState,
251
+ handleError,
252
+ setName,
253
+ privateDataPermission,
254
+ network,
255
+ allowedPrivateData,
256
+ ]);
257
+ // Disconnect the adapter from the wallet
258
+ const disconnect = useCallback(async () => {
259
+ if (isDisconnecting.current)
260
+ return;
261
+ if (!adapter)
262
+ return setName(null);
263
+ isDisconnecting.current = true;
264
+ setDisconnecting(true);
265
+ try {
266
+ await adapter.disconnect();
267
+ }
268
+ catch (error) {
269
+ setName(null);
270
+ throw error;
271
+ }
272
+ finally {
273
+ setDisconnecting(false);
274
+ isDisconnecting.current = false;
275
+ }
276
+ }, [isDisconnecting, adapter, setName]);
277
+ // Request transaction
278
+ const requestTransaction = useMemo(() => adapter && 'requestTransaction' in adapter
279
+ ? async (transaction) => {
280
+ if (!connected)
281
+ throw handleError(new WalletNotConnectedError());
282
+ return await adapter.requestTransaction(transaction);
283
+ }
284
+ : undefined, [adapter, handleError, connected]);
285
+ // Request assets
286
+ const requestAssets = useMemo(() => adapter && 'requestAssets' in adapter
287
+ ? async () => {
288
+ if (!connected)
289
+ throw handleError(new WalletNotConnectedError());
290
+ return await adapter.requestAssets();
291
+ }
292
+ : undefined, [adapter, handleError, connected]);
293
+ // Request private notes
294
+ const requestPrivateNotes = useMemo(() => adapter && 'requestPrivateNotes' in adapter
295
+ ? async (noteFilterType, noteIds) => {
296
+ if (!connected)
297
+ throw handleError(new WalletNotConnectedError());
298
+ return await adapter.requestPrivateNotes(noteFilterType, noteIds);
299
+ }
300
+ : undefined, [adapter, handleError, connected]);
301
+ const signBytes = useMemo(() => adapter && 'signBytes' in adapter
302
+ ? async (message, kind) => {
303
+ if (!connected)
304
+ throw handleError(new WalletNotConnectedError());
305
+ return await adapter.signBytes(message, kind);
306
+ }
307
+ : undefined, [adapter, handleError, connected]);
308
+ const importPrivateNote = useMemo(() => adapter && 'importPrivateNote' in adapter
309
+ ? async (note) => {
310
+ if (!connected)
311
+ throw handleError(new WalletNotConnectedError());
312
+ return await adapter.importPrivateNote(note);
313
+ }
314
+ : undefined, [adapter, handleError, connected]);
315
+ const requestConsumableNotes = useMemo(() => adapter && 'requestConsumableNotes' in adapter
316
+ ? async () => {
317
+ if (!connected)
318
+ throw handleError(new WalletNotConnectedError());
319
+ return await adapter.requestConsumableNotes();
320
+ }
321
+ : undefined, [adapter, handleError, connected]);
322
+ const waitForTransaction = useMemo(() => adapter && 'waitForTransaction' in adapter
323
+ ? async (txId, timeout) => {
324
+ if (!connected)
325
+ throw handleError(new WalletNotConnectedError());
326
+ return await adapter.waitForTransaction(txId, timeout);
327
+ }
328
+ : undefined, [adapter, handleError, connected]);
329
+ const requestSend = useMemo(() => adapter && 'requestSend' in adapter
330
+ ? async (transaction) => {
331
+ if (!connected)
332
+ throw handleError(new WalletNotConnectedError());
333
+ return await adapter.requestSend(transaction);
334
+ }
335
+ : undefined, [adapter, handleError, connected]);
336
+ const requestConsume = useMemo(() => adapter && 'requestConsume' in adapter
337
+ ? async (transaction) => {
338
+ if (!connected)
339
+ throw handleError(new WalletNotConnectedError());
340
+ return await adapter.requestConsume(transaction);
341
+ }
342
+ : undefined, [adapter, handleError, connected]);
343
+ // Build SignerContext value.
344
+ //
345
+ // CRITICAL: signerContext MUST be referentially stable. MidenProvider's init
346
+ // effect has signerContext in its deps — every new object re-triggers initClient
347
+ // which does async WASM work. Two concurrent initClient calls cause the
348
+ // "recursive use of an object" crash.
349
+ //
350
+ // We keep a single mutable ref and only call setSignerContext when the ref
351
+ // identity actually needs to change (disconnected ↔ connected, or address change).
352
+ //
353
+ // Initialise as {isConnected:false} rather than null so MidenProvider's init
354
+ // effect hits the early-return path instead of creating a local-keystore client
355
+ // that races with our buildContext's WASM operations.
356
+ // Keep signBytes in a ref so buildContext doesn't re-run when its identity changes.
357
+ const signBytesRef = useRef(signBytes);
358
+ useEffect(() => { signBytesRef.current = signBytes; }, [signBytes]);
359
+ const connectRef = useRef(connect);
360
+ useEffect(() => { connectRef.current = connect; }, [connect]);
361
+ const disconnectRef = useRef(disconnect);
362
+ useEffect(() => { disconnectRef.current = disconnect; }, [disconnect]);
363
+ const disconnectedCtx = useRef({
364
+ signCb: async () => { throw new Error('MidenFi wallet not connected'); },
365
+ accountConfig: null,
366
+ storeName: '',
367
+ name: 'MidenFi',
368
+ isConnected: false,
369
+ connect: connectRef.current,
370
+ disconnect: disconnectRef.current,
371
+ });
372
+ // The connected context ref — reused across renders to maintain referential identity.
373
+ const connectedCtxRef = useRef(null);
374
+ // Track which address the connected context was built for.
375
+ const connectedAddressRef = useRef(null);
376
+ const [signerContext, setSignerContext] = useState(disconnectedCtx.current);
377
+ useEffect(() => {
378
+ let cancelled = false;
379
+ async function buildContext() {
380
+ if (!connected || !publicKey || !address || !signBytesRef.current) {
381
+ // Already disconnected — don't set state again (same ref = no re-render).
382
+ if (connectedCtxRef.current !== null) {
383
+ connectedCtxRef.current = null;
384
+ connectedAddressRef.current = null;
385
+ setSignerContext(disconnectedCtx.current);
386
+ }
387
+ return;
388
+ }
389
+ // Already built for this address — reuse existing context (same ref).
390
+ if (connectedCtxRef.current && connectedAddressRef.current === address) {
391
+ return;
392
+ }
393
+ try {
394
+ if (!cancelled) {
395
+ const { AccountStorageMode } = await import('@miden-sdk/miden-sdk');
396
+ const signCb = async (_, signingInputs) => {
397
+ const result = await signBytesRef.current(signingInputs, 'signingInputs');
398
+ return result;
399
+ };
400
+ const ctx = {
401
+ signCb,
402
+ accountConfig: {
403
+ publicKeyCommitment: publicKey,
404
+ accountType: 'RegularAccountImmutableCode',
405
+ storageMode: AccountStorageMode.public(),
406
+ },
407
+ storeName: `midenfi_${address}`,
408
+ name: 'MidenFi',
409
+ isConnected: true,
410
+ connect: connectRef.current,
411
+ disconnect: disconnectRef.current,
412
+ };
413
+ connectedCtxRef.current = ctx;
414
+ connectedAddressRef.current = address;
415
+ setSignerContext(ctx);
416
+ }
417
+ }
418
+ catch (error) {
419
+ console.error('Failed to build MidenFi signer context:', error);
420
+ if (!cancelled) {
421
+ connectedCtxRef.current = null;
422
+ connectedAddressRef.current = null;
423
+ setSignerContext(disconnectedCtx.current);
424
+ }
425
+ }
426
+ }
427
+ buildContext();
428
+ return () => {
429
+ cancelled = true;
430
+ };
431
+ }, [connected, publicKey, address]);
432
+ const walletContextValue = useMemo(() => ({
433
+ autoConnect,
434
+ wallets,
435
+ wallet,
436
+ address,
437
+ publicKey,
438
+ connected,
439
+ connecting,
440
+ disconnecting,
441
+ select: setName,
442
+ connect,
443
+ disconnect,
444
+ requestTransaction,
445
+ requestAssets,
446
+ requestPrivateNotes,
447
+ signBytes,
448
+ importPrivateNote,
449
+ requestConsumableNotes,
450
+ waitForTransaction,
451
+ requestSend,
452
+ requestConsume,
453
+ }), [
454
+ autoConnect,
455
+ wallets,
456
+ wallet,
457
+ address,
458
+ publicKey,
459
+ connected,
460
+ connecting,
461
+ disconnecting,
462
+ setName,
463
+ connect,
464
+ disconnect,
465
+ requestTransaction,
466
+ requestAssets,
467
+ requestPrivateNotes,
468
+ signBytes,
469
+ importPrivateNote,
470
+ requestConsumableNotes,
471
+ waitForTransaction,
472
+ requestSend,
473
+ requestConsume,
474
+ ]);
475
+ return (_jsx(WalletContext.Provider, { value: walletContextValue, children: _jsx(SignerContext.Provider, { value: signerContext, children: children }) }));
476
+ };
477
+ /**
478
+ * Hook for MidenFi wallet operations beyond the unified useSigner interface.
479
+ * Use this to access wallet-specific methods like requestTransaction, requestAssets, etc.
480
+ *
481
+ * @example
482
+ * ```tsx
483
+ * const { connected, connect, disconnect, wallets, select } = useMidenFiWallet();
484
+ *
485
+ * // Connect
486
+ * await connect();
487
+ *
488
+ * // Request a transaction
489
+ * const txId = await requestTransaction({ ... });
490
+ * ```
491
+ */
492
+ export function useMidenFiWallet() {
493
+ const context = useContext(WalletContext);
494
+ if (!context || Object.keys(context).length === 0) {
495
+ throw new Error('useMidenFiWallet must be used within MidenFiSignerProvider');
496
+ }
497
+ return context;
498
+ }
499
+ // Re-export for backward compatibility
500
+ export { WalletContext };
501
+ //# sourceMappingURL=MidenFiSignerProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MidenFiSignerProvider.js","sourceRoot":"","sources":["../MidenFiSignerProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Adapter, AllowedPrivateData, PrivateDataPermission, WalletAdapterNetwork, WalletError } from '@miden-sdk/miden-wallet-adapter-base';
2
+ import type { FC, ReactNode } from 'react';
3
+ export interface WalletProviderProps {
4
+ children: ReactNode;
5
+ wallets: Adapter[];
6
+ privateDataPermission?: PrivateDataPermission;
7
+ allowedPrivateData?: AllowedPrivateData;
8
+ network?: WalletAdapterNetwork;
9
+ autoConnect?: boolean;
10
+ onError?: (error: WalletError) => void;
11
+ localStorageKey?: string;
12
+ }
13
+ export declare const WalletProvider: FC<WalletProviderProps>;