@rhinestone/sdk 1.4.0 → 1.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 (53) hide show
  1. package/dist/src/accounts/index.d.ts +1 -0
  2. package/dist/src/accounts/index.d.ts.map +1 -1
  3. package/dist/src/accounts/index.js +8 -2
  4. package/dist/src/accounts/json-rpc/providers.js +1 -1
  5. package/dist/src/accounts/safe.d.ts.map +1 -1
  6. package/dist/src/accounts/safe.js +4 -1
  7. package/dist/src/accounts/safe.test.js +50 -0
  8. package/dist/src/actions/recovery.test.js +1 -1
  9. package/dist/src/execution/signing.test.d.ts +2 -0
  10. package/dist/src/execution/signing.test.d.ts.map +1 -0
  11. package/dist/src/execution/signing.test.js +465 -0
  12. package/dist/src/execution/utils.d.ts +1 -0
  13. package/dist/src/execution/utils.d.ts.map +1 -1
  14. package/dist/src/execution/utils.js +76 -7
  15. package/dist/src/execution/utils.test.js +183 -0
  16. package/dist/src/index.d.ts +2 -2
  17. package/dist/src/index.d.ts.map +1 -1
  18. package/dist/src/modules/validators/index.d.ts +2 -2
  19. package/dist/src/modules/validators/index.d.ts.map +1 -1
  20. package/dist/src/modules/validators/index.js +4 -1
  21. package/dist/src/modules/validators/policies/claim/permit2.d.ts +55 -0
  22. package/dist/src/modules/validators/policies/claim/permit2.d.ts.map +1 -0
  23. package/dist/src/modules/validators/policies/claim/permit2.js +239 -0
  24. package/dist/src/modules/validators/policies/claim/permit2.test.d.ts +2 -0
  25. package/dist/src/modules/validators/policies/claim/permit2.test.d.ts.map +1 -0
  26. package/dist/src/modules/validators/policies/claim/permit2.test.js +519 -0
  27. package/dist/src/modules/validators/policies/claim/types.d.ts +12 -0
  28. package/dist/src/modules/validators/policies/claim/types.d.ts.map +1 -0
  29. package/dist/src/modules/validators/policies/claim/types.js +18 -0
  30. package/dist/src/modules/validators/smart-sessions.d.ts +14 -3
  31. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
  32. package/dist/src/modules/validators/smart-sessions.js +51 -16
  33. package/dist/src/modules/validators/smart-sessions.test.js +266 -16
  34. package/dist/src/orchestrator/client.d.ts.map +1 -1
  35. package/dist/src/orchestrator/client.js +1 -0
  36. package/dist/src/orchestrator/consts.d.ts +3 -2
  37. package/dist/src/orchestrator/consts.d.ts.map +1 -1
  38. package/dist/src/orchestrator/consts.js +4 -2
  39. package/dist/src/orchestrator/index.d.ts +2 -2
  40. package/dist/src/orchestrator/index.d.ts.map +1 -1
  41. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  42. package/dist/src/orchestrator/registry.js +5 -1
  43. package/dist/src/orchestrator/types.d.ts +1 -0
  44. package/dist/src/orchestrator/types.d.ts.map +1 -1
  45. package/dist/src/types.d.ts +38 -1
  46. package/dist/src/types.d.ts.map +1 -1
  47. package/dist/src/utils/index.d.ts +3 -9
  48. package/dist/src/utils/index.d.ts.map +1 -1
  49. package/dist/src/utils/index.test.d.ts +2 -0
  50. package/dist/src/utils/index.test.d.ts.map +1 -0
  51. package/dist/src/utils/index.test.js +42 -0
  52. package/dist/test/utils/utils.js +1 -1
  53. package/package.json +2 -2
@@ -3,9 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = exports.SMART_SESSIONS_FALLBACK_TARGET_FLAG = exports.SMART_SESSION_EMISSARY_ADDRESS_DEV = exports.SMART_SESSION_EMISSARY_ADDRESS = void 0;
6
+ exports.INTENT_EXECUTION_POLICY_ADDRESS = exports.VALUE_LIMIT_POLICY_ADDRESS = exports.USAGE_LIMIT_POLICY_ADDRESS = exports.UNIVERSAL_ACTION_POLICY_ADDRESS = exports.SUDO_POLICY_ADDRESS = exports.TIME_FRAME_POLICY_ADDRESS = exports.SPENDING_LIMITS_POLICY_ADDRESS = exports.DUMMY_PRECLAIMOP_SELECTOR = exports.DUMMY_PRECLAIMOP_TARGET = exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = exports.SMART_SESSIONS_FALLBACK_TARGET_FLAG = exports.SMART_SESSION_EMISSARY_ADDRESS_DEV = exports.SMART_SESSION_EMISSARY_ADDRESS = void 0;
7
7
  exports.packSignature = packSignature;
8
8
  exports.getSessionData = getSessionData;
9
+ exports.getPolicyData = getPolicyData;
9
10
  exports.getEnableSessionCall = getEnableSessionCall;
10
11
  exports.getPermissionId = getPermissionId;
11
12
  exports.getSmartSessionValidator = getSmartSessionValidator;
@@ -27,6 +28,7 @@ const common_1 = require("../common");
27
28
  const core_1 = require("./core");
28
29
  Object.defineProperty(exports, "SMART_SESSION_EMISSARY_ADDRESS", { enumerable: true, get: function () { return core_1.SMART_SESSION_EMISSARY_ADDRESS; } });
29
30
  Object.defineProperty(exports, "SMART_SESSION_EMISSARY_ADDRESS_DEV", { enumerable: true, get: function () { return core_1.SMART_SESSION_EMISSARY_ADDRESS_DEV; } });
