@charterlabs/rhinestone-sdk 0.3.9 → 0.4.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 (155) hide show
  1. package/README.md +89 -1
  2. package/dist/src/accounts/index.d.ts +6 -3
  3. package/dist/src/accounts/index.d.ts.map +1 -1
  4. package/dist/src/accounts/index.js +8 -2
  5. package/dist/src/accounts/json-rpc/providers.d.ts.map +1 -1
  6. package/dist/src/accounts/json-rpc/providers.js +3 -3
  7. package/dist/src/accounts/safe.d.ts.map +1 -1
  8. package/dist/src/accounts/safe.js +4 -1
  9. package/dist/src/accounts/signing/common.d.ts +10 -5
  10. package/dist/src/accounts/signing/common.d.ts.map +1 -1
  11. package/dist/src/accounts/signing/common.js +21 -7
  12. package/dist/src/accounts/signing/message.d.ts +3 -1
  13. package/dist/src/accounts/signing/message.d.ts.map +1 -1
  14. package/dist/src/accounts/signing/mfa-webauthn.d.ts +30 -0
  15. package/dist/src/accounts/signing/mfa-webauthn.d.ts.map +1 -0
  16. package/dist/src/accounts/signing/mfa-webauthn.js +119 -0
  17. package/dist/src/accounts/startale.js +1 -1
  18. package/dist/src/accounts/utils.d.ts +1 -1
  19. package/dist/src/accounts/utils.d.ts.map +1 -1
  20. package/dist/src/actions/mfa.d.ts +6 -2
  21. package/dist/src/actions/mfa.d.ts.map +1 -1
  22. package/dist/src/actions/mfa.js +14 -4
  23. package/dist/src/auth/provider.d.ts +7 -0
  24. package/dist/src/auth/provider.d.ts.map +1 -0
  25. package/dist/src/auth/provider.js +41 -0
  26. package/dist/src/errors/index.d.ts +2 -2
  27. package/dist/src/errors/index.d.ts.map +1 -1
  28. package/dist/src/errors/index.js +2 -1
  29. package/dist/src/execution/error.d.ts +9 -1
  30. package/dist/src/execution/error.d.ts.map +1 -1
  31. package/dist/src/execution/error.js +12 -1
  32. package/dist/src/execution/index.d.ts +6 -4
  33. package/dist/src/execution/index.d.ts.map +1 -1
  34. package/dist/src/execution/index.js +17 -13
  35. package/dist/src/execution/utils.d.ts +17 -6
  36. package/dist/src/execution/utils.d.ts.map +1 -1
  37. package/dist/src/execution/utils.js +193 -43
  38. package/dist/src/index.d.ts +5 -5
  39. package/dist/src/index.d.ts.map +1 -1
  40. package/dist/src/index.js +13 -11
  41. package/dist/src/jwt-server/digest.d.ts +11 -0
  42. package/dist/src/jwt-server/digest.d.ts.map +1 -0
  43. package/dist/src/jwt-server/digest.js +22 -0
  44. package/dist/src/jwt-server/express.d.ts +16 -0
  45. package/dist/src/jwt-server/express.d.ts.map +1 -0
  46. package/dist/src/jwt-server/express.js +24 -0
  47. package/dist/src/jwt-server/handlers.d.ts +10 -0
  48. package/dist/src/jwt-server/handlers.d.ts.map +1 -0
  49. package/dist/src/jwt-server/handlers.js +41 -0
  50. package/dist/src/jwt-server/index.d.ts +8 -0
  51. package/dist/src/jwt-server/index.d.ts.map +1 -0
  52. package/dist/src/jwt-server/index.js +18 -0
  53. package/dist/src/jwt-server/jcs.d.ts +12 -0
  54. package/dist/src/jwt-server/jcs.d.ts.map +1 -0
  55. package/dist/src/jwt-server/jcs.js +60 -0
  56. package/dist/src/jwt-server/signer.d.ts +18 -0
  57. package/dist/src/jwt-server/signer.d.ts.map +1 -0
  58. package/dist/src/jwt-server/signer.js +71 -0
  59. package/dist/src/jwt-server/sponsorship.d.ts +19 -0
  60. package/dist/src/jwt-server/sponsorship.d.ts.map +1 -0
  61. package/dist/src/jwt-server/sponsorship.js +56 -0
  62. package/dist/src/jwt-server/web.d.ts +4 -0
  63. package/dist/src/jwt-server/web.d.ts.map +1 -0
  64. package/dist/src/jwt-server/web.js +27 -0
  65. package/dist/src/modules/validators/core.d.ts +6 -2
  66. package/dist/src/modules/validators/core.d.ts.map +1 -1
  67. package/dist/src/modules/validators/core.js +46 -21
  68. package/dist/src/modules/validators/index.d.ts +2 -2
  69. package/dist/src/modules/validators/index.d.ts.map +1 -1
  70. package/dist/src/modules/validators/index.js +5 -1
  71. package/dist/src/modules/validators/policies/claim/permit2.d.ts +55 -0
  72. package/dist/src/modules/validators/policies/claim/permit2.d.ts.map +1 -0
  73. package/dist/src/modules/validators/policies/claim/permit2.js +239 -0
  74. package/dist/src/modules/validators/policies/claim/types.d.ts +12 -0
  75. package/dist/src/modules/validators/policies/claim/types.d.ts.map +1 -0
  76. package/dist/src/modules/validators/policies/claim/types.js +18 -0
  77. package/dist/src/modules/validators/smart-sessions.d.ts +22 -7
  78. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
  79. package/dist/src/modules/validators/smart-sessions.js +82 -22
  80. package/dist/src/orchestrator/client.d.ts +9 -4
  81. package/dist/src/orchestrator/client.d.ts.map +1 -1
  82. package/dist/src/orchestrator/client.js +29 -17
  83. package/dist/src/orchestrator/consts.d.ts +3 -2
  84. package/dist/src/orchestrator/consts.d.ts.map +1 -1
  85. package/dist/src/orchestrator/consts.js +4 -2
  86. package/dist/src/orchestrator/index.d.ts +4 -3
  87. package/dist/src/orchestrator/index.d.ts.map +1 -1
  88. package/dist/src/orchestrator/index.js +2 -2
  89. package/dist/src/orchestrator/registry.d.ts +2 -1
  90. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  91. package/dist/src/orchestrator/registry.js +17 -1
  92. package/dist/src/orchestrator/types.d.ts +6 -1
  93. package/dist/src/orchestrator/types.d.ts.map +1 -1
  94. package/dist/src/types.d.ts +88 -5
  95. package/dist/src/types.d.ts.map +1 -1
  96. package/dist/src/utils/index.d.ts +3 -9
  97. package/dist/src/utils/index.d.ts.map +1 -1
  98. package/package.json +18 -4
  99. package/dist/src/accounts/index.test.d.ts +0 -2
  100. package/dist/src/accounts/index.test.d.ts.map +0 -1
  101. package/dist/src/accounts/index.test.js +0 -33
  102. package/dist/src/accounts/json-rpc/index.test.d.ts +0 -2
  103. package/dist/src/accounts/json-rpc/index.test.d.ts.map +0 -1
  104. package/dist/src/accounts/json-rpc/index.test.js +0 -35
  105. package/dist/src/accounts/json-rpc/providers.test.d.ts +0 -2
  106. package/dist/src/accounts/json-rpc/providers.test.d.ts.map +0 -1
  107. package/dist/src/accounts/json-rpc/providers.test.js +0 -43
  108. package/dist/src/accounts/kernel.test.d.ts +0 -2
  109. package/dist/src/accounts/kernel.test.d.ts.map +0 -1
  110. package/dist/src/accounts/kernel.test.js +0 -132
  111. package/dist/src/accounts/nexus.test.d.ts +0 -2
  112. package/dist/src/accounts/nexus.test.d.ts.map +0 -1
  113. package/dist/src/accounts/nexus.test.js +0 -118
  114. package/dist/src/accounts/safe.test.d.ts +0 -2
  115. package/dist/src/accounts/safe.test.d.ts.map +0 -1
  116. package/dist/src/accounts/safe.test.js +0 -118
  117. package/dist/src/accounts/signing/passkeys.test.d.ts +0 -2
  118. package/dist/src/accounts/signing/passkeys.test.d.ts.map +0 -1
  119. package/dist/src/accounts/signing/passkeys.test.js +0 -88
  120. package/dist/src/accounts/startale.test.d.ts +0 -2
  121. package/dist/src/accounts/startale.test.d.ts.map +0 -1
  122. package/dist/src/accounts/startale.test.js +0 -189
  123. package/dist/src/accounts/utils.test.d.ts +0 -2
  124. package/dist/src/accounts/utils.test.d.ts.map +0 -1
  125. package/dist/src/accounts/utils.test.js +0 -49
  126. package/dist/src/actions/ecdsa.test.d.ts +0 -2
  127. package/dist/src/actions/ecdsa.test.d.ts.map +0 -1
  128. package/dist/src/actions/ecdsa.test.js +0 -99
  129. package/dist/src/actions/passkeys.test.d.ts +0 -2
  130. package/dist/src/actions/passkeys.test.d.ts.map +0 -1
  131. package/dist/src/actions/passkeys.test.js +0 -54
  132. package/dist/src/actions/recovery.test.d.ts +0 -2
  133. package/dist/src/actions/recovery.test.d.ts.map +0 -1
  134. package/dist/src/actions/recovery.test.js +0 -168
  135. package/dist/src/execution/utils.test.d.ts +0 -2
  136. package/dist/src/execution/utils.test.d.ts.map +0 -1
  137. package/dist/src/execution/utils.test.js +0 -150
  138. package/dist/src/modules/index.test.d.ts +0 -2
  139. package/dist/src/modules/index.test.d.ts.map +0 -1
  140. package/dist/src/modules/index.test.js +0 -81
  141. package/dist/src/modules/validators/core.test.d.ts +0 -2
  142. package/dist/src/modules/validators/core.test.d.ts.map +0 -1
  143. package/dist/src/modules/validators/core.test.js +0 -101
  144. package/dist/src/modules/validators/smart-sessions.test.d.ts +0 -2
  145. package/dist/src/modules/validators/smart-sessions.test.d.ts.map +0 -1
  146. package/dist/src/modules/validators/smart-sessions.test.js +0 -61
  147. package/dist/src/orchestrator/registry.test.d.ts +0 -2
  148. package/dist/src/orchestrator/registry.test.d.ts.map +0 -1
  149. package/dist/src/orchestrator/registry.test.js +0 -154
  150. package/dist/test/consts.d.ts +0 -10
  151. package/dist/test/consts.d.ts.map +0 -1
  152. package/dist/test/consts.js +0 -22
  153. package/dist/test/utils/utils.d.ts +0 -5
  154. package/dist/test/utils/utils.d.ts.map +0 -1
  155. package/dist/test/utils/utils.js +0 -20
