@miden-sdk/miden-wallet-adapter-miden 0.13.1 → 0.13.3
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.
- package/__tests__/adapter.test.ts +402 -0
- package/adapter.ts +18 -0
- package/dist/__tests__/adapter.test.d.ts +1 -0
- package/dist/__tests__/adapter.test.js +314 -0
- package/dist/__tests__/adapter.test.js.map +1 -0
- package/dist/adapter.d.ts +5 -1
- package/dist/adapter.js +18 -0
- package/dist/adapter.js.map +1 -1
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +8 -0
- package/dist/vitest.config.js.map +1 -0
- package/docs/classes/MidenWalletAdapter.md +20 -0
- package/docs/interfaces/MidenWallet.md +16 -0
- package/package.json +7 -2
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
WalletNotConnectedError,
|
|
4
|
+
WalletTransactionError,
|
|
5
|
+
WalletReadyState,
|
|
6
|
+
WalletNotReadyError,
|
|
7
|
+
WalletConnectionError,
|
|
8
|
+
PrivateDataPermission,
|
|
9
|
+
WalletAdapterNetwork,
|
|
10
|
+
} from '@miden-sdk/miden-wallet-adapter-base';
|
|
11
|
+
|
|
12
|
+
// Mock @miden-sdk/miden-sdk before importing adapter
|
|
13
|
+
vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
14
|
+
Note: {
|
|
15
|
+
deserialize: vi.fn((bytes: Uint8Array) => ({ mockNote: true, bytes })),
|
|
16
|
+
},
|
|
17
|
+
}));
|
|
18
|
+
|
|
19
|
+
import { Note } from '@miden-sdk/miden-sdk';
|
|
20
|
+
import { MidenWalletAdapter } from '../adapter';
|
|
21
|
+
|
|
22
|
+
function createMockWallet(overrides: Record<string, any> = {}) {
|
|
23
|
+
return {
|
|
24
|
+
address: '0xmockaddress',
|
|
25
|
+
publicKey: new Uint8Array([1, 2, 3]),
|
|
26
|
+
connect: vi.fn(),
|
|
27
|
+
disconnect: vi.fn(),
|
|
28
|
+
requestSend: vi.fn().mockResolvedValue({ transactionId: 'tx-send-1' }),
|
|
29
|
+
requestConsume: vi
|
|
30
|
+
.fn()
|
|
31
|
+
.mockResolvedValue({ transactionId: 'tx-consume-1' }),
|
|
32
|
+
requestTransaction: vi
|
|
33
|
+
.fn()
|
|
34
|
+
.mockResolvedValue({ transactionId: 'tx-custom-1' }),
|
|
35
|
+
requestAssets: vi
|
|
36
|
+
.fn()
|
|
37
|
+
.mockResolvedValue({ assets: [{ faucetId: 'f1', amount: '100' }] }),
|
|
38
|
+
requestPrivateNotes: vi
|
|
39
|
+
.fn()
|
|
40
|
+
.mockResolvedValue({ privateNotes: [{ noteId: 'n1' }] }),
|
|
41
|
+
signBytes: vi
|
|
42
|
+
.fn()
|
|
43
|
+
.mockResolvedValue({ signature: new Uint8Array([9, 8, 7]) }),
|
|
44
|
+
importPrivateNote: vi.fn().mockResolvedValue({ noteId: 'imported-note-1' }),
|
|
45
|
+
requestConsumableNotes: vi
|
|
46
|
+
.fn()
|
|
47
|
+
.mockResolvedValue({ consumableNotes: [{ noteId: 'cn1' }] }),
|
|
48
|
+
createAccount: vi
|
|
49
|
+
.fn()
|
|
50
|
+
.mockResolvedValue({ accountId: 'account-123' }),
|
|
51
|
+
waitForTransaction: vi.fn(),
|
|
52
|
+
...overrides,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Helper to set up a connected adapter by injecting mock wallet via window
|
|
57
|
+
async function createConnectedAdapter() {
|
|
58
|
+
const mockWallet = createMockWallet();
|
|
59
|
+
(window as any).midenWallet = mockWallet;
|
|
60
|
+
|
|
61
|
+
const adapter = new MidenWalletAdapter();
|
|
62
|
+
// Force readyState to Installed so connect works
|
|
63
|
+
adapter.readyState = WalletReadyState.Installed;
|
|
64
|
+
|
|
65
|
+
await adapter.connect(
|
|
66
|
+
PrivateDataPermission.UponRequest,
|
|
67
|
+
WalletAdapterNetwork.Testnet
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
return { adapter, mockWallet };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
describe('MidenWalletAdapter', () => {
|
|
74
|
+
beforeEach(() => {
|
|
75
|
+
vi.clearAllMocks();
|
|
76
|
+
delete (window as any).midenWallet;
|
|
77
|
+
delete (window as any).miden;
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
describe('constructor', () => {
|
|
81
|
+
it('initializes with null address and not connecting', () => {
|
|
82
|
+
const adapter = new MidenWalletAdapter();
|
|
83
|
+
expect(adapter.address).toBeNull();
|
|
84
|
+
expect(adapter.publicKey).toBeNull();
|
|
85
|
+
expect(adapter.connecting).toBe(false);
|
|
86
|
+
expect(adapter.connected).toBe(false);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('sets readyState to NotDetected when wallet is not present', () => {
|
|
90
|
+
const adapter = new MidenWalletAdapter();
|
|
91
|
+
expect(adapter.readyState).toBe(WalletReadyState.NotDetected);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
describe('not connected errors', () => {
|
|
96
|
+
const methods: Array<{
|
|
97
|
+
name: string;
|
|
98
|
+
call: (a: MidenWalletAdapter) => Promise<any>;
|
|
99
|
+
}> = [
|
|
100
|
+
{
|
|
101
|
+
name: 'requestSend',
|
|
102
|
+
call: (a) =>
|
|
103
|
+
a.requestSend({
|
|
104
|
+
senderAddress: 's',
|
|
105
|
+
recipientAddress: 'r',
|
|
106
|
+
faucetId: 'f',
|
|
107
|
+
noteType: 'public',
|
|
108
|
+
amount: 1,
|
|
109
|
+
}),
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'requestConsume',
|
|
113
|
+
call: (a) =>
|
|
114
|
+
a.requestConsume({
|
|
115
|
+
faucetId: 'f',
|
|
116
|
+
noteId: 'n',
|
|
117
|
+
noteType: 'public',
|
|
118
|
+
amount: 1,
|
|
119
|
+
}),
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'requestTransaction',
|
|
123
|
+
call: (a) =>
|
|
124
|
+
a.requestTransaction({ type: 'send' as any, payload: {} as any }),
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'requestAssets',
|
|
128
|
+
call: (a) => a.requestAssets(),
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'requestPrivateNotes',
|
|
132
|
+
call: (a) => a.requestPrivateNotes('All' as any),
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'signBytes',
|
|
136
|
+
call: (a) => a.signBytes(new Uint8Array([1]), 'word'),
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'importPrivateNote',
|
|
140
|
+
call: (a) => a.importPrivateNote(new Uint8Array([1])),
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'requestConsumableNotes',
|
|
144
|
+
call: (a) => a.requestConsumableNotes(),
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'waitForTransaction',
|
|
148
|
+
call: (a) => a.waitForTransaction('tx-1'),
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'createAccount',
|
|
152
|
+
call: (a) => a.createAccount(),
|
|
153
|
+
},
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
for (const { name, call } of methods) {
|
|
157
|
+
it(`${name} throws WalletNotConnectedError when not connected`, async () => {
|
|
158
|
+
const adapter = new MidenWalletAdapter();
|
|
159
|
+
const errorHandler = vi.fn();
|
|
160
|
+
adapter.on('error', errorHandler);
|
|
161
|
+
|
|
162
|
+
await expect(call(adapter)).rejects.toThrow(WalletNotConnectedError);
|
|
163
|
+
expect(errorHandler).toHaveBeenCalledWith(
|
|
164
|
+
expect.any(WalletNotConnectedError)
|
|
165
|
+
);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
describe('connected operations', () => {
|
|
171
|
+
it('requestSend delegates to wallet and returns transactionId', async () => {
|
|
172
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
173
|
+
const tx = {
|
|
174
|
+
senderAddress: 's',
|
|
175
|
+
recipientAddress: 'r',
|
|
176
|
+
faucetId: 'f',
|
|
177
|
+
noteType: 'public' as const,
|
|
178
|
+
amount: 100,
|
|
179
|
+
};
|
|
180
|
+
const result = await adapter.requestSend(tx);
|
|
181
|
+
expect(mockWallet.requestSend).toHaveBeenCalledWith(tx);
|
|
182
|
+
expect(result).toBe('tx-send-1');
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('requestConsume delegates to wallet and returns transactionId', async () => {
|
|
186
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
187
|
+
const tx = {
|
|
188
|
+
faucetId: 'f',
|
|
189
|
+
noteId: 'n',
|
|
190
|
+
noteType: 'public' as const,
|
|
191
|
+
amount: 50,
|
|
192
|
+
};
|
|
193
|
+
const result = await adapter.requestConsume(tx);
|
|
194
|
+
expect(mockWallet.requestConsume).toHaveBeenCalledWith(tx);
|
|
195
|
+
expect(result).toBe('tx-consume-1');
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it('requestTransaction delegates to wallet and returns transactionId', async () => {
|
|
199
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
200
|
+
const tx = { type: 'send' as any, payload: {} as any };
|
|
201
|
+
const result = await adapter.requestTransaction(tx);
|
|
202
|
+
expect(mockWallet.requestTransaction).toHaveBeenCalledWith(tx);
|
|
203
|
+
expect(result).toBe('tx-custom-1');
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it('requestAssets returns assets array', async () => {
|
|
207
|
+
const { adapter } = await createConnectedAdapter();
|
|
208
|
+
const assets = await adapter.requestAssets();
|
|
209
|
+
expect(assets).toEqual([{ faucetId: 'f1', amount: '100' }]);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
it('requestPrivateNotes returns notes array', async () => {
|
|
213
|
+
const { adapter } = await createConnectedAdapter();
|
|
214
|
+
const notes = await adapter.requestPrivateNotes('All' as any);
|
|
215
|
+
expect(notes).toEqual([{ noteId: 'n1' }]);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it('signBytes returns signature', async () => {
|
|
219
|
+
const { adapter } = await createConnectedAdapter();
|
|
220
|
+
const sig = await adapter.signBytes(new Uint8Array([1, 2]), 'word');
|
|
221
|
+
expect(sig).toEqual(new Uint8Array([9, 8, 7]));
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('importPrivateNote returns noteId', async () => {
|
|
225
|
+
const { adapter } = await createConnectedAdapter();
|
|
226
|
+
const noteId = await adapter.importPrivateNote(new Uint8Array([1]));
|
|
227
|
+
expect(noteId).toBe('imported-note-1');
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it('requestConsumableNotes returns consumable notes', async () => {
|
|
231
|
+
const { adapter } = await createConnectedAdapter();
|
|
232
|
+
const notes = await adapter.requestConsumableNotes();
|
|
233
|
+
expect(notes).toEqual([{ noteId: 'cn1' }]);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it('createAccount returns accountId without params', async () => {
|
|
237
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
238
|
+
const result = await adapter.createAccount();
|
|
239
|
+
expect(mockWallet.createAccount).toHaveBeenCalledWith(undefined);
|
|
240
|
+
expect(result).toBe('account-123');
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it('createAccount returns accountId with params', async () => {
|
|
244
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
245
|
+
const params = {
|
|
246
|
+
accountType: 'RegularAccountUpdatableCode' as const,
|
|
247
|
+
storageMode: 'private' as const,
|
|
248
|
+
};
|
|
249
|
+
const result = await adapter.createAccount(params);
|
|
250
|
+
expect(mockWallet.createAccount).toHaveBeenCalledWith(params);
|
|
251
|
+
expect(result).toBe('account-123');
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
it('createAccount passes customComponents to wallet', async () => {
|
|
255
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
256
|
+
const component = new Uint8Array([1, 2, 3]);
|
|
257
|
+
const params = { customComponents: [component] };
|
|
258
|
+
const result = await adapter.createAccount(params);
|
|
259
|
+
expect(mockWallet.createAccount).toHaveBeenCalledWith(params);
|
|
260
|
+
expect(result).toBe('account-123');
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
describe('waitForTransaction', () => {
|
|
265
|
+
it('success path: deserializes notes and returns TransactionOutput', async () => {
|
|
266
|
+
// base64 of [1,2,3] = "AQID"
|
|
267
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
268
|
+
mockWallet.waitForTransaction.mockResolvedValue({
|
|
269
|
+
txHash: 'hash-123',
|
|
270
|
+
outputNotes: ['AQID', 'BAUG'],
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
const result = await adapter.waitForTransaction('tx-1');
|
|
274
|
+
|
|
275
|
+
expect(result.txHash).toBe('hash-123');
|
|
276
|
+
expect(result.outputNotes).toHaveLength(2);
|
|
277
|
+
expect(Note.deserialize).toHaveBeenCalledTimes(2);
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it('error path: throws WalletTransactionError on errorMessage', async () => {
|
|
281
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
282
|
+
mockWallet.waitForTransaction.mockResolvedValue({
|
|
283
|
+
errorMessage: 'tx failed',
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
const errorHandler = vi.fn();
|
|
287
|
+
adapter.on('error', errorHandler);
|
|
288
|
+
|
|
289
|
+
await expect(adapter.waitForTransaction('tx-1')).rejects.toThrow(
|
|
290
|
+
WalletTransactionError
|
|
291
|
+
);
|
|
292
|
+
expect(errorHandler).toHaveBeenCalled();
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
describe('connect', () => {
|
|
297
|
+
it('throws WalletNotReadyError if readyState is not Installed', async () => {
|
|
298
|
+
const adapter = new MidenWalletAdapter();
|
|
299
|
+
const errorHandler = vi.fn();
|
|
300
|
+
adapter.on('error', errorHandler);
|
|
301
|
+
|
|
302
|
+
await expect(
|
|
303
|
+
adapter.connect(
|
|
304
|
+
PrivateDataPermission.UponRequest,
|
|
305
|
+
WalletAdapterNetwork.Testnet
|
|
306
|
+
)
|
|
307
|
+
).rejects.toThrow(WalletNotReadyError);
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
it('connects successfully and emits connect event', async () => {
|
|
311
|
+
const mockWallet = createMockWallet();
|
|
312
|
+
(window as any).midenWallet = mockWallet;
|
|
313
|
+
|
|
314
|
+
const adapter = new MidenWalletAdapter();
|
|
315
|
+
adapter.readyState = WalletReadyState.Installed;
|
|
316
|
+
|
|
317
|
+
const connectHandler = vi.fn();
|
|
318
|
+
adapter.on('connect', connectHandler);
|
|
319
|
+
|
|
320
|
+
await adapter.connect(
|
|
321
|
+
PrivateDataPermission.UponRequest,
|
|
322
|
+
WalletAdapterNetwork.Testnet
|
|
323
|
+
);
|
|
324
|
+
|
|
325
|
+
expect(adapter.address).toBe('0xmockaddress');
|
|
326
|
+
expect(adapter.publicKey).toEqual(new Uint8Array([1, 2, 3]));
|
|
327
|
+
expect(adapter.connected).toBe(true);
|
|
328
|
+
expect(adapter.connecting).toBe(false);
|
|
329
|
+
expect(connectHandler).toHaveBeenCalledWith('0xmockaddress');
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
it('throws WalletConnectionError if wallet has no address after connect', async () => {
|
|
333
|
+
const mockWallet = createMockWallet({ address: undefined });
|
|
334
|
+
(window as any).midenWallet = mockWallet;
|
|
335
|
+
|
|
336
|
+
const adapter = new MidenWalletAdapter();
|
|
337
|
+
adapter.readyState = WalletReadyState.Installed;
|
|
338
|
+
|
|
339
|
+
await expect(
|
|
340
|
+
adapter.connect(
|
|
341
|
+
PrivateDataPermission.UponRequest,
|
|
342
|
+
WalletAdapterNetwork.Testnet
|
|
343
|
+
)
|
|
344
|
+
).rejects.toThrow(WalletConnectionError);
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
it('does nothing if already connected', async () => {
|
|
348
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
349
|
+
// Call connect again
|
|
350
|
+
await adapter.connect(
|
|
351
|
+
PrivateDataPermission.UponRequest,
|
|
352
|
+
WalletAdapterNetwork.Testnet
|
|
353
|
+
);
|
|
354
|
+
// wallet.connect should have been called only once (during initial connect)
|
|
355
|
+
expect(mockWallet.connect).toHaveBeenCalledTimes(1);
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
describe('disconnect', () => {
|
|
360
|
+
it('clears address, publicKey, and emits disconnect', async () => {
|
|
361
|
+
const { adapter } = await createConnectedAdapter();
|
|
362
|
+
|
|
363
|
+
const disconnectHandler = vi.fn();
|
|
364
|
+
adapter.on('disconnect', disconnectHandler);
|
|
365
|
+
|
|
366
|
+
await adapter.disconnect();
|
|
367
|
+
|
|
368
|
+
expect(adapter.address).toBeNull();
|
|
369
|
+
expect(adapter.publicKey).toBeNull();
|
|
370
|
+
expect(adapter.connected).toBe(false);
|
|
371
|
+
expect(disconnectHandler).toHaveBeenCalled();
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
it('emits error if wallet.disconnect fails', async () => {
|
|
375
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
376
|
+
mockWallet.disconnect.mockRejectedValue(new Error('disconnect failed'));
|
|
377
|
+
|
|
378
|
+
const errorHandler = vi.fn();
|
|
379
|
+
adapter.on('error', errorHandler);
|
|
380
|
+
|
|
381
|
+
await adapter.disconnect();
|
|
382
|
+
expect(errorHandler).toHaveBeenCalled();
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
describe('error wrapping', () => {
|
|
387
|
+
it('wraps wallet method failures in WalletTransactionError', async () => {
|
|
388
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
389
|
+
mockWallet.requestSend.mockRejectedValue(new Error('network error'));
|
|
390
|
+
|
|
391
|
+
await expect(
|
|
392
|
+
adapter.requestSend({
|
|
393
|
+
senderAddress: 's',
|
|
394
|
+
recipientAddress: 'r',
|
|
395
|
+
faucetId: 'f',
|
|
396
|
+
noteType: 'public',
|
|
397
|
+
amount: 1,
|
|
398
|
+
})
|
|
399
|
+
).rejects.toThrow(WalletTransactionError);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
});
|
package/adapter.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
MidenConsumeTransaction,
|
|
19
19
|
WalletTransactionError,
|
|
20
20
|
Asset,
|
|
21
|
+
CreateAccountParams,
|
|
21
22
|
InputNoteDetails,
|
|
22
23
|
TransactionOutput,
|
|
23
24
|
WalletTransactionOutput,
|
|
@@ -59,6 +60,7 @@ export interface MidenWallet extends EventEmitter<MidenWalletEvents> {
|
|
|
59
60
|
): Promise<{ signature: Uint8Array }>;
|
|
60
61
|
importPrivateNote(note: Uint8Array): Promise<{ noteId: string }>;
|
|
61
62
|
requestConsumableNotes(): Promise<{ consumableNotes: InputNoteDetails[] }>;
|
|
63
|
+
createAccount(params?: CreateAccountParams): Promise<{ accountId: string }>;
|
|
62
64
|
connect(
|
|
63
65
|
privateDataPermission: PrivateDataPermission,
|
|
64
66
|
network: WalletAdapterNetwork,
|
|
@@ -292,6 +294,22 @@ export class MidenWalletAdapter extends BaseMessageSignerWalletAdapter {
|
|
|
292
294
|
}
|
|
293
295
|
}
|
|
294
296
|
|
|
297
|
+
async createAccount(params?: CreateAccountParams): Promise<string> {
|
|
298
|
+
try {
|
|
299
|
+
const wallet = this._wallet;
|
|
300
|
+
if (!wallet || !this.address) throw new WalletNotConnectedError();
|
|
301
|
+
try {
|
|
302
|
+
const result = await wallet.createAccount(params);
|
|
303
|
+
return result.accountId;
|
|
304
|
+
} catch (error: any) {
|
|
305
|
+
throw new WalletTransactionError(error?.message, error);
|
|
306
|
+
}
|
|
307
|
+
} catch (error: any) {
|
|
308
|
+
this.emit('error', error);
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
295
313
|
async connect(
|
|
296
314
|
privateDataPermission: PrivateDataPermission,
|
|
297
315
|
network: WalletAdapterNetwork,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { WalletNotConnectedError, WalletTransactionError, WalletReadyState, WalletNotReadyError, WalletConnectionError, PrivateDataPermission, WalletAdapterNetwork, } from '@miden-sdk/miden-wallet-adapter-base';
|
|
3
|
+
// Mock @miden-sdk/miden-sdk before importing adapter
|
|
4
|
+
vi.mock('@miden-sdk/miden-sdk', () => ({
|
|
5
|
+
Note: {
|
|
6
|
+
deserialize: vi.fn((bytes) => ({ mockNote: true, bytes })),
|
|
7
|
+
},
|
|
8
|
+
}));
|
|
9
|
+
import { Note } from '@miden-sdk/miden-sdk';
|
|
10
|
+
import { MidenWalletAdapter } from '../adapter';
|
|
11
|
+
function createMockWallet(overrides = {}) {
|
|
12
|
+
return {
|
|
13
|
+
address: '0xmockaddress',
|
|
14
|
+
publicKey: new Uint8Array([1, 2, 3]),
|
|
15
|
+
connect: vi.fn(),
|
|
16
|
+
disconnect: vi.fn(),
|
|
17
|
+
requestSend: vi.fn().mockResolvedValue({ transactionId: 'tx-send-1' }),
|
|
18
|
+
requestConsume: vi
|
|
19
|
+
.fn()
|
|
20
|
+
.mockResolvedValue({ transactionId: 'tx-consume-1' }),
|
|
21
|
+
requestTransaction: vi
|
|
22
|
+
.fn()
|
|
23
|
+
.mockResolvedValue({ transactionId: 'tx-custom-1' }),
|
|
24
|
+
requestAssets: vi
|
|
25
|
+
.fn()
|
|
26
|
+
.mockResolvedValue({ assets: [{ faucetId: 'f1', amount: '100' }] }),
|
|
27
|
+
requestPrivateNotes: vi
|
|
28
|
+
.fn()
|
|
29
|
+
.mockResolvedValue({ privateNotes: [{ noteId: 'n1' }] }),
|
|
30
|
+
signBytes: vi
|
|
31
|
+
.fn()
|
|
32
|
+
.mockResolvedValue({ signature: new Uint8Array([9, 8, 7]) }),
|
|
33
|
+
importPrivateNote: vi.fn().mockResolvedValue({ noteId: 'imported-note-1' }),
|
|
34
|
+
requestConsumableNotes: vi
|
|
35
|
+
.fn()
|
|
36
|
+
.mockResolvedValue({ consumableNotes: [{ noteId: 'cn1' }] }),
|
|
37
|
+
createAccount: vi
|
|
38
|
+
.fn()
|
|
39
|
+
.mockResolvedValue({ accountId: 'account-123' }),
|
|
40
|
+
waitForTransaction: vi.fn(),
|
|
41
|
+
...overrides,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// Helper to set up a connected adapter by injecting mock wallet via window
|
|
45
|
+
async function createConnectedAdapter() {
|
|
46
|
+
const mockWallet = createMockWallet();
|
|
47
|
+
window.midenWallet = mockWallet;
|
|
48
|
+
const adapter = new MidenWalletAdapter();
|
|
49
|
+
// Force readyState to Installed so connect works
|
|
50
|
+
adapter.readyState = WalletReadyState.Installed;
|
|
51
|
+
await adapter.connect(PrivateDataPermission.UponRequest, WalletAdapterNetwork.Testnet);
|
|
52
|
+
return { adapter, mockWallet };
|
|
53
|
+
}
|
|
54
|
+
describe('MidenWalletAdapter', () => {
|
|
55
|
+
beforeEach(() => {
|
|
56
|
+
vi.clearAllMocks();
|
|
57
|
+
delete window.midenWallet;
|
|
58
|
+
delete window.miden;
|
|
59
|
+
});
|
|
60
|
+
describe('constructor', () => {
|
|
61
|
+
it('initializes with null address and not connecting', () => {
|
|
62
|
+
const adapter = new MidenWalletAdapter();
|
|
63
|
+
expect(adapter.address).toBeNull();
|
|
64
|
+
expect(adapter.publicKey).toBeNull();
|
|
65
|
+
expect(adapter.connecting).toBe(false);
|
|
66
|
+
expect(adapter.connected).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
it('sets readyState to NotDetected when wallet is not present', () => {
|
|
69
|
+
const adapter = new MidenWalletAdapter();
|
|
70
|
+
expect(adapter.readyState).toBe(WalletReadyState.NotDetected);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('not connected errors', () => {
|
|
74
|
+
const methods = [
|
|
75
|
+
{
|
|
76
|
+
name: 'requestSend',
|
|
77
|
+
call: (a) => a.requestSend({
|
|
78
|
+
senderAddress: 's',
|
|
79
|
+
recipientAddress: 'r',
|
|
80
|
+
faucetId: 'f',
|
|
81
|
+
noteType: 'public',
|
|
82
|
+
amount: 1,
|
|
83
|
+
}),
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'requestConsume',
|
|
87
|
+
call: (a) => a.requestConsume({
|
|
88
|
+
faucetId: 'f',
|
|
89
|
+
noteId: 'n',
|
|
90
|
+
noteType: 'public',
|
|
91
|
+
amount: 1,
|
|
92
|
+
}),
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'requestTransaction',
|
|
96
|
+
call: (a) => a.requestTransaction({ type: 'send', payload: {} }),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'requestAssets',
|
|
100
|
+
call: (a) => a.requestAssets(),
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'requestPrivateNotes',
|
|
104
|
+
call: (a) => a.requestPrivateNotes('All'),
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'signBytes',
|
|
108
|
+
call: (a) => a.signBytes(new Uint8Array([1]), 'word'),
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'importPrivateNote',
|
|
112
|
+
call: (a) => a.importPrivateNote(new Uint8Array([1])),
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'requestConsumableNotes',
|
|
116
|
+
call: (a) => a.requestConsumableNotes(),
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'waitForTransaction',
|
|
120
|
+
call: (a) => a.waitForTransaction('tx-1'),
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'createAccount',
|
|
124
|
+
call: (a) => a.createAccount(),
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
for (const { name, call } of methods) {
|
|
128
|
+
it(`${name} throws WalletNotConnectedError when not connected`, async () => {
|
|
129
|
+
const adapter = new MidenWalletAdapter();
|
|
130
|
+
const errorHandler = vi.fn();
|
|
131
|
+
adapter.on('error', errorHandler);
|
|
132
|
+
await expect(call(adapter)).rejects.toThrow(WalletNotConnectedError);
|
|
133
|
+
expect(errorHandler).toHaveBeenCalledWith(expect.any(WalletNotConnectedError));
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
describe('connected operations', () => {
|
|
138
|
+
it('requestSend delegates to wallet and returns transactionId', async () => {
|
|
139
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
140
|
+
const tx = {
|
|
141
|
+
senderAddress: 's',
|
|
142
|
+
recipientAddress: 'r',
|
|
143
|
+
faucetId: 'f',
|
|
144
|
+
noteType: 'public',
|
|
145
|
+
amount: 100,
|
|
146
|
+
};
|
|
147
|
+
const result = await adapter.requestSend(tx);
|
|
148
|
+
expect(mockWallet.requestSend).toHaveBeenCalledWith(tx);
|
|
149
|
+
expect(result).toBe('tx-send-1');
|
|
150
|
+
});
|
|
151
|
+
it('requestConsume delegates to wallet and returns transactionId', async () => {
|
|
152
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
153
|
+
const tx = {
|
|
154
|
+
faucetId: 'f',
|
|
155
|
+
noteId: 'n',
|
|
156
|
+
noteType: 'public',
|
|
157
|
+
amount: 50,
|
|
158
|
+
};
|
|
159
|
+
const result = await adapter.requestConsume(tx);
|
|
160
|
+
expect(mockWallet.requestConsume).toHaveBeenCalledWith(tx);
|
|
161
|
+
expect(result).toBe('tx-consume-1');
|
|
162
|
+
});
|
|
163
|
+
it('requestTransaction delegates to wallet and returns transactionId', async () => {
|
|
164
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
165
|
+
const tx = { type: 'send', payload: {} };
|
|
166
|
+
const result = await adapter.requestTransaction(tx);
|
|
167
|
+
expect(mockWallet.requestTransaction).toHaveBeenCalledWith(tx);
|
|
168
|
+
expect(result).toBe('tx-custom-1');
|
|
169
|
+
});
|
|
170
|
+
it('requestAssets returns assets array', async () => {
|
|
171
|
+
const { adapter } = await createConnectedAdapter();
|
|
172
|
+
const assets = await adapter.requestAssets();
|
|
173
|
+
expect(assets).toEqual([{ faucetId: 'f1', amount: '100' }]);
|
|
174
|
+
});
|
|
175
|
+
it('requestPrivateNotes returns notes array', async () => {
|
|
176
|
+
const { adapter } = await createConnectedAdapter();
|
|
177
|
+
const notes = await adapter.requestPrivateNotes('All');
|
|
178
|
+
expect(notes).toEqual([{ noteId: 'n1' }]);
|
|
179
|
+
});
|
|
180
|
+
it('signBytes returns signature', async () => {
|
|
181
|
+
const { adapter } = await createConnectedAdapter();
|
|
182
|
+
const sig = await adapter.signBytes(new Uint8Array([1, 2]), 'word');
|
|
183
|
+
expect(sig).toEqual(new Uint8Array([9, 8, 7]));
|
|
184
|
+
});
|
|
185
|
+
it('importPrivateNote returns noteId', async () => {
|
|
186
|
+
const { adapter } = await createConnectedAdapter();
|
|
187
|
+
const noteId = await adapter.importPrivateNote(new Uint8Array([1]));
|
|
188
|
+
expect(noteId).toBe('imported-note-1');
|
|
189
|
+
});
|
|
190
|
+
it('requestConsumableNotes returns consumable notes', async () => {
|
|
191
|
+
const { adapter } = await createConnectedAdapter();
|
|
192
|
+
const notes = await adapter.requestConsumableNotes();
|
|
193
|
+
expect(notes).toEqual([{ noteId: 'cn1' }]);
|
|
194
|
+
});
|
|
195
|
+
it('createAccount returns accountId without params', async () => {
|
|
196
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
197
|
+
const result = await adapter.createAccount();
|
|
198
|
+
expect(mockWallet.createAccount).toHaveBeenCalledWith(undefined);
|
|
199
|
+
expect(result).toBe('account-123');
|
|
200
|
+
});
|
|
201
|
+
it('createAccount returns accountId with params', async () => {
|
|
202
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
203
|
+
const params = {
|
|
204
|
+
accountType: 'RegularAccountUpdatableCode',
|
|
205
|
+
storageMode: 'private',
|
|
206
|
+
};
|
|
207
|
+
const result = await adapter.createAccount(params);
|
|
208
|
+
expect(mockWallet.createAccount).toHaveBeenCalledWith(params);
|
|
209
|
+
expect(result).toBe('account-123');
|
|
210
|
+
});
|
|
211
|
+
it('createAccount passes customComponents to wallet', async () => {
|
|
212
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
213
|
+
const component = new Uint8Array([1, 2, 3]);
|
|
214
|
+
const params = { customComponents: [component] };
|
|
215
|
+
const result = await adapter.createAccount(params);
|
|
216
|
+
expect(mockWallet.createAccount).toHaveBeenCalledWith(params);
|
|
217
|
+
expect(result).toBe('account-123');
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
describe('waitForTransaction', () => {
|
|
221
|
+
it('success path: deserializes notes and returns TransactionOutput', async () => {
|
|
222
|
+
// base64 of [1,2,3] = "AQID"
|
|
223
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
224
|
+
mockWallet.waitForTransaction.mockResolvedValue({
|
|
225
|
+
txHash: 'hash-123',
|
|
226
|
+
outputNotes: ['AQID', 'BAUG'],
|
|
227
|
+
});
|
|
228
|
+
const result = await adapter.waitForTransaction('tx-1');
|
|
229
|
+
expect(result.txHash).toBe('hash-123');
|
|
230
|
+
expect(result.outputNotes).toHaveLength(2);
|
|
231
|
+
expect(Note.deserialize).toHaveBeenCalledTimes(2);
|
|
232
|
+
});
|
|
233
|
+
it('error path: throws WalletTransactionError on errorMessage', async () => {
|
|
234
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
235
|
+
mockWallet.waitForTransaction.mockResolvedValue({
|
|
236
|
+
errorMessage: 'tx failed',
|
|
237
|
+
});
|
|
238
|
+
const errorHandler = vi.fn();
|
|
239
|
+
adapter.on('error', errorHandler);
|
|
240
|
+
await expect(adapter.waitForTransaction('tx-1')).rejects.toThrow(WalletTransactionError);
|
|
241
|
+
expect(errorHandler).toHaveBeenCalled();
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
describe('connect', () => {
|
|
245
|
+
it('throws WalletNotReadyError if readyState is not Installed', async () => {
|
|
246
|
+
const adapter = new MidenWalletAdapter();
|
|
247
|
+
const errorHandler = vi.fn();
|
|
248
|
+
adapter.on('error', errorHandler);
|
|
249
|
+
await expect(adapter.connect(PrivateDataPermission.UponRequest, WalletAdapterNetwork.Testnet)).rejects.toThrow(WalletNotReadyError);
|
|
250
|
+
});
|
|
251
|
+
it('connects successfully and emits connect event', async () => {
|
|
252
|
+
const mockWallet = createMockWallet();
|
|
253
|
+
window.midenWallet = mockWallet;
|
|
254
|
+
const adapter = new MidenWalletAdapter();
|
|
255
|
+
adapter.readyState = WalletReadyState.Installed;
|
|
256
|
+
const connectHandler = vi.fn();
|
|
257
|
+
adapter.on('connect', connectHandler);
|
|
258
|
+
await adapter.connect(PrivateDataPermission.UponRequest, WalletAdapterNetwork.Testnet);
|
|
259
|
+
expect(adapter.address).toBe('0xmockaddress');
|
|
260
|
+
expect(adapter.publicKey).toEqual(new Uint8Array([1, 2, 3]));
|
|
261
|
+
expect(adapter.connected).toBe(true);
|
|
262
|
+
expect(adapter.connecting).toBe(false);
|
|
263
|
+
expect(connectHandler).toHaveBeenCalledWith('0xmockaddress');
|
|
264
|
+
});
|
|
265
|
+
it('throws WalletConnectionError if wallet has no address after connect', async () => {
|
|
266
|
+
const mockWallet = createMockWallet({ address: undefined });
|
|
267
|
+
window.midenWallet = mockWallet;
|
|
268
|
+
const adapter = new MidenWalletAdapter();
|
|
269
|
+
adapter.readyState = WalletReadyState.Installed;
|
|
270
|
+
await expect(adapter.connect(PrivateDataPermission.UponRequest, WalletAdapterNetwork.Testnet)).rejects.toThrow(WalletConnectionError);
|
|
271
|
+
});
|
|
272
|
+
it('does nothing if already connected', async () => {
|
|
273
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
274
|
+
// Call connect again
|
|
275
|
+
await adapter.connect(PrivateDataPermission.UponRequest, WalletAdapterNetwork.Testnet);
|
|
276
|
+
// wallet.connect should have been called only once (during initial connect)
|
|
277
|
+
expect(mockWallet.connect).toHaveBeenCalledTimes(1);
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
describe('disconnect', () => {
|
|
281
|
+
it('clears address, publicKey, and emits disconnect', async () => {
|
|
282
|
+
const { adapter } = await createConnectedAdapter();
|
|
283
|
+
const disconnectHandler = vi.fn();
|
|
284
|
+
adapter.on('disconnect', disconnectHandler);
|
|
285
|
+
await adapter.disconnect();
|
|
286
|
+
expect(adapter.address).toBeNull();
|
|
287
|
+
expect(adapter.publicKey).toBeNull();
|
|
288
|
+
expect(adapter.connected).toBe(false);
|
|
289
|
+
expect(disconnectHandler).toHaveBeenCalled();
|
|
290
|
+
});
|
|
291
|
+
it('emits error if wallet.disconnect fails', async () => {
|
|
292
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
293
|
+
mockWallet.disconnect.mockRejectedValue(new Error('disconnect failed'));
|
|
294
|
+
const errorHandler = vi.fn();
|
|
295
|
+
adapter.on('error', errorHandler);
|
|
296
|
+
await adapter.disconnect();
|
|
297
|
+
expect(errorHandler).toHaveBeenCalled();
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
describe('error wrapping', () => {
|
|
301
|
+
it('wraps wallet method failures in WalletTransactionError', async () => {
|
|
302
|
+
const { adapter, mockWallet } = await createConnectedAdapter();
|
|
303
|
+
mockWallet.requestSend.mockRejectedValue(new Error('network error'));
|
|
304
|
+
await expect(adapter.requestSend({
|
|
305
|
+
senderAddress: 's',
|
|
306
|
+
recipientAddress: 'r',
|
|
307
|
+
faucetId: 'f',
|
|
308
|
+
noteType: 'public',
|
|
309
|
+
amount: 1,
|
|
310
|
+
})).rejects.toThrow(WalletTransactionError);
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
//# sourceMappingURL=adapter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../__tests__/adapter.test.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type NoteFilterTypes } from '@miden-sdk/miden-sdk';
|
|
2
|
-
import { AllowedPrivateData, BaseMessageSignerWalletAdapter, EventEmitter, SignKind, WalletName, WalletReadyState, PrivateDataPermission, WalletAdapterNetwork, MidenSendTransaction, MidenTransaction, MidenConsumeTransaction, Asset, InputNoteDetails, TransactionOutput, WalletTransactionOutput } from '@miden-sdk/miden-wallet-adapter-base';
|
|
2
|
+
import { AllowedPrivateData, BaseMessageSignerWalletAdapter, EventEmitter, SignKind, WalletName, WalletReadyState, PrivateDataPermission, WalletAdapterNetwork, MidenSendTransaction, MidenTransaction, MidenConsumeTransaction, Asset, CreateAccountParams, InputNoteDetails, TransactionOutput, WalletTransactionOutput } from '@miden-sdk/miden-wallet-adapter-base';
|
|
3
3
|
export interface MidenWalletEvents {
|
|
4
4
|
connect(...args: unknown[]): unknown;
|
|
5
5
|
disconnect(...args: unknown[]): unknown;
|
|
@@ -33,6 +33,9 @@ export interface MidenWallet extends EventEmitter<MidenWalletEvents> {
|
|
|
33
33
|
requestConsumableNotes(): Promise<{
|
|
34
34
|
consumableNotes: InputNoteDetails[];
|
|
35
35
|
}>;
|
|
36
|
+
createAccount(params?: CreateAccountParams): Promise<{
|
|
37
|
+
accountId: string;
|
|
38
|
+
}>;
|
|
36
39
|
connect(privateDataPermission: PrivateDataPermission, network: WalletAdapterNetwork, allowedPrivateData?: AllowedPrivateData): Promise<void>;
|
|
37
40
|
disconnect(): Promise<void>;
|
|
38
41
|
}
|
|
@@ -71,6 +74,7 @@ export declare class MidenWalletAdapter extends BaseMessageSignerWalletAdapter {
|
|
|
71
74
|
importPrivateNote(note: Uint8Array): Promise<string>;
|
|
72
75
|
requestConsumableNotes(): Promise<InputNoteDetails[]>;
|
|
73
76
|
waitForTransaction(txId: string, timeout?: number): Promise<TransactionOutput>;
|
|
77
|
+
createAccount(params?: CreateAccountParams): Promise<string>;
|
|
74
78
|
connect(privateDataPermission: PrivateDataPermission, network: WalletAdapterNetwork, allowedPrivateData?: AllowedPrivateData): Promise<void>;
|
|
75
79
|
disconnect(): Promise<void>;
|
|
76
80
|
}
|
package/dist/adapter.js
CHANGED
|
@@ -207,6 +207,24 @@ export class MidenWalletAdapter extends BaseMessageSignerWalletAdapter {
|
|
|
207
207
|
throw error;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
|
+
async createAccount(params) {
|
|
211
|
+
try {
|
|
212
|
+
const wallet = this._wallet;
|
|
213
|
+
if (!wallet || !this.address)
|
|
214
|
+
throw new WalletNotConnectedError();
|
|
215
|
+
try {
|
|
216
|
+
const result = await wallet.createAccount(params);
|
|
217
|
+
return result.accountId;
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
throw new WalletTransactionError(error?.message, error);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
this.emit('error', error);
|
|
225
|
+
throw error;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
210
228
|
async connect(privateDataPermission, network, allowedPrivateData) {
|
|
211
229
|
try {
|
|
212
230
|
if (this.connected || this.connecting)
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAEL,8BAA8B,EAE9B,6BAA6B,EAE7B,qBAAqB,EACrB,wBAAwB,EAExB,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EAKrB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,IAAI;KACd;CACF,CAAC,CAAC"}
|
|
@@ -250,6 +250,26 @@
|
|
|
250
250
|
|
|
251
251
|
***
|
|
252
252
|
|
|
253
|
+
### createAccount()
|
|
254
|
+
|
|
255
|
+
> **createAccount**(`params?`): `Promise`\<`string`\>
|
|
256
|
+
|
|
257
|
+
#### Parameters
|
|
258
|
+
|
|
259
|
+
##### params?
|
|
260
|
+
|
|
261
|
+
`CreateAccountParams`
|
|
262
|
+
|
|
263
|
+
#### Returns
|
|
264
|
+
|
|
265
|
+
`Promise`\<`string`\>
|
|
266
|
+
|
|
267
|
+
#### Overrides
|
|
268
|
+
|
|
269
|
+
`BaseMessageSignerWalletAdapter.createAccount`
|
|
270
|
+
|
|
271
|
+
***
|
|
272
|
+
|
|
253
273
|
### disconnect()
|
|
254
274
|
|
|
255
275
|
> **disconnect**(): `Promise`\<`void`\>
|
|
@@ -82,6 +82,22 @@
|
|
|
82
82
|
|
|
83
83
|
***
|
|
84
84
|
|
|
85
|
+
### createAccount()
|
|
86
|
+
|
|
87
|
+
> **createAccount**(`params?`): `Promise`\<\{ `accountId`: `string`; \}\>
|
|
88
|
+
|
|
89
|
+
#### Parameters
|
|
90
|
+
|
|
91
|
+
##### params?
|
|
92
|
+
|
|
93
|
+
`CreateAccountParams`
|
|
94
|
+
|
|
95
|
+
#### Returns
|
|
96
|
+
|
|
97
|
+
`Promise`\<\{ `accountId`: `string`; \}\>
|
|
98
|
+
|
|
99
|
+
***
|
|
100
|
+
|
|
85
101
|
### disconnect()
|
|
86
102
|
|
|
87
103
|
> **disconnect**(): `Promise`\<`void`\>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miden-sdk/miden-wallet-adapter-miden",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.3",
|
|
4
4
|
"description": "Miden wallet adapter for the Miden Wallet.",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -17,7 +17,12 @@
|
|
|
17
17
|
"scripts": {
|
|
18
18
|
"build": "tsc",
|
|
19
19
|
"clean": "rimraf dist/ node_modules/",
|
|
20
|
-
"doc": "typedoc --disableSources --plugin typedoc-plugin-markdown index.ts"
|
|
20
|
+
"doc": "typedoc --disableSources --plugin typedoc-plugin-markdown index.ts",
|
|
21
|
+
"test": "vitest run"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"jsdom": "^24.0.0",
|
|
25
|
+
"vitest": "^1.0.0"
|
|
21
26
|
},
|
|
22
27
|
"peerDependencies": {
|
|
23
28
|
"typescript": "^5.0.0"
|