@bsv/wallet-toolbox 1.7.22 → 1.8.2

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 (54) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/docs/README.md +1 -0
  3. package/docs/client.md +135 -0
  4. package/docs/wab-shamir.md +311 -0
  5. package/docs/wallet.md +135 -0
  6. package/out/src/ShamirWalletManager.d.ts +213 -0
  7. package/out/src/ShamirWalletManager.d.ts.map +1 -0
  8. package/out/src/ShamirWalletManager.js +363 -0
  9. package/out/src/ShamirWalletManager.js.map +1 -0
  10. package/out/src/WalletPermissionsManager.d.ts +27 -0
  11. package/out/src/WalletPermissionsManager.d.ts.map +1 -1
  12. package/out/src/WalletPermissionsManager.js +308 -147
  13. package/out/src/WalletPermissionsManager.js.map +1 -1
  14. package/out/src/__tests/ShamirWalletManager.test.d.ts +2 -0
  15. package/out/src/__tests/ShamirWalletManager.test.d.ts.map +1 -0
  16. package/out/src/__tests/ShamirWalletManager.test.js +298 -0
  17. package/out/src/__tests/ShamirWalletManager.test.js.map +1 -0
  18. package/out/src/__tests/WalletPermissionsManager.callbacks.test.js +116 -0
  19. package/out/src/__tests/WalletPermissionsManager.callbacks.test.js.map +1 -1
  20. package/out/src/__tests/WalletPermissionsManager.pmodules.test.js +111 -0
  21. package/out/src/__tests/WalletPermissionsManager.pmodules.test.js.map +1 -1
  22. package/out/src/entropy/EntropyCollector.d.ts +89 -0
  23. package/out/src/entropy/EntropyCollector.d.ts.map +1 -0
  24. package/out/src/entropy/EntropyCollector.js +176 -0
  25. package/out/src/entropy/EntropyCollector.js.map +1 -0
  26. package/out/src/entropy/__tests/EntropyCollector.test.d.ts +2 -0
  27. package/out/src/entropy/__tests/EntropyCollector.test.d.ts.map +1 -0
  28. package/out/src/entropy/__tests/EntropyCollector.test.js +137 -0
  29. package/out/src/entropy/__tests/EntropyCollector.test.js.map +1 -0
  30. package/out/src/index.all.d.ts +2 -0
  31. package/out/src/index.all.d.ts.map +1 -1
  32. package/out/src/index.all.js +2 -0
  33. package/out/src/index.all.js.map +1 -1
  34. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  35. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  36. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +4 -1
  37. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  38. package/out/src/wab-client/WABClient.d.ts +65 -0
  39. package/out/src/wab-client/WABClient.d.ts.map +1 -1
  40. package/out/src/wab-client/WABClient.js +107 -0
  41. package/out/src/wab-client/WABClient.js.map +1 -1
  42. package/out/tsconfig.all.tsbuildinfo +1 -1
  43. package/package.json +5 -1
  44. package/src/ShamirWalletManager.ts +499 -0
  45. package/src/WalletPermissionsManager.ts +368 -181
  46. package/src/__tests/ShamirWalletManager.test.ts +369 -0
  47. package/src/__tests/WalletPermissionsManager.callbacks.test.ts +140 -1
  48. package/src/__tests/WalletPermissionsManager.pmodules.test.ts +152 -0
  49. package/src/entropy/EntropyCollector.ts +228 -0
  50. package/src/entropy/__tests/EntropyCollector.test.ts +182 -0
  51. package/src/index.all.ts +2 -0
  52. package/src/sdk/WalletServices.interfaces.ts +0 -1
  53. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +4 -1
  54. package/src/wab-client/WABClient.ts +135 -0
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sdk_1 = require("@bsv/sdk");
4
+ const ShamirWalletManager_1 = require("../ShamirWalletManager");
5
+ const globals_1 = require("@jest/globals");
6
+ // Mock WABClient
7
+ const mockWABClient = {
8
+ startShareAuth: globals_1.jest.fn().mockResolvedValue({ success: true }),
9
+ storeShare: globals_1.jest
10
+ .fn()
11
+ .mockResolvedValue({ success: true, userId: 1 }),
12
+ retrieveShare: globals_1.jest.fn().mockResolvedValue({
13
+ success: true,
14
+ shareB: '1.mockedserversharefromwab.2.test'
15
+ }),
16
+ updateShare: globals_1.jest
17
+ .fn()
18
+ .mockResolvedValue({ success: true, shareVersion: 2 }),
19
+ deleteShamirUser: globals_1.jest.fn().mockResolvedValue({ success: true })
20
+ };
21
+ globals_1.jest.mock('../wab-client/WABClient', () => {
22
+ return {
23
+ WABClient: globals_1.jest.fn().mockImplementation(() => mockWABClient)
24
+ };
25
+ });
26
+ // Mock wallet builder
27
+ const mockWallet = {};
28
+ const mockWalletBuilder = globals_1.jest.fn(async (privateKey, privilegedKeyManager) => mockWallet);
29
+ describe('ShamirWalletManager', () => {
30
+ describe('Configuration', () => {
31
+ it('should use default 2-of-3 configuration', () => {
32
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
33
+ wabServerUrl: 'https://test.example.com',
34
+ authMethodType: 'DevConsole',
35
+ walletBuilder: mockWalletBuilder
36
+ });
37
+ expect(manager.getThreshold()).toBe(2);
38
+ expect(manager.getTotalShares()).toBe(3);
39
+ });
40
+ it('should accept custom threshold configuration', () => {
41
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
42
+ wabServerUrl: 'https://test.example.com',
43
+ authMethodType: 'DevConsole',
44
+ walletBuilder: mockWalletBuilder,
45
+ threshold: 3,
46
+ totalShares: 5
47
+ });
48
+ expect(manager.getThreshold()).toBe(3);
49
+ expect(manager.getTotalShares()).toBe(5);
50
+ });
51
+ it('should reject threshold less than 2', () => {
52
+ expect(() => {
53
+ new ShamirWalletManager_1.ShamirWalletManager({
54
+ wabServerUrl: 'https://test.example.com',
55
+ authMethodType: 'DevConsole',
56
+ walletBuilder: mockWalletBuilder,
57
+ threshold: 1,
58
+ totalShares: 3
59
+ });
60
+ }).toThrow('Threshold must be at least 2');
61
+ });
62
+ it('should reject totalShares less than 3', () => {
63
+ expect(() => {
64
+ new ShamirWalletManager_1.ShamirWalletManager({
65
+ wabServerUrl: 'https://test.example.com',
66
+ authMethodType: 'DevConsole',
67
+ walletBuilder: mockWalletBuilder,
68
+ threshold: 2,
69
+ totalShares: 2
70
+ });
71
+ }).toThrow('Total shares must be at least 3');
72
+ });
73
+ it('should reject configurations where user cannot recover independently (custodial)', () => {
74
+ // 3-of-4 means user gets 3 shares (4-1), which equals threshold - OK
75
+ expect(() => {
76
+ new ShamirWalletManager_1.ShamirWalletManager({
77
+ wabServerUrl: 'https://test.example.com',
78
+ authMethodType: 'DevConsole',
79
+ walletBuilder: mockWalletBuilder,
80
+ threshold: 3,
81
+ totalShares: 4
82
+ });
83
+ }).not.toThrow();
84
+ // 3-of-3 means user gets 2 shares (3-1), which is less than threshold 3 - NOT OK
85
+ expect(() => {
86
+ new ShamirWalletManager_1.ShamirWalletManager({
87
+ wabServerUrl: 'https://test.example.com',
88
+ authMethodType: 'DevConsole',
89
+ walletBuilder: mockWalletBuilder,
90
+ threshold: 3,
91
+ totalShares: 3
92
+ });
93
+ }).toThrow('User must have at least 3 shares to recover independently');
94
+ });
95
+ });
96
+ describe('Entropy Collection', () => {
97
+ it('should track entropy collection', () => {
98
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
99
+ wabServerUrl: 'https://test.example.com',
100
+ authMethodType: 'DevConsole',
101
+ walletBuilder: mockWalletBuilder
102
+ });
103
+ expect(manager.hasEnoughEntropy()).toBe(false);
104
+ // Add a sample
105
+ const progress = manager.addMouseEntropy(100, 200);
106
+ // First sample should be accepted
107
+ expect(progress).not.toBeNull();
108
+ expect(manager.getEntropyProgress().collected).toBeGreaterThan(0);
109
+ });
110
+ it('should reset entropy', () => {
111
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
112
+ wabServerUrl: 'https://test.example.com',
113
+ authMethodType: 'DevConsole',
114
+ walletBuilder: mockWalletBuilder
115
+ });
116
+ // Add at least one sample
117
+ manager.addMouseEntropy(100, 200);
118
+ expect(manager.getEntropyProgress().collected).toBeGreaterThan(0);
119
+ manager.resetEntropy();
120
+ expect(manager.getEntropyProgress().collected).toBe(0);
121
+ });
122
+ });
123
+ describe('User ID Hash', () => {
124
+ it('should allow setting user ID hash', () => {
125
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
126
+ wabServerUrl: 'https://test.example.com',
127
+ authMethodType: 'DevConsole',
128
+ walletBuilder: mockWalletBuilder
129
+ });
130
+ expect(manager.getUserIdHash()).toBeUndefined();
131
+ manager.setUserIdHash('abc123');
132
+ expect(manager.getUserIdHash()).toBe('abc123');
133
+ });
134
+ });
135
+ describe('Share Validation', () => {
136
+ it('should validate share format with 4 parts', async () => {
137
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
138
+ wabServerUrl: 'https://test.example.com',
139
+ authMethodType: 'DevConsole',
140
+ walletBuilder: mockWalletBuilder
141
+ });
142
+ // This should fail because the share format is invalid
143
+ await expect(manager.recoverWithUserShares(['invalid-share', 'also-invalid'])).rejects.toThrow('Invalid share format');
144
+ });
145
+ it('should reject shares with threshold less than 2', async () => {
146
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
147
+ wabServerUrl: 'https://test.example.com',
148
+ authMethodType: 'DevConsole',
149
+ walletBuilder: mockWalletBuilder
150
+ });
151
+ await expect(manager.recoverWithUserShares(['1.data.1.check', '2.data.1.check'])).rejects.toThrow('Invalid share: threshold must be at least 2');
152
+ });
153
+ });
154
+ describe('Recovery', () => {
155
+ it('should require enough shares for recovery', async () => {
156
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
157
+ wabServerUrl: 'https://test.example.com',
158
+ authMethodType: 'DevConsole',
159
+ walletBuilder: mockWalletBuilder
160
+ });
161
+ // Only 1 share but threshold encoded in share is 2
162
+ await expect(manager.recoverWithUserShares(['1.somedata.2.check'])).rejects.toThrow('Need at least 2 shares to recover');
163
+ });
164
+ it('should require userIdHash for server share recovery', async () => {
165
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
166
+ wabServerUrl: 'https://test.example.com',
167
+ authMethodType: 'DevConsole',
168
+ walletBuilder: mockWalletBuilder
169
+ });
170
+ await expect(manager.recoverWithServerShare(['1.somedata.2.check'], { otp: '123456' })).rejects.toThrow('User ID hash not set');
171
+ });
172
+ });
173
+ describe('Wallet Building', () => {
174
+ it('should fail to build wallet without private key', async () => {
175
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
176
+ wabServerUrl: 'https://test.example.com',
177
+ authMethodType: 'DevConsole',
178
+ walletBuilder: mockWalletBuilder
179
+ });
180
+ await expect(manager.buildWallet()).rejects.toThrow('No private key available');
181
+ });
182
+ it('should fail to get wallet without building', () => {
183
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
184
+ wabServerUrl: 'https://test.example.com',
185
+ authMethodType: 'DevConsole',
186
+ walletBuilder: mockWalletBuilder
187
+ });
188
+ expect(() => manager.getWallet()).toThrow('Wallet not built');
189
+ });
190
+ it('should report no private key initially', () => {
191
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
192
+ wabServerUrl: 'https://test.example.com',
193
+ authMethodType: 'DevConsole',
194
+ walletBuilder: mockWalletBuilder
195
+ });
196
+ expect(manager.hasPrivateKey()).toBe(false);
197
+ });
198
+ });
199
+ describe('Wallet Creation', () => {
200
+ it('should create wallet and return correct number of user shares', async () => {
201
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
202
+ wabServerUrl: 'https://test.example.com',
203
+ authMethodType: 'DevConsole',
204
+ walletBuilder: mockWalletBuilder,
205
+ threshold: 2,
206
+ totalShares: 3
207
+ });
208
+ // Collect enough entropy
209
+ for (let i = 0; i < 256; i++) {
210
+ manager.addMouseEntropy(Math.random() * 1000, Math.random() * 1000);
211
+ }
212
+ let capturedShares = [];
213
+ const result = await manager.createNewWallet({ otp: '123456' }, async (userShares, threshold, totalShares) => {
214
+ capturedShares = userShares;
215
+ expect(threshold).toBe(2);
216
+ expect(totalShares).toBe(3);
217
+ return true;
218
+ });
219
+ // Should get 2 user shares (totalShares - 1 for server)
220
+ expect(result.userShares.length).toBe(2);
221
+ expect(capturedShares.length).toBe(2);
222
+ expect(result.threshold).toBe(2);
223
+ expect(result.totalShares).toBe(3);
224
+ expect(result.userIdHash).toBeDefined();
225
+ expect(result.privateKey).toBeInstanceOf(sdk_1.PrivateKey);
226
+ expect(manager.hasPrivateKey()).toBe(true);
227
+ });
228
+ it('should return more user shares for higher totalShares', async () => {
229
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
230
+ wabServerUrl: 'https://test.example.com',
231
+ authMethodType: 'DevConsole',
232
+ walletBuilder: mockWalletBuilder,
233
+ threshold: 3,
234
+ totalShares: 5
235
+ });
236
+ for (let i = 0; i < 256; i++) {
237
+ manager.addMouseEntropy(Math.random() * 1000, Math.random() * 1000);
238
+ }
239
+ const result = await manager.createNewWallet({ otp: '123456' }, async (userShares) => {
240
+ expect(userShares.length).toBe(4); // 5 - 1 = 4 user shares
241
+ return true;
242
+ });
243
+ expect(result.userShares.length).toBe(4);
244
+ });
245
+ });
246
+ describe('Account Deletion', () => {
247
+ it('should require userIdHash for deletion', async () => {
248
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
249
+ wabServerUrl: 'https://test.example.com',
250
+ authMethodType: 'DevConsole',
251
+ walletBuilder: mockWalletBuilder
252
+ });
253
+ await expect(manager.deleteAccount({ otp: '123456' })).rejects.toThrow('User ID hash not set');
254
+ });
255
+ it('should clear state after deletion', async () => {
256
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
257
+ wabServerUrl: 'https://test.example.com',
258
+ authMethodType: 'DevConsole',
259
+ walletBuilder: mockWalletBuilder
260
+ });
261
+ // Collect entropy and create wallet
262
+ for (let i = 0; i < 256; i++) {
263
+ manager.addMouseEntropy(Math.random() * 1000, Math.random() * 1000);
264
+ }
265
+ await manager.createNewWallet({ otp: '123456' }, async () => true);
266
+ expect(manager.hasPrivateKey()).toBe(true);
267
+ expect(manager.getUserIdHash()).toBeDefined();
268
+ // Delete
269
+ await manager.deleteAccount({ otp: '654321' });
270
+ expect(manager.hasPrivateKey()).toBe(false);
271
+ expect(manager.getUserIdHash()).toBeUndefined();
272
+ });
273
+ });
274
+ describe('Key Rotation', () => {
275
+ it('should require userIdHash for rotation', async () => {
276
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
277
+ wabServerUrl: 'https://test.example.com',
278
+ authMethodType: 'DevConsole',
279
+ walletBuilder: mockWalletBuilder
280
+ });
281
+ // Collect entropy
282
+ for (let i = 0; i < 256; i++) {
283
+ manager.addMouseEntropy(Math.random() * 1000, Math.random() * 1000);
284
+ }
285
+ await expect(manager.rotateKeys({ otp: '123456' }, async () => true)).rejects.toThrow('User ID hash not set');
286
+ });
287
+ it('should require entropy for rotation', async () => {
288
+ const manager = new ShamirWalletManager_1.ShamirWalletManager({
289
+ wabServerUrl: 'https://test.example.com',
290
+ authMethodType: 'DevConsole',
291
+ walletBuilder: mockWalletBuilder
292
+ });
293
+ manager.setUserIdHash('abc123');
294
+ await expect(manager.rotateKeys({ otp: '123456' }, async () => true)).rejects.toThrow('Collect entropy before key rotation');
295
+ });
296
+ });
297
+ });
298
+ //# sourceMappingURL=ShamirWalletManager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShamirWalletManager.test.js","sourceRoot":"","sources":["../../../src/__tests/ShamirWalletManager.test.ts"],"names":[],"mappings":"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"}
@@ -235,5 +235,121 @@ describe('WalletPermissionsManager - Callbacks & Event Handling', () => {
235
235
  await expect(call1).resolves.toBeDefined();
236
236
  await expect(call2).rejects.toThrow(/Permission denied/);
237
237
  });
