@charterlabs/rhinestone-sdk 0.2.7-dev.3 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +46 -8
  2. package/dist/src/accounts/error.d.ts +38 -3
  3. package/dist/src/accounts/error.d.ts.map +1 -1
  4. package/dist/src/accounts/error.js +55 -7
  5. package/dist/src/accounts/index.d.ts +31 -20
  6. package/dist/src/accounts/index.d.ts.map +1 -1
  7. package/dist/src/accounts/index.js +231 -25
  8. package/dist/src/accounts/index.test.js +2 -4
  9. package/dist/src/accounts/json-rpc/index.d.ts +5 -0
  10. package/dist/src/accounts/json-rpc/index.d.ts.map +1 -0
  11. package/dist/src/accounts/json-rpc/index.js +16 -0
  12. package/dist/src/accounts/json-rpc/providers.d.ts +4 -0
  13. package/dist/src/accounts/json-rpc/providers.d.ts.map +1 -0
  14. package/dist/src/accounts/json-rpc/providers.js +52 -0
  15. package/dist/src/accounts/kernel.d.ts +1 -1
  16. package/dist/src/accounts/kernel.d.ts.map +1 -1
  17. package/dist/src/accounts/kernel.js +29 -1
  18. package/dist/src/accounts/kernel.test.js +35 -8
  19. package/dist/src/accounts/nexus.d.ts +4 -3
  20. package/dist/src/accounts/nexus.d.ts.map +1 -1
  21. package/dist/src/accounts/nexus.js +82 -14
  22. package/dist/src/accounts/nexus.test.js +33 -6
  23. package/dist/src/accounts/passport.d.ts +12 -0
  24. package/dist/src/accounts/passport.d.ts.map +1 -0
  25. package/dist/src/accounts/passport.js +173 -0
  26. package/dist/src/accounts/safe.d.ts.map +1 -1
  27. package/dist/src/accounts/safe.js +85 -53
  28. package/dist/src/accounts/safe.test.js +33 -6
  29. package/dist/src/accounts/signing/common.d.ts +4 -4
  30. package/dist/src/accounts/signing/common.d.ts.map +1 -1
  31. package/dist/src/accounts/signing/common.js +21 -9
  32. package/dist/src/accounts/signing/message.d.ts +1 -1
  33. package/dist/src/accounts/signing/message.d.ts.map +1 -1
  34. package/dist/src/accounts/signing/message.js +6 -6
  35. package/dist/src/accounts/signing/passkeys.d.ts +8 -1
  36. package/dist/src/accounts/signing/passkeys.d.ts.map +1 -1
  37. package/dist/src/accounts/signing/passkeys.js +35 -0
  38. package/dist/src/accounts/signing/passkeys.test.js +15 -0
  39. package/dist/src/accounts/signing/typedData.d.ts.map +1 -1
  40. package/dist/src/accounts/signing/typedData.js +2 -2
  41. package/dist/src/accounts/startale.test.js +0 -4
  42. package/dist/src/accounts/utils.d.ts +4 -4
  43. package/dist/src/accounts/utils.d.ts.map +1 -1
  44. package/dist/src/accounts/utils.js +3 -40
  45. package/dist/src/accounts/walletClient.d.ts +7 -0
  46. package/dist/src/accounts/walletClient.d.ts.map +1 -0
  47. package/dist/src/accounts/walletClient.js +38 -0
  48. package/dist/src/actions/compact.d.ts +13 -0
  49. package/dist/src/actions/compact.d.ts.map +1 -0
  50. package/dist/src/actions/compact.js +210 -0
  51. package/dist/src/actions/ecdsa.d.ts +35 -0
  52. package/dist/src/actions/ecdsa.d.ts.map +1 -0
  53. package/dist/src/actions/ecdsa.js +114 -0
  54. package/dist/src/actions/ecdsa.test.d.ts +2 -0
  55. package/dist/src/actions/ecdsa.test.d.ts.map +1 -0
  56. package/dist/src/actions/ecdsa.test.js +99 -0
  57. package/dist/src/actions/index.d.ts +23 -166
  58. package/dist/src/actions/index.d.ts.map +1 -1
  59. package/dist/src/actions/index.js +25 -544
  60. package/dist/src/actions/mfa.d.ts +37 -0
  61. package/dist/src/actions/mfa.d.ts.map +1 -0
  62. package/dist/src/actions/mfa.js +133 -0
  63. package/dist/src/actions/passkeys.d.ts +37 -0
  64. package/dist/src/actions/passkeys.d.ts.map +1 -0
  65. package/dist/src/actions/passkeys.js +129 -0
  66. package/dist/src/actions/passkeys.test.d.ts +2 -0
  67. package/dist/src/actions/passkeys.test.d.ts.map +1 -0
  68. package/dist/src/actions/passkeys.test.js +54 -0
  69. package/dist/src/actions/recovery.d.ts +33 -0
  70. package/dist/src/actions/recovery.d.ts.map +1 -0
  71. package/dist/src/actions/recovery.js +193 -0
  72. package/dist/src/actions/recovery.test.d.ts +2 -0
  73. package/dist/src/actions/recovery.test.d.ts.map +1 -0
  74. package/dist/src/actions/recovery.test.js +168 -0
  75. package/dist/src/actions/smart-sessions.d.ts +23 -0
  76. package/dist/src/actions/smart-sessions.d.ts.map +1 -0
  77. package/dist/src/actions/{smart-session.js → smart-sessions.js} +13 -0
  78. package/dist/src/errors/index.d.ts +5 -0
  79. package/dist/src/errors/index.d.ts.map +1 -0
  80. package/dist/src/errors/index.js +50 -0
  81. package/dist/src/execution/compact.d.ts +25 -9
  82. package/dist/src/execution/compact.d.ts.map +1 -1
  83. package/dist/src/execution/compact.js +29 -103
  84. package/dist/src/execution/error.d.ts +6 -6
  85. package/dist/src/execution/error.d.ts.map +1 -1
  86. package/dist/src/execution/error.js +13 -13
  87. package/dist/src/execution/index.d.ts +34 -22
  88. package/dist/src/execution/index.d.ts.map +1 -1
  89. package/dist/src/execution/index.js +115 -46
  90. package/dist/src/execution/multiChainOps.d.ts +40 -0
  91. package/dist/src/execution/multiChainOps.d.ts.map +1 -0
  92. package/dist/src/execution/multiChainOps.js +39 -0
  93. package/dist/src/execution/permit2.d.ts +148 -0
  94. package/dist/src/execution/permit2.d.ts.map +1 -0
  95. package/dist/src/execution/permit2.js +291 -0
  96. package/dist/src/execution/smart-session.d.ts +3 -3
  97. package/dist/src/execution/smart-session.d.ts.map +1 -1
  98. package/dist/src/execution/smart-session.js +3 -3
  99. package/dist/src/execution/types.d.ts +36 -0
  100. package/dist/src/execution/types.d.ts.map +1 -0
  101. package/dist/src/execution/types.js +2 -0
  102. package/dist/src/execution/utils.d.ts +43 -28
  103. package/dist/src/execution/utils.d.ts.map +1 -1
  104. package/dist/src/execution/utils.js +269 -99
  105. package/dist/src/index.d.ts +38 -19
  106. package/dist/src/index.d.ts.map +1 -1
  107. package/dist/src/index.js +121 -69
  108. package/dist/src/modules/common.d.ts +10 -4
  109. package/dist/src/modules/common.d.ts.map +1 -1
  110. package/dist/src/modules/common.js +22 -1
  111. package/dist/src/modules/index.d.ts +3 -2
  112. package/dist/src/modules/index.d.ts.map +1 -1
  113. package/dist/src/modules/index.js +16 -13
  114. package/dist/src/modules/index.test.js +9 -12
  115. package/dist/src/modules/read.d.ts.map +1 -1
  116. package/dist/src/modules/read.js +5 -1
  117. package/dist/src/modules/validators/core.d.ts +5 -3
  118. package/dist/src/modules/validators/core.d.ts.map +1 -1
  119. package/dist/src/modules/validators/core.js +29 -10
  120. package/dist/src/modules/validators/core.test.js +4 -4
  121. package/dist/src/modules/validators/smart-sessions.d.ts +4 -4
  122. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
  123. package/dist/src/modules/validators/smart-sessions.js +10 -72
  124. package/dist/src/modules/validators/smart-sessions.test.js +4 -8
  125. package/dist/src/modules/validators/webauthn-contract.d.ts.map +1 -1
  126. package/dist/src/orchestrator/client.d.ts +4 -2
  127. package/dist/src/orchestrator/client.d.ts.map +1 -1
  128. package/dist/src/orchestrator/client.js +230 -162
  129. package/dist/src/orchestrator/consts.d.ts +1 -2
  130. package/dist/src/orchestrator/consts.d.ts.map +1 -1
  131. package/dist/src/orchestrator/consts.js +1 -3
  132. package/dist/src/orchestrator/error.d.ts +111 -1
  133. package/dist/src/orchestrator/error.d.ts.map +1 -1
  134. package/dist/src/orchestrator/error.js +128 -1
  135. package/dist/src/orchestrator/index.d.ts +4 -4
  136. package/dist/src/orchestrator/index.d.ts.map +1 -1
  137. package/dist/src/orchestrator/index.js +16 -1
  138. package/dist/src/orchestrator/registry.d.ts +3 -25
  139. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  140. package/dist/src/orchestrator/registry.js +82 -46
  141. package/dist/src/orchestrator/registry.test.js +7 -7
  142. package/dist/src/orchestrator/types.d.ts +53 -43
  143. package/dist/src/orchestrator/types.d.ts.map +1 -1
  144. package/dist/src/types.d.ts +74 -9
  145. package/dist/src/types.d.ts.map +1 -1
  146. package/dist/src/utils/index.d.ts +3 -0
  147. package/dist/src/utils/index.d.ts.map +1 -0
  148. package/dist/src/utils/index.js +5 -0
  149. package/package.json +73 -2
  150. package/dist/src/actions/index.test.d.ts +0 -2
  151. package/dist/src/actions/index.test.d.ts.map +0 -1
  152. package/dist/src/actions/index.test.js +0 -302
  153. package/dist/src/actions/smart-session.d.ts +0 -11
  154. package/dist/src/actions/smart-session.d.ts.map +0 -1
  155. package/dist/src/orchestrator/registry.json +0 -365