@@ -1,150 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const viem_1 = require("viem");
4
- const chains_1 = require("viem/chains");
5
- const vitest_1 = require("vitest");
6
- const consts_1 = require("../../test/consts");
7
- const utils_1 = require("./utils");
8
- const mockGetIntentRoute = vitest_1.vi.fn();
9
- vitest_1.vi.mock('../orchestrator', () => ({
10
- getOrchestrator: () => ({
11
- getIntentRoute: mockGetIntentRoute,
12
- }),
13
- }));
14
- (0, vitest_1.describe)('hashErc7739TypedDataForSolady', () => {
15
- const verifierDomain = {
16
- name: 'Startale',
17
- version: '1.0.0',
18
- chainId: 421614,
19
- verifyingContract: '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd',
20
- salt: '0x0000000000000000000000000000000000000000000000000000000000000000',
21
- };
22
- (0, vitest_1.test)('simple typed data', () => {
23
- const hash = (0, utils_1.hashErc7739TypedDataForSolady)({
24
- domain: {
25
- name: 'TestApp',
26
- version: '1',
27
- chainId: 421614,
28
- verifyingContract: '0x1234567890abcdef1234567890abcdef12345678',
29
- },
30
- types: {
31
- Greeting: [
32
- { name: 'text', type: 'string' },
33
- { name: 'value', type: 'uint256' },
34
- ],
35
- },
36
- primaryType: 'Greeting',
37
- message: {
38
- text: 'Hello',
39
- value: 42n,
40
- },
41
- verifierDomain,
42
- });
43
- (0, vitest_1.expect)(hash).toEqual('0xacd2d65e9986501bb617b90505f4b527ee4eac3c29ac4fea21bb74d8e754e61b');
44
- });
45
- (0, vitest_1.test)('nested types', () => {
46
- const hash = (0, utils_1.hashErc7739TypedDataForSolady)({
47
- domain: {
48
- name: 'TestApp',
49
- version: '1',
50
- chainId: 84532,
51
- verifyingContract: '0x1234567890abcdef1234567890abcdef12345678',
52
- },
53
- types: {
54
- Order: [
55
- { name: 'sender', type: 'address' },
56
- { name: 'amount', type: 'uint256' },
57
- { name: 'detail', type: 'Detail' },
58
- ],
59
- Detail: [
60
- { name: 'nonce', type: 'uint256' },
61
- { name: 'deadline', type: 'uint256' },
62
- ],
63
- },
64
- primaryType: 'Order',
65
- message: {
66
- sender: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
67
- amount: 1000000n,
68
- detail: {
69
- nonce: 1n,
70
- deadline: 1700000000n,
71
- },
72
- },
73
- verifierDomain: {
74
- ...verifierDomain,
75
- chainId: 84532,
76
- },
77
- });
78
- (0, vitest_1.expect)(hash).toEqual('0x1ea8d31e9198ac601c92ab8f54b7ff1ff41a7d4956566c1a0825a5ade5d5d045');
79
- });
80
- (0, vitest_1.test)('different verifier chainId produces different hash', () => {
81
- const params = {
82
- domain: {
83
- name: 'TestApp',
84
- version: '1',
85
- chainId: 421614,
86
- verifyingContract: '0x1234567890abcdef1234567890abcdef12345678',
87
- },
88
- types: {
89
- Greeting: [
90
- { name: 'text', type: 'string' },
91
- { name: 'value', type: 'uint256' },
92
- ],
93
- },
94
- primaryType: 'Greeting',
95
- message: {
96
- text: 'Hello',
97
- value: 42n,
98
- },
99
- };
100
- const hashSameChain = (0, utils_1.hashErc7739TypedDataForSolady)({
101
- ...params,
102
- verifierDomain,
103
- });
104
- const hashCrossChain = (0, utils_1.hashErc7739TypedDataForSolady)({
105
- ...params,
106
- verifierDomain: {
107
- ...verifierDomain,
108
- chainId: 84532,
109
- },
110
- });
111
- (0, vitest_1.expect)(hashSameChain).not.toEqual(hashCrossChain);
112
- (0, vitest_1.expect)(hashCrossChain).toEqual('0x685f60853ef1d5fcbb3021db370b6f3c1c099f1fb42f08f9ba4e6b9b7c8c941a');
113
- });
114
- });
115
- (0, vitest_1.describe)('prepareTransactionAsIntent', () => {
116
- (0, vitest_1.beforeEach)(() => {
117
- mockGetIntentRoute.mockReset();
118
- });
119
- (0, vitest_1.test)('includes auxiliaryFunds in options when provided', async () => {
120
- const auxiliaryFunds = {
121
- [chains_1.arbitrum.id]: {
122
- '0xaf88d065e77c8cC2239327C5EDb3A432268e5831': 500000000n,
123
- },
124
- };
125
- mockGetIntentRoute.mockResolvedValue({
126
- intentOp: {},
127
- intentCost: {},
128
- });
129
- await (0, utils_1.prepareTransactionAsIntent)({
130
- owners: { type: 'ecdsa', accounts: [consts_1.accountA], threshold: 1 },
131
- apiKey: 'test',
132
- }, [chains_1.arbitrum], chains_1.base, [], undefined, [{ address: viem_1.zeroAddress, amount: 1n }], undefined, false, undefined, undefined, undefined, undefined, undefined, auxiliaryFunds, undefined, undefined);
133
- (0, vitest_1.expect)(mockGetIntentRoute).toHaveBeenCalledOnce();
134
- const intentInput = mockGetIntentRoute.mock.calls[0][0];
135
- (0, vitest_1.expect)(intentInput.options.auxiliaryFunds).toEqual(auxiliaryFunds);
136
- });
137
- (0, vitest_1.test)('does not include auxiliaryFunds in options when not provided', async () => {
138
- mockGetIntentRoute.mockResolvedValue({
139
- intentOp: {},
140
- intentCost: {},
141
- });
142
- await (0, utils_1.prepareTransactionAsIntent)({
143
- owners: { type: 'ecdsa', accounts: [consts_1.accountA], threshold: 1 },
144
- apiKey: 'test',
145
- }, [chains_1.arbitrum], chains_1.base, [], undefined, [{ address: viem_1.zeroAddress, amount: 1n }], undefined, false, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
146
- (0, vitest_1.expect)(mockGetIntentRoute).toHaveBeenCalledOnce();
147
- const intentInput = mockGetIntentRoute.mock.calls[0][0];
148
- (0, vitest_1.expect)(intentInput.options.auxiliaryFunds).toBeUndefined();
149
- });
150
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../modules/index.test.ts"],"names":[],"mappings":""}
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const consts_1 = require("../../test/consts");
5
- const common_1 = require("./common");
6
- const index_1 = require("./index");
7
- (0, vitest_1.describe)('Modules', () => {
8
- (0, vitest_1.describe)('Setup', () => {
9
- (0, vitest_1.test)('should use ownable validator for ECDSA owners', () => {
10
- const config = {
11
- owners: {
12
- type: 'ecdsa',
13
- accounts: [consts_1.accountA],
14
- threshold: 1,
15
- },
16
- };
17
- const setup = (0, index_1.getSetup)(config);
18
- (0, vitest_1.expect)(setup.validators[0].address).toBe('0x000000000013fdb5234e4e3162a810f54d9f7e98');
19
- (0, vitest_1.expect)(setup.validators[0].type).toBe(common_1.MODULE_TYPE_ID_VALIDATOR);
20
- });
21
- (0, vitest_1.test)('should use webauthn validator for passkey owners', () => {
22
- const config = {
23
- owners: {
24
- type: 'passkey',
25
- accounts: [consts_1.passkeyAccount],
26
- },
27
- };
28
- const setup = (0, index_1.getSetup)(config);
29
- (0, vitest_1.expect)(setup.validators).toHaveLength(1);
30
- (0, vitest_1.expect)(setup.validators[0].address).toBe('0x0000000000578c4cb0e472a5462da43c495c3f33');
31
- (0, vitest_1.expect)(setup.validators[0].type).toBe(common_1.MODULE_TYPE_ID_VALIDATOR);
32
- });
33
- (0, vitest_1.test)('should use smart session validator when sessions are enabled', () => {
34
- const config = {
35
- owners: {
36
- type: 'ecdsa',
37
- accounts: [consts_1.accountA],
38
- threshold: 1,
39
- },
40
- sessions: [
41
- {
42
- owners: {
43
- type: 'ecdsa',
44
- accounts: [consts_1.accountB],
45
- threshold: 1,
46
- },
47
- },
48
- ],
49
- };
50
- const setup = (0, index_1.getSetup)(config);
51
- const smartSessionValidator = setup.validators.find((validator) => validator.address === '0x00000000008bdaba73cd9815d79069c247eb4bda');
52
- if (!smartSessionValidator) {
53
- return;
54
- }
55
- (0, vitest_1.expect)(smartSessionValidator.type).toBe(common_1.MODULE_TYPE_ID_VALIDATOR);
56
- });
57
- (0, vitest_1.test)('should use smart session compatibility fallback for safe accounts with sessions', () => {
58
- const config = {
59
- owners: {
60
- type: 'ecdsa',
61
- accounts: [consts_1.accountA],
62
- threshold: 1,
63
- },
64
- experimental_sessions: {
65
- enabled: true,
66
- },
67
- account: {
68
- type: 'safe',
69
- },
70
- };
71
- const setup = (0, index_1.getSetup)(config);
72
- const smartSessionFallback = setup.fallbacks.find((fallback) => fallback.address === '0x000000000052e9685932845660777DF43C2dC496');
73
- (0, vitest_1.expect)(smartSessionFallback).toBeDefined();
74
- if (!smartSessionFallback) {
75
- return;
76
- }
77
- (0, vitest_1.expect)(smartSessionFallback.type).toBe(common_1.MODULE_TYPE_ID_FALLBACK);
78
- });
79
- vitest_1.test.todo('using the omni account should install the necessary modules');
80
- });
81
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=core.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.test.d.ts","sourceRoot":"","sources":["../../../../modules/validators/core.test.ts"],"names":[],"mappings":""}
@@ -1,101 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const viem_1 = require("viem");
4
- const vitest_1 = require("vitest");
5
- const consts_1 = require("../../../test/consts");
6
- const common_1 = require("../common");
7
- const core_1 = require("./core");
8
- (0, vitest_1.describe)('Validators Core', () => {
9
- (0, vitest_1.describe)('Validator', () => {
10
- (0, vitest_1.test)('ECDSA: single address', () => {
11
- const validator = (0, core_1.getValidator)({
12
- type: 'ecdsa',
13
- accounts: [consts_1.accountA],
14
- });
15
- (0, vitest_1.expect)(validator.type).toEqual(common_1.MODULE_TYPE_ID_VALIDATOR);
16
- (0, vitest_1.expect)((0, viem_1.isAddress)(validator.address)).toEqual(true);
17
- (0, vitest_1.expect)(validator.address).toEqual('0x000000000013fdb5234e4e3162a810f54d9f7e98');
18
- (0, vitest_1.expect)(validator.initData).toEqual('0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f6c02c78ded62973b43bfa523b247da099486936');
19
- });
20
- (0, vitest_1.test)('ECDSA: two addresses', () => {
21
- const validator = (0, core_1.getValidator)({
22
- type: 'ecdsa',
23
- accounts: [consts_1.accountA, consts_1.accountB],
24
- });
25
- (0, vitest_1.expect)(validator.type).toEqual(common_1.MODULE_TYPE_ID_VALIDATOR);
26
- (0, vitest_1.expect)((0, viem_1.isAddress)(validator.address)).toEqual(true);
27
- (0, vitest_1.expect)(validator.address).toEqual('0x000000000013fdb5234e4e3162a810f54d9f7e98');
28
- (0, vitest_1.expect)(validator.initData).toEqual('0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006092086a3dc0020cd604a68fcf5d430007d51bb7000000000000000000000000f6c02c78ded62973b43bfa523b247da099486936');
29
- });
30
- (0, vitest_1.test)('ECDSA: three addresses, custom threshold', () => {
31
- const validator = (0, core_1.getValidator)({
32
- type: 'ecdsa',
33
- accounts: [consts_1.accountA, consts_1.accountB, consts_1.accountC],
34
- threshold: 2,
35
- });
36
- (0, vitest_1.expect)(validator.type).toEqual(common_1.MODULE_TYPE_ID_VALIDATOR);
37
- (0, vitest_1.expect)((0, viem_1.isAddress)(validator.address)).toEqual(true);
38
- (0, vitest_1.expect)(validator.address).toEqual('0x000000000013fdb5234e4e3162a810f54d9f7e98');
39
- (0, vitest_1.expect)(validator.initData).toEqual('0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000006092086a3dc0020cd604a68fcf5d430007d51bb7000000000000000000000000c27b7578151c5ef713c62c65db09763d57ac3596000000000000000000000000f6c02c78ded62973b43bfa523b247da099486936');
40
- });
41
- (0, vitest_1.test)('Passkey', () => {
42
- const validator = (0, core_1.getValidator)({
43
- type: 'passkey',
44
- accounts: [consts_1.passkeyAccount],
45
- });
46
- (0, vitest_1.expect)(validator.type).toEqual(common_1.MODULE_TYPE_ID_VALIDATOR);
47
- (0, vitest_1.expect)((0, viem_1.isAddress)(validator.address)).toEqual(true);
48
- (0, vitest_1.expect)(validator.address).toEqual('0x0000000000578c4cb0e472a5462da43c495c3f33');
49
- (0, vitest_1.expect)(validator.initData).toEqual('0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001580a9af0569ad3905b26a703201b358aa0904236642ebe79b22a19d00d3737637d46f725a5427ae45a9569259bf67e1e16b187d7b3ad1ed70138c4f0409677d10000000000000000000000000000000000000000000000000000000000000000');
50
- });
51
- });
52
- (0, vitest_1.describe)('Mock Signature', () => {
53
- (0, vitest_1.test)('ECDSA: single address', () => {
54
- const signature = (0, core_1.getMockSignature)({
55
- type: 'ecdsa',
56
- accounts: [consts_1.accountA],
57
- });
58
- (0, vitest_1.expect)((0, viem_1.size)(signature)).toEqual(65);
59
- });
60
- (0, vitest_1.test)('ECDSA: multiple addresses', () => {
61
- const signature = (0, core_1.getMockSignature)({
62
- type: 'ecdsa',
63
- accounts: [consts_1.accountA, consts_1.accountB, consts_1.accountC],
64
- });
65
- (0, vitest_1.expect)((0, viem_1.size)(signature)).toEqual(3 * 65);
66
- });
67
- (0, vitest_1.test)('Passkey', () => {
68
- const signature = (0, core_1.getMockSignature)({
69
- type: 'passkey',
70
- accounts: [consts_1.passkeyAccount],
71
- });
72
- // Should have the proper schema
73
- (0, viem_1.decodeAbiParameters)([
74
- {
75
- type: 'bytes',
76
- name: 'authenticatorData',
77
- },
78
- {
79
- type: 'string',
80
- name: 'clientDataJSON',
81
- },
82
- {
83
- type: 'uint256',
84
- name: 'challengeIndex',
85
- },
86
- {
87
- type: 'uint256',
88
- name: 'typeIndex',
89
- },
90
- {
91
- type: 'uint256',
92
- name: 'r',
93
- },
94
- {
95
- type: 'uint256',
96
- name: 's',
97
- },
98
- ], signature);
99
- });
100
- });
101
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=smart-sessions.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smart-sessions.test.d.ts","sourceRoot":"","sources":["../../../../modules/validators/smart-sessions.test.ts"],"names":[],"mappings":""}
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const viem_1 = require("viem");
4
- const chains_1 = require("viem/chains");
5
- const vitest_1 = require("vitest");
6
- const consts_1 = require("../../../test/consts");
7
- const smart_sessions_1 = require("./smart-sessions");
8
- // Minimal session with a single ecdsa owner, no custom actions
9
- const baseSession = {
10
- chain: chains_1.base,
11
- owners: {
12
- type: 'ecdsa',
13
- accounts: [consts_1.accountA],
14
- },
15
- };
16
- // Session with an explicit action + sudo policy
17
- const sessionWithAction = {
18
- chain: chains_1.base,
19
- owners: {
20
- type: 'ecdsa',
21
- accounts: [consts_1.accountA],
22
- },
23
- actions: [
24
- {
25
- target: '0x1111111111111111111111111111111111111111',
26
- selector: '0xa9059cbb', // transfer(address,uint256)
27
- policies: [{ type: 'sudo' }],
28
- },
29
- ],
30
- };
31
- (0, vitest_1.describe)('buildMockSignature', () => {
32
- (0, vitest_1.test)('first 20 bytes are the emissary address', () => {
33
- const sig = (0, smart_sessions_1.buildMockSignature)(baseSession);
34
- const validatorBytes = (0, viem_1.slice)(sig, 0, 20);
35
- (0, vitest_1.expect)((0, viem_1.isAddressEqual)(validatorBytes, smart_sessions_1.SMART_SESSION_EMISSARY_ADDRESS)).toBe(true);
36
- });
37
- (0, vitest_1.test)('byte 20 is SMART_SESSION_MODE_ENABLE (0x01)', () => {
38
- const sig = (0, smart_sessions_1.buildMockSignature)(baseSession);
39
- // byte 21 in the sig = index 20 = the mode byte from packSignature
40
- const modeByte = (0, viem_1.slice)(sig, 20, 21);
41
- (0, vitest_1.expect)(modeByte).toBe('0x01');
42
- });
43
- (0, vitest_1.test)('total length is larger than just emissary + mode byte (has compressed payload)', () => {
44
- const sig = (0, smart_sessions_1.buildMockSignature)(baseSession);
45
- // 20 bytes emissary + 1 mode byte + at least some compressed data
46
- const byteLen = (sig.length - 2) / 2; // strip '0x', convert hex chars to bytes
47
- (0, vitest_1.expect)(byteLen).toBeGreaterThan(21);
48
- });
49
- (0, vitest_1.test)('sessions with different actions produce different sigData', () => {
50
- const sigBase = (0, smart_sessions_1.buildMockSignature)(baseSession);
51
- const sigWithAction = (0, smart_sessions_1.buildMockSignature)(sessionWithAction);
52
- // The session data (policies, targets) should differ → different compressed payloads
53
- (0, vitest_1.expect)(sigBase).not.toBe(sigWithAction);
54
- });
55
- (0, vitest_1.test)('useDevContracts=true produces different emissary prefix', () => {
56
- const sigProd = (0, smart_sessions_1.buildMockSignature)(baseSession, false);
57
- const sigDev = (0, smart_sessions_1.buildMockSignature)(baseSession, true);
58
- // First 20 bytes differ because prod vs dev emissary addresses differ
59
- (0, vitest_1.expect)((0, viem_1.slice)(sigProd, 0, 20)).not.toBe((0, viem_1.slice)(sigDev, 0, 20));
60
- });
61
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=registry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../../orchestrator/registry.test.ts"],"names":[],"mappings":""}
@@ -1,154 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const viem_1 = require("viem");
4
- const chains_1 = require("viem/chains");
5
- const vitest_1 = require("vitest");
6
- const registry_1 = require("./registry");
7
- const DEPRECATED_CHAIN_ID = 5; // Goerli
8
- const UNSUPPORTED_CHAIN_ID = 81457; // Blast
9
- const TOKEN_SYMBOLS = {
10
- ETH: 'ETH',
11
- USDC: 'USDC',
12
- USDT: 'USDT',
13
- WETH: 'WETH',
14
- };
15
- const TOKEN_ADDRESSES = {
16
- ARBTRUM_USDC: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
17
- BASE_WETH: '0x4200000000000000000000000000000000000006',
18
- };
19
- const UNSUPPORTED_TOKEN_ADDRESS = '0x1234567890123456789012345678901234567890';
20
- (0, vitest_1.describe)('Registry', () => {
21
- (0, vitest_1.describe)('getSupportedChainIds', () => {
22
- (0, vitest_1.test)('returns supported chain IDs', () => {
23
- const chainIds = (0, registry_1.getSupportedChainIds)();
24
- (0, vitest_1.expect)(chainIds).toContain(chains_1.arbitrum.id);
25
- (0, vitest_1.expect)(chainIds).toContain(chains_1.base.id);
26
- (0, vitest_1.expect)(chainIds).toContain(chains_1.sepolia.id);
27
- });
28
- (0, vitest_1.test)('does not include unsupported chains', () => {
29
- const chainIds = (0, registry_1.getSupportedChainIds)();
30
- (0, vitest_1.expect)(chainIds).not.toContain(DEPRECATED_CHAIN_ID);
31
- (0, vitest_1.expect)(chainIds).not.toContain(UNSUPPORTED_CHAIN_ID);
32
- });
33
- });
34
- (0, vitest_1.describe)('getTokenSymbol', () => {
35
- (0, vitest_1.test)('returns correct symbol for supported token', () => {
36
- const symbol = (0, registry_1.getTokenSymbol)(TOKEN_ADDRESSES.ARBTRUM_USDC, chains_1.arbitrum.id);
37
- (0, vitest_1.expect)(symbol).toBe(TOKEN_SYMBOLS.USDC);
38
- });
39
- (0, vitest_1.test)('throws error for unsupported chain', () => {
40
- (0, vitest_1.expect)(() => (0, registry_1.getTokenSymbol)(TOKEN_ADDRESSES.ARBTRUM_USDC, UNSUPPORTED_CHAIN_ID)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
41
- });
42
- (0, vitest_1.test)('returns undefined for unsupported token on supported chain', () => {
43
- const symbol = (0, registry_1.getTokenSymbol)(UNSUPPORTED_TOKEN_ADDRESS, chains_1.arbitrum.id);
44
- (0, vitest_1.expect)(symbol).toBeUndefined();
45
- });
46
- });
47
- (0, vitest_1.describe)('getTokenAddress', () => {
48
- (0, vitest_1.test)('returns zero address for ETH', () => {
49
- const address = (0, registry_1.getTokenAddress)(TOKEN_SYMBOLS.ETH, chains_1.arbitrum.id);
50
- (0, vitest_1.expect)(address).toBe(viem_1.zeroAddress);
51
- });
52
- (0, vitest_1.test)('returns correct address for token symbol', () => {
53
- const address = (0, registry_1.getTokenAddress)(TOKEN_SYMBOLS.USDC, chains_1.arbitrum.id);
54
- (0, vitest_1.expect)(address).toBe(TOKEN_ADDRESSES.ARBTRUM_USDC);
55
- });
56
- (0, vitest_1.test)('throws error for unsupported chain', () => {
57
- (0, vitest_1.expect)(() => (0, registry_1.getTokenAddress)(TOKEN_SYMBOLS.USDC, UNSUPPORTED_CHAIN_ID)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
58
- });
59
- });
60
- (0, vitest_1.describe)('getTokenDecimals', () => {
61
- (0, vitest_1.test)('returns 18 for ETH', () => {
62
- const address = (0, registry_1.getTokenDecimals)(TOKEN_SYMBOLS.ETH, chains_1.arbitrum.id);
63
- (0, vitest_1.expect)(address).toBe(18);
64
- });
65
- (0, vitest_1.test)('returns correct decimals for token symbol', () => {
66
- const address = (0, registry_1.getTokenDecimals)(TOKEN_SYMBOLS.USDC, chains_1.arbitrum.id);
67
- (0, vitest_1.expect)(address).toBe(6);
68
- });
69
- (0, vitest_1.test)('throws error for unsupported chain', () => {
70
- (0, vitest_1.expect)(() => (0, registry_1.getTokenDecimals)(TOKEN_SYMBOLS.USDC, UNSUPPORTED_CHAIN_ID)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
71
- });
72
- });
73
- (0, vitest_1.describe)('getWethAddress', () => {
74
- (0, vitest_1.test)('returns correct WETH address', () => {
75
- const address = (0, registry_1.getWethAddress)(chains_1.base);
76
- (0, vitest_1.expect)(address).toBe(TOKEN_ADDRESSES.BASE_WETH);
77
- });
78
- (0, vitest_1.test)('throws error for unsupported chain', () => {
79
- const unsupportedChain = {
80
- id: UNSUPPORTED_CHAIN_ID,
81
- name: 'Unsupported',
82
- };
83
- (0, vitest_1.expect)(() => (0, registry_1.getWethAddress)(unsupportedChain)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
84
- });
85
- });
86
- (0, vitest_1.describe)('getChainById', () => {
87
- (0, vitest_1.test)('returns correct chain for supported ID', () => {
88
- const chain = (0, registry_1.getChainById)(chains_1.arbitrum.id);
89
- (0, vitest_1.expect)(chain.id).toBe(chains_1.arbitrum.id);
90
- (0, vitest_1.expect)(chain.name).toBe(chains_1.arbitrum.name);
91
- });
92
- (0, vitest_1.test)('throws error for unsupported chain', () => {
93
- (0, vitest_1.expect)(() => (0, registry_1.getChainById)(UNSUPPORTED_CHAIN_ID)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
94
- });
95
- });
96
- (0, vitest_1.describe)('isTestnet', () => {
97
- (0, vitest_1.test)('returns false for arbitrum', () => {
98
- (0, vitest_1.expect)((0, registry_1.isTestnet)(chains_1.arbitrum.id)).toBe(false);
99
- });
100
- (0, vitest_1.test)('returns true for testnet', () => {
101
- (0, vitest_1.expect)((0, registry_1.isTestnet)(chains_1.sepolia.id)).toBe(true);
102
- });
103
- (0, vitest_1.test)('throws error for unsupported chain', () => {
104
- (0, vitest_1.expect)(() => (0, registry_1.isTestnet)(UNSUPPORTED_CHAIN_ID)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
105
- });
106
- });
107
- (0, vitest_1.describe)('isTokenAddressSupported', () => {
108
- (0, vitest_1.test)('returns true for supported token', () => {
109
- const isSupported = (0, registry_1.isTokenAddressSupported)(TOKEN_ADDRESSES.ARBTRUM_USDC, chains_1.arbitrum.id);
110
- (0, vitest_1.expect)(isSupported).toBe(true);
111
- });
112
- (0, vitest_1.test)('returns false for unsupported token or chain', () => {
113
- (0, vitest_1.expect)((0, registry_1.isTokenAddressSupported)(UNSUPPORTED_TOKEN_ADDRESS, chains_1.arbitrum.id)).toBe(false);
114
- (0, vitest_1.expect)((0, registry_1.isTokenAddressSupported)(TOKEN_ADDRESSES.ARBTRUM_USDC, UNSUPPORTED_CHAIN_ID)).toBe(false);
115
- });
116
- });
117
- (0, vitest_1.describe)('getSupportedTokens', () => {
118
- (0, vitest_1.test)('returns tokens for supported chain', () => {
119
- const tokens = (0, registry_1.getSupportedTokens)(chains_1.arbitrum.id);
120
- (0, vitest_1.expect)(tokens.length).toBeGreaterThan(0);
121
- (0, vitest_1.expect)(tokens.find((t) => t.symbol === TOKEN_SYMBOLS.USDC)).toBeDefined();
122
- });
123
- (0, vitest_1.test)('throws error for unsupported chain', () => {
124
- (0, vitest_1.expect)(() => (0, registry_1.getSupportedTokens)(UNSUPPORTED_CHAIN_ID)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
125
- });
126
- });
127
- (0, vitest_1.describe)('getDefaultAccountAccessList', () => {
128
- (0, vitest_1.test)('filters chains by testnet status', () => {
129
- const arbitrumList = (0, registry_1.getDefaultAccountAccessList)(false);
130
- const testnetList = (0, registry_1.getDefaultAccountAccessList)(true);
131
- (0, vitest_1.expect)(arbitrumList.chainIds).toContain(chains_1.arbitrum.id);
132
- (0, vitest_1.expect)(arbitrumList.chainIds).not.toContain(chains_1.sepolia.id);
133
- (0, vitest_1.expect)(testnetList.chainIds).toContain(chains_1.sepolia.id);
134
- (0, vitest_1.expect)(testnetList.chainIds).not.toContain(chains_1.arbitrum.id);
135
- });
136
- });
137
- (0, vitest_1.describe)('resolveTokenAddress', () => {
138
- (0, vitest_1.test)('returns address as-is when given valid address', () => {
139
- const address = TOKEN_ADDRESSES.ARBTRUM_USDC;
140
- const result = (0, registry_1.resolveTokenAddress)(address, chains_1.arbitrum.id);
141
- (0, vitest_1.expect)(result).toBe(address);
142
- });
143
- (0, vitest_1.test)('resolves token symbol to address', () => {
144
- const result = (0, registry_1.resolveTokenAddress)(TOKEN_SYMBOLS.USDC, chains_1.arbitrum.id);
145
- (0, vitest_1.expect)(result).toBe(TOKEN_ADDRESSES.ARBTRUM_USDC);
146
- });
147
- (0, vitest_1.test)('throw error for unsupported token', () => {
148
- (0, vitest_1.expect)(() => (0, registry_1.resolveTokenAddress)(TOKEN_SYMBOLS.USDT, chains_1.baseSepolia.id)).toThrow(`Unsupported token ${TOKEN_SYMBOLS.USDT} for chain ${chains_1.baseSepolia.id}`);
149
- });
150
- (0, vitest_1.test)('throws error for unsupported chain', () => {
151
- (0, vitest_1.expect)(() => (0, registry_1.resolveTokenAddress)(TOKEN_SYMBOLS.USDC, UNSUPPORTED_CHAIN_ID)).toThrow(`Unsupported chain ${UNSUPPORTED_CHAIN_ID}`);
152
- });
153
- });
154
- });
@@ -1,10 +0,0 @@
1
- import { type WebAuthnAccount } from 'viem/account-abstraction';
2
- import { type Account } from 'viem/accounts';
3
- declare const accountA: Account;
4
- declare const accountB: Account;
5
- declare const accountC: Account;
6
- declare const accountD: Account;
7
- declare const passkeyAccount: WebAuthnAccount;
8
- declare const MOCK_API_KEY = "MOCK_KEY";
9
- export { accountA, accountB, accountC, accountD, passkeyAccount, MOCK_API_KEY };
10
- //# sourceMappingURL=consts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../test/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,KAAK,OAAO,EAAuB,MAAM,eAAe,CAAA;AAEjE,QAAA,MAAM,QAAQ,EAAE,OAEf,CAAA;AACD,QAAA,MAAM,QAAQ,EAAE,OAEf,CAAA;AACD,QAAA,MAAM,QAAQ,EAAE,OAEf,CAAA;AACD,QAAA,MAAM,QAAQ,EAAE,OAEf,CAAA;AACD,QAAA,MAAM,cAAc,EAAE,eAMpB,CAAA;AAEF,QAAA,MAAM,YAAY,aAAa,CAAA;AAE/B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MOCK_API_KEY = exports.passkeyAccount = exports.accountD = exports.accountC = exports.accountB = exports.accountA = void 0;
4
- const account_abstraction_1 = require("viem/account-abstraction");
5
- const accounts_1 = require("viem/accounts");
6
- const accountA = (0, accounts_1.privateKeyToAccount)('0x2be89d993f98bbaab8b83f1a2830cb9414e19662967c7ba2a0f43d2a9125bd6d');
7
- exports.accountA = accountA;
8
- const accountB = (0, accounts_1.privateKeyToAccount)('0x39e2fec1a04c088f939d81de8f1abebdebf899a6cfb9968f9b663a7afba8301b');
9
- exports.accountB = accountB;
10
- const accountC = (0, accounts_1.privateKeyToAccount)('0xb63c74af219a3949cf95f5e3a3d20b0137425de053bb03e5cc0f46fe0d19f22f');
11
- exports.accountC = accountC;
12
- const accountD = (0, accounts_1.privateKeyToAccount)('0xa4aba81871b7b51fff56bfe441ea7f9a4879dd4bc8ce8c15fdb06dc92e63d1d7');
13
- exports.accountD = accountD;
14
- const passkeyAccount = (0, account_abstraction_1.toWebAuthnAccount)({
15
- credential: {
16
- id: '9IwX9n6cn-l9SzqFzfQXvDHRuTM',
17
- publicKey: '0x580a9af0569ad3905b26a703201b358aa0904236642ebe79b22a19d00d3737637d46f725a5427ae45a9569259bf67e1e16b187d7b3ad1ed70138c4f0409677d1',
18
- },
19
- });
20
- exports.passkeyAccount = passkeyAccount;
21
- const MOCK_API_KEY = 'MOCK_KEY';
22
- exports.MOCK_API_KEY = MOCK_API_KEY;
@@ -1,5 +0,0 @@
1
- import type { Chain } from 'viem';
2
- declare function getForkUrl(chain: Chain): string;
3
- declare function assertNotNull<T>(value: T | null): asserts value is T;
4
- export { getForkUrl, assertNotNull };
5
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../test/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AAIjC,iBAAS,UAAU,CAAC,KAAK,EAAE,KAAK,UAU/B;AAED,iBAAS,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAE7D;AAED,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAA"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getForkUrl = getForkUrl;
4
- exports.assertNotNull = assertNotNull;
5
- const chains_1 = require("viem/chains");
6
- const vitest_1 = require("vitest");
7
- function getForkUrl(chain) {
8
- // @ts-ignore
9
- const alchemyApiKey = import.meta.env.VITE_ALCHEMY_API_KEY;
10
- if (!alchemyApiKey) {
11
- throw new Error('VITE_ALCHEMY_API_KEY is not set');
12
- }
13
- if (chain.id === chains_1.base.id) {
14
- return `https://base-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;
15
- }
16
- throw new Error(`Unsupported chain: ${chain.id}`);
17
- }
18
- function assertNotNull(value) {
19
- (0, vitest_1.expect)(value).not.toBeNull();
20
- }