238
+ // -------------------------------------------------------------------------
239
+ // 3) Grouped Permission Error Handling Tests
240
+ // -------------------------------------------------------------------------
241
+ describe('grantGroupedPermission error handling', () => {
242
+ it('should reject pending promises when grantGroupedPermission throws a validation error', async () => {
243
+ // This test verifies the fix for the bug where pending promises would hang forever
244
+ // if grantGroupedPermission() threw an error during validation.
245
+ const groupedCb = globals_1.jest.fn(() => { });
246
+ manager.bindCallback('onGroupedPermissionRequested', groupedCb);
247
+ // Manually set up a grouped permission request in the activeRequests map
248
+ // This simulates what happens when waitForAuthentication() is called
249
+ const requestID = 'group:test-originator.com';
250
+ const originalRequest = {
251
+ originator: 'test-originator.com',
252
+ permissions: {
253
+ protocolPermissions: [
254
+ { protocolID: [1, 'requested-protocol'], counterparty: 'self', description: 'test' }
255
+ ]
256
+ }
257
+ };
258
+ // Create a promise that would normally hang forever if the fix isn't in place
259
+ let resolvedValue = null;
260
+ let rejectedError = null;
261
+ const pendingPromise = new Promise((resolve, reject) => {
262
+ ;
263
+ manager.activeRequests.set(requestID, {
264
+ request: originalRequest,
265
+ pending: [{ resolve, reject }]
266
+ });
267
+ }).then(val => {
268
+ resolvedValue = val;
269
+ return val;
270
+ }, err => {
271
+ rejectedError = err;
272
+ throw err;
273
+ });
274
+ // Try to grant with MISMATCHED permissions (different protocol than requested)
275
+ // This should cause grantGroupedPermission to throw a validation error
276
+ const grantPromise = manager.grantGroupedPermission({
277
+ requestID,
278
+ granted: {
279
+ protocolPermissions: [
280
+ { protocolID: [1, 'DIFFERENT-protocol'], counterparty: 'self', description: 'test' }
281
+ ]
282
+ }
283
+ });
284
+ // grantGroupedPermission should throw
285
+ await expect(grantPromise).rejects.toThrow(/not a subset of the original request/);
286
+ // The pending promise should also be rejected (not left hanging!)
287
+ await expect(pendingPromise).rejects.toThrow(/not a subset of the original request/);
288
+ // Verify the activeRequests map was cleaned up
289
+ expect(manager.activeRequests.has(requestID)).toBe(false);
290
+ });
291
+ it('should clean up activeRequests even when grantGroupedPermission throws', async () => {
292
+ // Set up a request
293
+ const requestID = 'group:cleanup-test.com';
294
+ manager.activeRequests.set(requestID, {
295
+ request: {
296
+ originator: 'cleanup-test.com',
297
+ permissions: { protocolPermissions: [] }
298
+ },
299
+ pending: [
300
+ {
301
+ resolve: () => { },
302
+ reject: () => { }
303
+ }
304
+ ]
305
+ });
306
+ // Verify it's in the map
307
+ expect(manager.activeRequests.has(requestID)).toBe(true);
308
+ // Grant with mismatched spending authorization to trigger an error
309
+ await expect(manager.grantGroupedPermission({
310
+ requestID,
311
+ granted: {
312
+ spendingAuthorization: { amount: 1000, description: 'test' }
313
+ }
314
+ })).rejects.toThrow();
315
+ // The request should be cleaned up even though an error was thrown
316
+ expect(manager.activeRequests.has(requestID)).toBe(false);
317
+ });
318
+ it('should resolve pending promises when grantGroupedPermission succeeds', async () => {
319
+ // Mock createPermissionOnChain to prevent actual on-chain operations
320
+ globals_1.jest.spyOn(manager, 'createPermissionOnChain').mockResolvedValue(undefined);
321
+ const requestID = 'group:success-test.com';
322
+ const requestedPermissions = {
323
+ protocolPermissions: [
324
+ { protocolID: [1, 'test-proto'], counterparty: 'self', description: 'Test' }
325
+ ]
326
+ };
327
+ // Set up a pending request
328
+ let wasResolved = false;
329
+ const pendingPromise = new Promise((resolve, reject) => {
330
+ ;
331
+ manager.activeRequests.set(requestID, {
332
+ request: {
333
+ originator: 'success-test.com',
334
+ permissions: requestedPermissions
335
+ },
336
+ pending: [{ resolve, reject }]
337
+ });
338
+ }).then(val => {
339
+ wasResolved = true;
340
+ return val;
341
+ });
342
+ // Grant with matching permissions
343
+ await manager.grantGroupedPermission({
344
+ requestID,
345
+ granted: requestedPermissions
346
+ });
347
+ // The pending promise should resolve
348
+ await expect(pendingPromise).resolves.toBe(true);
349
+ expect(wasResolved).toBe(true);
350
+ // The request should be cleaned up
351
+ expect(manager.activeRequests.has(requestID)).toBe(false);
352
+ });
353
+ });
238
354
  });