31
+ const permit2_1 = require("./policies/claim/permit2");
30
32
  const types = {
31
33
  PolicyData: [
32
34
  { name: 'policy', type: 'address' },
@@ -79,13 +81,32 @@ const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = '0x00000001';
79
81
  exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG;
80
82
  const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = '0x00000002';
81
83
  exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION;
84
+ // Dummy preclaimop action injected into every session so that the filler can trigger
85
+ // verifyExecution (ENABLE mode) using an injected dummy preclaimop when there are no
86
+ // real preclaimops. Target 0x...0001 is the ecRecover precompile; calls to it fail
87
+ // silently because preclaimops are failure-tolerant. Selector 0x69123456 is
88
+ // intentionally uncommon. Note: this address is the same as
89
+ // SMART_SESSIONS_FALLBACK_TARGET_FLAG — that is harmless because they operate in
90
+ // different contexts (action matching vs. literal execution target).
91
+ const DUMMY_PRECLAIMOP_TARGET = '0x0000000000000000000000000000000000000001';
92
+ exports.DUMMY_PRECLAIMOP_TARGET = DUMMY_PRECLAIMOP_TARGET;
93
+ const DUMMY_PRECLAIMOP_SELECTOR = '0x69123456';
94
+ exports.DUMMY_PRECLAIMOP_SELECTOR = DUMMY_PRECLAIMOP_SELECTOR;
82
95
  const SPENDING_LIMITS_POLICY_ADDRESS = '0x00000088d48cf102a8cdb0137a9b173f957c6343';
96
+ exports.SPENDING_LIMITS_POLICY_ADDRESS = SPENDING_LIMITS_POLICY_ADDRESS;
83
97
  const TIME_FRAME_POLICY_ADDRESS = '0x8177451511de0577b911c254e9551d981c26dc72';
98
+ exports.TIME_FRAME_POLICY_ADDRESS = TIME_FRAME_POLICY_ADDRESS;
84
99
  const SUDO_POLICY_ADDRESS = '0x0000003111cd8e92337c100f22b7a9dbf8dee301';
100
+ exports.SUDO_POLICY_ADDRESS = SUDO_POLICY_ADDRESS;
85
101
  const UNIVERSAL_ACTION_POLICY_ADDRESS = '0x0000006dda6c463511c4e9b05cfc34c1247fcf1f';
102
+ exports.UNIVERSAL_ACTION_POLICY_ADDRESS = UNIVERSAL_ACTION_POLICY_ADDRESS;
86
103
  const USAGE_LIMIT_POLICY_ADDRESS = '0x1f34ef8311345a3a4a4566af321b313052f51493';
104
+ exports.USAGE_LIMIT_POLICY_ADDRESS = USAGE_LIMIT_POLICY_ADDRESS;
87
105
  const VALUE_LIMIT_POLICY_ADDRESS = '0x730da93267e7e513e932301b47f2ac7d062abc83';
88
- const INTENT_EXECUTION_POLICY_ADDRESS = '0xa09b47de6e510cbdc18b97e9239bedcb44fb4901';
106
+ exports.VALUE_LIMIT_POLICY_ADDRESS = VALUE_LIMIT_POLICY_ADDRESS;
107
+ const INTENT_EXECUTION_POLICY_ADDRESS = '0xe9eA54d063975cDee9e06b7636d5563d95a7A23C';
108
+ exports.INTENT_EXECUTION_POLICY_ADDRESS = INTENT_EXECUTION_POLICY_ADDRESS;
109
+ const INTENT_EXECUTION_POLICY_ADDRESS_DEV = '0xa09b47de6e510cbdc18b97e9239bedcb44fb4901';
89
110
  const ACTION_CONDITION_EQUAL = 0;
90
111
  const ACTION_CONDITION_GREATER_THAN = 1;
91
112
  const ACTION_CONDITION_LESS_THAN = 2;
@@ -227,7 +248,7 @@ function packSignature(signers, validatorSignature) {
227
248
  const SIGNATURE_IS_VALID_SIG_1271 = '0x00';
228
249
  const policyDataOffset = BigInt(64 + (0, viem_1.size)(validatorSignature));
229
250
  const mode = SIGNATURE_IS_VALID_SIG_1271;
230
- const policySpecificData = '0x';
251
+ const policySpecificData = signers.claimPolicyData ?? '0x';
231
252
  const signature = (0, viem_1.encodePacked)(['bytes1', 'bytes32', 'uint256', 'bytes', 'bytes'], [
232
253
  mode,
233
254
  permissionId,
@@ -241,7 +262,7 @@ function packSignature(signers, validatorSignature) {
241
262
  async function getSessionDetails(account, sessions, provider, useDevContracts) {
242
263
  const lockTag = '0x000000000000000000000000';
243
264
  const sessionNonces = await Promise.all(sessions.map((session) => getSessionNonce(account, session, lockTag, provider, useDevContracts)));
244
- const sessionDatas = sessions.map((session) => getSessionData(session));
265
+ const sessionDatas = sessions.map((session) => getSessionData(session, useDevContracts));
245
266
  const signedSessions = sessionDatas.map((session, index) => getSignedSession(account, lockTag, session, sessionNonces[index], useDevContracts));
246
267
  const chains = sessions.map((session) => session.chain);
247
268
  const hashesAndChainIds = signedSessions.map((session, index) => ({
@@ -370,7 +391,7 @@ function getSignedSession(account, lockTag, session, nonce, useDevContracts) {
370
391
  };
371
392
  }
372
393
  async function getEnableSessionCall(account, session, enableSessionSignature, hashesAndChainIds, sessionToEnableIndex, useDevContracts) {
373
- const sessionData = getSessionData(session);
394
+ const sessionData = getSessionData(session, useDevContracts);
374
395
  const permissionId = getPermissionId(session);
375
396
  return {
376
397
  to: getSmartSessionEmissaryAddress(useDevContracts),
@@ -399,7 +420,7 @@ async function getEnableSessionCall(account, session, enableSessionSignature, ha
399
420
  }),
400
421
  };
401
422
  }
402
- function getSessionData(session) {
423
+ function getSessionData(session, useDevContracts) {
403
424
  const validator = (0, core_1.getValidator)(session.owners);
404
425
  const allowedContent = [
405
426
  {
@@ -426,6 +447,7 @@ function getSessionData(session) {
426
447
  },
427
448
  ],
428
449
  };
450
+ const userHasFallbackAction = session.actions?.some((action) => !('target' in action) && !('selector' in action));
429
451
  const injectedActions = [
430
452
  // Native token wrapping
431
453
  {
@@ -438,15 +460,22 @@ function getSessionData(session) {
438
460
  stateMutability: 'payable',
439
461
  }),
440
462
  },
463
+ // Only inject the intent-execution fallback if the user hasn't defined their own
464
+ // fallback action — otherwise both map to the same actionId and their policies merge,
465
+ // causing IntentExecutionPolicy to be required for all fallback calls
466
+ ...(!userHasFallbackAction
467
+ ? [{ policies: [{ type: 'intent-execution' }] }]
468
+ : []),
469
+ // Dummy action: allows the filler to call verifyExecution in ENABLE mode using
470
+ // an injected dummy preclaimop so any session can be enabled on-chain without
471
+ // a separate UserOp, regardless of whether it has claim or action policies.
441
472
  {
442
- policies: [
443
- {
444
- type: 'intent-execution',
445
- },
446
- ],
473
+ target: DUMMY_PRECLAIMOP_TARGET,
474
+ selector: DUMMY_PRECLAIMOP_SELECTOR,
475
+ policies: [{ type: 'sudo' }],
447
476
  },
448
477
  ];
449
- const actions = session.actions
478
+ const actions = session.actions?.length
450
479
  ? [...session.actions, ...injectedActions].map((action) => ({
451
480
  actionTargetSelector: 'selector' in action
452
481
  ? action.selector
@@ -454,7 +483,7 @@ function getSessionData(session) {
454
483
  actionTarget: 'target' in action
455
484
  ? action.target
456
485
  : SMART_SESSIONS_FALLBACK_TARGET_FLAG,
457
- actionPolicies: action.policies?.map((policy) => getPolicyData(policy)) ?? [
486
+ actionPolicies: action.policies?.map((policy) => getPolicyData(policy, useDevContracts)) ?? [
458
487
  {
459
488
  policy: SUDO_POLICY_ADDRESS,
460
489
  initData: '0x',
@@ -468,7 +497,11 @@ function getSessionData(session) {
468
497
  sessionValidatorInitData: validator.initData,
469
498
  erc7739Policies: erc7739Data,
470
499
  actions,
471
- claimPolicies: [],
500
+ // Note: Permit2ClaimPolicy has no dev deployment — same address in all environments
501
+ claimPolicies: session.claimPolicies?.map((p) => ({
502
+ policy: permit2_1.PERMIT2_CLAIM_POLICY_ADDRESS,
503
+ initData: (0, permit2_1.encodePermit2ClaimPolicyInitData)(p),
504
+ })) ?? [],
472
505
  };
473
506
  }
474
507
  function getPermissionId(session) {
@@ -492,7 +525,7 @@ function getPermissionId(session) {
492
525
  sessionData.salt,
493
526
  ]));
494
527
  }
495
- function getPolicyData(policy) {
528
+ function getPolicyData(policy, useDevContracts) {
496
529
  switch (policy.type) {
497
530
  case 'sudo':
498
531
  return {
@@ -501,7 +534,9 @@ function getPolicyData(policy) {
501
534
  };
502
535
  case 'intent-execution':
503
536
  return {
504
- policy: INTENT_EXECUTION_POLICY_ADDRESS,
537
+ policy: useDevContracts
538
+ ? INTENT_EXECUTION_POLICY_ADDRESS_DEV
539
+ : INTENT_EXECUTION_POLICY_ADDRESS,
505
540
  initData: '0x',
506
541
  };
507
542
  case 'universal-action': {
@@ -5,29 +5,275 @@ const chains_1 = require("viem/chains");
5
5
  const vitest_1 = require("vitest");
6
6
  const consts_1 = require("../../../test/consts");
7
7
  const smart_sessions_1 = require("./smart-sessions");
8
- // Minimal session with a single ecdsa owner, no custom actions
8
+ // ---------------------------------------------------------------------------
9
+ // Shared fixtures
10
+ // ---------------------------------------------------------------------------
9
11
  const baseSession = {
10
12
  chain: chains_1.base,
11
- owners: {
12
- type: 'ecdsa',
13
- accounts: [consts_1.accountA],
14
- },
13
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
15
14
  };
16
- // Session with an explicit action + sudo policy
17
15
  const sessionWithAction = {
18
16
  chain: chains_1.base,
19
- owners: {
20
- type: 'ecdsa',
21
- accounts: [consts_1.accountA],
22
- },
17
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
23
18
  actions: [
24
19
  {
25
20
  target: '0x1111111111111111111111111111111111111111',
26
- selector: '0xa9059cbb', // transfer(address,uint256)
21
+ selector: '0xa9059cbb',
27
22
  policies: [{ type: 'sudo' }],
28
23
  },
29
24
  ],
30
25
  };
26
+ const dummySig = `0x${'00'.repeat(65)}`;
27
+ // ---------------------------------------------------------------------------
28
+ // A. Policy encoding
29
+ // ---------------------------------------------------------------------------
30
+ (0, vitest_1.describe)('getPolicyData', () => {
31
+ (0, vitest_1.test)('sudo → SUDO_POLICY_ADDRESS, empty initData', () => {
32
+ const result = (0, smart_sessions_1.getPolicyData)({ type: 'sudo' });
33
+ (0, vitest_1.expect)(result.policy).toBe(smart_sessions_1.SUDO_POLICY_ADDRESS);
34
+ (0, vitest_1.expect)(result.initData).toBe('0x');
35
+ });
36
+ (0, vitest_1.test)('intent-execution → INTENT_EXECUTION_POLICY_ADDRESS, empty initData', () => {
37
+ const result = (0, smart_sessions_1.getPolicyData)({ type: 'intent-execution' });
38
+ (0, vitest_1.expect)(result.policy).toBe(smart_sessions_1.INTENT_EXECUTION_POLICY_ADDRESS);
39
+ (0, vitest_1.expect)(result.initData).toBe('0x');
40
+ });
41
+ (0, vitest_1.test)('spending-limits encodes token addresses and amounts', () => {
42
+ const token = '0xaabbccdd00000000000000000000000000000001';
43
+ const result = (0, smart_sessions_1.getPolicyData)({
44
+ type: 'spending-limits',
45
+ limits: [{ token, amount: 1000n }],
46
+ });
47
+ (0, vitest_1.expect)(result.policy).toBe(smart_sessions_1.SPENDING_LIMITS_POLICY_ADDRESS);
48
+ const expected = (0, viem_1.encodeAbiParameters)([{ type: 'address[]' }, { type: 'uint256[]' }], [[token], [1000n]]);
49
+ (0, vitest_1.expect)(result.initData).toBe(expected);
50
+ });
51
+ (0, vitest_1.test)('time-frame encodes validUntil/validAfter in seconds (ms → s)', () => {
52
+ const validUntil = 1_800_000_000_000;
53
+ const validAfter = 1_700_000_000_000;
54
+ const result = (0, smart_sessions_1.getPolicyData)({ type: 'time-frame', validUntil, validAfter });
55
+ (0, vitest_1.expect)(result.policy).toBe(smart_sessions_1.TIME_FRAME_POLICY_ADDRESS);
56
+ const expected = (0, viem_1.encodePacked)(['uint48', 'uint48'], [Math.floor(validUntil / 1000), Math.floor(validAfter / 1000)]);
57
+ (0, vitest_1.expect)(result.initData).toBe(expected);
58
+ });
59
+ (0, vitest_1.test)('usage-limit encodes limit as uint128', () => {
60
+ const result = (0, smart_sessions_1.getPolicyData)({ type: 'usage-limit', limit: 5n });
61
+ (0, vitest_1.expect)(result.policy).toBe(smart_sessions_1.USAGE_LIMIT_POLICY_ADDRESS);
62
+ (0, vitest_1.expect)(result.initData).toBe((0, viem_1.encodePacked)(['uint128'], [5n]));
63
+ });
64
+ (0, vitest_1.test)('value-limit encodes limit as uint256', () => {
65
+ const limit = (0, viem_1.parseEther)('1');
66
+ const result = (0, smart_sessions_1.getPolicyData)({ type: 'value-limit', limit });
67
+ (0, vitest_1.expect)(result.policy).toBe(smart_sessions_1.VALUE_LIMIT_POLICY_ADDRESS);
68
+ (0, vitest_1.expect)(result.initData).toBe((0, viem_1.encodeAbiParameters)([{ type: 'uint256' }], [limit]));
69
+ });
70
+ (0, vitest_1.test)('universal-action → UNIVERSAL_ACTION_POLICY_ADDRESS, non-empty initData', () => {
71
+ const result = (0, smart_sessions_1.getPolicyData)({
72
+ type: 'universal-action',
73
+ valueLimitPerUse: 0n,
74
+ rules: [
75
+ {
76
+ condition: 'equal',
77
+ calldataOffset: 4n,
78
+ referenceValue: 100n,
79
+ },
80
+ ],
81
+ });
82
+ (0, vitest_1.expect)(result.policy).toBe(smart_sessions_1.UNIVERSAL_ACTION_POLICY_ADDRESS);
83
+ (0, vitest_1.expect)(result.initData.length).toBeGreaterThan(2);
84
+ });
85
+ });
86
+ // ---------------------------------------------------------------------------
87
+ // B. getSessionData
88
+ // ---------------------------------------------------------------------------
89
+ (0, vitest_1.describe)('getSessionData', () => {
90
+ (0, vitest_1.test)('no actions → single sudoAction fallback', () => {
91
+ const data = (0, smart_sessions_1.getSessionData)(baseSession);
92
+ (0, vitest_1.expect)(data.actions).toHaveLength(1);
93
+ (0, vitest_1.expect)(data.actions[0].actionTarget).toBe(smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_FLAG);
94
+ (0, vitest_1.expect)(data.actions[0].actionTargetSelector).toBe(smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG);
95
+ });
96
+ (0, vitest_1.test)('explicit actions → user action + 3 injected (WETH deposit + intent-execution fallback + dummy preclaimop)', () => {
97
+ const data = (0, smart_sessions_1.getSessionData)(sessionWithAction);
98
+ (0, vitest_1.expect)(data.actions).toHaveLength(4);
99
+ (0, vitest_1.expect)(data.actions[0].actionTarget).toBe('0x1111111111111111111111111111111111111111');
100
+ // injected WETH deposit — target is the wrapped token (non-zero address)
101
+ (0, vitest_1.expect)(data.actions[1].actionTarget).not.toBe('0x0000000000000000000000000000000000000000');
102
+ // injected intent-execution fallback
103
+ (0, vitest_1.expect)(data.actions[2].actionTarget).toBe(smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_FLAG);
104
+ // injected dummy preclaimop action
105
+ (0, vitest_1.expect)(data.actions[3].actionTarget).toBe(smart_sessions_1.DUMMY_PRECLAIMOP_TARGET);
106
+ (0, vitest_1.expect)(data.actions[3].actionTargetSelector).toBe(smart_sessions_1.DUMMY_PRECLAIMOP_SELECTOR);
107
+ });
108
+ (0, vitest_1.test)('dummy preclaimop action uses sudo policy', () => {
109
+ const data = (0, smart_sessions_1.getSessionData)(sessionWithAction);
110
+ const dummyAction = data.actions.find((a) => a.actionTargetSelector === smart_sessions_1.DUMMY_PRECLAIMOP_SELECTOR);
111
+ (0, vitest_1.expect)(dummyAction).toBeDefined();
112
+ (0, vitest_1.expect)(dummyAction.actionPolicies).toHaveLength(1);
113
+ (0, vitest_1.expect)(dummyAction.actionPolicies[0].policy).toBe(smart_sessions_1.SUDO_POLICY_ADDRESS);
114
+ (0, vitest_1.expect)(dummyAction.actionPolicies[0].initData).toBe('0x');
115
+ });
116
+ (0, vitest_1.test)('no explicit actions → sudoAction fallback only (dummy injected via injectedActions path is not used)', () => {
117
+ // Sessions without explicit actions use the [sudoAction] fallback directly,
118
+ // which covers all (target, selector) pairs — no dummy action needed.
119
+ const data = (0, smart_sessions_1.getSessionData)(baseSession);
120
+ (0, vitest_1.expect)(data.actions).toHaveLength(1);
121
+ (0, vitest_1.expect)(data.actions[0].actionTarget).toBe(smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_FLAG);
122
+ });
123
+ (0, vitest_1.test)('empty actions array → same sudoAction fallback as no actions', () => {
124
+ // actions: [] is truthy but has no elements — must be treated the same as
125
+ // actions: undefined so injectedActions are not appended.
126
+ const sessionWithEmptyActions = { ...baseSession, actions: [] };
127
+ const data = (0, smart_sessions_1.getSessionData)(sessionWithEmptyActions);
128
+ (0, vitest_1.expect)(data.actions).toHaveLength(1);
129
+ (0, vitest_1.expect)(data.actions[0].actionTarget).toBe(smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_FLAG);
130
+ });
131
+ (0, vitest_1.test)('multiple policies on one action', () => {
132
+ const session = {
133
+ chain: chains_1.base,
134
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
135
+ actions: [
136
+ {
137
+ target: '0x2222222222222222222222222222222222222222',
138
+ selector: '0x12345678',
139
+ policies: [{ type: 'sudo' }, { type: 'usage-limit', limit: 3n }],
140
+ },
141
+ ],
142
+ };
143
+ const data = (0, smart_sessions_1.getSessionData)(session);
144
+ (0, vitest_1.expect)(data.actions[0].actionPolicies).toHaveLength(2);
145
+ (0, vitest_1.expect)(data.actions[0].actionPolicies[0].policy).toBe(smart_sessions_1.SUDO_POLICY_ADDRESS);
146
+ (0, vitest_1.expect)(data.actions[0].actionPolicies[1].policy).toBe(smart_sessions_1.USAGE_LIMIT_POLICY_ADDRESS);
147
+ });
148
+ (0, vitest_1.test)('salt is always zeroHash', () => {
149
+ (0, vitest_1.expect)((0, smart_sessions_1.getSessionData)(baseSession).salt).toBe(viem_1.zeroHash);
150
+ (0, vitest_1.expect)((0, smart_sessions_1.getSessionData)(sessionWithAction).salt).toBe(viem_1.zeroHash);
151
+ });
152
+ (0, vitest_1.test)('erc7739Policies has sudo erc1271 policy', () => {
153
+ const data = (0, smart_sessions_1.getSessionData)(baseSession);
154
+ (0, vitest_1.expect)(data.erc7739Policies.erc1271Policies[0].policy).toBe(smart_sessions_1.SUDO_POLICY_ADDRESS);
155
+ });
156
+ });
157
+ // ---------------------------------------------------------------------------
158
+ // C. getPermissionId
159
+ // ---------------------------------------------------------------------------
160
+ (0, vitest_1.describe)('getPermissionId', () => {
161
+ (0, vitest_1.test)('deterministic — same session returns same id', () => {
162
+ (0, vitest_1.expect)((0, smart_sessions_1.getPermissionId)(baseSession)).toBe((0, smart_sessions_1.getPermissionId)(baseSession));
163
+ });
164
+ (0, vitest_1.test)('different owners → different permissionId', () => {
165
+ const sessionB = {
166
+ chain: chains_1.base,
167
+ owners: { type: 'ecdsa', accounts: [consts_1.accountB] },
168
+ };
169
+ (0, vitest_1.expect)((0, smart_sessions_1.getPermissionId)(baseSession)).not.toBe((0, smart_sessions_1.getPermissionId)(sessionB));
170
+ });
171
+ (0, vitest_1.test)('actions do not affect permissionId (only validator identity does)', () => {
172
+ // permissionId is derived from sessionValidator + sessionValidatorInitData + salt,
173
+ // NOT from actions — so same owner with different actions yields the same id
174
+ (0, vitest_1.expect)((0, smart_sessions_1.getPermissionId)(baseSession)).toBe((0, smart_sessions_1.getPermissionId)(sessionWithAction));
175
+ });
176
+ (0, vitest_1.test)('returns 32-byte hex string', () => {
177
+ const id = (0, smart_sessions_1.getPermissionId)(baseSession);
178
+ (0, vitest_1.expect)(id).toMatch(/^0x[0-9a-f]{64}$/);
179
+ });
180
+ });
181
+ // ---------------------------------------------------------------------------
182
+ // D. packSignature
183
+ // ---------------------------------------------------------------------------
184
+ (0, vitest_1.describe)('packSignature', () => {
185
+ (0, vitest_1.test)('verifyExecutions: false → MODE_USE (0x00) prefix', () => {
186
+ const signers = {
187
+ type: 'experimental_session',
188
+ session: baseSession,
189
+ verifyExecutions: false,
190
+ };
191
+ const result = (0, smart_sessions_1.packSignature)(signers, dummySig);
192
+ (0, vitest_1.expect)((0, viem_1.slice)(result, 0, 1)).toBe('0x00');
193
+ });
194
+ (0, vitest_1.test)('verifyExecutions: false → bytes 1-32 are the permissionId', () => {
195
+ const signers = {
196
+ type: 'experimental_session',
197
+ session: baseSession,
198
+ verifyExecutions: false,
199
+ };
200
+ const result = (0, smart_sessions_1.packSignature)(signers, dummySig);
201
+ const permissionId = (0, smart_sessions_1.getPermissionId)(baseSession);
202
+ (0, vitest_1.expect)((0, viem_1.slice)(result, 1, 33)).toBe(permissionId);
203
+ });
204
+ (0, vitest_1.test)('verifyExecutions: false → total length > 66 bytes', () => {
205
+ const signers = {
206
+ type: 'experimental_session',
207
+ session: baseSession,
208
+ verifyExecutions: false,
209
+ };
210
+ const result = (0, smart_sessions_1.packSignature)(signers, dummySig);
211
+ const byteLen = (result.length - 2) / 2;
212
+ (0, vitest_1.expect)(byteLen).toBeGreaterThan(66);
213
+ });
214
+ (0, vitest_1.test)('verifyExecutions: true + enableData → MODE_ENABLE (0x01) prefix', () => {
215
+ const signers = {
216
+ type: 'experimental_session',
217
+ session: baseSession,
218
+ verifyExecutions: true,
219
+ enableData: {
220
+ userSignature: dummySig,
221
+ hashesAndChainIds: [
222
+ { chainId: BigInt(chains_1.base.id), sessionDigest: viem_1.zeroHash },
223
+ ],
224
+ sessionToEnableIndex: 0,
225
+ },
226
+ };
227
+ const result = (0, smart_sessions_1.packSignature)(signers, dummySig);
228
+ (0, vitest_1.expect)((0, viem_1.slice)(result, 0, 1)).toBe('0x01');
229
+ });
230
+ (0, vitest_1.test)('verifyExecutions: true + enableData → longer output (has compressed payload)', () => {
231
+ const signers = {
232
+ type: 'experimental_session',
233
+ session: baseSession,
234
+ verifyExecutions: true,
235
+ enableData: {
236
+ userSignature: dummySig,
237
+ hashesAndChainIds: [
238
+ { chainId: BigInt(chains_1.base.id), sessionDigest: viem_1.zeroHash },
239
+ ],
240
+ sessionToEnableIndex: 0,
241
+ },
242
+ };
243
+ const result = (0, smart_sessions_1.packSignature)(signers, dummySig);
244
+ const byteLen = (result.length - 2) / 2;
245
+ (0, vitest_1.expect)(byteLen).toBeGreaterThan(33);
246
+ });
247
+ (0, vitest_1.test)('verifyExecutions: true, no enableData → MODE_USE (0x00) prefix', () => {
248
+ const signers = {
249
+ type: 'experimental_session',
250
+ session: baseSession,
251
+ verifyExecutions: true,
252
+ };
253
+ const result = (0, smart_sessions_1.packSignature)(signers, dummySig);
254
+ (0, vitest_1.expect)((0, viem_1.slice)(result, 0, 1)).toBe('0x00');
255
+ });
256
+ (0, vitest_1.test)('different owners produce different packed bytes', () => {
257
+ const sessionB = {
258
+ chain: chains_1.base,
259
+ owners: { type: 'ecdsa', accounts: [consts_1.accountB] },
260
+ };
261
+ const signersA = {
262
+ type: 'experimental_session',
263
+ session: baseSession,
264
+ verifyExecutions: false,
265
+ };
266
+ const signersB = {
267
+ type: 'experimental_session',
268
+ session: sessionB,
269
+ verifyExecutions: false,
270
+ };
271
+ (0, vitest_1.expect)((0, smart_sessions_1.packSignature)(signersA, dummySig)).not.toBe((0, smart_sessions_1.packSignature)(signersB, dummySig));
272
+ });
273
+ });
274
+ // ---------------------------------------------------------------------------
275
+ // E. buildMockSignature (existing tests preserved + extras)
276
+ // ---------------------------------------------------------------------------
31
277
  (0, vitest_1.describe)('buildMockSignature', () => {
32
278
  (0, vitest_1.test)('first 20 bytes are the emissary address', () => {
33
279
  const sig = (0, smart_sessions_1.buildMockSignature)(baseSession);
@@ -36,26 +282,30 @@ const sessionWithAction = {
36
282
  });
37
283
  (0, vitest_1.test)('byte 20 is SMART_SESSION_MODE_ENABLE (0x01)', () => {
38
284
  const sig = (0, smart_sessions_1.buildMockSignature)(baseSession);
39
- // byte 21 in the sig = index 20 = the mode byte from packSignature
40
285
  const modeByte = (0, viem_1.slice)(sig, 20, 21);
41
286
  (0, vitest_1.expect)(modeByte).toBe('0x01');
42
287
  });
43
288
  (0, vitest_1.test)('total length is larger than just emissary + mode byte (has compressed payload)', () => {
44
289
  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
290
+ const byteLen = (sig.length - 2) / 2;
47
291
  (0, vitest_1.expect)(byteLen).toBeGreaterThan(21);
48
292
  });
49
293
  (0, vitest_1.test)('sessions with different actions produce different sigData', () => {
50
294
  const sigBase = (0, smart_sessions_1.buildMockSignature)(baseSession);
51
295
  const sigWithAction = (0, smart_sessions_1.buildMockSignature)(sessionWithAction);
52
- // The session data (policies, targets) should differ → different compressed payloads
53
296
  (0, vitest_1.expect)(sigBase).not.toBe(sigWithAction);
54
297
  });
55
298
  (0, vitest_1.test)('useDevContracts=true produces different emissary prefix', () => {
56
299
  const sigProd = (0, smart_sessions_1.buildMockSignature)(baseSession, false);
57
300
  const sigDev = (0, smart_sessions_1.buildMockSignature)(baseSession, true);
58
- // First 20 bytes differ because prod vs dev emissary addresses differ
59
301
  (0, vitest_1.expect)((0, viem_1.slice)(sigProd, 0, 20)).not.toBe((0, viem_1.slice)(sigDev, 0, 20));
60
302
  });
303
+ (0, vitest_1.test)('chainCount=2 produces valid output (LibZip may compress smaller than chainCount=1)', () => {
304
+ const sig = (0, smart_sessions_1.buildMockSignature)(baseSession, false, 2);
305
+ // Must be at least emissaryAddress (20) + mode byte (1) + some payload
306
+ const byteLen = (sig.length - 2) / 2;
307
+ (0, vitest_1.expect)(byteLen).toBeGreaterThan(21);
308
+ // Must start with the emissary address
309
+ (0, vitest_1.expect)((0, viem_1.isAddressEqual)((0, viem_1.slice)(sig, 0, 20), smart_sessions_1.SMART_SESSION_EMISSARY_ADDRESS)).toBe(true);
310
+ });
61
311
  });
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AA2BnC,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EAET,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAchB,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAC,CAAwB;gBAGtC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO5B,YAAY,CAChB,WAAW,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,CAAC,EAAE;YACP,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;SAC7B,CAAA;KACF,GACA,OAAO,CAAC,SAAS,CAAC;IA+Cf,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IASxD,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwDnE,YAAY,CAChB,yBAAyB,EAAE,cAAc,EACzC,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC;IAelB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IASlE,OAAO,CAAC,UAAU;YAWJ,KAAK;IA4BnB,OAAO,CAAC,UAAU;IA6GlB,OAAO,CAAC,iBAAiB;CAmG1B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AA2BnC,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EAET,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAchB,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAC,CAAwB;gBAGtC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO5B,YAAY,CAChB,WAAW,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,CAAC,EAAE;YACP,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;SAC7B,CAAA;KACF,GACA,OAAO,CAAC,SAAS,CAAC;IA+Cf,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IASxD,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwDnE,YAAY,CAChB,yBAAyB,EAAE,cAAc,EACzC,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC;IAelB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IASlE,OAAO,CAAC,UAAU;YAYJ,KAAK;IA4BnB,OAAO,CAAC,UAAU;IA6GlB,OAAO,CAAC,iBAAiB;CAmG1B"}
@@ -127,6 +127,7 @@ class Orchestrator {
127
127
  const headers = {
128
128
  'Content-Type': 'application/json',
129
129
  'x-sdk-version': consts_1.SDK_VERSION,
130
+ 'x-api-version': consts_1.API_VERSION,
130
131
  };
131
132
  if (this.apiKey) {
132
133
  headers['x-api-key'] = this.apiKey;
@@ -1,5 +1,6 @@
1
1
  declare const PROD_ORCHESTRATOR_URL = "https://v1.orchestrator.rhinestone.dev";
2
2
  declare const RHINESTONE_SPOKE_POOL_ADDRESS = "0x000000000060f6e853447881951574cdd0663530";
3
- declare const SDK_VERSION = "1.4.0";
4
- export { PROD_ORCHESTRATOR_URL, RHINESTONE_SPOKE_POOL_ADDRESS, SDK_VERSION };
3
+ declare const SDK_VERSION = "1.4.2";
4
+ declare const API_VERSION = "2026-01.alps";
5
+ export { PROD_ORCHESTRATOR_URL, RHINESTONE_SPOKE_POOL_ADDRESS, SDK_VERSION, API_VERSION, };
5
6
  //# sourceMappingURL=consts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../orchestrator/consts.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,qBAAqB,2CAA2C,CAAA;AACtE,QAAA,MAAM,6BAA6B,+CACW,CAAA;AAE9C,QAAA,MAAM,WAAW,UAAU,CAAA;AAE3B,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../orchestrator/consts.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,qBAAqB,2CAA2C,CAAA;AACtE,QAAA,MAAM,6BAA6B,+CACW,CAAA;AAE9C,QAAA,MAAM,WAAW,UAAU,CAAA;AAC3B,QAAA,MAAM,WAAW,iBAAiB,CAAA;AAElC,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,WAAW,EACX,WAAW,GACZ,CAAA"}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SDK_VERSION = exports.RHINESTONE_SPOKE_POOL_ADDRESS = exports.PROD_ORCHESTRATOR_URL = void 0;
3
+ exports.API_VERSION = exports.SDK_VERSION = exports.RHINESTONE_SPOKE_POOL_ADDRESS = exports.PROD_ORCHESTRATOR_URL = void 0;
4
4
  const PROD_ORCHESTRATOR_URL = 'https://v1.orchestrator.rhinestone.dev';
5
5
  exports.PROD_ORCHESTRATOR_URL = PROD_ORCHESTRATOR_URL;
6
6
  const RHINESTONE_SPOKE_POOL_ADDRESS = '0x000000000060f6e853447881951574cdd0663530';
7
7
  exports.RHINESTONE_SPOKE_POOL_ADDRESS = RHINESTONE_SPOKE_POOL_ADDRESS;
8
- const SDK_VERSION = '1.4.0';
8
+ const SDK_VERSION = '1.4.2';
9
9
  exports.SDK_VERSION = SDK_VERSION;
10
+ const API_VERSION = '2026-01.alps';
11
+ exports.API_VERSION = API_VERSION;
@@ -2,9 +2,9 @@ import { Orchestrator } from './client';
2
2
  import { RHINESTONE_SPOKE_POOL_ADDRESS } from './consts';
3
3
  import { AuthenticationRequiredError, BadRequestError, BodyParserError, ConflictError, ForbiddenError, InsufficientBalanceError, InsufficientLiquidityError, IntentNotFoundError, InternalServerError, InvalidApiKeyError, InvalidIntentSignatureError, isAuthError, isOrchestratorError, isRateLimited, isRetryable, isValidationError, NoPathFoundError, OnlyOneTargetTokenAmountCanBeUnsetError, OrchestratorError, RateLimitedError, ResourceNotFoundError, SchemaValidationError, ServiceUnavailableError, SimulationFailedError, TokenNotSupportedError, UnauthorizedError, UnprocessableEntityError, UnsupportedChainError, UnsupportedChainIdError, UnsupportedTokenError } from './error';
4
4
  import { getAllSupportedChainsAndTokens, getSupportedTokens, getTokenAddress, getTokenDecimals, getTokenSymbol, getWethAddress, isTokenAddressSupported } from './registry';
5
- import type { ApprovalRequired, AuxiliaryFunds, IntentInput, IntentOp, IntentOpStatus, IntentResult, IntentRoute, Portfolio, SettlementLayer, SignedIntentOp, SplitIntentsInput, SplitIntentsResult, SupportedChain, TokenConfig, TokenRequirements, WrapRequired } from './types';
5
+ import type { ApprovalRequired, AuxiliaryFunds, Execution, IntentInput, IntentOp, IntentOpStatus, IntentResult, IntentRoute, Portfolio, SettlementLayer, SignedIntentOp, SplitIntentsInput, SplitIntentsResult, SupportedChain, TokenConfig, TokenRequirements, WrapRequired } from './types';
6
6
  import { INTENT_STATUS_CLAIMED, INTENT_STATUS_COMPLETED, INTENT_STATUS_EXPIRED, INTENT_STATUS_FAILED, INTENT_STATUS_FILLED, INTENT_STATUS_PENDING, INTENT_STATUS_PRECONFIRMED } from './types';
7
7
  declare function getOrchestrator(apiKey?: string, orchestratorUrl?: string, headers?: Record<string, string>): Orchestrator;
8
- export type { AuxiliaryFunds, IntentInput, IntentOp, IntentOpStatus, IntentResult, IntentRoute, SettlementLayer, SignedIntentOp, SplitIntentsInput, SplitIntentsResult, SupportedChain, TokenConfig, Portfolio, TokenRequirements, WrapRequired, ApprovalRequired, };
8
+ export type { AuxiliaryFunds, Execution, IntentInput, IntentOp, IntentOpStatus, IntentResult, IntentRoute, SettlementLayer, SignedIntentOp, SplitIntentsInput, SplitIntentsResult, SupportedChain, TokenConfig, Portfolio, TokenRequirements, WrapRequired, ApprovalRequired, };
9
9
  export { INTENT_STATUS_PENDING, INTENT_STATUS_EXPIRED, INTENT_STATUS_COMPLETED, INTENT_STATUS_FILLED, INTENT_STATUS_FAILED, INTENT_STATUS_PRECONFIRMED, INTENT_STATUS_CLAIMED, RHINESTONE_SPOKE_POOL_ADDRESS, Orchestrator, AuthenticationRequiredError, BadRequestError, BodyParserError, ConflictError, ForbiddenError, InsufficientBalanceError, InsufficientLiquidityError, InvalidApiKeyError, InvalidIntentSignatureError, NoPathFoundError, OnlyOneTargetTokenAmountCanBeUnsetError, OrchestratorError, IntentNotFoundError, InternalServerError, ResourceNotFoundError, RateLimitedError, SchemaValidationError, ServiceUnavailableError, SimulationFailedError, UnprocessableEntityError, UnauthorizedError, TokenNotSupportedError, UnsupportedChainError, UnsupportedChainIdError, UnsupportedTokenError, getOrchestrator, getWethAddress, getTokenSymbol, getTokenAddress, getTokenDecimals, getSupportedTokens, getAllSupportedChainsAndTokens, isOrchestratorError, isRetryable, isAuthError, isValidationError, isRateLimited, isTokenAddressSupported, };
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAyB,6BAA6B,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,uCAAuC,EACvC,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EACT,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,YAAY,EACb,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,SAAS,CAAA;AAEhB,iBAAS,eAAe,CACtB,MAAM,CAAC,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,YAAY,CAMd;AAED,YAAY,EACV,cAAc,EACd,WAAW,EACX,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,CAAA;AACD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,YAAY,EACZ,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,2BAA2B,EAC3B,gBAAgB,EAChB,uCAAuC,EACvC,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,8BAA8B,EAC9B,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,uBAAuB,GACxB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAyB,6BAA6B,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,uCAAuC,EACvC,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,uBAAuB,EACxB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,WAAW,EACX,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EACT,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,YAAY,EACb,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,SAAS,CAAA;AAEhB,iBAAS,eAAe,CACtB,MAAM,CAAC,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,YAAY,CAMd;AAED,YAAY,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,CAAA;AACD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,YAAY,EACZ,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,2BAA2B,EAC3B,gBAAgB,EAChB,uCAAuC,EACvC,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,8BAA8B,EAC9B,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,uBAAuB,GACxB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../orchestrator/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,MAAM,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,iBAAS,oBAAoB,IAAI,MAAM,EAAE,CAExC;AAMD,iBAAS,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAY7C;AAED,iBAAS,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAQrD;AAED,iBAAS,cAAc,CACrB,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAWpB;AAED,iBAAS,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAY3E;AAED,iBAAS,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAY3E;AAED,iBAAS,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAM5C;AAED,iBAAS,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG3C;AAED,iBAAS,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS3E;AAED,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAO1D;AAED,iBAAS,2BAA2B,CAAC,UAAU,CAAC,EAAE,OAAO;;EAaxD;AAED,iBAAS,mBAAmB,CAC1B,KAAK,EAAE,WAAW,GAAG,OAAO,EAC5B,OAAO,EAAE,MAAM,GACd,OAAO,CAKT;AAED,iBAAS,8BAA8B,IAAI;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB,EAAE,CAMF;AAED,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,8BAA8B,GAC/B,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../orchestrator/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,MAAM,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,iBAAS,oBAAoB,IAAI,MAAM,EAAE,CAExC;AAMD,iBAAS,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAY7C;AAED,iBAAS,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAarD;AAED,iBAAS,cAAc,CACrB,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAWpB;AAED,iBAAS,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAY3E;AAED,iBAAS,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAY3E;AAED,iBAAS,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAM5C;AAED,iBAAS,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG3C;AAED,iBAAS,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS3E;AAED,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAO1D;AAED,iBAAS,2BAA2B,CAAC,UAAU,CAAC,EAAE,OAAO;;EAaxD;AAED,iBAAS,mBAAmB,CAC1B,KAAK,EAAE,WAAW,GAAG,OAAO,EAC5B,OAAO,EAAE,MAAM,GACd,OAAO,CAKT;AAED,iBAAS,8BAA8B,IAAI;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB,EAAE,CAMF;AAED,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,8BAA8B,GAC/B,CAAA"}
@@ -38,7 +38,11 @@ function getWrappedTokenAddress(chain) {
38
38
  if (!chainEntry) {
39
39
  throw new error_1.UnsupportedChainError(chain.id);
40
40
  }
41
- const token = chainEntry.wrappedNativeToken;
41
+ const token = chainEntry.wrappedNativeToken ??
42
+ chainEntry.tokens.find((t) => t.symbol === 'WETH');
43
+ if (!token) {
44
+ throw new error_1.UnsupportedTokenError('WETH', chain.id);
45
+ }
42
46
  return token.address;
43
47
  }
44
48
  function getTokenSymbol(tokenAddress, chainId) {
@@ -94,6 +94,7 @@ interface IntentInput {
94
94
  recipient?: Account;
95
95
  accountAccessList?: AccountAccessList;
96
96
  options: IntentOptions;
97
+ preClaimExecutions?: Record<number, Execution[]>;
97
98
  }
98
99
  interface ChainGasCost {
99
100
  chainId: number;