@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.
- package/README.md +46 -8
- package/dist/src/accounts/error.d.ts +38 -3
- package/dist/src/accounts/error.d.ts.map +1 -1
- package/dist/src/accounts/error.js +55 -7
- package/dist/src/accounts/index.d.ts +31 -20
- package/dist/src/accounts/index.d.ts.map +1 -1
- package/dist/src/accounts/index.js +231 -25
- package/dist/src/accounts/index.test.js +2 -4
- package/dist/src/accounts/json-rpc/index.d.ts +5 -0
- package/dist/src/accounts/json-rpc/index.d.ts.map +1 -0
- package/dist/src/accounts/json-rpc/index.js +16 -0
- package/dist/src/accounts/json-rpc/providers.d.ts +4 -0
- package/dist/src/accounts/json-rpc/providers.d.ts.map +1 -0
- package/dist/src/accounts/json-rpc/providers.js +52 -0
- package/dist/src/accounts/kernel.d.ts +1 -1
- package/dist/src/accounts/kernel.d.ts.map +1 -1
- package/dist/src/accounts/kernel.js +29 -1
- package/dist/src/accounts/kernel.test.js +35 -8
- package/dist/src/accounts/nexus.d.ts +4 -3
- package/dist/src/accounts/nexus.d.ts.map +1 -1
- package/dist/src/accounts/nexus.js +82 -14
- package/dist/src/accounts/nexus.test.js +33 -6
- package/dist/src/accounts/passport.d.ts +12 -0
- package/dist/src/accounts/passport.d.ts.map +1 -0
- package/dist/src/accounts/passport.js +173 -0
- package/dist/src/accounts/safe.d.ts.map +1 -1
- package/dist/src/accounts/safe.js +85 -53
- package/dist/src/accounts/safe.test.js +33 -6
- package/dist/src/accounts/signing/common.d.ts +4 -4
- package/dist/src/accounts/signing/common.d.ts.map +1 -1
- package/dist/src/accounts/signing/common.js +21 -9
- package/dist/src/accounts/signing/message.d.ts +1 -1
- package/dist/src/accounts/signing/message.d.ts.map +1 -1
- package/dist/src/accounts/signing/message.js +6 -6
- package/dist/src/accounts/signing/passkeys.d.ts +8 -1
- package/dist/src/accounts/signing/passkeys.d.ts.map +1 -1
- package/dist/src/accounts/signing/passkeys.js +35 -0
- package/dist/src/accounts/signing/passkeys.test.js +15 -0
- package/dist/src/accounts/signing/typedData.d.ts.map +1 -1
- package/dist/src/accounts/signing/typedData.js +2 -2
- package/dist/src/accounts/startale.test.js +0 -4
- package/dist/src/accounts/utils.d.ts +4 -4
- package/dist/src/accounts/utils.d.ts.map +1 -1
- package/dist/src/accounts/utils.js +3 -40
- package/dist/src/accounts/walletClient.d.ts +7 -0
- package/dist/src/accounts/walletClient.d.ts.map +1 -0
- package/dist/src/accounts/walletClient.js +38 -0
- package/dist/src/actions/compact.d.ts +13 -0
- package/dist/src/actions/compact.d.ts.map +1 -0
- package/dist/src/actions/compact.js +210 -0
- package/dist/src/actions/ecdsa.d.ts +35 -0
- package/dist/src/actions/ecdsa.d.ts.map +1 -0
- package/dist/src/actions/ecdsa.js +114 -0
- package/dist/src/actions/ecdsa.test.d.ts +2 -0
- package/dist/src/actions/ecdsa.test.d.ts.map +1 -0
- package/dist/src/actions/ecdsa.test.js +99 -0
- package/dist/src/actions/index.d.ts +23 -166
- package/dist/src/actions/index.d.ts.map +1 -1
- package/dist/src/actions/index.js +25 -544
- package/dist/src/actions/mfa.d.ts +37 -0
- package/dist/src/actions/mfa.d.ts.map +1 -0
- package/dist/src/actions/mfa.js +133 -0
- package/dist/src/actions/passkeys.d.ts +37 -0
- package/dist/src/actions/passkeys.d.ts.map +1 -0
- package/dist/src/actions/passkeys.js +129 -0
- package/dist/src/actions/passkeys.test.d.ts +2 -0
- package/dist/src/actions/passkeys.test.d.ts.map +1 -0
- package/dist/src/actions/passkeys.test.js +54 -0
- package/dist/src/actions/recovery.d.ts +33 -0
- package/dist/src/actions/recovery.d.ts.map +1 -0
- package/dist/src/actions/recovery.js +193 -0
- package/dist/src/actions/recovery.test.d.ts +2 -0
- package/dist/src/actions/recovery.test.d.ts.map +1 -0
- package/dist/src/actions/recovery.test.js +168 -0
- package/dist/src/actions/smart-sessions.d.ts +23 -0
- package/dist/src/actions/smart-sessions.d.ts.map +1 -0
- package/dist/src/actions/{smart-session.js → smart-sessions.js} +13 -0
- package/dist/src/errors/index.d.ts +5 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +50 -0
- package/dist/src/execution/compact.d.ts +25 -9
- package/dist/src/execution/compact.d.ts.map +1 -1
- package/dist/src/execution/compact.js +29 -103
- package/dist/src/execution/error.d.ts +6 -6
- package/dist/src/execution/error.d.ts.map +1 -1
- package/dist/src/execution/error.js +13 -13
- package/dist/src/execution/index.d.ts +34 -22
- package/dist/src/execution/index.d.ts.map +1 -1
- package/dist/src/execution/index.js +115 -46
- package/dist/src/execution/multiChainOps.d.ts +40 -0
- package/dist/src/execution/multiChainOps.d.ts.map +1 -0
- package/dist/src/execution/multiChainOps.js +39 -0
- package/dist/src/execution/permit2.d.ts +148 -0
- package/dist/src/execution/permit2.d.ts.map +1 -0
- package/dist/src/execution/permit2.js +291 -0
- package/dist/src/execution/smart-session.d.ts +3 -3
- package/dist/src/execution/smart-session.d.ts.map +1 -1
- package/dist/src/execution/smart-session.js +3 -3
- package/dist/src/execution/types.d.ts +36 -0
- package/dist/src/execution/types.d.ts.map +1 -0
- package/dist/src/execution/types.js +2 -0
- package/dist/src/execution/utils.d.ts +43 -28
- package/dist/src/execution/utils.d.ts.map +1 -1
- package/dist/src/execution/utils.js +269 -99
- package/dist/src/index.d.ts +38 -19
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +121 -69
- package/dist/src/modules/common.d.ts +10 -4
- package/dist/src/modules/common.d.ts.map +1 -1
- package/dist/src/modules/common.js +22 -1
- package/dist/src/modules/index.d.ts +3 -2
- package/dist/src/modules/index.d.ts.map +1 -1
- package/dist/src/modules/index.js +16 -13
- package/dist/src/modules/index.test.js +9 -12
- package/dist/src/modules/read.d.ts.map +1 -1
- package/dist/src/modules/read.js +5 -1
- package/dist/src/modules/validators/core.d.ts +5 -3
- package/dist/src/modules/validators/core.d.ts.map +1 -1
- package/dist/src/modules/validators/core.js +29 -10
- package/dist/src/modules/validators/core.test.js +4 -4
- package/dist/src/modules/validators/smart-sessions.d.ts +4 -4
- package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.js +10 -72
- package/dist/src/modules/validators/smart-sessions.test.js +4 -8
- package/dist/src/modules/validators/webauthn-contract.d.ts.map +1 -1
- package/dist/src/orchestrator/client.d.ts +4 -2
- package/dist/src/orchestrator/client.d.ts.map +1 -1
- package/dist/src/orchestrator/client.js +230 -162
- package/dist/src/orchestrator/consts.d.ts +1 -2
- package/dist/src/orchestrator/consts.d.ts.map +1 -1
- package/dist/src/orchestrator/consts.js +1 -3
- package/dist/src/orchestrator/error.d.ts +111 -1
- package/dist/src/orchestrator/error.d.ts.map +1 -1
- package/dist/src/orchestrator/error.js +128 -1
- package/dist/src/orchestrator/index.d.ts +4 -4
- package/dist/src/orchestrator/index.d.ts.map +1 -1
- package/dist/src/orchestrator/index.js +16 -1
- package/dist/src/orchestrator/registry.d.ts +3 -25
- package/dist/src/orchestrator/registry.d.ts.map +1 -1
- package/dist/src/orchestrator/registry.js +82 -46
- package/dist/src/orchestrator/registry.test.js +7 -7
- package/dist/src/orchestrator/types.d.ts +53 -43
- package/dist/src/orchestrator/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +74 -9
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +3 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +5 -0
- package/package.json +73 -2
- package/dist/src/actions/index.test.d.ts +0 -2
- package/dist/src/actions/index.test.d.ts.map +0 -1
- package/dist/src/actions/index.test.js +0 -302
- package/dist/src/actions/smart-session.d.ts +0 -11
- package/dist/src/actions/smart-session.d.ts.map +0 -1
- package/dist/src/orchestrator/registry.json +0 -365
|
@@ -1,24 +1,36 @@
|
|
|
1
|
-
import { type Address, type Chain } from 'viem';
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
declare function
|
|
21
|
-
declare function
|
|
22
|
-
|
|
23
|
-
export
|
|
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,
|
|
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.
|
|
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, "
|
|
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
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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,
|
|
64
|
+
async function sendTransactionInternal(config, sourceChains, targetChain, callInputs, options) {
|
|
36
65
|
const accountAddress = (0, accounts_1.getAddress)(config);
|
|
37
|
-
|
|
38
|
-
const tokenRequests =
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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"}
|