@@ -1,24 +1,36 @@
1
- import { type Address, type Chain } from 'viem';
2
- import type { IntentOpStatus } from '../orchestrator';
3
- import type { RhinestoneAccountConfig, Transaction } from '../types';
4
- import { ExecutionError, IntentFailedError, isExecutionError, OrderPathRequiredForIntentsError, SessionChainRequiredError, SourceChainsNotAvailableForUserOpFlowError, UserOperationRequiredForSmartSessionsError } from './error';
5
- import type { IntentData, TransactionResult } from './utils';
1
+ import { type Address, type Chain, type Hex } from 'viem';
2
+ import type { UserOperationReceipt } from 'viem/_types/account-abstraction';
3
+ import type { SettlementLayer } from '../orchestrator/types';
4
+ import type { CalldataInput, CallInput, RhinestoneAccountConfig, RhinestoneConfig, SignerSet, SourceAssetInput, TokenRequest, TokenSymbol, Transaction, UserOperationTransaction } from '../types';
5
+ import { ExecutionError, IntentFailedError, IntentStatusTimeoutError, isExecutionError, OrderPathRequiredForIntentsError, SessionChainRequiredError, SignerNotSupportedError } from './error';
6
+ import type { TransactionResult, UserOperationResult } from './utils';
7
+ interface TransactionStatus {
8
+ fill: {
9
+ hash: Hex | undefined;
10
+ chainId: number;
11
+ };
12
+ claims: {
13
+ hash: Hex | undefined;
14
+ chainId: number;
15
+ }[];
16
+ }
6
17
  declare function sendTransaction(config: RhinestoneAccountConfig, transaction: Transaction): Promise<TransactionResult>;
