@reown/appkit-experimental 1.1.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 (43) hide show
  1. package/LICENSE +190 -0
  2. package/dist/esm/exports/index.js +2 -0
  3. package/dist/esm/exports/index.js.map +1 -0
  4. package/dist/esm/exports/smart-session/index.js +2 -0
  5. package/dist/esm/exports/smart-session/index.js.map +1 -0
  6. package/dist/esm/src/smart-session/grantPermissions.js +77 -0
  7. package/dist/esm/src/smart-session/grantPermissions.js.map +1 -0
  8. package/dist/esm/src/smart-session/helper/index.js +79 -0
  9. package/dist/esm/src/smart-session/helper/index.js.map +1 -0
  10. package/dist/esm/src/smart-session/schema/index.js +92 -0
  11. package/dist/esm/src/smart-session/schema/index.js.map +1 -0
  12. package/dist/esm/src/smart-session/utils/ConstantUtils.js +5 -0
  13. package/dist/esm/src/smart-session/utils/ConstantUtils.js.map +1 -0
  14. package/dist/esm/src/smart-session/utils/CosignerService.js +62 -0
  15. package/dist/esm/src/smart-session/utils/CosignerService.js.map +1 -0
  16. package/dist/esm/src/smart-session/utils/ERC5792Types.js +2 -0
  17. package/dist/esm/src/smart-session/utils/ERC5792Types.js.map +1 -0
  18. package/dist/esm/src/smart-session/utils/TypeUtils.js +12 -0
  19. package/dist/esm/src/smart-session/utils/TypeUtils.js.map +1 -0
  20. package/dist/esm/tests/data/abi.js +16 -0
  21. package/dist/esm/tests/data/abi.js.map +1 -0
  22. package/dist/esm/tests/smart-session/CosignerService.test.js +130 -0
  23. package/dist/esm/tests/smart-session/CosignerService.test.js.map +1 -0
  24. package/dist/esm/tests/smart-session/grantPermissions.test.js +252 -0
  25. package/dist/esm/tests/smart-session/grantPermissions.test.js.map +1 -0
  26. package/dist/esm/tests/smart-session/requestValidation.test.js +423 -0
  27. package/dist/esm/tests/smart-session/requestValidation.test.js.map +1 -0
  28. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  29. package/dist/types/exports/index.d.ts +0 -0
  30. package/dist/types/exports/smart-session/index.d.ts +2 -0
  31. package/dist/types/src/smart-session/grantPermissions.d.ts +5 -0
  32. package/dist/types/src/smart-session/helper/index.d.ts +61 -0
  33. package/dist/types/src/smart-session/schema/index.d.ts +265 -0
  34. package/dist/types/src/smart-session/utils/ConstantUtils.d.ts +4 -0
  35. package/dist/types/src/smart-session/utils/CosignerService.d.ts +19 -0
  36. package/dist/types/src/smart-session/utils/ERC5792Types.d.ts +20 -0
  37. package/dist/types/src/smart-session/utils/TypeUtils.d.ts +80 -0
  38. package/dist/types/tests/data/abi.d.ts +11 -0
  39. package/dist/types/tests/smart-session/CosignerService.test.d.ts +1 -0
  40. package/dist/types/tests/smart-session/grantPermissions.test.d.ts +1 -0
  41. package/dist/types/tests/smart-session/requestValidation.test.d.ts +1 -0
  42. package/package.json +70 -0
  43. package/readme.md +23 -0