239
355
  //# sourceMappingURL=WalletPermissionsManager.callbacks.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WalletPermissionsManager.callbacks.test.js","sourceRoot":"","sources":["../../../src/__tests/WalletPermissionsManager.callbacks.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WalletPermissionsManager.callbacks.test.js","sourceRoot":"","sources":["../../../src/__tests/WalletPermissionsManager.callbacks.test.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,105 @@ describe('WalletPermissionsManager - Permission Module Support', () => {
12
12
  beforeEach(() => {
13
13
  underlying = (0, WalletPermissionsManager_fixtures_1.mockUnderlyingWallet)();
14
14
  });
15
+ describe('P-Label Delegation', () => {
16
+ it('should delegate listActions through P-label modules in order and return responses in reverse order', async () => {
17
+ const callOrder = [];
18
+ const module1 = {
19
+ onRequest: jest.fn(async (req) => {
20
+ callOrder.push('req1');
21
+ expect(req.args.req1Processed).toBeUndefined();
22
+ return { ...req, args: { ...req.args, req1Processed: true } };
23
+ }),
24
+ onResponse: jest.fn(async (res) => {
25
+ callOrder.push('res1');
26
+ expect(res.processedBy).toBe('module2');
27
+ return { ...res, finalProcessedBy: 'module1' };
28
+ })
29
+ };
30
+ const module2 = {
31
+ onRequest: jest.fn(async (req) => {
32
+ callOrder.push('req2');
33
+ expect(req.args.req1Processed).toBe(true);
34
+ return { ...req, args: { ...req.args, req2Processed: true } };
35
+ }),
36
+ onResponse: jest.fn(async (res) => {
37
+ callOrder.push('res2');
38
+ expect(res.processedBy).toBeUndefined();
39
+ return { ...res, processedBy: 'module2' };
40
+ })
41
+ };
42
+ const config = {
43
+ permissionModules: {
44
+ scheme1: module1,
45
+ scheme2: module2
46
+ },
47
+ seekPermissionWhenListingActionsByLabel: false
48
+ };
49
+ const manager = new WalletPermissionsManager_1.WalletPermissionsManager(underlying, 'customToken.domain.com', config);
50
+ underlying.listActions.mockResolvedValue({ totalActions: 0, actions: [] });
51
+ const result = await manager.listActions({
52
+ labels: ['p scheme1 alpha', 'p scheme2 beta', 'regular-label']
53
+ }, 'app.com');
54
+ expect(module1.onRequest).toHaveBeenCalledTimes(1);
55
+ expect(module2.onRequest).toHaveBeenCalledTimes(1);
56
+ expect(module1.onResponse).toHaveBeenCalledTimes(1);
57
+ expect(module2.onResponse).toHaveBeenCalledTimes(1);
58
+ expect(callOrder).toEqual(['req1', 'req2', 'res2', 'res1']);
59
+ expect(result.finalProcessedBy).toBe('module1');
60
+ });
61
+ it('should delegate createAction when a P-label is present', async () => {
62
+ const testModule = {
63
+ onRequest: jest.fn(async (req) => req),
64
+ onResponse: jest.fn(async (res) => res)
65
+ };
66
+ const config = {
67
+ permissionModules: {
68
+ labels: testModule
69
+ },
70
+ seekSpendingPermissions: false,
71
+ seekBasketInsertionPermissions: false,
72
+ seekPermissionWhenApplyingActionLabels: false
73
+ };
74
+ const manager = new WalletPermissionsManager_1.WalletPermissionsManager(underlying, 'customToken.domain.com', config);
75
+ underlying.createAction.mockResolvedValue({ txid: 'abc123', tx: [] });
76
+ await manager.createAction({
77
+ description: 'Label-based createAction',
78
+ labels: ['p labels token', 'regular-label'],
79
+ outputs: [
80
+ {
81
+ lockingScript: 'abcd',
82
+ satoshis: 1000,
83
+ basket: 'regular-basket',
84
+ outputDescription: 'Test output'
85
+ }
86
+ ]
87
+ }, 'app.com');
88
+ expect(testModule.onRequest).toHaveBeenCalledTimes(1);
89
+ expect(testModule.onResponse).toHaveBeenCalledTimes(1);
90
+ });
91
+ it('should delegate internalizeAction when a P-label is present', async () => {
92
+ const testModule = {
93
+ onRequest: jest.fn(async (req) => req),
94
+ onResponse: jest.fn(async (res) => res)
95
+ };
96
+ const config = {
97
+ permissionModules: {
98
+ labels: testModule
99
+ },
100
+ seekPermissionWhenApplyingActionLabels: false
101
+ };
102
+ const manager = new WalletPermissionsManager_1.WalletPermissionsManager(underlying, 'customToken.domain.com', config);
103
+ underlying.internalizeAction.mockResolvedValue({ accepted: true });
104
+ await manager.internalizeAction({
105
+ tx: [],
106
+ description: 'Internalize with label',
107
+ labels: ['p labels internal', 'regular-label'],
108
+ outputs: []
109
+ }, 'app.com');
110
+ expect(testModule.onRequest).toHaveBeenCalledTimes(1);
111
+ expect(testModule.onResponse).toHaveBeenCalledTimes(1);
112
+ });
113
+ });
15
114
  afterEach(() => {
16
115
  jest.clearAllMocks();
17
116
  });
