@rhinestone/sdk 0.0.0-dev-20260326103934 → 0.0.0-dev-20260331130650

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 (31) hide show
  1. package/dist/src/accounts/json-rpc/providers.js +1 -1
  2. package/dist/src/accounts/safe.d.ts.map +1 -1
  3. package/dist/src/accounts/safe.js +4 -1
  4. package/dist/src/accounts/safe.test.js +50 -0
  5. package/dist/src/actions/recovery.test.js +1 -1
  6. package/dist/src/execution/signing.test.d.ts +2 -0
  7. package/dist/src/execution/signing.test.d.ts.map +1 -0
  8. package/dist/src/execution/signing.test.js +334 -0
  9. package/dist/src/execution/utils.d.ts +1 -0
  10. package/dist/src/execution/utils.d.ts.map +1 -1
  11. package/dist/src/execution/utils.js +27 -5
  12. package/dist/src/modules/validators/index.d.ts +2 -2
  13. package/dist/src/modules/validators/index.d.ts.map +1 -1
  14. package/dist/src/modules/validators/index.js +2 -1
  15. package/dist/src/modules/validators/smart-sessions.d.ts +11 -3
  16. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
  17. package/dist/src/modules/validators/smart-sessions.js +26 -15
  18. package/dist/src/modules/validators/smart-sessions.test.js +240 -16
  19. package/dist/src/orchestrator/consts.d.ts +1 -1
  20. package/dist/src/orchestrator/consts.js +1 -1
  21. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  22. package/dist/src/orchestrator/registry.js +5 -1
  23. package/dist/src/types.d.ts +3 -0
  24. package/dist/src/types.d.ts.map +1 -1
  25. package/dist/src/utils/index.d.ts +3 -9
  26. package/dist/src/utils/index.d.ts.map +1 -1
  27. package/dist/src/utils/index.test.d.ts +2 -0
  28. package/dist/src/utils/index.test.d.ts.map +1 -0
  29. package/dist/src/utils/index.test.js +42 -0
  30. package/dist/test/utils/utils.js +1 -1
  31. package/package.json +1 -1
@@ -11,7 +11,7 @@ function getAlchemyUrl(chainId, apiKey) {
11
11
  }
12
12
  return urlTemplate
13
13
  .replace('{{chain_param}}', chainParam)
14
- .replace('\$\{ALCHEMY_API_KEY\}', apiKey);
14
+ .replace('${ALCHEMY_API_KEY}', apiKey);
15
15
  }