7
- declare function waitForExecution(config: RhinestoneAccountConfig, result: TransactionResult, acceptsPreconfirmations: boolean): Promise<IntentOpStatus | {
8
- actualGasCost: bigint;
9
- actualGasUsed: bigint;
10
- entryPoint: Address;
11
- logs: import("viem").Log<bigint, number, false>[];
12
- nonce: bigint;
13
- paymaster?: `0x${string}` | undefined;
14
- reason?: string | undefined | undefined;
15
- receipt: import("viem").TransactionReceipt<bigint, number, "success" | "reverted">;
16
- sender: Address;
17
- success: boolean;
18
- userOpHash: import("viem").Hash;
19
- }>;
20
- declare function getMaxSpendableAmount(config: RhinestoneAccountConfig, chain: Chain, tokenAddress: Address, gasUnits: bigint): Promise<bigint>;
21
- declare function getPortfolio(config: RhinestoneAccountConfig, onTestnets: boolean): Promise<import("../orchestrator").Portfolio>;
22
- export { sendTransaction, waitForExecution, getMaxSpendableAmount, getPortfolio, isExecutionError, IntentFailedError, ExecutionError, SourceChainsNotAvailableForUserOpFlowError, UserOperationRequiredForSmartSessionsError, OrderPathRequiredForIntentsError, SessionChainRequiredError, };
23
- export type { IntentData, TransactionResult };
18
+ declare function sendUserOperation(config: RhinestoneAccountConfig, transaction: UserOperationTransaction): Promise<UserOperationResult>;
19
+ declare function sendTransactionInternal(config: RhinestoneConfig, sourceChains: Chain[], targetChain: Chain, callInputs: CallInput[], options: {
20
+ gasLimit?: bigint;
21
+ initialTokenRequests?: TokenRequest[];
22
+ signers?: SignerSet;
23
+ sponsored?: boolean;
24
+ settlementLayers?: SettlementLayer[];
25
+ sourceAssets?: SourceAssetInput;
26
+ lockFunds?: boolean;
27
+ feeAsset?: Address | TokenSymbol;
28
+ dryRun?: boolean;
29
+ }): Promise<TransactionResult>;
30
+ declare function sendUserOperationInternal(config: RhinestoneConfig, chain: Chain, callInputs: CalldataInput[], signers?: SignerSet): Promise<UserOperationResult>;
31
+ declare function waitForExecution(config: RhinestoneConfig, result: TransactionResult | UserOperationResult, acceptsPreconfirmations: boolean): Promise<TransactionStatus | UserOperationReceipt>;
32
+ declare function getMaxSpendableAmount(config: RhinestoneConfig, chain: Chain, tokenAddress: Address, gasUnits: bigint, sponsored?: boolean): Promise<bigint>;
33
+ declare function getPortfolio(config: RhinestoneConfig, onTestnets: boolean): Promise<import("../orchestrator").Portfolio>;
34
+ export { sendTransaction, sendTransactionInternal, sendUserOperation, sendUserOperationInternal, waitForExecution, getMaxSpendableAmount, getPortfolio, isExecutionError, ExecutionError, IntentFailedError, IntentStatusTimeoutError, OrderPathRequiredForIntentsError, SessionChainRequiredError, SignerNotSupportedError, };
35
+ export type { TransactionStatus, TransactionResult, UserOperationResult };
24
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../execution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAmC,MAAM,MAAM,CAAA;AAKhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAQrD,OAAO,KAAK,EAEV,uBAAuB,EAGvB,WAAW,EACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,gCAAgC,EAChC,yBAAyB,EACzB,0CAA0C,EAC1C,0CAA0C,EAC3C,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAa5D,iBAAe,eAAe,CAC5B,MAAM,EAAE,uBAAuB,EAC/B,WAAW,EAAE,WAAW,8BA2BzB;AAyID,iBAAe,gBAAgB,CAC7B,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,iBAAiB,EACzB,uBAAuB,EAAE,OAAO;;;;;;;;;;;;GA4CjC;AAED,iBAAe,qBAAqB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,OAAO,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,iBAAe,YAAY,CACzB,MAAM,EAAE,uBAAuB,EAC/B,UAAU,EAAE,OAAO,gDAUpB;AAED,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EAEZ,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,0CAA0C,EAC1C,0CAA0C,EAC1C,gCAAgC,EAChC,yBAAyB,GAC1B,CAAA;AACD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../execution/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SessionChainRequiredError = exports.OrderPathRequiredForIntentsError = exports.UserOperationRequiredForSmartSessionsError = exports.SourceChainsNotAvailableForUserOpFlowError = exports.ExecutionError = exports.IntentFailedError = exports.isExecutionError = void 0;
3
+ exports.SignerNotSupportedError = exports.SessionChainRequiredError = exports.OrderPathRequiredForIntentsError = exports.IntentStatusTimeoutError = exports.IntentFailedError = exports.ExecutionError = exports.isExecutionError = void 0;
4
4
  exports.sendTransaction = sendTransaction;
