@charterlabs/rhinestone-sdk 0.2.8 → 0.2.9

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 (89) hide show
  1. package/dist/src/accounts/error.d.ts +4 -1
  2. package/dist/src/accounts/error.d.ts.map +1 -1
  3. package/dist/src/accounts/error.js +9 -1
  4. package/dist/src/accounts/index.d.ts +9 -2
  5. package/dist/src/accounts/index.d.ts.map +1 -1
  6. package/dist/src/accounts/index.js +26 -1
  7. package/dist/src/accounts/json-rpc/index.d.ts.map +1 -1
  8. package/dist/src/accounts/json-rpc/index.js +4 -0
  9. package/dist/src/accounts/json-rpc/index.test.d.ts +2 -0
  10. package/dist/src/accounts/json-rpc/index.test.d.ts.map +1 -0
  11. package/dist/src/accounts/json-rpc/index.test.js +33 -0
  12. package/dist/src/accounts/json-rpc/providers.d.ts +2 -1
  13. package/dist/src/accounts/json-rpc/providers.d.ts.map +1 -1
  14. package/dist/src/accounts/json-rpc/providers.js +8 -0
  15. package/dist/src/accounts/json-rpc/providers.test.d.ts +2 -0
  16. package/dist/src/accounts/json-rpc/providers.test.d.ts.map +1 -0
  17. package/dist/src/accounts/json-rpc/providers.test.js +43 -0
  18. package/dist/src/accounts/kernel.d.ts +9 -2
  19. package/dist/src/accounts/kernel.d.ts.map +1 -1
  20. package/dist/src/accounts/kernel.js +13 -0
  21. package/dist/src/accounts/nexus.d.ts +9 -2
  22. package/dist/src/accounts/nexus.d.ts.map +1 -1
  23. package/dist/src/accounts/nexus.js +15 -1
  24. package/dist/src/accounts/passport.d.ts +4 -4
  25. package/dist/src/accounts/passport.d.ts.map +1 -1
  26. package/dist/src/accounts/safe.d.ts +9 -2
  27. package/dist/src/accounts/safe.d.ts.map +1 -1
  28. package/dist/src/accounts/safe.js +15 -0
  29. package/dist/src/accounts/signing/common.d.ts.map +1 -1
  30. package/dist/src/accounts/signing/common.js +26 -5
  31. package/dist/src/accounts/signing/message.js +1 -1
  32. package/dist/src/accounts/startale.d.ts +9 -2
  33. package/dist/src/accounts/startale.d.ts.map +1 -1
  34. package/dist/src/accounts/startale.js +15 -0
  35. package/dist/src/accounts/walletClient.d.ts +27 -0
  36. package/dist/src/accounts/walletClient.d.ts.map +1 -1
  37. package/dist/src/accounts/walletClient.js +77 -0
  38. package/dist/src/actions/smart-sessions.d.ts +2 -11
  39. package/dist/src/actions/smart-sessions.d.ts.map +1 -1
  40. package/dist/src/actions/smart-sessions.js +0 -10
  41. package/dist/src/errors/index.d.ts +3 -3
  42. package/dist/src/errors/index.d.ts.map +1 -1
  43. package/dist/src/errors/index.js +3 -1
  44. package/dist/src/execution/index.d.ts +8 -3
  45. package/dist/src/execution/index.d.ts.map +1 -1
  46. package/dist/src/execution/index.js +27 -7
  47. package/dist/src/execution/singleChainOps.d.ts +28 -0
  48. package/dist/src/execution/singleChainOps.d.ts.map +1 -0
  49. package/dist/src/execution/{multiChainOps.js → singleChainOps.js} +7 -14
  50. package/dist/src/execution/smart-session.d.ts +5 -7
  51. package/dist/src/execution/smart-session.d.ts.map +1 -1
  52. package/dist/src/execution/smart-session.js +113 -228
  53. package/dist/src/execution/utils.d.ts +2 -2
  54. package/dist/src/execution/utils.d.ts.map +1 -1
  55. package/dist/src/execution/utils.js +81 -22
  56. package/dist/src/index.d.ts +14 -16
  57. package/dist/src/index.d.ts.map +1 -1
  58. package/dist/src/index.js +15 -6
  59. package/dist/src/modules/index.d.ts.map +1 -1
  60. package/dist/src/modules/index.js +1 -1
  61. package/dist/src/modules/validators/core.d.ts +5 -3
  62. package/dist/src/modules/validators/core.d.ts.map +1 -1
  63. package/dist/src/modules/validators/core.js +39 -2
  64. package/dist/src/modules/validators/smart-sessions.d.ts +6 -6
  65. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
  66. package/dist/src/modules/validators/smart-sessions.js +23 -12
  67. package/dist/src/orchestrator/client.d.ts.map +1 -1
  68. package/dist/src/orchestrator/client.js +13 -1
  69. package/dist/src/orchestrator/error.d.ts +27 -1
  70. package/dist/src/orchestrator/error.d.ts.map +1 -1
  71. package/dist/src/orchestrator/error.js +10 -1
  72. package/dist/src/orchestrator/index.d.ts +6 -6
  73. package/dist/src/orchestrator/index.d.ts.map +1 -1
  74. package/dist/src/orchestrator/index.js +4 -3
  75. package/dist/src/orchestrator/registry.d.ts +6 -2
  76. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  77. package/dist/src/orchestrator/registry.js +16 -64
  78. package/dist/src/orchestrator/registry.test.js +24 -24
  79. package/dist/src/orchestrator/types.d.ts +37 -23
  80. package/dist/src/orchestrator/types.d.ts.map +1 -1
  81. package/dist/src/orchestrator/types.js +9 -5
  82. package/dist/src/types.d.ts +30 -7
  83. package/dist/src/types.d.ts.map +1 -1
  84. package/package.json +4 -4
  85. package/dist/src/execution/multiChainOps.d.ts +0 -40
  86. package/dist/src/execution/multiChainOps.d.ts.map +0 -1
  87. package/dist/src/execution/smart-session.test.d.ts +0 -2
  88. package/dist/src/execution/smart-session.test.d.ts.map +0 -1
  89. package/dist/src/execution/smart-session.test.js +0 -34