16
16
  function getCustomUrl(chainId, urls) {
17
17
  return urls[chainId];
@@ -1 +1 @@
1
- {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../accounts/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,KAAK,EAOV,KAAK,GAAG,EAER,KAAK,YAAY,EAKlB,MAAM,MAAM,CAAA;AACb,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAM/C,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAe,MAAM,UAAU,CAAA;AAM9E,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAoBhF,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;SAmGrD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB;;;;;;EAgFvD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBAiBlD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK;;;;;;EAarE;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,iBA2BrC;AAED,iBAAe,aAAa,CAC1B,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,eAAe,EAC1B,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BAMvE;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAWlC;AAED,iBAAe,uBAAuB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAalC;AA0GD,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,uBAAuB,GACxB,CAAA"}
1
+ {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../accounts/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,KAAK,EAOV,KAAK,GAAG,EAER,KAAK,YAAY,EAKlB,MAAM,MAAM,CAAA;AACb,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAM/C,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAe,MAAM,UAAU,CAAA;AAM9E,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAoBhF,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;SAmGrD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB;;;;;;EAgFvD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBAoBlD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK;;;;;;EAarE;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,iBA2BrC;AAED,iBAAe,aAAa,CAC1B,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,eAAe,EAC1B,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BAMvE;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAWlC;AAED,iBAAe,uBAAuB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAalC;AA0GD,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,uBAAuB,GACxB,CAAA"}
@@ -186,6 +186,9 @@ function getV0DeployArgs(config) {
186
186
  function getAddress(config) {
187
187
  const deployArgs = getDeployArgs(config);
188
188
  if (!deployArgs) {
189
+ if (config.initData?.address) {
190
+ return config.initData.address;
191
+ }
189
192
  throw new Error('Cannot derive address: deploy args not available');
190
193
  }
191
194
  const { factory, implementation, salt } = deployArgs;
@@ -199,7 +202,7 @@ function getAddress(config) {
199
202
  return address;
200
203
  }
201
204
  function getEip712Domain(config, chain) {
202
- if (config.initData) {
205
+ if (config.initData && !('factory' in config.initData)) {
203
206
  throw new error_1.Eip712DomainNotAvailableError('Existing Safe-7579 accounts are not yet supported');
204
207
  }
205
208
  return {
@@ -91,6 +91,56 @@ const MOCK_MODULE_ADDRESS = '0x28de6501fa86f2e6cd0b33c3aabdaeb4a1b93f3f';
91
91
  });
92
92
  (0, vitest_1.expect)(address).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
93
93
  });
94
+ (0, vitest_1.test)('Address-only initData fallback', () => {
95
+ const address = (0, safe_1.getAddress)({
96
+ account: {
97
+ type: 'safe',
98
+ },
99
+ owners: {
100
+ type: 'ecdsa',
101
+ accounts: [consts_1.accountA, consts_1.accountB],
102
+ },
103
+ initData: {
104
+ address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
105
+ },
106
+ });
107
+ (0, vitest_1.expect)(address).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
108
+ });
109
+ });
110
+ (0, vitest_1.describe)('EIP-712 Domain', () => {
111
+ (0, vitest_1.test)('Factory-backed initData stays signable', () => {
112
+ const domain = (0, safe_1.getEip712Domain)({
113
+ owners: {
114
+ type: 'ecdsa',
115
+ accounts: [consts_1.accountA, consts_1.accountB],
116
+ },
117
+ initData: {
118
+ factory: '0x4e1dcf7ad4e460cfd30791ccc4f9c8a4f820ec67',
119
+ factoryData: '0x1688f0b90000000000000000000000007579011ab74c46090561ea277ba79d510c6c00ff0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e1ec88f0966a6bc17a138345cdf7519caf9a1e0bb840330108a6a4315f1028c39000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
120
+ address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
121
+ intentExecutorInstalled: true,
122
+ },
123
+ }, {
124
+ id: 1,
125
+ });
126
+ (0, vitest_1.expect)(domain.verifyingContract).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
127
+ });
128
+ (0, vitest_1.test)('Address-only initData remains unsupported', () => {
129
+ (0, vitest_1.expect)(() => (0, safe_1.getEip712Domain)({
130
+ account: {
131
+ type: 'safe',
132
+ },
133
+ owners: {
134
+ type: 'ecdsa',
135
+ accounts: [consts_1.accountA, consts_1.accountB],
136
+ },
137
+ initData: {
138
+ address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
139
+ },
140
+ }, {
141
+ id: 1,
142
+ })).toThrow('Existing Safe-7579 accounts are not yet supported');
143
+ });
94
144
  });
95
145
  (0, vitest_1.describe)('Get Install Data', () => {
96
146
  (0, vitest_1.test)('Module', () => {
@@ -12,7 +12,7 @@ const accountAddress = '0x36C03e7D593F7B2C6b06fC18B5f4E9a4A29C99b0';
12
12
  vitest_1.vi.mock('viem', async (importOriginal) => {
13
13
  const actual = await importOriginal();
14
14
  return {
15
- // @ts-ignore
15
+ // @ts-expect-error
16
16
  ...actual,
17
17
  createPublicClient: vitest_1.vi.fn(),
18
18
  };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.test.d.ts","sourceRoot":"","sources":["../../../execution/signing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,334 @@
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 { MOCK_EMISSARY, MOCK_EIP1271, MOCK_ACCOUNT, MOCK_EXECUTOR, MOCK_VALIDATOR, mockGetEmissarySignature, mockGetEip1271Signature, mockIsSessionEnabled, MOCK_TYPED_DATA, } = vitest_1.vi.hoisted(() => {
9
+ const MOCK_ACCOUNT = '0x1111111111111111111111111111111111111111';
10
+ const MOCK_EXECUTOR = '0x2222222222222222222222222222222222222222';
11
+ const MOCK_VALIDATOR = '0x3333333333333333333333333333333333333333';
12
+ const MOCK_EMISSARY = `0x${'ee'.repeat(65)}`;
13
+ const MOCK_EIP1271 = `0x${'12'.repeat(65)}`;
14
+ const mockGetEmissarySignature = vitest_1.vi.fn().mockResolvedValue(MOCK_EMISSARY);
15
+ const mockGetEip1271Signature = vitest_1.vi.fn().mockResolvedValue(MOCK_EIP1271);
16
+ const mockIsSessionEnabled = vitest_1.vi.fn().mockResolvedValue(true);
17
+ const MOCK_TYPED_DATA = {
18
+ domain: {
19
+ name: 'Test',
20
+ version: '1',
21
+ chainId: 8453,
22
+ verifyingContract: MOCK_EXECUTOR,
23
+ },
24
+ types: {
25
+ Test: [{ name: 'value', type: 'uint256' }],
26
+ },
27
+ primaryType: 'Test',
28
+ message: { value: 1n },
29
+ };
30
+ return {
31
+ MOCK_EMISSARY: MOCK_EMISSARY,
32
+ MOCK_EIP1271: MOCK_EIP1271,
33
+ MOCK_ACCOUNT: MOCK_ACCOUNT,
34
+ MOCK_EXECUTOR: MOCK_EXECUTOR,
35
+ MOCK_VALIDATOR: MOCK_VALIDATOR,
36
+ mockGetEmissarySignature,
37
+ mockGetEip1271Signature,
38
+ mockIsSessionEnabled,
39
+ MOCK_TYPED_DATA,
40
+ };
41
+ });
42
+ vitest_1.vi.mock('../orchestrator', () => ({
43
+ getOrchestrator: vitest_1.vi.fn(),
44
+ }));
45
+ vitest_1.vi.mock('../accounts', () => ({
46
+ getAddress: vitest_1.vi.fn().mockReturnValue(MOCK_ACCOUNT),
47
+ getEmissarySignature: mockGetEmissarySignature,
48
+ getEip1271Signature: mockGetEip1271Signature,
49
+ getSmartAccount: vitest_1.vi.fn(),
50
+ getEip712Domain: vitest_1.vi.fn(),
51
+ getAccountProvider: vitest_1.vi.fn(),
52
+ getInitCode: vitest_1.vi.fn(),
53
+ getGuardianSmartAccount: vitest_1.vi.fn(),
54
+ getTypedDataPackedSignature: vitest_1.vi.fn(),
55
+ toErc6492Signature: vitest_1.vi.fn(),
56
+ is7702: vitest_1.vi.fn().mockReturnValue(false),
57
+ getEip7702InitCall: vitest_1.vi.fn(),
58
+ EoaAccountMustHaveAccountError: class extends Error {
59
+ },
60
+ EoaSigningMethodNotConfiguredError: class extends Error {
61
+ },
62
+ FactoryArgsNotAvailableError: class extends Error {
63
+ },
64
+ }));
65
+ vitest_1.vi.mock('../accounts/signing/common', () => ({
66
+ convertOwnerSetToSignerSet: vitest_1.vi.fn(),
67
+ }));
68
+ vitest_1.vi.mock('../accounts/startale', () => ({
69
+ K1_DEFAULT_VALIDATOR_ADDRESS: '0x0000000000000000000000000000000000000000',
70
+ }));
71
+ vitest_1.vi.mock('../accounts/utils', () => ({
72
+ createTransport: vitest_1.vi.fn(),
73
+ getBundlerClient: vitest_1.vi.fn(),
74
+ }));
75
+ vitest_1.vi.mock('../modules', () => ({
76
+ getIntentExecutor: vitest_1.vi.fn().mockReturnValue({
77
+ address: MOCK_EXECUTOR,
78
+ type: 7,
79
+ initData: '0x',
80
+ deInitData: '0x',
81
+ additionalContext: '0x',
82
+ }),
83
+ }));
84
+ vitest_1.vi.mock('../modules/validators', () => ({
85
+ isSessionEnabled: mockIsSessionEnabled,
86
+ getOwnerValidator: vitest_1.vi.fn().mockReturnValue({
87
+ address: MOCK_VALIDATOR,
88
+ type: 1,
89
+ initData: '0x',
90
+ deInitData: '0x',
91
+ additionalContext: '0x',
92
+ }),
93
+ buildMockSignature: vitest_1.vi.fn(),
94
+ getPermissionId: vitest_1.vi.fn().mockReturnValue('0x' + 'cc'.repeat(32)),
95
+ getSmartSessionValidator: vitest_1.vi.fn().mockReturnValue({
96
+ address: MOCK_VALIDATOR,
97
+ type: 1,
98
+ initData: '0x',
99
+ deInitData: '0x',
100
+ additionalContext: '0x',
101
+ }),
102
+ }));
103
+ vitest_1.vi.mock('../modules/validators/core', () => ({
104
+ supportsEip712: vitest_1.vi.fn().mockReturnValue(false),
105
+ getMultiFactorValidator: vitest_1.vi.fn(),
106
+ getSocialRecoveryValidator: vitest_1.vi.fn(),
107
+ getWebAuthnValidator: vitest_1.vi.fn(),
108
+ }));
109
+ vitest_1.vi.mock('../orchestrator/registry', () => ({
110
+ getChainById: vitest_1.vi.fn().mockReturnValue(chains_1.base),
111
+ getTokenAddress: vitest_1.vi.fn(),
112
+ resolveTokenAddress: vitest_1.vi.fn(),
113
+ }));
114
+ vitest_1.vi.mock('./singleChainOps', () => ({
115
+ getTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
116
+ }));
117
+ vitest_1.vi.mock('./compact', () => ({
118
+ getCompactTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
119
+ }));
120
+ vitest_1.vi.mock('./error', () => ({
121
+ Eip7702InitSignatureRequiredError: class extends Error {
122
+ },
123
+ SignerNotSupportedError: class extends Error {
124
+ },
125
+ }));
126
+ vitest_1.vi.mock('./permit2', () => ({
127
+ getTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
128
+ }));
129
+ // --- Helpers ---
130
+ const makeElement = (settlementLayer) => ({
131
+ mandate: {
132
+ destinationChainId: chains_1.base.id,
133
+ destinationOps: {
134
+ vt: ('0x' + '00'.repeat(32)),
135
+ ops: [],
136
+ },
137
+ preClaimOps: {
138
+ vt: ('0x' + '00'.repeat(32)),
139
+ ops: [],
140
+ },
141
+ qualifier: {
142
+ settlementContext: {
143
+ settlementLayer,
144
+ fundingMethod: 'NO_FUNDING',
145
+ using7579: true,
146
+ gasRefund: {
147
+ token: viem_1.zeroAddress,
148
+ exchangeRate: 0n,
149
+ overhead: 0n,
150
+ },
151
+ },
152
+ },
153
+ },
154
+ });
155
+ const makeIntentOp = (settlementLayer, targetExecutionNonce = '200') => {
156
+ const layers = Array.isArray(settlementLayer)
157
+ ? settlementLayer
158
+ : [settlementLayer];
159
+ return {
160
+ sponsor: MOCK_ACCOUNT,
161
+ nonce: '100',
162
+ targetExecutionNonce,
163
+ expires: '9999999999',
164
+ elements: layers.map(makeElement),
165
+ serverSignature: '0x',
166
+ signedMetadata: { fees: {} },
167
+ };
168
+ };
169
+ // verifyExecutions auto-derived as true when session.actions is non-empty
170
+ const sessionWithActions = {
171
+ chain: chains_1.base,
172
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
173
+ actions: [{ policies: [{ type: 'usage-limit', limit: 1n }] }],
174
+ };
175
+ // verifyExecutions auto-derived as false when session.actions is absent
176
+ const sessionNoActions = {
177
+ chain: chains_1.base,
178
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
179
+ };
180
+ const config = {
181
+ apiKey: 'test',
182
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
183
+ };
184
+ const makeSessionSigners = (session) => ({
185
+ type: 'experimental_session',
186
+ session,
187
+ });
188
+ const ownerSigners = {
189
+ type: 'owner',
190
+ kind: 'ecdsa',
191
+ accounts: [consts_1.accountA],
192
+ };
193
+ // --- Tests ---
194
+ (0, vitest_1.beforeEach)(() => {
195
+ vitest_1.vi.clearAllMocks();
196
+ mockGetEmissarySignature.mockResolvedValue(MOCK_EMISSARY);
197
+ mockGetEip1271Signature.mockResolvedValue(MOCK_EIP1271);
198
+ mockIsSessionEnabled.mockResolvedValue(true);
199
+ });
200
+ (0, vitest_1.describe)('getTargetExecutionSignature', () => {
201
+ (0, vitest_1.test)('undefined signers returns undefined', async () => {
202
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
203
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, undefined);
204
+ (0, vitest_1.expect)(result).toBeUndefined();
205
+ });
206
+ (0, vitest_1.test)('non-session signers returns undefined', async () => {
207
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
208
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, ownerSigners);
209
+ (0, vitest_1.expect)(result).toBeUndefined();
210
+ });
211
+ (0, vitest_1.test)('no INTENT_EXECUTOR ops (SAME_CHAIN only) returns undefined', async () => {
212
+ // PERMIT2 settlement also uses SAME_CHAIN layer — both are covered by this case
213
+ const intentOp = makeIntentOp('SAME_CHAIN');
214
+ const signers = makeSessionSigners(sessionWithActions);
215
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
216
+ (0, vitest_1.expect)(result).toBeUndefined();
217
+ });
218
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: false (no actions) returns undefined', async () => {
219
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
220
+ const signers = makeSessionSigners(sessionNoActions);
221
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
222
+ (0, vitest_1.expect)(result).toBeUndefined();
223
+ });
224
+ (0, vitest_1.test)('explicit verifyExecutions: false on signers overrides session with actions', async () => {
225
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
226
+ const signers = {
227
+ type: 'experimental_session',
228
+ session: sessionWithActions,
229
+ verifyExecutions: false,
230
+ };
231
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
232
+ (0, vitest_1.expect)(result).toBeUndefined();
233
+ });
234
+ (0, vitest_1.test)('explicit verifyExecutions: true on signers overrides session without actions', async () => {
235
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
236
+ const signers = {
237
+ type: 'experimental_session',
238
+ session: sessionNoActions,
239
+ verifyExecutions: true,
240
+ };
241
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
242
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
243
+ });
244
+ (0, vitest_1.test)('session not yet enabled still resolves verifyExecutions from actions', async () => {
245
+ mockIsSessionEnabled.mockResolvedValueOnce(false);
246
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
247
+ const signers = makeSessionSigners(sessionWithActions);
248
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
249
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
250
+ });
251
+ (0, vitest_1.test)('mixed INTENT_EXECUTOR + SAME_CHAIN elements returns emissary sig', async () => {
252
+ const intentOp = makeIntentOp(['INTENT_EXECUTOR', 'SAME_CHAIN']);
253
+ const signers = makeSessionSigners(sessionWithActions);
254
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
255
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
256
+ });
257
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: true returns emissary sig', async () => {
258
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
259
+ const signers = makeSessionSigners(sessionWithActions);
260
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
261
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
262
+ (0, vitest_1.expect)(mockGetEmissarySignature).toHaveBeenCalledTimes(1);
263
+ (0, vitest_1.expect)(mockGetEip1271Signature).not.toHaveBeenCalled();
264
+ });
265
+ });
266
+ (0, vitest_1.describe)('signIntent with owner signers', () => {
267
+ (0, vitest_1.test)('gives EIP-1271 destinationSignature, not emissary', async () => {
268
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
269
+ const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, ownerSigners);
270
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
271
+ (0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
272
+ (0, vitest_1.expect)(mockGetEmissarySignature).not.toHaveBeenCalled();
273
+ (0, vitest_1.expect)(originSignatures).toHaveLength(1);
274
+ });
275
+ });
276
+ (0, vitest_1.describe)('signIntent destinationSignature', () => {
277
+ (0, vitest_1.test)('verifyExecutions: true + INTENT_EXECUTOR — emissary destinationSignature, both sigs generated', async () => {
278
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
279
+ const signers = makeSessionSigners(sessionWithActions);
280
+ const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
281
+ // destinationSignature picks preClaimSig (emissary format) from the { preClaimSig, notarizedClaimSig } pair
282
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
283
+ // Both emissary and EIP-1271 are produced internally (preClaimSig + notarizedClaimSig)
284
+ (0, vitest_1.expect)(mockGetEmissarySignature).toHaveBeenCalled();
285
+ (0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
286
+ (0, vitest_1.expect)(originSignatures).toHaveLength(1);
287
+ });
288
+ (0, vitest_1.test)('verifyExecutions: false + INTENT_EXECUTOR — EIP-1271 destinationSignature only', async () => {
289
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
290
+ const signers = makeSessionSigners(sessionNoActions);
291
+ const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
292
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
293
+ (0, vitest_1.expect)(mockGetEmissarySignature).not.toHaveBeenCalled();
294
+ (0, vitest_1.expect)(originSignatures).toHaveLength(1);
295
+ });
296
+ (0, vitest_1.test)('verifyExecutions: true + SAME_CHAIN — emissary destinationSignature', async () => {
297
+ const intentOp = makeIntentOp('SAME_CHAIN');
298
+ const signers = makeSessionSigners(sessionWithActions);
299
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
300
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
301
+ });
302
+ (0, vitest_1.test)('multi-element op produces one originSignature per element', async () => {
303
+ const intentOp = makeIntentOp(['INTENT_EXECUTOR', 'INTENT_EXECUTOR']);
304
+ const signers = makeSessionSigners(sessionWithActions);
305
+ const { originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
306
+ (0, vitest_1.expect)(originSignatures).toHaveLength(2);
307
+ });
308
+ });
309
+ (0, vitest_1.describe)('signIntent + getTargetExecutionSignature routing', () => {
310
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: true — EMISSARY for both', async () => {
311
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
312
+ const signers = makeSessionSigners(sessionWithActions);
313
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
314
+ const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
315
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
316
+ (0, vitest_1.expect)(targetExecutionSignature).toBe(MOCK_EMISSARY);
317
+ });
318
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: false — EIP-1271 destination, undefined target', async () => {
319
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
320
+ const signers = makeSessionSigners(sessionNoActions);
321
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
322
+ const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
323
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
324
+ (0, vitest_1.expect)(targetExecutionSignature).toBeUndefined();
325
+ });
326
+ (0, vitest_1.test)('SAME_CHAIN + verifyExecutions: true — EMISSARY destination, undefined target', async () => {
327
+ const intentOp = makeIntentOp('SAME_CHAIN');
328
+ const signers = makeSessionSigners(sessionWithActions);
329
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
330
+ const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
331
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
332
+ (0, vitest_1.expect)(targetExecutionSignature).toBeUndefined();
333
+ });
334
+ });
@@ -8,6 +8,7 @@ type InternalSignerSet = Exclude<SignerSet, SessionSignerSet> | ResolvedSessionS
8
8
  declare function resolveSessionForChain(signers: SessionSignerSet, chainId: number): {
9
9
  session: Session;
10
10
  enableData?: SessionEnableData;
11
+ verifyExecutions?: boolean;
11
12
  };