5
+ exports.sendTransactionInternal = sendTransactionInternal;
6
+ exports.sendUserOperation = sendUserOperation;
7
+ exports.sendUserOperationInternal = sendUserOperationInternal;
5
8
  exports.waitForExecution = waitForExecution;
6
9
  exports.getMaxSpendableAmount = getMaxSpendableAmount;
7
10
  exports.getPortfolio = getPortfolio;
@@ -14,49 +17,63 @@ const registry_1 = require("../orchestrator/registry");
14
17
  const error_1 = require("./error");
15
18
  Object.defineProperty(exports, "ExecutionError", { enumerable: true, get: function () { return error_1.ExecutionError; } });
16
19
  Object.defineProperty(exports, "IntentFailedError", { enumerable: true, get: function () { return error_1.IntentFailedError; } });
20
+ Object.defineProperty(exports, "IntentStatusTimeoutError", { enumerable: true, get: function () { return error_1.IntentStatusTimeoutError; } });
17
21
  Object.defineProperty(exports, "isExecutionError", { enumerable: true, get: function () { return error_1.isExecutionError; } });
18
22
  Object.defineProperty(exports, "OrderPathRequiredForIntentsError", { enumerable: true, get: function () { return error_1.OrderPathRequiredForIntentsError; } });
19
23
  Object.defineProperty(exports, "SessionChainRequiredError", { enumerable: true, get: function () { return error_1.SessionChainRequiredError; } });
20
- Object.defineProperty(exports, "SourceChainsNotAvailableForUserOpFlowError", { enumerable: true, get: function () { return error_1.SourceChainsNotAvailableForUserOpFlowError; } });
21
- Object.defineProperty(exports, "UserOperationRequiredForSmartSessionsError", { enumerable: true, get: function () { return error_1.UserOperationRequiredForSmartSessionsError; } });
24
+ Object.defineProperty(exports, "SignerNotSupportedError", { enumerable: true, get: function () { return error_1.SignerNotSupportedError; } });
22
25
  const smart_session_1 = require("./smart-session");
23
26
  const utils_2 = require("./utils");