@@ -0,0 +1,423 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { donutContractAbi } from '../data/abi.js';
3
+ import { validateRequest } from '../../src/smart-session/helper/index.js';
4
+ import { ERROR_MESSAGES } from '../../src/smart-session/schema/index.js';
5
+ describe('smart-session/schema', () => {
6
+ let mockRequest;
7
+ beforeEach(() => {
8
+ mockRequest = {
9
+ chainId: '0x1',
10
+ expiry: Date.now() + 10000,
11
+ signer: {
12
+ type: 'keys',
13
+ data: {
14
+ keys: [{ type: 'secp256k1', publicKey: '0x123456' }]
15
+ }
16
+ },
17
+ permissions: [
18
+ {
19
+ type: 'contract-call',
20
+ data: {
21
+ address: '0x2E65BAfA07238666c3b239E94F32DaD3cDD6498D',
22
+ abi: donutContractAbi,
23
+ functions: [
24
+ {
25
+ functionName: 'purchase'
26
+ }
27
+ ]
28
+ }
29
+ }
30
+ ],
31
+ policies: []
32
+ };
33
+ });
34
+ describe('validateRequest', () => {
35
+ describe('request object validation', () => {
36
+ it('should pass for valid request', () => {
37
+ expect(() => validateRequest(mockRequest)).not.toThrow();
38
+ });
39
+ it('should fail for missing chainId', () => {
40
+ const { chainId, ...requestWithoutChainId } = mockRequest;
41
+ expect(() => validateRequest(requestWithoutChainId)).toThrow('Invalid chainId: Required');
42
+ });
43
+ });
44
+ describe('ChainIdSchema Validation', () => {
45
+ it('should pass for valid chainId', () => {
46
+ const request = { ...mockRequest, chainId: '0x1' };
47
+ expect(() => validateRequest(request)).not.toThrow();
48
+ });
49
+ it.each([
50
+ [null, 'null'],
51
+ [undefined, 'undefined'],
52
+ [123, 'number'],
53
+ [{}, 'object'],
54
+ [[], 'array'],
55
+ ['', 'empty string'],
56
+ ['123456', 'string without 0x prefix'],
57
+ ['0x', 'only 0x'],
58
+ ['0xZZZZZZ', 'invalid hexadecimal']
59
+ ])('should fail for %s chainId', (chainId, _description) => {
60
+ const request = { ...mockRequest, chainId };
61
+ if (chainId === undefined) {
62
+ const { chainId, ...requestWithoutChainId } = request;
63
+ expect(() => validateRequest(requestWithoutChainId)).toThrow(/Invalid chainId/);
64
+ }
65
+ else {
66
+ expect(() => validateRequest(request)).toThrow(/Invalid chainId/);
67
+ }
68
+ });
69
+ it('should handle chainIds with leading zeros', () => {
70
+ const request = { ...mockRequest, chainId: '0x01' };
71
+ expect(() => validateRequest(request)).not.toThrow();
72
+ });
73
+ it('should be case insensitive for hex characters', () => {
74
+ const request1 = { ...mockRequest, chainId: '0xaB1' };
75
+ const request2 = { ...mockRequest, chainId: '0xAb1' };
76
+ expect(() => validateRequest(request1)).not.toThrow();
77
+ expect(() => validateRequest(request2)).not.toThrow();
78
+ });
79
+ });
80
+ describe('Address field validation', () => {
81
+ it('should pass for valid Ethereum address', () => {
82
+ const request = {
83
+ ...mockRequest,
84
+ address: '0x1234567890123456789012345678901234567890'
85
+ };
86
+ expect(() => validateRequest(request)).not.toThrow();
87
+ });
88
+ it('should pass when address is omitted', () => {
89
+ const { address, ...requestWithoutAddress } = mockRequest;
90
+ expect(() => validateRequest(requestWithoutAddress)).not.toThrow();
91
+ });
92
+ it('should fail for address not starting with 0x', () => {
93
+ const request = {
94
+ ...mockRequest,
95
+ address: '1234567890123456789012345678901234567890'
96
+ };
97
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
98
+ });
99
+ it('should fail for empty string address', () => {
100
+ const request = { ...mockRequest, address: '' };
101
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
102
+ });
103
+ it('should fail for non-string address', () => {
104
+ const request = { ...mockRequest, address: 123 };
105
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
106
+ });
107
+ it('should fail for null address', () => {
108
+ const request = { ...mockRequest, address: null };
109
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
110
+ });
111
+ it('should fail for undefined address', () => {
112
+ const request = { ...mockRequest, address: undefined };
113
+ expect(() => validateRequest(request)).not.toThrow();
114
+ });
115
+ it('should be case insensitive for hex characters', () => {
116
+ const request = { ...mockRequest, address: ('0xAbCd' + '0'.repeat(36)) };
117
+ expect(() => validateRequest(request)).not.toThrow();
118
+ });
119
+ });
120
+ describe('Expiry field validation', () => {
121
+ const currentTimestamp = Math.floor(Date.now() / 1000);
122
+ it('should pass for a valid future expiry', () => {
123
+ const request = { ...mockRequest, expiry: currentTimestamp + 3600 };
124
+ expect(() => validateRequest(request)).not.toThrow();
125
+ });
126
+ it('should fail for a negative expiry', () => {
127
+ const request = { ...mockRequest, expiry: -1 };
128
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
129
+ });
130
+ it('should fail for a zero expiry', () => {
131
+ const request = { ...mockRequest, expiry: 0 };
132
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
133
+ });
134
+ it('should fail for a past expiry', () => {
135
+ const request = { ...mockRequest, expiry: currentTimestamp - 3600 };
136
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
137
+ });
138
+ it('should fail for a current timestamp expiry', () => {
139
+ const request = { ...mockRequest, expiry: currentTimestamp };
140
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
141
+ });
142
+ it('should fail for a non-number expiry', () => {
143
+ const request = { ...mockRequest, expiry: '1234567890' };
144
+ expect(() => validateRequest(request)).toThrow('Invalid expiry: Expected number, received string');
145
+ });
146
+ it('should fail for an undefined expiry', () => {
147
+ const { expiry, ...requestWithoutExpiry } = mockRequest;
148
+ expect(() => validateRequest(requestWithoutExpiry)).toThrow('Invalid expiry: Required');
149
+ });
150
+ it('should fail for a null expiry', () => {
151
+ const request = { ...mockRequest, expiry: null };
152
+ expect(() => validateRequest(request)).toThrow('Invalid expiry: Expected number, received null');
153
+ });
154
+ it('should pass for an expiry 1 hour in the future', () => {
155
+ const request = { ...mockRequest, expiry: currentTimestamp + 3600 };
156
+ expect(() => validateRequest(request)).not.toThrow();
157
+ });
158
+ });
159
+ describe('Signer field validation', () => {
160
+ it('should fail for unsupported signer', () => {
161
+ const request = {
162
+ ...mockRequest,
163
+ signer: {
164
+ type: 'key',
165
+ data: { type: 'secp256k1', publicKey: '0x1234567890abcdef' }
166
+ }
167
+ };
168
+ expect(() => validateRequest(request)).toThrow();
169
+ });
170
+ it('should pass for valid multi-key signer', () => {
171
+ const request = {
172
+ ...mockRequest,
173
+ signer: {
174
+ type: 'keys',
175
+ data: {
176
+ keys: [
177
+ { type: 'secp256k1', publicKey: '0x1234567890abcdef' },
178
+ { type: 'secp256r1', publicKey: '0xabcdef1234567890' }
179
+ ]
180
+ }
181
+ }
182
+ };
183
+ expect(() => validateRequest(request)).not.toThrow();
184
+ });
185
+ it('should fail for empty keys array in multi-key signer', () => {
186
+ const request = {
187
+ ...mockRequest,
188
+ signer: { type: 'keys', data: { keys: [] } }
189
+ };
190
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_KEYS_SIGNER);
191
+ });
192
+ it('should fail for missing data in multi-key signer', () => {
193
+ const request = {
194
+ ...mockRequest,
195
+ signer: { type: 'keys' }
196
+ };
197
+ expect(() => validateRequest(request)).toThrow('Invalid signer.data: Required');
198
+ });
199
+ it('should fail for missing keys in multi-key signer', () => {
200
+ const request = {
201
+ ...mockRequest,
202
+ signer: { type: 'keys', data: {} }
203
+ };
204
+ expect(() => validateRequest(request)).toThrow('Invalid signer.data.keys: Required');
205
+ });
206
+ it('should fail for non-object signer', () => {
207
+ const request = {
208
+ ...mockRequest,
209
+ signer: 'invalid'
210
+ };
211
+ expect(() => validateRequest(request)).toThrow('Invalid signer: Expected object, received string');
212
+ });
213
+ it('should fail for null signer', () => {
214
+ const request = {
215
+ ...mockRequest,
216
+ signer: null
217
+ };
218
+ expect(() => validateRequest(request)).toThrow('Invalid signer: Expected object, received null');
219
+ });
220
+ it('should fail for signer with invalid key type', () => {
221
+ const request = {
222
+ ...mockRequest,
223
+ signer: {
224
+ type: 'keys',
225
+ data: {
226
+ keys: [{ type: 'invalid', publicKey: '0x1234567890abcdef' }]
227
+ }
228
+ }
229
+ };
230
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.UNSUPPORTED_KEY_TYPE);
231
+ });
232
+ it('should fail for signer with invalid public key format', () => {
233
+ const request = {
234
+ ...mockRequest,
235
+ signer: {
236
+ type: 'keys',
237
+ data: {
238
+ keys: [{ type: 'secp256k1', publicKey: 'invalid' }]
239
+ }
240
+ }
241
+ };
242
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_PUBLIC_KEY_FORMAT);
243
+ });
244
+ });
245
+ describe('Permissions field validation', () => {
246
+ const validPermission = {
247
+ type: 'contract-call',
248
+ data: {
249
+ address: '0x1234567890123456789012345678901234567890',
250
+ abi: [{}],
251
+ functions: [{ functionName: 'testFunction' }]
252
+ }
253
+ };
254
+ it('should pass for valid permissions array', () => {
255
+ const request = {
256
+ ...mockRequest,
257
+ permissions: [validPermission]
258
+ };
259
+ expect(() => validateRequest(request)).not.toThrow();
260
+ });
261
+ it('should pass for multiple valid permissions', () => {
262
+ const request = {
263
+ ...mockRequest,
264
+ permissions: [validPermission, validPermission]
265
+ };
266
+ expect(() => validateRequest(request)).not.toThrow();
267
+ });
268
+ it('should fail for empty permissions array', () => {
269
+ const request = {
270
+ ...mockRequest,
271
+ permissions: []
272
+ };
273
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_PERMISSIONS);
274
+ });
275
+ it('should fail for non-array permissions', () => {
276
+ const request = {
277
+ ...mockRequest,
278
+ permissions: validPermission
279
+ };
280
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_PERMISSIONS_TYPE);
281
+ });
282
+ it('should fail for invalid permission type', () => {
283
+ const request = {
284
+ ...mockRequest,
285
+ permissions: [{ ...validPermission, type: 'invalid-type' }]
286
+ };
287
+ expect(() => validateRequest(request)).toThrow(`Invalid permissions.0.type: ${ERROR_MESSAGES.INVALID_PERMISSIONS_TYPE_LITERALS}`);
288
+ });
289
+ it('should fail for missing address in permission data', () => {
290
+ const invalidPermission = {
291
+ ...validPermission,
292
+ data: { ...validPermission.data, address: undefined }
293
+ };
294
+ const request = {
295
+ ...mockRequest,
296
+ permissions: [invalidPermission]
297
+ };
298
+ expect(() => validateRequest(request)).toThrow('Invalid permissions.0.data.address: Required');
299
+ });
300
+ it('should fail for invalid address format in permission data', () => {
301
+ const invalidPermission = {
302
+ ...validPermission,
303
+ data: { ...validPermission.data, address: '1234' }
304
+ };
305
+ const request = {
306
+ ...mockRequest,
307
+ permissions: [invalidPermission]
308
+ };
309
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
310
+ });
311
+ it('should fail for missing abi in permission data', () => {
312
+ const invalidPermission = {
313
+ ...validPermission,
314
+ data: { ...validPermission.data, abi: undefined }
315
+ };
316
+ const request = {
317
+ ...mockRequest,
318
+ permissions: [invalidPermission]
319
+ };
320
+ expect(() => validateRequest(request)).toThrow('Invalid permissions.0.data.abi: Required');
321
+ });
322
+ it('should fail for non-array abi in permission data', () => {
323
+ const invalidPermission = {
324
+ ...validPermission,
325
+ data: { ...validPermission.data, abi: {} }
326
+ };
327
+ const request = {
328
+ ...mockRequest,
329
+ permissions: [invalidPermission]
330
+ };
331
+ expect(() => validateRequest(request)).toThrow('Invalid permissions.0.data.abi: Expected array, received object');
332
+ });
333
+ it('should fail for missing functions in permission data', () => {
334
+ const invalidPermission = {
335
+ ...validPermission,
336
+ data: { ...validPermission.data, functions: undefined }
337
+ };
338
+ const request = {
339
+ ...mockRequest,
340
+ permissions: [invalidPermission]
341
+ };
342
+ expect(() => validateRequest(request)).toThrow('Invalid permissions.0.data.functions: Required');
343
+ });
344
+ it('should fail for non-array functions in permission data', () => {
345
+ const invalidPermission = {
346
+ ...validPermission,
347
+ data: { ...validPermission.data, functions: {} }
348
+ };
349
+ const request = {
350
+ ...mockRequest,
351
+ permissions: [invalidPermission]
352
+ };
353
+ expect(() => validateRequest(request)).toThrow('Invalid permissions.0.data.functions: Expected array, received object');
354
+ });
355
+ it('should fail for missing functionName in function permission', () => {
356
+ const invalidPermission = {
357
+ ...validPermission,
358
+ data: { ...validPermission.data, functions: [{}] }
359
+ };
360
+ const request = {
361
+ ...mockRequest,
362
+ permissions: [invalidPermission]
363
+ };
364
+ expect(() => validateRequest(request)).toThrow('Invalid permissions.0.data.functions.0.functionName: Required');
365
+ });
366
+ });
367
+ describe('Policy field validation', () => {
368
+ it('should pass for valid policies array', () => {
369
+ const request = {
370
+ ...mockRequest,
371
+ policies: [
372
+ { type: 'someType', data: { someKey: 'someValue' } },
373
+ { type: 'anotherType', data: { anotherKey: 'anotherValue' } }
374
+ ]
375
+ };
376
+ expect(() => validateRequest(request)).not.toThrow();
377
+ });
378
+ it('should pass for empty policies array', () => {
379
+ const request = {
380
+ ...mockRequest,
381
+ policies: []
382
+ };
383
+ expect(() => validateRequest(request)).not.toThrow();
384
+ });
385
+ it('should fail for non-array policies', () => {
386
+ const request = {
387
+ ...mockRequest,
388
+ policies: { type: 'someType', data: {} }
389
+ };
390
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_POLICIES_TYPE);
391
+ });
392
+ it('should fail for policies with invalid structure', () => {
393
+ const request = {
394
+ ...mockRequest,
395
+ policies: [{ invalidKey: 'value' }]
396
+ };
397
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.type: Required; Invalid policies.0.data: Required');
398
+ });
399
+ it('should fail for policies with missing type', () => {
400
+ const request = {
401
+ ...mockRequest,
402
+ policies: [{ data: { key: 'value' } }]
403
+ };
404
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.type: Required');
405
+ });
406
+ it('should fail for policies with missing data', () => {
407
+ const request = {
408
+ ...mockRequest,
409
+ policies: [{ type: 'someType' }]
410
+ };
411
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.data: Required');
412
+ });
413
+ it('should fail for policies with non-object data', () => {
414
+ const request = {
415
+ ...mockRequest,
416
+ policies: [{ type: 'someType', data: 'invalidData' }]
417
+ };
418
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.data: Expected object, received string');
419
+ });
420
+ });
421
+ });
422
+ });
423
+ //# sourceMappingURL=requestValidation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestValidation.test.js","sourceRoot":"","sources":["../../../../tests/smart-session/requestValidation.test.ts"],"names":[],"mappings":"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"}