12
13
  interface UserOperationResult {
13
14
  type: 'userop';
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../execution/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../execution/utils.ts"],"names":[],"mappings":"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"}
@@ -49,11 +49,13 @@ async function resolveSignersForChain(config, signers, chainId) {
49
49
  const resolved = resolveSessionForChain(signers, chainId);
50
50
  const enabled = await (0, validators_1.isSessionEnabled)((0, accounts_1.getAddress)(config), config.provider, resolved.session, config.useDevContracts);
51
51
  const enableData = enabled ? undefined : resolved.enableData;
52
+ const hasExplicitActions = !!resolved.session.actions?.length;
53
+ const verifyExecutions = resolved.verifyExecutions ?? signers.verifyExecutions ?? hasExplicitActions;
52
54
  return {
53
55
  type: 'experimental_session',
54
56
  session: resolved.session,
55
57
  enableData,
56
- verifyExecutions: !!enableData,
58
+ verifyExecutions,
57
59
  };
58
60
  }
59
61
  function resolveSessionForChain(signers, chainId) {
@@ -134,7 +136,16 @@ async function getTargetExecutionSignature(config, intentOp, targetChain, signer
134
136
  if (signers?.type !== 'experimental_session') {
135
137
  return undefined;
136
138
  }
139
+ const settlementLayers = intentOp.elements.map((e) => e.mandate.qualifier.settlementContext.settlementLayer);
140
+ const hasIntentExecutorOps = settlementLayers.some((l) => l === 'INTENT_EXECUTOR');
141
+ if (!hasIntentExecutorOps) {
142
+ return undefined;
143
+ }
137
144
  const resolvedSigners = await resolveSignersForChain(config, signers, targetChain.id);
145
+ if (!isResolvedSessionSignerSet(resolvedSigners) ||
146
+ !resolvedSigners.verifyExecutions) {
147
+ return undefined;
148
+ }
138
149
  const destination = getTargetExecutionMessage(config, intentOp);
139
150
  const validator = getValidator(config, signers);
140
151
  if (!validator) {
@@ -564,18 +575,23 @@ async function signIntentTypedData(config, signers, validator, isRoot, parameter
564
575
  const hash = (0, viem_1.hashTypedData)(parameters);
565
576
  if (isResolvedSessionSignerSet(signers) && signers.verifyExecutions) {
566
577
  if (targetExecution) {
567
- return await (0, accounts_1.getEmissarySignature)(config, {
578
+ const targetSigners = {
568
579
  type: 'experimental_session',
569
580
  session: signers.session,
570
581
  verifyExecutions: true,
571
- }, chain, hash);
582
+ enableData: signers.enableData,
583
+ };
584
+ // signWithSession (called inside getEmissarySignature) already calls packSignature
585
+ // internally, so no transform is needed here
586
+ return await (0, accounts_1.getEmissarySignature)(config, targetSigners, chain, hash);
572
587
  }
573
- const eip1271Signature = await (0, accounts_1.getEip1271Signature)(config, {
588
+ const sessionSignersForEip1271 = {
574
589
  type: 'experimental_session',
575
590
  session: signers.session,
576
591
  verifyExecutions: false,
577
592
  enableData: signers.enableData,
578
- }, chain, {
593
+ };
594
+ const eip1271Signature = await (0, accounts_1.getEip1271Signature)(config, sessionSignersForEip1271, chain, {
579
595
  address: validator.address,
580
596
  isRoot,
581
597
  }, hash);
@@ -590,6 +606,12 @@ async function signIntentTypedData(config, signers, validator, isRoot, parameter
590
606
  notarizedClaimSig: eip1271Signature,
591
607
  };
592
608
  }
609
+ if (isResolvedSessionSignerSet(signers)) {
610
+ return await (0, accounts_1.getEip1271Signature)(config, signers, chain, {
611
+ address: validator.address,
612
+ isRoot,
613
+ }, hash);
614
+ }
593
615
  return await (0, accounts_1.getEip1271Signature)(config, signers, chain, {
594
616
  address: validator.address,
595
617
  isRoot,
@@ -1,4 +1,4 @@
1
1
  import { getMockSignature, getOwnerValidator, MULTI_FACTOR_VALIDATOR_ADDRESS, OWNABLE_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS } from './core';
2
- import { buildMockSignature, getEnableSessionCall, getPermissionId, getSmartSessionValidator, isSessionEnabled } from './smart-sessions';
3
- export { OWNABLE_VALIDATOR_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS, MULTI_FACTOR_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, getOwnerValidator, getSmartSessionValidator, getEnableSessionCall, getPermissionId, getMockSignature, buildMockSignature, isSessionEnabled, };
2
+ import { buildMockSignature, getEnableSessionCall, getPermissionId, getSmartSessionValidator, isSessionEnabled, packSignature } from './smart-sessions';
3
+ export { OWNABLE_VALIDATOR_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS, MULTI_FACTOR_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, getOwnerValidator, getSmartSessionValidator, getEnableSessionCall, getPermissionId, getMockSignature, buildMockSignature, isSessionEnabled, packSignature, };
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../modules/validators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC3B,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,GACjB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../modules/validators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC3B,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EAChB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,CAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isSessionEnabled = exports.buildMockSignature = exports.getMockSignature = exports.getPermissionId = exports.getEnableSessionCall = exports.getSmartSessionValidator = exports.getOwnerValidator = exports.SMART_SESSION_EMISSARY_ADDRESS = exports.MULTI_FACTOR_VALIDATOR_ADDRESS = exports.WEBAUTHN_VALIDATOR_ADDRESS = exports.OWNABLE_VALIDATOR_ADDRESS = void 0;
3
+ exports.packSignature = exports.isSessionEnabled = exports.buildMockSignature = exports.getMockSignature = exports.getPermissionId = exports.getEnableSessionCall = exports.getSmartSessionValidator = exports.getOwnerValidator = exports.SMART_SESSION_EMISSARY_ADDRESS = exports.MULTI_FACTOR_VALIDATOR_ADDRESS = exports.WEBAUTHN_VALIDATOR_ADDRESS = exports.OWNABLE_VALIDATOR_ADDRESS = void 0;
4
4
  const core_1 = require("./core");
5
5
  Object.defineProperty(exports, "getMockSignature", { enumerable: true, get: function () { return core_1.getMockSignature; } });
6
6
  Object.defineProperty(exports, "getOwnerValidator", { enumerable: true, get: function () { return core_1.getOwnerValidator; } });
@@ -14,3 +14,4 @@ Object.defineProperty(exports, "getEnableSessionCall", { enumerable: true, get:
14
14
  Object.defineProperty(exports, "getPermissionId", { enumerable: true, get: function () { return smart_sessions_1.getPermissionId; } });
15
15
  Object.defineProperty(exports, "getSmartSessionValidator", { enumerable: true, get: function () { return smart_sessions_1.getSmartSessionValidator; } });
16
16
  Object.defineProperty(exports, "isSessionEnabled", { enumerable: true, get: function () { return smart_sessions_1.isSessionEnabled; } });
17
+ Object.defineProperty(exports, "packSignature", { enumerable: true, get: function () { return smart_sessions_1.packSignature; } });
@@ -1,5 +1,5 @@
1
1
  import { type Address, type Hex, type TypedDataDefinition } from 'viem';
2
- import type { ProviderConfig, RhinestoneAccountConfig, RhinestoneConfig, Session, SessionEnableData } from '../../types';
2
+ import type { Policy, ProviderConfig, RhinestoneAccountConfig, RhinestoneConfig, Session, SessionEnableData } from '../../types';
3
3
  import { type Module } from '../common';
4
4
  import { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV } from './core';
5
5
  interface SessionData {
@@ -164,6 +164,13 @@ declare const SMART_SESSION_MODE_ENABLE = "0x01";
164
164
  declare const SMART_SESSIONS_FALLBACK_TARGET_FLAG: Address;
165
165
  declare const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG: Hex;
166
166
  declare const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION: Hex;
167
+ declare const SPENDING_LIMITS_POLICY_ADDRESS: Address;
168
+ declare const TIME_FRAME_POLICY_ADDRESS: Address;
169
+ declare const SUDO_POLICY_ADDRESS: Address;
170
+ declare const UNIVERSAL_ACTION_POLICY_ADDRESS: Address;
171
+ declare const USAGE_LIMIT_POLICY_ADDRESS: Address;
172
+ declare const VALUE_LIMIT_POLICY_ADDRESS: Address;
173
+ declare const INTENT_EXECUTION_POLICY_ADDRESS: Address;
167
174
  interface ResolvedSessionSignerSet {
168
175
  type: 'experimental_session';
169
176
  session: Session;
@@ -181,8 +188,9 @@ declare function getEnableSessionCall(account: Address, session: Session, enable
181
188
  to: `0x${string}`;
182
189
  data: `0x${string}`;
183
190
  }>;
184
- declare function getSessionData(session: Session): SessionData;
191
+ declare function getSessionData(session: Session, useDevContracts?: boolean): SessionData;
185
192
  declare function getPermissionId(session: Session): `0x${string}`;
193
+ declare function getPolicyData(policy: Policy, useDevContracts?: boolean): PolicyData;
186
194
  declare function getSmartSessionValidator(config: RhinestoneConfig): Module | null;
187
195
  /**
188
196
  * Builds a mockSignature for SSX validation gas estimation.
@@ -193,6 +201,6 @@ declare function getSmartSessionValidator(config: RhinestoneConfig): Module | nu
193
201
  * simulates verifyExecution with the mock emissary to estimate gas before the user signs.
194
202
  */
195
203
  declare function buildMockSignature(session: Session, useDevContracts?: boolean, chainCount?: number): Hex;
196
- export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, packSignature, getSessionData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
204
+ export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
197
205
  export type { ChainSession, ChainDigest, ResolvedSessionSignerSet, SessionData, SmartSessionModeType, SessionDetails, };
198
206
  //# sourceMappingURL=smart-sessions.d.ts.map