24
- const POLLING_INTERVAL = 500;
27
+ const POLL_INITIAL_MS = 500;
28
+ const POLL_SLOW_AFTER_MS = 5000;
29
+ const POLL_SLOW_MS = 2000;
30
+ const POLL_MAX_WAIT_MS = 180000;
31
+ const POLL_ERROR_BACKOFF_MS = 1000;
32
+ const POLL_ERROR_BACKOFF_MAX_MS = 10000;
25
33
  async function sendTransaction(config, transaction) {
26
- if ('chain' in transaction) {
27
- // Same-chain transaction
28
- return await sendTransactionInternal(config, [transaction.chain], transaction.chain, transaction.calls, transaction.gasLimit, transaction.tokenRequests, transaction.signers, transaction.sponsored);
34
+ const sourceChains = 'chain' in transaction
35
+ ? [transaction.chain]
36
+ : transaction.sourceChains || [];
37
+ const targetChain = 'chain' in transaction ? transaction.chain : transaction.targetChain;
38
+ const { calls, gasLimit, tokenRequests, signers, sponsored, settlementLayers, sourceAssets, feeAsset, dryRun, } = transaction;
39
+ const isUserOpSigner = signers?.type === 'guardians' || signers?.type === 'session';
40
+ if (isUserOpSigner) {
41
+ throw new error_1.SignerNotSupportedError();
29
42
  }
30
- else {
31
- // Cross-chain transaction
32
- return await sendTransactionInternal(config, transaction.sourceChains || [], transaction.targetChain, transaction.calls, transaction.gasLimit, transaction.tokenRequests, transaction.signers, transaction.sponsored);
43
+ return await sendTransactionInternal(config, sourceChains, targetChain, calls, {
44
+ gasLimit,
45
+ initialTokenRequests: tokenRequests,
46
+ signers,
47
+ sponsored,
48
+ settlementLayers,
49
+ sourceAssets,
50
+ feeAsset,
51
+ dryRun,
52
+ });
53
+ }
54
+ async function sendUserOperation(config, transaction) {
55
+ const accountAddress = (0, accounts_1.getAddress)(config);
56
+ const resolvedCalls = await (0, utils_2.resolveCallInputs)(transaction.calls, config, transaction.chain, accountAddress);
57
+ const userOpSigner = transaction.signers?.type === 'session' ? transaction.signers.session : null;
58
+ if (userOpSigner) {
59
+ await (0, smart_session_1.enableSmartSession)(transaction.chain, config, userOpSigner);
33
60
  }
61
+ // Smart sessions require a UserOp flow
62
+ return await sendUserOperationInternal(config, transaction.chain, resolvedCalls, transaction.signers);
34
63
  }
35
- async function sendTransactionInternal(config, sourceChains, targetChain, callInputs, gasLimit, initialTokenRequests, signers, sponsored) {
64
+ async function sendTransactionInternal(config, sourceChains, targetChain, callInputs, options) {
36
65
  const accountAddress = (0, accounts_1.getAddress)(config);
37
- // Across requires passing some value to repay the solvers
38
- const tokenRequests = !initialTokenRequests || initialTokenRequests.length === 0
39
- ? [
40
- {
41
- address: viem_1.zeroAddress,
42
- amount: 1n,
43
- },
44
- ]
45
- : initialTokenRequests;
46
- const asUserOp = signers?.type === 'guardians' || signers?.type === 'session';
47
- if (asUserOp) {
48
- const withSession = signers?.type === 'session' ? signers.session : null;
49
- if (withSession) {
50
- await (0, smart_session_1.enableSmartSession)(targetChain, config, withSession);
51
- }
52
- // Smart sessions require a UserOp flow
53
- return await sendTransactionAsUserOp(config, targetChain, callInputs, signers);
66
+ const resolvedCalls = await (0, utils_2.resolveCallInputs)(callInputs, config, targetChain, accountAddress);
67
+ const tokenRequests = (0, utils_2.getTokenRequests)(sourceChains, targetChain, options.initialTokenRequests, options.settlementLayers);
68
+ const sendAsUserOp = options.signers?.type === 'guardians' || options.signers?.type === 'session';
69
+ if (sendAsUserOp) {
70
+ throw new error_1.SignerNotSupportedError();
54
71
  }
55
72
  else {
56
- return await sendTransactionAsIntent(config, sourceChains, targetChain, callInputs, gasLimit, tokenRequests, accountAddress, signers, sponsored);
73
+ return await sendTransactionAsIntent(config, sourceChains, targetChain, resolvedCalls, options.gasLimit, tokenRequests, accountAddress, options.dryRun, options.signers, options.sponsored, options.settlementLayers, options.sourceAssets, options.feeAsset, options.lockFunds);
57
74
  }
58
75
  }
59
- async function sendTransactionAsUserOp(config, chain, callInputs, signers) {
76
+ async function sendUserOperationInternal(config, chain, callInputs, signers) {
60
77
  // Make sure the account is deployed
61
78
  await (0, accounts_1.deploy)(config, chain);
62
79
  const withSession = signers?.type === 'session' ? signers.session : null;
@@ -83,19 +100,16 @@ async function sendTransactionAsUserOp(config, chain, callInputs, signers) {
83
100
  chain: chain.id,
84
101
  };
85
102
  }
86
- async function sendTransactionAsIntent(config, sourceChains, targetChain, callInputs, gasLimit, tokenRequests, accountAddress, signers, sponsored) {
87
- const { intentRoute } = await (0, utils_2.prepareTransactionAsIntent)(config, sourceChains, targetChain, callInputs, gasLimit, tokenRequests, accountAddress, sponsored ?? false);
103
+ async function sendTransactionAsIntent(config, sourceChains, targetChain, callInputs, gasLimit, tokenRequests, accountAddress, dryRun = false, signers, sponsored, settlementLayers, sourceAssets, feeAsset, lockFunds) {
104
+ const intentRoute = await (0, utils_2.prepareTransactionAsIntent)(config, sourceChains, targetChain, callInputs, gasLimit, tokenRequests, accountAddress, sponsored ?? false, undefined, settlementLayers, sourceAssets, feeAsset, lockFunds);
88
105
  if (!intentRoute) {
89
106
  throw new error_1.OrderPathRequiredForIntentsError();
90
107
  }
91
- const signature = await (0, utils_2.signIntent)(config, targetChain, intentRoute.intentOp, signers);
108
+ const { originSignatures, destinationSignature } = await (0, utils_2.signIntent)(config, targetChain, intentRoute.intentOp, signers);
92
109
  const authorizations = config.eoa
93
- ? await (0, utils_2.signAuthorizationsInternal)(config, {
94
- type: 'intent',
95
- intentRoute,
96
- })
110
+ ? await (0, utils_2.signAuthorizationsInternal)(config, intentRoute)
97
111
  : [];
98
- return await (0, utils_2.submitIntentInternal)(config, sourceChains, targetChain, intentRoute.intentOp, signature, authorizations);
112
+ return await (0, utils_2.submitIntentInternal)(config, sourceChains, targetChain, intentRoute.intentOp, originSignatures, destinationSignature, authorizations, dryRun);
99
113
  }
100
114
  async function waitForExecution(config, result, acceptsPreconfirmations) {
101
115
  const validStatuses = new Set([
@@ -109,15 +123,70 @@ async function waitForExecution(config, result, acceptsPreconfirmations) {
109
123
  switch (result.type) {
110
124
  case 'intent': {
111
125
  let intentStatus = null;
126
+ const startTs = Date.now();
127
+ let nextDelayMs = POLL_INITIAL_MS;
128
+ let errorBackoffMs = POLL_ERROR_BACKOFF_MS;
112
129
  while (intentStatus === null || !validStatuses.has(intentStatus.status)) {
113
- const orchestrator = (0, utils_2.getOrchestratorByChain)(result.targetChain, config.rhinestoneApiKey, config.useDev);
114
- intentStatus = await orchestrator.getIntentOpStatus(result.id);
115
- await new Promise((resolve) => setTimeout(resolve, POLLING_INTERVAL));
130
+ const now = Date.now();
131
+ if (now - startTs >= POLL_MAX_WAIT_MS) {
132
+ throw new error_1.IntentStatusTimeoutError({
133
+ context: { waitedMs: now - startTs },
134
+ });
135
+ }
136
+ const orchestrator = (0, utils_2.getOrchestratorByChain)(result.targetChain, config.apiKey, config.endpointUrl);
137
+ try {
138
+ intentStatus = await orchestrator.getIntentOpStatus(result.id);
139
+ // reset error backoff on success
140
+ errorBackoffMs = POLL_ERROR_BACKOFF_MS;
141
+ const elapsed = Date.now() - startTs;
142
+ nextDelayMs =
143
+ elapsed >= POLL_SLOW_AFTER_MS ? POLL_SLOW_MS : POLL_INITIAL_MS;
144
+ await new Promise((resolve) => setTimeout(resolve, nextDelayMs));
145
+ }
146
+ catch (err) {
147
+ if ((0, orchestrator_1.isRateLimited)(err)) {
148
+ const retryAfter = err?.context?.retryAfter;
149
+ let retryMs = nextDelayMs;
150
+ if (retryAfter) {
151
+ const parsed = Number(retryAfter);
152
+ if (!Number.isNaN(parsed)) {
153
+ retryMs = Math.max(parsed * 1000, nextDelayMs);
154
+ }
155
+ else {
156
+ const asDate = Date.parse(retryAfter);
157
+ if (!Number.isNaN(asDate)) {
158
+ retryMs = Math.max(asDate - Date.now(), nextDelayMs);
159
+ }
160
+ }
161
+ }
162
+ else {
163
+ retryMs = Math.max(POLL_SLOW_MS, nextDelayMs);
164
+ }
165
+ await new Promise((resolve) => setTimeout(resolve, retryMs));
166
+ continue;
167
+ }
168
+ if ((0, orchestrator_1.isRetryable)(err)) {
169
+ const backoff = Math.min(errorBackoffMs, POLL_ERROR_BACKOFF_MAX_MS);
170
+ errorBackoffMs = Math.min(errorBackoffMs * 2, POLL_ERROR_BACKOFF_MAX_MS);
171
+ await new Promise((resolve) => setTimeout(resolve, backoff));
172
+ continue;
173
+ }
174
+ throw err;
175
+ }
116
176
  }
117
177
  if (intentStatus.status === orchestrator_1.INTENT_STATUS_FAILED) {
118
178
  throw new error_1.IntentFailedError();
119
179
  }
120
- return intentStatus;
180
+ return {
181
+ fill: {
182
+ hash: intentStatus.fillTransactionHash,
183
+ chainId: result.targetChain,
184
+ },
185
+ claims: intentStatus.claims.map((claim) => ({
186
+ hash: claim.claimTransactionHash,
187
+ chainId: claim.chainId,
188
+ })),
189
+ };
121
190
  }
122
191
  case 'userop': {
123
192
  const targetChain = (0, registry_1.getChainById)(result.chain);
@@ -136,14 +205,14 @@ async function waitForExecution(config, result, acceptsPreconfirmations) {
136
205
  }
137
206
  }
138
207
  }
139
- async function getMaxSpendableAmount(config, chain, tokenAddress, gasUnits) {
208
+ async function getMaxSpendableAmount(config, chain, tokenAddress, gasUnits, sponsored = false) {
140
209
  const address = (0, accounts_1.getAddress)(config);
141
- const orchestrator = (0, utils_2.getOrchestratorByChain)(chain.id, config.rhinestoneApiKey, config.useDev);
142
- return orchestrator.getMaxTokenAmount(address, chain.id, tokenAddress, gasUnits);
210
+ const orchestrator = (0, utils_2.getOrchestratorByChain)(chain.id, config.apiKey, config.endpointUrl);
211
+ return orchestrator.getMaxTokenAmount(address, chain.id, tokenAddress, gasUnits, sponsored);
143
212
  }
144
213
  async function getPortfolio(config, onTestnets) {
145
214
  const address = (0, accounts_1.getAddress)(config);
146
215
  const chainId = onTestnets ? chains_1.sepolia.id : chains_1.mainnet.id;
147
- const orchestrator = (0, utils_2.getOrchestratorByChain)(chainId, config.rhinestoneApiKey, config.useDev);
216
+ const orchestrator = (0, utils_2.getOrchestratorByChain)(chainId, config.apiKey, config.endpointUrl);
148
217
  return orchestrator.getPortfolio(address);
149
218
  }
@@ -0,0 +1,40 @@
1
+ import type { Address, Hex } from 'viem';
2
+ import type { IntentOp } from '../orchestrator';
3
+ interface Op {
4
+ to: Address;
5
+ value: string;
6
+ data: Hex;
7
+ }
8
+ interface ChainOps {
9
+ chainId: bigint;
10
+ nonce: bigint;
11
+ ops: Op[];
12
+ }
13
+ declare function getTypedData(account: Address, intentExecutorAddress: Address, intentOp: IntentOp): {
14
+ domain: {
15
+ name: string;
16
+ version: string;
17
+ verifyingContract: `0x${string}`;
18
+ };
19
+ types: {
20
+ MultiChainOps: {
21
+ name: string;
22
+ type: string;
23
+ }[];
24
+ ChainOps: {
25
+ name: string;
26
+ type: string;
27
+ }[];
28
+ Op: {
29
+ name: string;
30
+ type: string;
31
+ }[];
32
+ };
33
+ primaryType: "MultiChainOps";
34
+ message: {
35
+ account: `0x${string}`;
36
+ ops: ChainOps[];
37
+ };
38
+ };
39
+ export { getTypedData };
40
+ //# sourceMappingURL=multiChainOps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiChainOps.d.ts","sourceRoot":"","sources":["../../../execution/multiChainOps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,UAAU,EAAE;IACV,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,CAAA;CACV;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,EAAE,EAAE,CAAA;CACV;AAED,iBAAS,YAAY,CACnB,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE,OAAO,EAC9B,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;EAqCnB;AACD,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTypedData = getTypedData;
4
+ function getTypedData(account, intentExecutorAddress, intentOp) {
5
+ const ops = intentOp.elements[0].mandate.destinationOps;
6
+ const chainOps = {
7
+ chainId: BigInt(intentOp.elements[0].chainId),
8
+ nonce: BigInt(intentOp.nonce),
9
+ ops,
10
+ };
11
+ return {
12
+ domain: {
13
+ name: 'IntentExecutor',
14
+ version: 'v0.0.1',
15
+ verifyingContract: intentExecutorAddress,
16
+ },
17
+ types: {
18
+ MultiChainOps: [
19
+ { name: 'account', type: 'address' },
20
+ { name: 'ops', type: 'ChainOps[]' },
21
+ ],
22
+ ChainOps: [
23
+ { name: 'chainId', type: 'uint256' },
24
+ { name: 'nonce', type: 'uint256' },
25
+ { name: 'ops', type: 'Op[]' },
26
+ ],
27
+ Op: [
28
+ { name: 'to', type: 'address' },
29
+ { name: 'value', type: 'uint256' },
30
+ { name: 'data', type: 'bytes' },
31
+ ],
32
+ },
33
+ primaryType: 'MultiChainOps',
34
+ message: {
35
+ account,
36
+ ops: [chainOps],
37
+ },
38
+ };
39
+ }
@@ -0,0 +1,148 @@
1
+ import { type Address, type Chain } from 'viem';
2
+ import type { IntentOpElement } from '../orchestrator/types';
3
+ import type { RhinestoneConfig } from '../types';
4
+ import type { BatchPermit2Result, MultiChainPermit2Config, MultiChainPermit2Result, TokenPermissions } from './types';
5
+ declare function getTypedData(element: IntentOpElement, nonce: bigint, expires: bigint): {
6
+ readonly domain: {
7
+ readonly name: "Permit2";
8
+ readonly chainId: number;
9
+ readonly verifyingContract: "0x000000000022D473030F116dDEE9F6B43aC78BA3";
10
+ };
11
+ readonly types: {
12
+ readonly TokenPermissions: readonly [{
13
+ readonly name: "token";
14
+ readonly type: "address";
15
+ }, {
16
+ readonly name: "amount";
17
+ readonly type: "uint256";
18
+ }];
19
+ readonly Token: readonly [{
20
+ readonly name: "token";
21
+ readonly type: "address";
22
+ }, {
23
+ readonly name: "amount";
24
+ readonly type: "uint256";
25
+ }];
26
+ readonly Target: readonly [{
27
+ readonly name: "recipient";
28
+ readonly type: "address";
29
+ }, {
30
+ readonly name: "tokenOut";
31
+ readonly type: "Token[]";
32
+ }, {
33
+ readonly name: "targetChain";
34
+ readonly type: "uint256";
35
+ }, {
36
+ readonly name: "fillExpiry";
37
+ readonly type: "uint256";
38
+ }];
39
+ readonly Op: readonly [{
40
+ readonly name: "to";
41
+ readonly type: "address";
42
+ }, {
43
+ readonly name: "value";
44
+ readonly type: "uint256";
45
+ }, {
46
+ readonly name: "data";
47
+ readonly type: "bytes";
48
+ }];
49
+ readonly Mandate: readonly [{
50
+ readonly name: "target";
51
+ readonly type: "Target";
52
+ }, {
53
+ readonly name: "v";
54
+ readonly type: "uint8";
55
+ }, {
56
+ readonly name: "minGas";
57
+ readonly type: "uint128";
58
+ }, {
59
+ readonly name: "originOps";
60
+ readonly type: "Op[]";
61
+ }, {
62
+ readonly name: "destOps";
63
+ readonly type: "Op[]";
64
+ }, {
65
+ readonly name: "q";
66
+ readonly type: "bytes32";
67
+ }];
68
+ readonly PermitBatchWitnessTransferFrom: readonly [{
69
+ readonly name: "permitted";
70
+ readonly type: "TokenPermissions[]";
71
+ }, {
72
+ readonly name: "spender";
73
+ readonly type: "address";
74
+ }, {
75
+ readonly name: "nonce";
76
+ readonly type: "uint256";
77
+ }, {
78
+ readonly name: "deadline";
79
+ readonly type: "uint256";
80
+ }, {
81
+ readonly name: "mandate";
82
+ readonly type: "Mandate";
83
+ }];
84
+ };
85
+ readonly primaryType: "PermitBatchWitnessTransferFrom";
86
+ readonly message: {
87
+ readonly permitted: TokenPermissions[];
88
+ readonly spender: `0x${string}`;
89
+ readonly nonce: bigint;
90
+ readonly deadline: bigint;
91
+ readonly mandate: {
92
+ readonly target: {
93
+ readonly recipient: `0x${string}`;
94
+ readonly tokenOut: {
95
+ token: `0x${string}`;
96
+ amount: bigint;
97
+ }[];
98
+ readonly targetChain: bigint;
99
+ readonly fillExpiry: bigint;
100
+ };
101
+ readonly v: number;
102
+ readonly minGas: bigint;
103
+ readonly originOps: {
104
+ to: `0x${string}`;
105
+ value: bigint;
106
+ data: `0x${string}`;
107
+ }[];
108
+ readonly destOps: {
109
+ to: `0x${string}`;
110
+ value: bigint;
111
+ data: `0x${string}`;
112
+ }[];
113
+ readonly q: `0x${string}`;
114
+ };
115
+ };
116
+ };
117
+ declare function checkERC20AllowanceDirect(owner: Address, spender: Address, tokenAddress: Address, publicClient: any): Promise<bigint>;
118
+ declare function checkERC20Allowance(tokenAddress: Address, chain: Chain, config: RhinestoneConfig): Promise<bigint>;
119
+ /**
120
+ * Get the Permit2 contract address
121
+ * @returns The Permit2 contract address
122
+ */
123
+ declare function getPermit2Address(): Address;
124
+ /**
125
+ * Signs permit2 calls across multiple chains using batch approach.
126
+ * Collects all signatures first, then returns them all at once.
127
+ *
128
+ * This approach is efficient for backend signers but may be memory-intensive
129
+ * for frontend applications with many chains.
130
+ *
131
+ * @param configs - Array of permit2 signing configurations for different chains
132
+ * @returns Promise<BatchPermit2Result> - All signatures collected
133
+ */
134
+ declare function signPermit2Batch(configs: MultiChainPermit2Config[]): Promise<BatchPermit2Result>;
135
+ /**
136
+ * Signs permit2 calls across multiple chains sequentially.
137
+ * Signs one by one, useful for frontend applications to avoid memory issues.
138
+ *
139
+ * This approach is more memory-efficient for frontend applications but slower
140
+ * due to sequential processing.
141
+ *
142
+ * @param configs - Array of permit2 signing configurations for different chains
143
+ * @param onProgress - Optional callback for progress updates
144
+ * @returns Promise<BatchPermit2Result> - All signatures collected
145
+ */
146
+ declare function signPermit2Sequential(configs: MultiChainPermit2Config[], onProgress?: (completed: number, total: number, current: MultiChainPermit2Result) => void): Promise<BatchPermit2Result>;
147
+ export { getTypedData, checkERC20Allowance, checkERC20AllowanceDirect, getPermit2Address, signPermit2Batch, signPermit2Sequential, type MultiChainPermit2Config, type MultiChainPermit2Result, type BatchPermit2Result, };
148
+ //# sourceMappingURL=permit2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permit2.d.ts","sourceRoot":"","sources":["../../../execution/permit2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAIX,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAQhB,iBAAS,YAAY,CACnB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8FhB;AAED,iBAAe,yBAAyB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,GAAG,GAChB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,iBAAe,mBAAmB,CAChC,YAAY,EAAE,OAAO,EACrB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED;;;GAGG;AACH,iBAAS,iBAAiB,IAAI,OAAO,CAEpC;AAED;;;;;;;;;GASG;AACH,iBAAe,gBAAgB,CAC7B,OAAO,EAAE,uBAAuB,EAAE,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAyE7B;AAED;;;;;;;;;;GAUG;AACH,iBAAe,qBAAqB,CAClC,OAAO,EAAE,uBAAuB,EAAE,EAClC,UAAU,CAAC,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,KAC7B,IAAI,GACR,OAAO,CAAC,kBAAkB,CAAC,CA8D7B;AAED,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EAEjB,gBAAgB,EAChB,qBAAqB,EAErB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,CAAA"}