@@ -517,6 +616,18 @@ describe('WalletPermissionsManager - Permission Module Support', () => {
517
616
  });
518
617
  });
519
618
  describe('P-Module Error Handling', () => {
619
+ it('should reject invalid P-label formats', async () => {
620
+ const manager = new WalletPermissionsManager_1.WalletPermissionsManager(underlying, 'customToken.domain.com', {});
621
+ await expect(manager.listActions({ labels: ['p schemeOnly'] }, 'app.com')).rejects.toThrow('Invalid P-label format');
622
+ await expect(manager.listActions({ labels: ['p missingScheme'] }, 'app.com')).rejects.toThrow('Invalid P-label format');
623
+ await expect(manager.listActions({ labels: ['p scheme '] }, 'app.com')).rejects.toThrow('Invalid P-label format');
624
+ expect(underlying.listActions).not.toHaveBeenCalled();
625
+ });
626
+ it('should throw if P-label scheme is unsupported', async () => {
627
+ const manager = new WalletPermissionsManager_1.WalletPermissionsManager(underlying, 'customToken.domain.com', {});
628
+ await expect(manager.listActions({ labels: ['p unknown scheme', 'regular-label'] }, 'app.com')).rejects.toThrow('Unsupported P-label scheme: p unknown');
629
+ expect(underlying.listActions).not.toHaveBeenCalled();
630
+ });
520
631
  it('should throw if P-module onRequest throws', async () => {
521
632
  const testModule = {
522
633
  onRequest: jest.fn(async () => {