@@ -2,113 +2,137 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.enableSmartSession = enableSmartSession;
4
4
  exports.getSessionDetails = getSessionDetails;
5
- exports.getMultichainDigest = getMultichainDigest;
6
5
  const viem_1 = require("viem");
7
6
  const accounts_1 = require("../accounts");
8
7
  const utils_1 = require("../accounts/utils");
9
8
  const validators_1 = require("../modules/validators");
10
9
  const smart_sessions_1 = require("../modules/validators/smart-sessions");
11
10
  const error_1 = require("./error");
12
- async function getSessionDetails(config, sessions, sessionIndex, signature) {
13
- const account = (0, accounts_1.getAccountProvider)(config);
11
+ const smartSessionTypes = {
12
+ PolicyData: [
13
+ { name: 'policy', type: 'address' },
14
+ { name: 'initData', type: 'bytes' },
15
+ ],
16
+ ActionData: [
17
+ { name: 'actionTargetSelector', type: 'bytes4' },
18
+ { name: 'actionTarget', type: 'address' },
19
+ { name: 'actionPolicies', type: 'PolicyData[]' },
20
+ ],
21
+ ERC7739Context: [
22
+ { name: 'appDomainSeparator', type: 'bytes32' },
23
+ { name: 'contentName', type: 'string[]' },
24
+ ],
25
+ ERC7739Data: [
26
+ { name: 'allowedERC7739Content', type: 'ERC7739Context[]' },
27
+ { name: 'erc1271Policies', type: 'PolicyData[]' },
28
+ ],
29
+ SignedPermissions: [
30
+ { name: 'permitGenericPolicy', type: 'bool' },
31
+ { name: 'permitAdminAccess', type: 'bool' },
32
+ { name: 'ignoreSecurityAttestations', type: 'bool' },
33
+ { name: 'permitERC4337Paymaster', type: 'bool' },
34
+ { name: 'userOpPolicies', type: 'PolicyData[]' },
35
+ { name: 'erc7739Policies', type: 'ERC7739Data' },
36
+ { name: 'actions', type: 'ActionData[]' },
37
+ ],
38
+ SignedSession: [
39
+ { name: 'account', type: 'address' },
40
+ { name: 'permissions', type: 'SignedPermissions' },
41
+ { name: 'sessionValidator', type: 'address' },
42
+ { name: 'sessionValidatorInitData', type: 'bytes' },
43
+ { name: 'salt', type: 'bytes32' },
44
+ { name: 'smartSession', type: 'address' },
45
+ { name: 'nonce', type: 'uint256' },
46
+ ],
47
+ ChainSession: [
48
+ { name: 'chainId', type: 'uint64' },
49
+ { name: 'session', type: 'SignedSession' },
50
+ ],
51
+ MultiChainSession: [{ name: 'sessionsAndChainIds', type: 'ChainSession[]' }],
52
+ };
53
+ async function getSessionDetails(config, sessions, sessionIndex, initialNonces, signature) {
54
+ const chains = sessions
55
+ .map((session) => session.chain)
56
+ .filter((chain) => !!chain);
57
+ if (chains.length !== sessions.length) {
58
+ throw new error_1.SessionChainRequiredError();
59
+ }
14
60
  const accountAddress = (0, accounts_1.getAddress)(config);
15
- const sessionDetails = await getEnableSessionDetails(account.type, sessions, sessionIndex, accountAddress, config.provider);
61
+ const publicClients = chains.map((chain) => (0, viem_1.createPublicClient)({
62
+ chain,
63
+ transport: (0, utils_1.createTransport)(chain, config.provider),
64
+ }));
65
+ const sessionDatas = sessions.map((session) => (0, smart_sessions_1.getSmartSessionData)(session));
66
+ const sessionNonces = await Promise.all(sessions.map((session, index) => initialNonces?.[index] ??
67
+ getSessionNonce(publicClients[index], accountAddress, (0, validators_1.getPermissionId)(session))));
68
+ const signedSessions = sessionDatas.map((session, index) => ({
69
+ account: accountAddress,
70
+ permissions: {
71
+ permitGenericPolicy: session.actions.some((action) => action.actionTarget === smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_FLAG &&
72
+ action.actionTargetSelector ===
73
+ smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG),
74
+ permitAdminAccess: session.actions.some((action) => action.actionTargetSelector ===
75
+ smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION),
76
+ ignoreSecurityAttestations: false,
77
+ permitERC4337Paymaster: session.permitERC4337Paymaster,
78
+ userOpPolicies: session.userOpPolicies,
79
+ erc7739Policies: session.erc7739Policies,
80
+ actions: session.actions,
81
+ },
82
+ sessionValidator: session.sessionValidator,
83
+ sessionValidatorInitData: session.sessionValidatorInitData,
84
+ salt: session.salt,
85
+ smartSession: validators_1.SMART_SESSIONS_VALIDATOR_ADDRESS,
86
+ nonce: sessionNonces[index],
87
+ }));
88
+ const chainDigests = signedSessions.map((session, index) => ({
89
+ chainId: BigInt(chains[index].id),
90
+ sessionDigest: (0, viem_1.hashStruct)({
91
+ types: smartSessionTypes,
92
+ primaryType: 'SignedSession',
93
+ data: session,
94
+ }),
95
+ }));
96
+ const typedData = {
97
+ domain: {
98
+ name: 'SmartSession',
99
+ version: '1',
100
+ },
101
+ types: smartSessionTypes,
102
+ primaryType: 'MultiChainSession',
103
+ message: {
104
+ sessionsAndChainIds: signedSessions.map((session, index) => ({
105
+ chainId: BigInt(chains[index].id),
106
+ session,
107
+ })),
108
+ },
109
+ };
16
110
  const chain = sessions[sessionIndex].chain;
17
111
  if (!chain) {
18
112
  throw new error_1.SessionChainRequiredError();
19
113
  }
20
114
  const validator = {
21
- address: sessionDetails.enableSessionData.validator,
22
- isRoot: true,
115
+ address: sessionDatas[sessionIndex].sessionValidator,
116
+ isRoot: false,
23
117
  };
24
- sessionDetails.enableSessionData.signature =
25
- signature ??
26
- (await (0, accounts_1.getPackedSignature)(config, undefined, chain, validator, sessionDetails.permissionEnableHash));
27
- return sessionDetails;
28
- }
29
- async function getEnableSessionDetails(accountType, sessions, sessionIndex, accountAddress, provider) {
30
- const chainDigests = [];
31
- const chainSessions = [];
32
- for (const session of sessions) {
33
- const permissionId = (0, validators_1.getPermissionId)(session);
34
- const sessionChain = session.chain;
35
- if (!sessionChain) {
36
- throw new error_1.SessionChainRequiredError();
37
- }
38
- const publicClient = (0, viem_1.createPublicClient)({
39
- chain: sessionChain,
40
- transport: (0, utils_1.createTransport)(sessionChain, provider),
41
- });
42
- const sessionNonce = await getSessionNonce(publicClient, accountAddress, permissionId);
43
- const sessionData = await (0, smart_sessions_1.getSessionData)(session);
44
- const sessionDigest = await getSessionDigest(publicClient, accountAddress, sessionData, permissionId, validators_1.SMART_SESSION_MODE_ENABLE);
45
- chainDigests.push({
46
- chainId: BigInt(sessionChain.id),
47
- sessionDigest,
48
- });
49
- chainSessions.push({
50
- chainId: BigInt(sessionChain.id),
51
- session: {
52
- permissions: {
53
- permitGenericPolicy: false,
54
- permitAdminAccess: false,
55
- ignoreSecurityAttestations: false,
56
- permitERC4337Paymaster: sessionData.permitERC4337Paymaster,
57
- userOpPolicies: sessionData.userOpPolicies,
58
- erc7739Policies: sessionData.erc7739Policies,
59
- actions: sessionData.actions,
60
- },
61
- salt: sessionData.salt,
62
- sessionValidator: sessionData.sessionValidator,
63
- sessionValidatorInitData: sessionData.sessionValidatorInitData,
64
- account: accountAddress,
65
- smartSession: validators_1.SMART_SESSIONS_VALIDATOR_ADDRESS,
66
- nonce: sessionNonce,
67
- },
68
- });
69
- }
70
- const permissionEnableHash = getMultichainDigest(chainDigests);
71
- const sessionToEnable = sessions[sessionIndex || 0];
72
- const sessionChain = sessionToEnable.chain;
73
- if (!sessionChain) {
74
- throw new error_1.SessionChainRequiredError();
75
- }
76
- const sessionData = await (0, smart_sessions_1.getSessionData)(sessionToEnable);
118
+ const sessionSignature = signature ??
119
+ (await (0, accounts_1.getTypedDataPackedSignature)(config, undefined, chain, validator, typedData));
77
120
  return {
78
- permissionEnableHash,
79
- mode: validators_1.SMART_SESSION_MODE_ENABLE,
80
- hashesAndChainIds: chainDigests,
121
+ nonces: sessionNonces,
122
+ signature: sessionSignature,
81
123
  enableSessionData: {
82
- permissionId: (0, validators_1.getPermissionId)(sessionToEnable),
83
- validator: sessionData.sessionValidator,
84
- accountType,
85
124
  chainDigestIndex: sessionIndex,
86
- hashesAndChainIds: chainDigests,
87
- sessionToEnable: sessionData,
88
- signature: '0x',
125
+ hashesAndChainIds: chainDigests.map((chainDigest) => ({
126
+ chainId: BigInt(chainDigest.chainId),
127
+ sessionDigest: chainDigest.sessionDigest,
128
+ })),
129
+ sessionToEnable: sessionDatas[sessionIndex],
130
+ signature: sessionSignature,
89
131
  },
90
132
  };
91
133
  }
92
- function getMultichainDigest(chainDigests) {
93
- function hashChainDigestMimicRPC(chainDigest) {
94
- const CHAIN_SESSION_TYPEHASH = '0x1ea7e4bc398fa0ccd68d92b5d8931a3fd93eebe1cf0391b4ba28935801af7c80';
95
- return (0, viem_1.keccak256)((0, viem_1.encodePacked)(['bytes32', 'uint256', 'bytes32'], [
96
- CHAIN_SESSION_TYPEHASH,
97
- chainDigest.chainId,
98
- chainDigest.sessionDigest,
99
- ]));
100
- }
101
- function hashChainDigestArray(chainDigests) {
102
- const hashes = chainDigests.map((digest) => hashChainDigestMimicRPC(digest));
103
- return (0, viem_1.keccak256)((0, viem_1.concat)(hashes));
104
- }
105
- const MULTICHAIN_SESSION_TYPEHASH = '0x0c9d02fb89a1da34d66ea2088dc9ee6a58efee71cef6f1bb849ed74fc6003d98';
106
- const MULTICHAIN_DOMAIN_SEPARATOR = '0x057501e891776d1482927e5f094ae44049a4d893ba2d7b334dd7db8d38d3a0e1';
107
- const structHash = (0, viem_1.keccak256)((0, viem_1.encodePacked)(['bytes32', 'bytes32'], [MULTICHAIN_SESSION_TYPEHASH, hashChainDigestArray(chainDigests)]));
108
- return (0, viem_1.keccak256)((0, viem_1.concat)(['0x1901', MULTICHAIN_DOMAIN_SEPARATOR, structHash]));
109
- }
110
134
  async function getSessionNonce(client, account, permissionId) {
111
- return (await client.readContract({
135
+ const nonce = await client.readContract({
112
136
  address: validators_1.SMART_SESSIONS_VALIDATOR_ADDRESS,
113
137
  abi: [
114
138
  {
@@ -128,147 +152,8 @@ async function getSessionNonce(client, account, permissionId) {
128
152
  ],
129
153
  functionName: 'getNonce',
130
154
  args: [permissionId, account],
131
- }));
132
- }
133
- async function getSessionDigest(client, account, session, permissionId, mode) {
134
- return (await client.readContract({
135
- address: validators_1.SMART_SESSIONS_VALIDATOR_ADDRESS,
136
- abi: [
137
- {
138
- type: 'function',
139
- name: 'getSessionDigest',
140
- inputs: [
141
- {
142
- name: 'permissionId',
143
- type: 'bytes32',
144
- internalType: 'PermissionId',
145
- },
146
- { name: 'account', type: 'address', internalType: 'address' },
147
- {
148
- name: 'data',
149
- type: 'tuple',
150
- internalType: 'struct Session',
151
- components: [
152
- {
153
- name: 'sessionValidator',
154
- type: 'address',
155
- internalType: 'contract ISessionValidator',
156
- },
157
- {
158
- name: 'sessionValidatorInitData',
159
- type: 'bytes',
160
- internalType: 'bytes',
161
- },
162
- { name: 'salt', type: 'bytes32', internalType: 'bytes32' },
163
- {
164
- name: 'userOpPolicies',
165
- type: 'tuple[]',
166
- internalType: 'struct PolicyData[]',
167
- components: [
168
- {
169
- name: 'policy',
170
- type: 'address',
171
- internalType: 'address',
172
- },
173
- { name: 'initData', type: 'bytes', internalType: 'bytes' },
174
- ],
175
- },
176
- {
177
- name: 'erc7739Policies',
178
- type: 'tuple',
179
- internalType: 'struct ERC7739Data',
180
- components: [
181
- {
182
- name: 'allowedERC7739Content',
183
- type: 'tuple[]',
184
- internalType: 'struct ERC7739Context[]',
185
- components: [
186
- {
187
- name: 'appDomainSeparator',
188
- type: 'bytes32',
189
- internalType: 'bytes32',
190
- },
191
- {
192
- name: 'contentName',
193
- type: 'string[]',
194
- internalType: 'string[]',
195
- },
196
- ],
197
- },
198
- {
199
- name: 'erc1271Policies',
200
- type: 'tuple[]',
201
- internalType: 'struct PolicyData[]',
202
- components: [
203
- {
204
- name: 'policy',
205
- type: 'address',
206
- internalType: 'address',
207
- },
208
- {
209
- name: 'initData',
210
- type: 'bytes',
211
- internalType: 'bytes',
212
- },
213
- ],
214
- },
215
- ],
216
- },
217
- {
218
- name: 'actions',
219
- type: 'tuple[]',
220
- internalType: 'struct ActionData[]',
221
- components: [
222
- {
223
- name: 'actionTargetSelector',
224
- type: 'bytes4',
225
- internalType: 'bytes4',
226
- },
227
- {
228
- name: 'actionTarget',
229
- type: 'address',
230
- internalType: 'address',
231
- },
232
- {
233
- name: 'actionPolicies',
234
- type: 'tuple[]',
235
- internalType: 'struct PolicyData[]',
236
- components: [
237
- {
238
- name: 'policy',
239
- type: 'address',
240
- internalType: 'address',
241
- },
242
- {
243
- name: 'initData',
244
- type: 'bytes',
245
- internalType: 'bytes',
246
- },
247
- ],
248
- },
249
- ],
250
- },
251
- {
252
- name: 'permitERC4337Paymaster',
253
- type: 'bool',
254
- internalType: 'bool',
255
- },
256
- ],
257
- },
258
- {
259
- name: 'mode',
260
- type: 'uint8',
261
- internalType: 'enum SmartSessionMode',
262
- },
263
- ],
264
- outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }],
265
- stateMutability: 'view',
266
- },
267
- ],
268
- functionName: 'getSessionDigest',
269
- // @ts-ignore Viem fails to infer the type of "session"
270
- args: [permissionId, account, session, Number(mode)],
271
- }));
155
+ });
156
+ return nonce;
272
157
  }
273
158
  async function enableSmartSession(chain, config, session) {
274
159
  const publicClient = (0, viem_1.createPublicClient)({
@@ -1,7 +1,7 @@
1
1
  import { type Address, type Chain, type HashTypedDataParameters, type Hex, type PublicClient, type SignableMessage, type SignedAuthorization, type SignedAuthorizationList, type TypedData } from 'viem';
2
2
  import { type UserOperation } from 'viem/account-abstraction';
3
3
  import { type IntentOp, type IntentRoute } from '../orchestrator';
4
- import type { SettlementLayer } from '../orchestrator/types';
4
+ import { type Account, type SettlementLayer } from '../orchestrator/types';
5
5
  import type { Call, CalldataInput, CallInput, RhinestoneConfig, SignerSet, SourceAssetInput, TokenRequest, TokenSymbol, Transaction, UserOperationTransaction } from '../types';
6
6
  interface UserOperationResult {
7
7
  type: 'userop';
@@ -42,7 +42,7 @@ declare function signAuthorizationsInternal(config: RhinestoneConfig, data: Inte
42
42
  declare function submitTransaction(config: RhinestoneConfig, signedTransaction: SignedTransactionData, authorizations: SignedAuthorizationList, dryRun?: boolean): Promise<TransactionResult>;
43
43
  declare function submitUserOperation(config: RhinestoneConfig, signedUserOperation: SignedUserOperationData): Promise<UserOperationResult>;
44
44
  declare function getTokenRequests(sourceChains: Chain[], targetChain: Chain, initialTokenRequests: TokenRequest[] | undefined, settlementLayers: SettlementLayer[] | undefined): TokenRequest[];
45
- declare function prepareTransactionAsIntent(config: RhinestoneConfig, sourceChains: Chain[] | undefined, targetChain: Chain, callInputs: CalldataInput[], gasLimit: bigint | undefined, tokenRequests: TokenRequest[], accountAddress: Address, isSponsored: boolean, eip7702InitSignature: Hex | undefined, settlementLayers: SettlementLayer[] | undefined, sourceAssets: SourceAssetInput | undefined, feeAsset: Address | TokenSymbol | undefined, lockFunds?: boolean, account?: {
45
+ declare function prepareTransactionAsIntent(config: RhinestoneConfig, sourceChains: Chain[] | undefined, targetChain: Chain, callInputs: CalldataInput[], gasLimit: bigint | undefined, tokenRequests: TokenRequest[], recipient: Account | undefined, accountAddress: Address, isSponsored: boolean, eip7702InitSignature: Hex | undefined, settlementLayers: SettlementLayer[] | undefined, sourceAssets: SourceAssetInput | undefined, feeAsset: Address | TokenSymbol | undefined, lockFunds?: boolean, account?: {
46
46
  setupOps?: {
47
47
  to: Address;
48
48
  data: Hex;
@@ -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":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAKV,KAAK,uBAAuB,EAC5B,KAAK,GAAG,EAIR,KAAK,YAAY,EAEjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EAIf,MAAM,MAAM,CAAA;AACb,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAA;AAkCjC,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAA;AAWxB,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,eAAe,EAGrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,wBAAwB,EACzB,MAAM,UAAU,CAAA;AAMjB,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,GAAG,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,uBAAuB;IAC/B,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,EAAE,WAAW,CAAA;CACzB;AAED,UAAU,yBAAyB;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,IAAI,EAAE,GAAG,CAAA;IACT,WAAW,EAAE,wBAAwB,CAAA;CACtC;AAED,UAAU,qBAAsB,SAAQ,uBAAuB;IAC7D,gBAAgB,EAAE,GAAG,EAAE,CAAA;IACvB,oBAAoB,EAAE,GAAG,CAAA;CAC1B;AAED,UAAU,uBAAwB,SAAQ,yBAAyB;IACjE,SAAS,EAAE,GAAG,CAAA;CACf;AAED,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,uBAAuB,CAAC,CAiDlC;AAED,iBAAe,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,wBAAwB,GACpC,OAAO,CAAC,yBAAyB,CAAC,CAgBpC;AAED,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAe1B;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,gBAAgB,EACxB,mBAAmB,EAAE,uBAAuB,GAC3C,OAAO,CAAC,qBAAqB,CAAC,CAkBhC;AAED,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,gBAAgB,EACxB,qBAAqB,EAAE,yBAAyB,GAC/C,OAAO,CAAC,uBAAuB,CAAC,CAYlC;AAED,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,mBAAmB,EAAE,uBAAuB,kCAM7C;AAED,iBAAe,WAAW,CACxB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,GAAG,SAAS,0BAqB/B;AAED,iBAAe,aAAa,CAC1B,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjE,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,MAAM,SAAS,EAEtE,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,GAAG,SAAS,0BAiC/B;AA6DD,iBAAe,0BAA0B,CACvC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,WAAW,GAAG,aAAa,kCAsClC;AAED,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,EAAE,qBAAqB,EACxC,cAAc,EAAE,uBAAuB,EACvC,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAe5B;AAED,iBAAe,mBAAmB,CAChC,MAAM,EAAE,gBAAgB,EACxB,mBAAmB,EAAE,uBAAuB,gCAO7C;AA2CD,iBAAS,gBAAgB,CACvB,YAAY,EAAE,KAAK,EAAE,EACrB,WAAW,EAAE,KAAK,EAClB,oBAAoB,EAAE,YAAY,EAAE,GAAG,SAAS,EAChD,gBAAgB,EAAE,eAAe,EAAE,GAAG,SAAS,kBAuBhD;AAwCD,iBAAe,0BAA0B,CACvC,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,KAAK,EAAE,GAAG,SAAS,EACjC,WAAW,EAAE,KAAK,EAClB,UAAU,EAAE,aAAa,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,aAAa,EAAE,YAAY,EAAE,EAC7B,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,cAAc,EAAE,OAAO,EACvB,WAAW,EAAE,OAAO,EACpB,oBAAoB,EAAE,GAAG,GAAG,SAAS,EACrC,gBAAgB,EAAE,eAAe,EAAE,GAAG,SAAS,EAC/C,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,EAC3C,SAAS,CAAC,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE;QACT,EAAE,EAAE,OAAO,CAAA;QACX,IAAI,EAAE,GAAG,CAAA;KACV,EAAE,CAAA;CACJ,wBA4DF;AAED,iBAAe,UAAU,CACvB,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,KAAK,EAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,SAAS;;;GA8DpB;AAiRD,iBAAS,sBAAsB,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,eAAe,CAAC,EAAE,MAAM,0CAUzB;AA0BD,iBAAe,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,KAAK,EAAE,GAAG,SAAS,EACjC,WAAW,EAAE,KAAK,EAClB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,GAAG,EAAE,EACvB,oBAAoB,EAAE,GAAG,EACzB,cAAc,EAAE,uBAAuB,EACvC,MAAM,EAAE,OAAO,8BAoBhB;AAED,iBAAe,mBAAmB,CAChC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,yKA6Bb;AAiDD,iBAAS,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,CAMnE;AAgGD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,CAAA;AACD,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,CAAA"}
@@ -20,6 +20,7 @@ exports.getTokenRequests = getTokenRequests;
20
20
  exports.resolveCallInputs = resolveCallInputs;
21
21
  const viem_1 = require("viem");
22
22
  const account_abstraction_1 = require("viem/account-abstraction");
23
+ const erc7739_1 = require("viem/experimental/erc7739");
23
24
  const accounts_1 = require("../accounts");
24
25
  const utils_1 = require("../accounts/utils");
25
26
  const modules_1 = require("../modules");
@@ -28,18 +29,19 @@ const core_1 = require("../modules/validators/core");
28
29
  const orchestrator_1 = require("../orchestrator");
29
30
  const consts_1 = require("../orchestrator/consts");
30
31
  const registry_1 = require("../orchestrator/registry");
32
+ const types_1 = require("../orchestrator/types");
31
33
  const compact_1 = require("./compact");
32
34
  const error_1 = require("./error");
33
- const multiChainOps_1 = require("./multiChainOps");
34
35
  const permit2_1 = require("./permit2");
36
+ const singleChainOps_1 = require("./singleChainOps");
35
37
  async function prepareTransaction(config, transaction) {
36
- const { sourceChains, targetChain, tokenRequests, signers, sponsored, eip7702InitSignature, settlementLayers, sourceAssets, feeAsset, lockFunds, account, } = getTransactionParams(transaction);
38
+ const { sourceChains, targetChain, tokenRequests, signers, sponsored, eip7702InitSignature, settlementLayers, sourceAssets, feeAsset, lockFunds, account, recipient, } = getTransactionParams(transaction);
37
39
  const accountAddress = (0, accounts_1.getAddress)(config);
38
40
  const isUserOpSigner = signers?.type === 'guardians' || signers?.type === 'session';
39
41
  if (isUserOpSigner) {
40
42
  throw new error_1.SignerNotSupportedError();
41
43
  }
42
- const intentRoute = await prepareTransactionAsIntent(config, sourceChains, targetChain, await resolveCallInputs(transaction.calls, config, targetChain, accountAddress), transaction.gasLimit, tokenRequests, accountAddress, sponsored ?? false, eip7702InitSignature, settlementLayers, sourceAssets, feeAsset, lockFunds, account);
44
+ const intentRoute = await prepareTransactionAsIntent(config, sourceChains, targetChain, await resolveCallInputs(transaction.calls, config, targetChain, accountAddress), transaction.gasLimit, tokenRequests, recipient, accountAddress, sponsored ?? false, eip7702InitSignature, settlementLayers, sourceAssets, feeAsset, lockFunds, account);
43
45
  return {
44
46
  intentRoute,
45
47
  transaction,
@@ -122,12 +124,54 @@ async function signTypedData(config, parameters, chain, signers) {
122
124
  }
123
125
  const ownerValidator = (0, validators_1.getOwnerValidator)(config);
124
126
  const isRoot = validator.address === ownerValidator.address;
127
+ if (signers?.type === 'session') {
128
+ return await signTypedDataWithSession(config, chain, {
129
+ address: validator.address,
130
+ isRoot,
131
+ }, signers, parameters);
132
+ }
125
133
  const signature = await (0, accounts_1.getTypedDataPackedSignature)(config, signers, chain, {
126
134
  address: validator.address,
127
135
  isRoot,
128
136
  }, parameters);
129
137
  return await (0, accounts_1.toErc6492Signature)(config, signature, chain);
130
138
  }
139
+ async function signTypedDataWithSession(config, chain, validator, signers, parameters) {
140
+ const { name, version, chainId, verifyingContract, salt } = (0, accounts_1.getEip712Domain)(config, chain);
141
+ const signature = await (0, accounts_1.getTypedDataPackedSignature)(config, signers, chain, validator, {
142
+ domain: parameters.domain,
143
+ primaryType: 'TypedDataSign',
144
+ types: {
145
+ ...parameters.types,
146
+ TypedDataSign: [
147
+ { name: 'contents', type: parameters.primaryType },
148
+ { name: 'name', type: 'string' },
149
+ { name: 'version', type: 'string' },
150
+ { name: 'chainId', type: 'uint256' },
151
+ { name: 'verifyingContract', type: 'address' },
152
+ { name: 'salt', type: 'bytes32' },
153
+ ],
154
+ },
155
+ message: {
156
+ contents: parameters.message,
157
+ name,
158
+ version,
159
+ chainId,
160
+ verifyingContract,
161
+ salt,
162
+ },
163
+ }, (signature) => {
164
+ const erc7739Signature = (0, erc7739_1.wrapTypedDataSignature)({
165
+ domain: parameters.domain,
166
+ primaryType: parameters.primaryType,
167
+ types: parameters.types,
168
+ message: parameters.message,
169
+ signature,
170
+ });
171
+ return (0, viem_1.encodePacked)(['bytes32', 'bytes'], [(0, validators_1.getPermissionId)(signers.session), erc7739Signature]);
172
+ });
173
+ return await (0, accounts_1.toErc6492Signature)(config, signature, chain);
174
+ }
131
175
  async function signAuthorizationsInternal(config, data) {
132
176
  const eoa = config.eoa;
133
177
  if (!eoa) {
@@ -190,6 +234,7 @@ function getTransactionParams(transaction) {
190
234
  const feeAsset = transaction.feeAsset;
191
235
  const lockFunds = transaction.lockFunds;
192
236
  const account = transaction.experimental_accountOverride;
237
+ const recipient = transaction.recipient;
193
238
  const tokenRequests = getTokenRequests(sourceChains || [], targetChain, initialTokenRequests, settlementLayers);
194
239
  return {
195
240
  sourceChains,
@@ -204,6 +249,7 @@ function getTransactionParams(transaction) {
204
249
  feeAsset,
205
250
  lockFunds,
206
251
  account,
252
+ recipient,
207
253
  };
208
254
  }
209
255
  function getTokenRequests(sourceChains, targetChain, initialTokenRequests, settlementLayers) {
@@ -250,7 +296,7 @@ async function prepareTransactionAsUserOp(config, chain, callInputs, signers, ga
250
296
  }),
251
297
  };
252
298
  }
253
- async function prepareTransactionAsIntent(config, sourceChains, targetChain, callInputs, gasLimit, tokenRequests, accountAddress, isSponsored, eip7702InitSignature, settlementLayers, sourceAssets, feeAsset, lockFunds, account) {
299
+ async function prepareTransactionAsIntent(config, sourceChains, targetChain, callInputs, gasLimit, tokenRequests, recipient, accountAddress, isSponsored, eip7702InitSignature, settlementLayers, sourceAssets, feeAsset, lockFunds, account) {
254
300
  const calls = parseCalls(callInputs, targetChain.id);
255
301
  const accountAccessList = createAccountAccessList(sourceChains, sourceAssets);
256
302
  const { setupOps, delegations } = await getSetupOperationsAndDelegations(config, accountAddress, eip7702InitSignature);
@@ -265,10 +311,11 @@ async function prepareTransactionAsIntent(config, sourceChains, targetChain, cal
265
311
  const accountType = getAccountType(config);
266
312
  const metaIntent = {
267
313
  destinationChainId: targetChain.id,
268
- tokenTransfers: tokenRequests.map((tokenRequest) => ({
314
+ tokenRequests: tokenRequests.map((tokenRequest) => ({
269
315
  tokenAddress: (0, registry_1.resolveTokenAddress)(tokenRequest.address, targetChain.id),
270
316
  amount: tokenRequest.amount,
271
317
  })),
318
+ recipient,
272
319
  account: {
273
320
  address: accountAddress,
274
321
  accountType: accountType,
@@ -320,9 +367,10 @@ async function signIntent(config, targetChain, intentOp, signers) {
320
367
  throw new accounts_1.EoaSigningMethodNotConfiguredError('signTypedData, sign, or signMessage');
321
368
  }
322
369
  }
370
+ const destinationSignature = originSignatures.at(-1);
323
371
  return {
324
372
  originSignatures,
325
- destinationSignature: originSignatures[0],
373
+ destinationSignature,
326
374
  };
327
375
  }
328
376
  const validator = getValidator(config, signers);
@@ -332,20 +380,21 @@ async function signIntent(config, targetChain, intentOp, signers) {
332
380
  const ownerValidator = (0, validators_1.getOwnerValidator)(config);
333
381
  const isRoot = validator.address === ownerValidator.address;
334
382
  const signatures = await getIntentSignature(config, intentOp, signers, targetChain, validator, isRoot);
335
- return signatures;
383
+ return {
384
+ originSignatures: signatures.originSignatures,
385
+ destinationSignature: signatures.destinationSignature,
386
+ };
336
387
  }
337
388
  async function getIntentSignature(config, intentOp, signers, targetChain, validator, isRoot) {
338
- const withJitFlow = intentOp.elements.some((element) => element.mandate.qualifier.settlementContext?.usingJIT);
339
- const withMultiChainOps = intentOp.elements.some((element) => element.mandate.qualifier.settlementContext.settlementLayer ===
389
+ const withPermit2 = intentOp.elements.some((element) => element.mandate.qualifier.settlementContext?.fundingMethod ===
390
+ types_1.FundingMethod.PERMIT2);
391
+ const withIntentExecutorOps = intentOp.elements.some((element) => element.mandate.qualifier.settlementContext.settlementLayer ===
340
392
  'INTENT_EXECUTOR');
341
- if (withMultiChainOps) {
342
- const signature = await getMultiChainOpsSignature(config, intentOp, signers, targetChain, validator, isRoot);
343
- return {
344
- originSignatures: Array(intentOp.elements.length).fill(signature),
345
- destinationSignature: signature,
346
- };
393
+ if (withIntentExecutorOps) {
394
+ const signature = await getSingleChainOpsSignature(config, intentOp, signers, targetChain, validator, isRoot);
395
+ return signature;
347
396
  }
348
- if (withJitFlow) {
397
+ if (withPermit2) {
349
398
  return await getPermit2Signatures(config, intentOp, signers, targetChain, validator, isRoot);
350
399
  }
351
400
  const signature = await getCompactSignature(config, intentOp, signers, targetChain, validator, isRoot);
@@ -354,12 +403,20 @@ async function getIntentSignature(config, intentOp, signers, targetChain, valida
354
403
  destinationSignature: signature,
355
404
  };
356
405
  }
357
- async function getMultiChainOpsSignature(config, intentOp, signers, targetChain, validator, isRoot) {
406
+ async function getSingleChainOpsSignature(config, intentOp, signers, targetChain, validator, isRoot) {
358
407
  const address = (0, accounts_1.getAddress)(config);
359
408
  const intentExecutor = (0, modules_1.getIntentExecutor)(config);
360
- const typedData = (0, multiChainOps_1.getTypedData)(address, intentExecutor.address, intentOp);
361
- const signature = await signIntentTypedData(config, signers, targetChain, validator, isRoot, typedData);
362
- return signature;
409
+ const originSignatures = [];
410
+ for (const element of intentOp.elements) {
411
+ const typedData = (0, singleChainOps_1.getTypedData)(address, intentExecutor.address, element, BigInt(intentOp.nonce));
412
+ const signature = await signIntentTypedData(config, signers, targetChain, validator, isRoot, typedData);
413
+ originSignatures.push(signature);
414
+ }
415
+ const destinationSignature = originSignatures.at(-1);
416
+ return {
417
+ originSignatures,
418
+ destinationSignature,
419
+ };
363
420
  }
364
421
  async function getPermit2Signatures(config, intentOp, signers, targetChain, validator, isRoot) {
365
422
  const originSignatures = [];
@@ -368,9 +425,10 @@ async function getPermit2Signatures(config, intentOp, signers, targetChain, vali
368
425
  const signature = await signIntentTypedData(config, signers, targetChain, validator, isRoot, typedData);
369
426
  originSignatures.push(signature);
370
427
  }
428
+ const destinationSignature = originSignatures.at(-1);
371
429
  return {
372
430
  originSignatures,
373
- destinationSignature: originSignatures[0],
431
+ destinationSignature,
374
432
  };
375
433
  }
376
434
  async function getCompactSignature(config, intentOp, signers, targetChain, validator, isRoot) {
@@ -513,7 +571,8 @@ function getValidator(config, signers) {
513
571
  if (withOwner) {
514
572
  // ECDSA
515
573
  if (withOwner.kind === 'ecdsa') {
516
- return (0, core_1.getOwnableValidator)(1, withOwner.accounts.map((account) => account.address));
574
+ // Use the configured owner validator (e.g., ENS) rather than forcing Ownable
575
+ return (0, validators_1.getOwnerValidator)(config);
517
576
  }
518
577
  // Passkeys (WebAuthn)
519
578
  if (withOwner.kind === 'passkey') {