@bananapus/nana-sdk-core 3.5.2 → 4.0.0
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/bin/wallet-check.mjs +489 -0
- package/dist/cjs/actions/suckerPairs.d.ts +5 -3
- package/dist/cjs/actions/suckerPairs.d.ts.map +1 -1
- package/dist/cjs/actions/suckerPairs.js +6 -26
- package/dist/cjs/actions/suckerPairs.js.map +1 -1
- package/dist/cjs/pause.d.ts +2 -0
- package/dist/cjs/pause.d.ts.map +1 -1
- package/dist/cjs/pause.js +17 -0
- package/dist/cjs/pause.js.map +1 -1
- package/dist/cjs/review/confirm.d.ts +52 -0
- package/dist/cjs/review/confirm.d.ts.map +1 -0
- package/dist/cjs/review/confirm.js +88 -0
- package/dist/cjs/review/confirm.js.map +1 -0
- package/dist/cjs/review/contractWrite.d.ts +5 -3
- package/dist/cjs/review/contractWrite.d.ts.map +1 -1
- package/dist/cjs/review/contractWrite.js +8 -7
- package/dist/cjs/review/contractWrite.js.map +1 -1
- package/dist/cjs/review/decode.d.ts +19 -1
- package/dist/cjs/review/decode.d.ts.map +1 -1
- package/dist/cjs/review/decode.js +30 -11
- package/dist/cjs/review/decode.js.map +1 -1
- package/dist/cjs/review/decodeCall.d.ts +21 -0
- package/dist/cjs/review/decodeCall.d.ts.map +1 -0
- package/dist/cjs/review/decodeCall.js +183 -0
- package/dist/cjs/review/decodeCall.js.map +1 -0
- package/dist/cjs/review/heldWrite.d.ts.map +1 -1
- package/dist/cjs/review/heldWrite.js +5 -4
- package/dist/cjs/review/heldWrite.js.map +1 -1
- package/dist/cjs/review/index.d.ts +11 -0
- package/dist/cjs/review/index.d.ts.map +1 -1
- package/dist/cjs/review/index.js +24 -0
- package/dist/cjs/review/index.js.map +1 -1
- package/dist/cjs/review/intents.d.ts +10 -0
- package/dist/cjs/review/intents.d.ts.map +1 -1
- package/dist/cjs/review/intents.js +13 -0
- package/dist/cjs/review/intents.js.map +1 -1
- package/dist/cjs/review/lineError.d.ts +34 -0
- package/dist/cjs/review/lineError.d.ts.map +1 -0
- package/dist/cjs/review/lineError.js +42 -0
- package/dist/cjs/review/lineError.js.map +1 -0
- package/dist/cjs/review/messages.d.ts +15 -3
- package/dist/cjs/review/messages.d.ts.map +1 -1
- package/dist/cjs/review/messages.js +16 -4
- package/dist/cjs/review/messages.js.map +1 -1
- package/dist/cjs/review/model.d.ts +149 -0
- package/dist/cjs/review/model.d.ts.map +1 -0
- package/dist/cjs/review/model.js +750 -0
- package/dist/cjs/review/model.js.map +1 -0
- package/dist/cjs/review/plan.d.ts +63 -0
- package/dist/cjs/review/plan.d.ts.map +1 -0
- package/dist/cjs/review/plan.js +149 -0
- package/dist/cjs/review/plan.js.map +1 -0
- package/dist/cjs/review/react/index.d.ts +1 -0
- package/dist/cjs/review/react/index.d.ts.map +1 -1
- package/dist/cjs/review/react/index.js +1 -0
- package/dist/cjs/review/react/index.js.map +1 -1
- package/dist/cjs/review/react/useReviewedRun.d.ts +96 -0
- package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/cjs/review/react/useReviewedRun.js +261 -0
- package/dist/cjs/review/react/useReviewedRun.js.map +1 -0
- package/dist/cjs/review/receipt.d.ts +4 -1
- package/dist/cjs/review/receipt.d.ts.map +1 -1
- package/dist/cjs/review/receipt.js +7 -3
- package/dist/cjs/review/receipt.js.map +1 -1
- package/dist/cjs/review/relayr.d.ts +13 -4
- package/dist/cjs/review/relayr.d.ts.map +1 -1
- package/dist/cjs/review/relayr.js +51 -8
- package/dist/cjs/review/relayr.js.map +1 -1
- package/dist/cjs/review/relayrSend.d.ts +135 -0
- package/dist/cjs/review/relayrSend.d.ts.map +1 -0
- package/dist/cjs/review/relayrSend.js +943 -0
- package/dist/cjs/review/relayrSend.js.map +1 -0
- package/dist/cjs/review/reviewQueue.d.ts +10 -9
- package/dist/cjs/review/reviewQueue.d.ts.map +1 -1
- package/dist/cjs/review/reviewQueue.js +19 -29
- package/dist/cjs/review/reviewQueue.js.map +1 -1
- package/dist/cjs/review/reviewRequests.d.ts +86 -0
- package/dist/cjs/review/reviewRequests.d.ts.map +1 -0
- package/dist/cjs/review/reviewRequests.js +266 -0
- package/dist/cjs/review/reviewRequests.js.map +1 -0
- package/dist/cjs/review/safeRelayr.d.ts +3 -1
- package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
- package/dist/cjs/review/safeRelayr.js +5 -1
- package/dist/cjs/review/safeRelayr.js.map +1 -1
- package/dist/cjs/review/safeSend.d.ts +69 -0
- package/dist/cjs/review/safeSend.d.ts.map +1 -0
- package/dist/cjs/review/safeSend.js +308 -0
- package/dist/cjs/review/safeSend.js.map +1 -0
- package/dist/cjs/review/send.d.ts +241 -0
- package/dist/cjs/review/send.d.ts.map +1 -0
- package/dist/cjs/review/send.js +1017 -0
- package/dist/cjs/review/send.js.map +1 -0
- package/dist/cjs/review/sequence.d.ts +77 -0
- package/dist/cjs/review/sequence.d.ts.map +1 -0
- package/dist/cjs/review/sequence.js +232 -0
- package/dist/cjs/review/sequence.js.map +1 -0
- package/dist/cjs/review/sign.d.ts +109 -0
- package/dist/cjs/review/sign.d.ts.map +1 -0
- package/dist/cjs/review/sign.js +374 -0
- package/dist/cjs/review/sign.js.map +1 -0
- package/dist/cjs/review/simulation.d.ts +41 -2
- package/dist/cjs/review/simulation.d.ts.map +1 -1
- package/dist/cjs/review/simulation.js +99 -29
- package/dist/cjs/review/simulation.js.map +1 -1
- package/dist/cjs/review/transaction-message.d.ts +13 -0
- package/dist/cjs/review/transaction-message.d.ts.map +1 -1
- package/dist/cjs/review/transaction-message.js +25 -0
- package/dist/cjs/review/transaction-message.js.map +1 -1
- package/dist/cjs/review/transactionReview.d.ts +27 -19
- package/dist/cjs/review/transactionReview.d.ts.map +1 -1
- package/dist/cjs/review/transactionReview.js +22 -63
- package/dist/cjs/review/transactionReview.js.map +1 -1
- package/dist/cjs/review/wallet.d.ts +82 -0
- package/dist/cjs/review/wallet.d.ts.map +1 -0
- package/dist/cjs/review/wallet.js +157 -0
- package/dist/cjs/review/wallet.js.map +1 -0
- package/dist/cjs/review/writeHold.d.ts +100 -12
- package/dist/cjs/review/writeHold.d.ts.map +1 -1
- package/dist/cjs/review/writeHold.js +61 -13
- package/dist/cjs/review/writeHold.js.map +1 -1
- package/dist/cjs/review/writeRecovery.d.ts +6 -1
- package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
- package/dist/cjs/review/writeRecovery.js +108 -40
- package/dist/cjs/review/writeRecovery.js.map +1 -1
- package/dist/cjs/safeService.d.ts +27 -4
- package/dist/cjs/safeService.d.ts.map +1 -1
- package/dist/cjs/safeService.js +120 -3
- package/dist/cjs/safeService.js.map +1 -1
- package/dist/cjs/testing.d.ts +24 -0
- package/dist/cjs/testing.d.ts.map +1 -1
- package/dist/cjs/testing.js +26 -1
- package/dist/cjs/testing.js.map +1 -1
- package/dist/cjs/v6/defifa.d.ts.map +1 -1
- package/dist/cjs/v6/defifa.js +24 -23
- package/dist/cjs/v6/defifa.js.map +1 -1
- package/dist/cjs/v6/executionErrors.d.ts.map +1 -1
- package/dist/cjs/v6/executionErrors.js +3 -2
- package/dist/cjs/v6/executionErrors.js.map +1 -1
- package/dist/cjs/v6/pay.d.ts +25 -8
- package/dist/cjs/v6/pay.d.ts.map +1 -1
- package/dist/cjs/v6/pay.js +117 -23
- package/dist/cjs/v6/pay.js.map +1 -1
- package/dist/cjs/v6/suckers.d.ts +30 -0
- package/dist/cjs/v6/suckers.d.ts.map +1 -1
- package/dist/cjs/v6/suckers.js +69 -5
- package/dist/cjs/v6/suckers.js.map +1 -1
- package/dist/esm/actions/suckerPairs.d.ts +5 -3
- package/dist/esm/actions/suckerPairs.d.ts.map +1 -1
- package/dist/esm/actions/suckerPairs.js +7 -27
- package/dist/esm/actions/suckerPairs.js.map +1 -1
- package/dist/esm/pause.d.ts +2 -0
- package/dist/esm/pause.d.ts.map +1 -1
- package/dist/esm/pause.js +16 -0
- package/dist/esm/pause.js.map +1 -1
- package/dist/esm/review/confirm.d.ts +52 -0
- package/dist/esm/review/confirm.d.ts.map +1 -0
- package/dist/esm/review/confirm.js +83 -0
- package/dist/esm/review/confirm.js.map +1 -0
- package/dist/esm/review/contractWrite.d.ts +5 -3
- package/dist/esm/review/contractWrite.d.ts.map +1 -1
- package/dist/esm/review/contractWrite.js +8 -7
- package/dist/esm/review/contractWrite.js.map +1 -1
- package/dist/esm/review/decode.d.ts +19 -1
- package/dist/esm/review/decode.d.ts.map +1 -1
- package/dist/esm/review/decode.js +29 -14
- package/dist/esm/review/decode.js.map +1 -1
- package/dist/esm/review/decodeCall.d.ts +21 -0
- package/dist/esm/review/decodeCall.d.ts.map +1 -0
- package/dist/esm/review/decodeCall.js +180 -0
- package/dist/esm/review/decodeCall.js.map +1 -0
- package/dist/esm/review/heldWrite.d.ts.map +1 -1
- package/dist/esm/review/heldWrite.js +5 -4
- package/dist/esm/review/heldWrite.js.map +1 -1
- package/dist/esm/review/index.d.ts +11 -0
- package/dist/esm/review/index.d.ts.map +1 -1
- package/dist/esm/review/index.js +11 -0
- package/dist/esm/review/index.js.map +1 -1
- package/dist/esm/review/intents.d.ts +10 -0
- package/dist/esm/review/intents.d.ts.map +1 -1
- package/dist/esm/review/intents.js +12 -0
- package/dist/esm/review/intents.js.map +1 -1
- package/dist/esm/review/lineError.d.ts +34 -0
- package/dist/esm/review/lineError.d.ts.map +1 -0
- package/dist/esm/review/lineError.js +36 -0
- package/dist/esm/review/lineError.js.map +1 -0
- package/dist/esm/review/messages.d.ts +15 -3
- package/dist/esm/review/messages.d.ts.map +1 -1
- package/dist/esm/review/messages.js +15 -3
- package/dist/esm/review/messages.js.map +1 -1
- package/dist/esm/review/model.d.ts +149 -0
- package/dist/esm/review/model.d.ts.map +1 -0
- package/dist/esm/review/model.js +746 -0
- package/dist/esm/review/model.js.map +1 -0
- package/dist/esm/review/plan.d.ts +63 -0
- package/dist/esm/review/plan.d.ts.map +1 -0
- package/dist/esm/review/plan.js +141 -0
- package/dist/esm/review/plan.js.map +1 -0
- package/dist/esm/review/react/index.d.ts +1 -0
- package/dist/esm/review/react/index.d.ts.map +1 -1
- package/dist/esm/review/react/index.js +1 -0
- package/dist/esm/review/react/index.js.map +1 -1
- package/dist/esm/review/react/useReviewedRun.d.ts +96 -0
- package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/esm/review/react/useReviewedRun.js +257 -0
- package/dist/esm/review/react/useReviewedRun.js.map +1 -0
- package/dist/esm/review/receipt.d.ts +4 -1
- package/dist/esm/review/receipt.d.ts.map +1 -1
- package/dist/esm/review/receipt.js +6 -2
- package/dist/esm/review/receipt.js.map +1 -1
- package/dist/esm/review/relayr.d.ts +13 -4
- package/dist/esm/review/relayr.d.ts.map +1 -1
- package/dist/esm/review/relayr.js +50 -8
- package/dist/esm/review/relayr.js.map +1 -1
- package/dist/esm/review/relayrSend.d.ts +135 -0
- package/dist/esm/review/relayrSend.d.ts.map +1 -0
- package/dist/esm/review/relayrSend.js +934 -0
- package/dist/esm/review/relayrSend.js.map +1 -0
- package/dist/esm/review/reviewQueue.d.ts +10 -9
- package/dist/esm/review/reviewQueue.d.ts.map +1 -1
- package/dist/esm/review/reviewQueue.js +17 -26
- package/dist/esm/review/reviewQueue.js.map +1 -1
- package/dist/esm/review/reviewRequests.d.ts +86 -0
- package/dist/esm/review/reviewRequests.d.ts.map +1 -0
- package/dist/esm/review/reviewRequests.js +263 -0
- package/dist/esm/review/reviewRequests.js.map +1 -0
- package/dist/esm/review/safeRelayr.d.ts +3 -1
- package/dist/esm/review/safeRelayr.d.ts.map +1 -1
- package/dist/esm/review/safeRelayr.js +5 -1
- package/dist/esm/review/safeRelayr.js.map +1 -1
- package/dist/esm/review/safeSend.d.ts +69 -0
- package/dist/esm/review/safeSend.d.ts.map +1 -0
- package/dist/esm/review/safeSend.js +303 -0
- package/dist/esm/review/safeSend.js.map +1 -0
- package/dist/esm/review/send.d.ts +241 -0
- package/dist/esm/review/send.d.ts.map +1 -0
- package/dist/esm/review/send.js +1011 -0
- package/dist/esm/review/send.js.map +1 -0
- package/dist/esm/review/sequence.d.ts +77 -0
- package/dist/esm/review/sequence.d.ts.map +1 -0
- package/dist/esm/review/sequence.js +223 -0
- package/dist/esm/review/sequence.js.map +1 -0
- package/dist/esm/review/sign.d.ts +109 -0
- package/dist/esm/review/sign.d.ts.map +1 -0
- package/dist/esm/review/sign.js +368 -0
- package/dist/esm/review/sign.js.map +1 -0
- package/dist/esm/review/simulation.d.ts +41 -2
- package/dist/esm/review/simulation.d.ts.map +1 -1
- package/dist/esm/review/simulation.js +95 -29
- package/dist/esm/review/simulation.js.map +1 -1
- package/dist/esm/review/transaction-message.d.ts +13 -0
- package/dist/esm/review/transaction-message.d.ts.map +1 -1
- package/dist/esm/review/transaction-message.js +23 -0
- package/dist/esm/review/transaction-message.js.map +1 -1
- package/dist/esm/review/transactionReview.d.ts +27 -19
- package/dist/esm/review/transactionReview.d.ts.map +1 -1
- package/dist/esm/review/transactionReview.js +19 -56
- package/dist/esm/review/transactionReview.js.map +1 -1
- package/dist/esm/review/wallet.d.ts +82 -0
- package/dist/esm/review/wallet.d.ts.map +1 -0
- package/dist/esm/review/wallet.js +150 -0
- package/dist/esm/review/wallet.js.map +1 -0
- package/dist/esm/review/writeHold.d.ts +100 -12
- package/dist/esm/review/writeHold.d.ts.map +1 -1
- package/dist/esm/review/writeHold.js +59 -13
- package/dist/esm/review/writeHold.js.map +1 -1
- package/dist/esm/review/writeRecovery.d.ts +6 -1
- package/dist/esm/review/writeRecovery.d.ts.map +1 -1
- package/dist/esm/review/writeRecovery.js +111 -43
- package/dist/esm/review/writeRecovery.js.map +1 -1
- package/dist/esm/safeService.d.ts +27 -4
- package/dist/esm/safeService.d.ts.map +1 -1
- package/dist/esm/safeService.js +119 -4
- package/dist/esm/safeService.js.map +1 -1
- package/dist/esm/testing.d.ts +24 -0
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js +23 -1
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/v6/defifa.d.ts.map +1 -1
- package/dist/esm/v6/defifa.js +24 -23
- package/dist/esm/v6/defifa.js.map +1 -1
- package/dist/esm/v6/executionErrors.d.ts.map +1 -1
- package/dist/esm/v6/executionErrors.js +3 -2
- package/dist/esm/v6/executionErrors.js.map +1 -1
- package/dist/esm/v6/pay.d.ts +25 -8
- package/dist/esm/v6/pay.d.ts.map +1 -1
- package/dist/esm/v6/pay.js +115 -22
- package/dist/esm/v6/pay.js.map +1 -1
- package/dist/esm/v6/suckers.d.ts +30 -0
- package/dist/esm/v6/suckers.d.ts.map +1 -1
- package/dist/esm/v6/suckers.js +67 -5
- package/dist/esm/v6/suckers.js.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WALLET_NOT_READY_LINE = void 0;
|
|
4
|
+
exports.walletReady = walletReady;
|
|
5
|
+
exports.viemWalletAdapter = viemWalletAdapter;
|
|
6
|
+
exports.unsupportedWalletRequest = unsupportedWalletRequest;
|
|
7
|
+
exports.selfReviewingAdapter = selfReviewingAdapter;
|
|
8
|
+
const lineError_js_1 = require("./lineError.js");
|
|
9
|
+
const pause_js_1 = require("../pause.js");
|
|
10
|
+
/** How long a wallet's `ready` may take before nothing is sent. */
|
|
11
|
+
const WALLET_READY_MS = 10_000;
|
|
12
|
+
exports.WALLET_NOT_READY_LINE = "Your wallet's connection could not be confirmed. Nothing was sent; try again.";
|
|
13
|
+
/**
|
|
14
|
+
* Awaits `adapter.ready`, at most {@link WALLET_READY_MS}. A rejection or
|
|
15
|
+
* timeout throws {@link WALLET_NOT_READY_LINE}: the wallet is never taken
|
|
16
|
+
* for a plain one it may not be.
|
|
17
|
+
*/
|
|
18
|
+
async function walletReady(adapter) {
|
|
19
|
+
if (!adapter.ready)
|
|
20
|
+
return;
|
|
21
|
+
try {
|
|
22
|
+
await (0, pause_js_1.timeout)(Promise.resolve().then(() => adapter.ready()), WALLET_READY_MS);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
throw Object.assign(new lineError_js_1.ReviewLineError(exports.WALLET_NOT_READY_LINE), {
|
|
26
|
+
cause: error,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The connected account and the wallet client. The account, chain and Safe
|
|
32
|
+
* mode are read before the client is fetched and again after, so a wallet
|
|
33
|
+
* that switched in between is refused instead of signing in the new one.
|
|
34
|
+
*/
|
|
35
|
+
async function connection(options) {
|
|
36
|
+
const asked = options.account();
|
|
37
|
+
if (!asked)
|
|
38
|
+
throw new lineError_js_1.ReviewLineError("Connect a wallet first.");
|
|
39
|
+
const chainId = options.chainId();
|
|
40
|
+
const safe = options.isSafe();
|
|
41
|
+
const client = await options.walletClient();
|
|
42
|
+
if (options.account()?.toLowerCase() !== asked.toLowerCase()) {
|
|
43
|
+
throw new lineError_js_1.ReviewLineError("The connected account changed. Review again.");
|
|
44
|
+
}
|
|
45
|
+
if (options.chainId() !== chainId || options.isSafe() !== safe) {
|
|
46
|
+
throw new lineError_js_1.ReviewLineError("Wallet connection changed. Review the transaction again.");
|
|
47
|
+
}
|
|
48
|
+
return { account: asked, client, safe };
|
|
49
|
+
}
|
|
50
|
+
/** Refuses a signature once the account or Safe mode has changed since `connection` read them. */
|
|
51
|
+
function unchanged(options, { account, safe }) {
|
|
52
|
+
if (options.account()?.toLowerCase() !== account.toLowerCase()) {
|
|
53
|
+
throw new lineError_js_1.ReviewLineError("The connected account changed. Review again.");
|
|
54
|
+
}
|
|
55
|
+
if (options.isSafe() !== safe) {
|
|
56
|
+
throw new lineError_js_1.ReviewLineError("Wallet connection changed. Review the transaction again.");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The chain a write is sent on: the client's own when it is that chain, so
|
|
61
|
+
* its formatters apply. viem checks the wallet is on it before sending.
|
|
62
|
+
*/
|
|
63
|
+
function chainOf(client, chainId) {
|
|
64
|
+
return client.chain?.id === chainId
|
|
65
|
+
? client.chain
|
|
66
|
+
: { id: chainId };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A {@link WalletAdapter} over a viem wallet client (wagmi's, say). Every
|
|
70
|
+
* write and signature names the connected account read when it is asked,
|
|
71
|
+
* and every send names its chain, so a wallet that moved refuses it.
|
|
72
|
+
*/
|
|
73
|
+
function viemWalletAdapter(options) {
|
|
74
|
+
const { ready } = options;
|
|
75
|
+
return {
|
|
76
|
+
...(ready
|
|
77
|
+
? {
|
|
78
|
+
ready: async () => {
|
|
79
|
+
await ready();
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
: {}),
|
|
83
|
+
kind: "wallet",
|
|
84
|
+
account: options.account,
|
|
85
|
+
chainId: options.chainId,
|
|
86
|
+
isSafe: options.isSafe,
|
|
87
|
+
switchChain: async (chainId) => {
|
|
88
|
+
await options.switchChain(chainId);
|
|
89
|
+
},
|
|
90
|
+
async sendTransaction({ chainId, to, data, value, gas }) {
|
|
91
|
+
const { account, client } = await connection(options);
|
|
92
|
+
return client.sendTransaction({
|
|
93
|
+
account,
|
|
94
|
+
chain: chainOf(client, chainId),
|
|
95
|
+
to,
|
|
96
|
+
data,
|
|
97
|
+
value,
|
|
98
|
+
...(gas === undefined ? {} : { gas }),
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
async signTypedData(typedData) {
|
|
102
|
+
const connected = await connection(options);
|
|
103
|
+
unchanged(options, connected);
|
|
104
|
+
const { account, client } = connected;
|
|
105
|
+
// viem does not check the wallet's chain against the domain's.
|
|
106
|
+
const chainId = typedData.domain?.chainId;
|
|
107
|
+
if (chainId !== undefined && options.chainId() !== Number(chainId)) {
|
|
108
|
+
throw new lineError_js_1.ReviewLineError("Your wallet changed networks. Review again.");
|
|
109
|
+
}
|
|
110
|
+
return client.signTypedData({ ...typedData, account });
|
|
111
|
+
},
|
|
112
|
+
async signMessage(message) {
|
|
113
|
+
const connected = await connection(options);
|
|
114
|
+
unchanged(options, connected);
|
|
115
|
+
const { account, client } = connected;
|
|
116
|
+
return client.signMessage({ account, message });
|
|
117
|
+
},
|
|
118
|
+
async sendCalls(chainId, calls) {
|
|
119
|
+
const { account, client } = await connection(options);
|
|
120
|
+
const { id } = await client.sendCalls({
|
|
121
|
+
account,
|
|
122
|
+
chain: chainOf(client, chainId),
|
|
123
|
+
calls: calls.map(({ to, data, value }) => ({ to, data, value })),
|
|
124
|
+
});
|
|
125
|
+
return id;
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/** EIP-1193 4200, as Signa's connector refuses a request it does not take. */
|
|
130
|
+
function unsupportedWalletRequest() {
|
|
131
|
+
return Object.assign(new lineError_js_1.ReviewLineError("This wallet request is not supported."), {
|
|
132
|
+
code: 4200,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* A {@link WalletAdapter} for a wallet that reviews on its own page (Signa).
|
|
137
|
+
* It takes raw calls through `submit` only; every other method is refused
|
|
138
|
+
* with EIP-1193 4200.
|
|
139
|
+
*/
|
|
140
|
+
function selfReviewingAdapter(options) {
|
|
141
|
+
const refuse = () => {
|
|
142
|
+
throw unsupportedWalletRequest();
|
|
143
|
+
};
|
|
144
|
+
const reject = () => Promise.reject(unsupportedWalletRequest());
|
|
145
|
+
return {
|
|
146
|
+
kind: "self-reviewing",
|
|
147
|
+
account: options.account,
|
|
148
|
+
chainId: refuse,
|
|
149
|
+
isSafe: refuse,
|
|
150
|
+
switchChain: reject,
|
|
151
|
+
sendTransaction: reject,
|
|
152
|
+
signTypedData: reject,
|
|
153
|
+
signMessage: reject,
|
|
154
|
+
submitToReviewer: (request) => options.submit(request),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/review/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { ReviewLineError } from "./lineError.js";
|
|
1
2
|
import { type Address, type Hex, type PublicClient, type TransactionReceipt } from "viem";
|
|
2
3
|
import { type SafeQueuedTransaction, type SafeServiceOptions } from "../safeService.js";
|
|
3
4
|
import { type HeldWriteStorage, type ReviewedWriteRecoveryInput, type ReviewedWriteRecoveryRecord } from "./writeRecovery.js";
|
|
5
|
+
import type { ReviewedCall } from "./send.js";
|
|
4
6
|
/** A saved success the user hasn't acknowledged: it blocks sending the action again. */
|
|
5
7
|
export type UnacknowledgedSuccess = {
|
|
6
8
|
result: "success";
|
|
@@ -129,13 +131,13 @@ export type WriteHeldState = Exclude<WriteHoldStateOf, {
|
|
|
129
131
|
reservation?: string;
|
|
130
132
|
};
|
|
131
133
|
/** A send was refused because the exact call is held; `state` says how. */
|
|
132
|
-
export declare class WriteHeldError extends
|
|
134
|
+
export declare class WriteHeldError extends ReviewLineError {
|
|
133
135
|
readonly state: WriteHeldState;
|
|
134
136
|
readonly name = "WriteHeldError";
|
|
135
137
|
constructor(state: WriteHeldState);
|
|
136
138
|
}
|
|
137
139
|
/** The account's nonce couldn't be read, so the wallet never opened. */
|
|
138
|
-
export declare class WriteHoldNonceError extends
|
|
140
|
+
export declare class WriteHoldNonceError extends ReviewLineError {
|
|
139
141
|
readonly cause: unknown;
|
|
140
142
|
readonly name = "WriteHoldNonceError";
|
|
141
143
|
constructor(cause: unknown);
|
|
@@ -145,13 +147,13 @@ export declare class WriteHoldNonceError extends Error {
|
|
|
145
147
|
* reserved, and maybe settled (`settled`), while it was open. Review again;
|
|
146
148
|
* the next review sends normally.
|
|
147
149
|
*/
|
|
148
|
-
export declare class WriteHoldStaleReviewError extends
|
|
150
|
+
export declare class WriteHoldStaleReviewError extends ReviewLineError {
|
|
149
151
|
readonly settled?: WriteHoldSettled | undefined;
|
|
150
152
|
readonly name = "WriteHoldStaleReviewError";
|
|
151
153
|
constructor(settled?: WriteHoldSettled | undefined);
|
|
152
154
|
}
|
|
153
155
|
/** The exact call is already being sent from another flow or tab. */
|
|
154
|
-
export declare class WriteHoldBusyError extends
|
|
156
|
+
export declare class WriteHoldBusyError extends ReviewLineError {
|
|
155
157
|
readonly name = "WriteHoldBusyError";
|
|
156
158
|
constructor();
|
|
157
159
|
}
|
|
@@ -201,14 +203,7 @@ export declare function createWriteHold(options?: {
|
|
|
201
203
|
};
|
|
202
204
|
}): {
|
|
203
205
|
open: (call: ReviewedWriteRecoveryInput, { legacy, }?: {
|
|
204
|
-
legacy?:
|
|
205
|
-
call: ReviewedWriteRecoveryInput["call"];
|
|
206
|
-
} | {
|
|
207
|
-
match: {
|
|
208
|
-
to: Address;
|
|
209
|
-
selector: Hex;
|
|
210
|
-
};
|
|
211
|
-
})[];
|
|
206
|
+
legacy?: WriteHoldLegacySource[];
|
|
212
207
|
}) => {
|
|
213
208
|
peek: () => WriteHoldState;
|
|
214
209
|
state(client: WriteHoldClient, checks?: {
|
|
@@ -254,6 +249,8 @@ export declare function createWriteHold(options?: {
|
|
|
254
249
|
* record is held and the user hasn't acknowledged it. Pure, from storage.
|
|
255
250
|
*/
|
|
256
251
|
unacknowledgedSuccess(skip?: (hash: Hex) => boolean): UnacknowledgedSuccess | undefined;
|
|
252
|
+
/** Whether `reservation` was released (the user's exit, or nothing sent), never settled. */
|
|
253
|
+
released(reservation: string): boolean;
|
|
257
254
|
/** How `reservation` settled, if it is this key's latest and settled. */
|
|
258
255
|
settlementOf(reservation: string): WriteHoldSettled | undefined;
|
|
259
256
|
/**
|
|
@@ -318,6 +315,8 @@ export declare function createWriteHold(options?: {
|
|
|
318
315
|
* record is held and the user hasn't acknowledged it. Pure, from storage.
|
|
319
316
|
*/
|
|
320
317
|
unacknowledgedSuccess(skip?: (hash: Hex) => boolean): UnacknowledgedSuccess | undefined;
|
|
318
|
+
/** Whether `reservation` was released (the user's exit, or nothing sent), never settled. */
|
|
319
|
+
released(reservation: string): boolean;
|
|
321
320
|
/** How `reservation` settled, if it is this key's latest and settled. */
|
|
322
321
|
settlementOf(reservation: string): WriteHoldSettled | undefined;
|
|
323
322
|
/**
|
|
@@ -338,8 +337,97 @@ export declare function createWriteHold(options?: {
|
|
|
338
337
|
reviewLine: () => "This browser can't remember pending transactions. Check your wallet before repeating one." | null;
|
|
339
338
|
/** Stop every settle poll and the tab listener (tests, teardown). */
|
|
340
339
|
dispose: () => void;
|
|
340
|
+
/** Safe's service as the hold reads it, every read bounded. */
|
|
341
|
+
safeService: SafeServiceOptions;
|
|
342
|
+
};
|
|
343
|
+
/**
|
|
344
|
+
* A key an earlier version held an intent's write under: an old namespace,
|
|
345
|
+
* `{ call }` for an exact call, or `{ match }` for every exact-call write to
|
|
346
|
+
* `to` with that selector (see the hold's `open`).
|
|
347
|
+
*/
|
|
348
|
+
export type WriteHoldLegacySource = string | {
|
|
349
|
+
call: ReviewedWriteRecoveryInput["call"];
|
|
350
|
+
} | {
|
|
351
|
+
match: {
|
|
352
|
+
to: Address;
|
|
353
|
+
selector: Hex;
|
|
354
|
+
};
|
|
341
355
|
};
|
|
342
356
|
export type WriteHold = ReturnType<typeof createWriteHold>;
|
|
343
357
|
export type WriteHoldHandle = ReturnType<WriteHold["open"]>;
|
|
358
|
+
/** The write hold one step is sent under: its intent's, or its exact call's. */
|
|
359
|
+
export declare function openStepHold(hold: WriteHold, account: Address, safe: boolean, call: Pick<ReviewedCall, "chainId" | "to" | "data" | "value" | "intent" | "legacy">): {
|
|
360
|
+
peek: () => WriteHoldState;
|
|
361
|
+
state(client: WriteHoldClient, checks?: {
|
|
362
|
+
effect?: (chainId: number) => Promise<boolean>;
|
|
363
|
+
}): Promise<WriteHoldState>;
|
|
364
|
+
send<T>(client: WriteHoldClient, run: (gate: WriteHoldGate) => Promise<T>): Promise<T>;
|
|
365
|
+
exit(snapshot: WriteHoldState, acknowledgement: {
|
|
366
|
+
checkedWallet: true;
|
|
367
|
+
}, client: WriteHoldClient): Promise<{
|
|
368
|
+
released: boolean;
|
|
369
|
+
state: WriteHoldState;
|
|
370
|
+
}>;
|
|
371
|
+
onReceipt: (receipt: TransactionReceipt, client: WriteHoldClient, proof?: {
|
|
372
|
+
calls: readonly ReviewedWriteRecoveryInput["call"][];
|
|
373
|
+
batch?: boolean;
|
|
374
|
+
} | undefined) => Promise<WriteHoldState>;
|
|
375
|
+
onUnproven: (client: WriteHoldClient, proposalHash?: `0x${string}` | undefined) => Promise<WriteHoldState>;
|
|
376
|
+
onExecuted: (client: WriteHoldClient, executionHash?: `0x${string}` | undefined) => Promise<WriteHoldState>;
|
|
377
|
+
attachHash: (client: WriteHoldClient, hash: `0x${string}`) => Promise<WriteHoldState>;
|
|
378
|
+
attachSafeNonce: (client: WriteHoldClient, args_1: {
|
|
379
|
+
safeTxHash: Hex;
|
|
380
|
+
nonce: number;
|
|
381
|
+
}) => Promise<WriteHoldState>;
|
|
382
|
+
adopt: (snapshot: WriteHoldState, evidence?: {
|
|
383
|
+
nonce?: number | bigint;
|
|
384
|
+
sentNonce?: number | bigint;
|
|
385
|
+
fromBlock?: bigint;
|
|
386
|
+
submittedAt?: number;
|
|
387
|
+
hash?: Hex;
|
|
388
|
+
safe?: {
|
|
389
|
+
safeTxHash: Hex;
|
|
390
|
+
};
|
|
391
|
+
} | undefined, client?: WriteHoldClient | undefined) => Promise<WriteHoldState | (WriteHoldState & {
|
|
392
|
+
declined?: "refused" | "unreadable";
|
|
393
|
+
})>;
|
|
394
|
+
/**
|
|
395
|
+
* Every state this controller reads or makes for the call, and other
|
|
396
|
+
* tabs' changes. The latest one, if any, is replayed at once.
|
|
397
|
+
*/
|
|
398
|
+
subscribe(listener: (state: WriteHoldState) => void): () => void;
|
|
399
|
+
/**
|
|
400
|
+
* The send gate's evidence for this key: its saved success, while no
|
|
401
|
+
* record is held and the user hasn't acknowledged it. Pure, from storage.
|
|
402
|
+
*/
|
|
403
|
+
unacknowledgedSuccess(skip?: (hash: Hex) => boolean): UnacknowledgedSuccess | undefined;
|
|
404
|
+
/** Whether `reservation` was released (the user's exit, or nothing sent), never settled. */
|
|
405
|
+
released(reservation: string): boolean;
|
|
406
|
+
/** How `reservation` settled, if it is this key's latest and settled. */
|
|
407
|
+
settlementOf(reservation: string): WriteHoldSettled | undefined;
|
|
408
|
+
/**
|
|
409
|
+
* The user acknowledged a success the hold settled while they were
|
|
410
|
+
* away (or a view saw it settle): its saved settlement is marked
|
|
411
|
+
* acknowledged, keeping its result for every reader, so it blocks no
|
|
412
|
+
* send. Under the call's lock; nothing is sent.
|
|
413
|
+
*/
|
|
414
|
+
acknowledge(settled: {
|
|
415
|
+
result: "success" | "failed";
|
|
416
|
+
hash: Hex;
|
|
417
|
+
}): Promise<WriteHoldState>;
|
|
418
|
+
};
|
|
419
|
+
/**
|
|
420
|
+
* The one call a Safe app proposes a batch of `calls` as (`ReviewedAction`'s
|
|
421
|
+
* `batch`), as its hold holds it: their MultiSend, under the first call's
|
|
422
|
+
* intent, or else `safeBatchIntent` of the calls.
|
|
423
|
+
*/
|
|
424
|
+
export declare function safeBatchCall(account: Address, calls: readonly Pick<ReviewedCall, "chainId" | "to" | "data" | "value" | "intent" | "legacy">[]): {
|
|
425
|
+
chainId: number;
|
|
426
|
+
to: `0x${string}`;
|
|
427
|
+
data: `0x${string}`;
|
|
428
|
+
value: bigint;
|
|
429
|
+
intent: string;
|
|
430
|
+
legacy: readonly WriteHoldLegacySource[] | undefined;
|
|
431
|
+
};
|
|
344
432
|
export {};
|
|
345
433
|
//# sourceMappingURL=writeHold.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeHold.d.ts","sourceRoot":"","sources":["../../../src/review/writeHold.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,MAAM,CAAC;AACd,OAAO,EAOL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAgB3B,OAAO,EAYL,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EACjC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"writeHold.d.ts","sourceRoot":"","sources":["../../../src/review/writeHold.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WriteHoldBusyError = exports.WriteHoldStaleReviewError = exports.WriteHoldNonceError = exports.WriteHeldError = void 0;
|
|
4
4
|
exports.createWriteHold = createWriteHold;
|
|
5
|
+
exports.openStepHold = openStepHold;
|
|
6
|
+
exports.safeBatchCall = safeBatchCall;
|
|
7
|
+
const lineError_js_1 = require("./lineError.js");
|
|
5
8
|
const viem_1 = require("viem");
|
|
6
9
|
const safeService_js_1 = require("../safeService.js");
|
|
7
10
|
const messages_js_1 = require("./messages.js");
|
|
8
11
|
const writeRecovery_js_1 = require("./writeRecovery.js");
|
|
9
12
|
const untrusted_js_1 = require("../untrusted.js");
|
|
13
|
+
const safe_js_1 = require("../safe.js");
|
|
14
|
+
const intents_js_1 = require("./intents.js");
|
|
10
15
|
const relayr_js_1 = require("./relayr.js");
|
|
11
16
|
const tabState_js_1 = require("./tabState.js");
|
|
12
17
|
/** `sent` is the transaction at `hash`, exactly `record`'s call, from its account, on its chain. */
|
|
@@ -33,7 +38,7 @@ function ungated(state) {
|
|
|
33
38
|
: { ...state, exit: false };
|
|
34
39
|
}
|
|
35
40
|
/** A send was refused because the exact call is held; `state` says how. */
|
|
36
|
-
class WriteHeldError extends
|
|
41
|
+
class WriteHeldError extends lineError_js_1.ReviewLineError {
|
|
37
42
|
constructor(state) {
|
|
38
43
|
super(state.line);
|
|
39
44
|
this.state = state;
|
|
@@ -42,7 +47,7 @@ class WriteHeldError extends Error {
|
|
|
42
47
|
}
|
|
43
48
|
exports.WriteHeldError = WriteHeldError;
|
|
44
49
|
/** The account's nonce couldn't be read, so the wallet never opened. */
|
|
45
|
-
class WriteHoldNonceError extends
|
|
50
|
+
class WriteHoldNonceError extends lineError_js_1.ReviewLineError {
|
|
46
51
|
constructor(cause) {
|
|
47
52
|
super(messages_js_1.WRITE_HOLD_NONCE_LINE);
|
|
48
53
|
this.cause = cause;
|
|
@@ -55,7 +60,7 @@ exports.WriteHoldNonceError = WriteHoldNonceError;
|
|
|
55
60
|
* reserved, and maybe settled (`settled`), while it was open. Review again;
|
|
56
61
|
* the next review sends normally.
|
|
57
62
|
*/
|
|
58
|
-
class WriteHoldStaleReviewError extends
|
|
63
|
+
class WriteHoldStaleReviewError extends lineError_js_1.ReviewLineError {
|
|
59
64
|
constructor(settled) {
|
|
60
65
|
super(messages_js_1.WRITE_HOLD_STALE_REVIEW_LINE);
|
|
61
66
|
this.settled = settled;
|
|
@@ -64,7 +69,7 @@ class WriteHoldStaleReviewError extends Error {
|
|
|
64
69
|
}
|
|
65
70
|
exports.WriteHoldStaleReviewError = WriteHoldStaleReviewError;
|
|
66
71
|
/** The exact call is already being sent from another flow or tab. */
|
|
67
|
-
class WriteHoldBusyError extends
|
|
72
|
+
class WriteHoldBusyError extends lineError_js_1.ReviewLineError {
|
|
68
73
|
constructor() {
|
|
69
74
|
super("This transaction is already open in another window.");
|
|
70
75
|
this.name = "WriteHoldBusyError";
|
|
@@ -223,7 +228,7 @@ function createWriteHold(options = {}) {
|
|
|
223
228
|
headers: response.headers,
|
|
224
229
|
})),
|
|
225
230
|
new Promise((_, reject) => {
|
|
226
|
-
timer = setTimeout(() => reject(new
|
|
231
|
+
timer = setTimeout(() => reject(new lineError_js_1.ReviewLineError("Safe's service did not answer in time.")), SAFE_SERVICE_READ_MS);
|
|
227
232
|
}),
|
|
228
233
|
]).finally(() => clearTimeout(timer));
|
|
229
234
|
},
|
|
@@ -368,14 +373,16 @@ function createWriteHold(options = {}) {
|
|
|
368
373
|
// failure waits for finality. A block the node no longer shows as
|
|
369
374
|
// canonical proves nothing and keeps the hold.
|
|
370
375
|
const verdict = await (0, writeRecovery_js_1.verifyReviewedWriteReceipt)(client, record, receipt, proof, { finality: record.safe }).catch(() => null);
|
|
371
|
-
if (verdict
|
|
376
|
+
if (verdict) {
|
|
372
377
|
const settled = {
|
|
373
378
|
result: verdict,
|
|
374
379
|
hash: receipt.transactionHash.toLowerCase(),
|
|
375
380
|
};
|
|
376
|
-
//
|
|
381
|
+
// Saved before the hold ends, so no reader sees it clear without its
|
|
382
|
+
// result: another tab, a reload, a follow timer.
|
|
377
383
|
recovery.markSettled(record, settled);
|
|
378
|
-
|
|
384
|
+
if (release(record))
|
|
385
|
+
return clear(settled, record.id);
|
|
379
386
|
}
|
|
380
387
|
if (!record.safe &&
|
|
381
388
|
receipt.status === "reverted" &&
|
|
@@ -686,13 +693,14 @@ function createWriteHold(options = {}) {
|
|
|
686
693
|
}
|
|
687
694
|
// It ran: with its receipt unreadable, the canonical log at a
|
|
688
695
|
// finalized block carries its result. Never a resend exit.
|
|
689
|
-
if (end.execution
|
|
696
|
+
if (end.execution) {
|
|
690
697
|
const settled = {
|
|
691
698
|
result: end.execution.status,
|
|
692
699
|
hash: end.execution.executionHash,
|
|
693
700
|
};
|
|
694
701
|
recovery.markSettled(record, settled);
|
|
695
|
-
|
|
702
|
+
if (release(record))
|
|
703
|
+
return clear(settled, record.id);
|
|
696
704
|
}
|
|
697
705
|
}
|
|
698
706
|
// Its wait is bounded like any unchecked write, the clock restarted by
|
|
@@ -913,7 +921,7 @@ function createWriteHold(options = {}) {
|
|
|
913
921
|
},
|
|
914
922
|
afterSubmit(hash, proposal) {
|
|
915
923
|
if (!attempt)
|
|
916
|
-
throw new
|
|
924
|
+
throw new lineError_js_1.ReviewLineError("Hold the write before the wallet opens.");
|
|
917
925
|
try {
|
|
918
926
|
attempt = recovery.submitted(hash, attempt);
|
|
919
927
|
}
|
|
@@ -979,7 +987,7 @@ function createWriteHold(options = {}) {
|
|
|
979
987
|
*/
|
|
980
988
|
async exit(snapshot, acknowledgement, client) {
|
|
981
989
|
if (acknowledgement?.checkedWallet !== true)
|
|
982
|
-
throw new
|
|
990
|
+
throw new lineError_js_1.ReviewLineError("Release a held write only after the user confirms they checked their wallet.");
|
|
983
991
|
const result = await locked(async () => {
|
|
984
992
|
const now = await inspect(client, lastEffect);
|
|
985
993
|
if (snapshot.status === "clear" ||
|
|
@@ -1097,7 +1105,7 @@ function createWriteHold(options = {}) {
|
|
|
1097
1105
|
try {
|
|
1098
1106
|
const { released } = await hooks.across((work) => recovery.withLock(work), () => {
|
|
1099
1107
|
if (!free())
|
|
1100
|
-
throw new
|
|
1108
|
+
throw new lineError_js_1.ReviewLineError("Held since the app's read.");
|
|
1101
1109
|
reserve();
|
|
1102
1110
|
adopted = true;
|
|
1103
1111
|
}, recovery.rejected, Promise.resolve(), hooks.generations());
|
|
@@ -1177,6 +1185,10 @@ function createWriteHold(options = {}) {
|
|
|
1177
1185
|
}
|
|
1178
1186
|
: undefined;
|
|
1179
1187
|
},
|
|
1188
|
+
/** Whether `reservation` was released (the user's exit, or nothing sent), never settled. */
|
|
1189
|
+
released(reservation) {
|
|
1190
|
+
return recovery.released(reservation);
|
|
1191
|
+
},
|
|
1180
1192
|
/** How `reservation` settled, if it is this key's latest and settled. */
|
|
1181
1193
|
settlementOf(reservation) {
|
|
1182
1194
|
const now = peek();
|
|
@@ -1624,6 +1636,9 @@ function createWriteHold(options = {}) {
|
|
|
1624
1636
|
* How a reservation this intent stood for settled, on its own key or a
|
|
1625
1637
|
* legacy one, whichever hold is shown now.
|
|
1626
1638
|
*/
|
|
1639
|
+
released(reservation) {
|
|
1640
|
+
return [own, ...delegates].some((handle) => handle.released(reservation));
|
|
1641
|
+
},
|
|
1627
1642
|
settlementOf(reservation) {
|
|
1628
1643
|
for (const handle of [own, ...delegates]) {
|
|
1629
1644
|
const settled = handle.settlementOf(reservation);
|
|
@@ -1785,6 +1800,39 @@ function createWriteHold(options = {}) {
|
|
|
1785
1800
|
reviewLine: () => (storage.durable() ? null : messages_js_1.WRITE_HOLD_IN_TAB_LINE),
|
|
1786
1801
|
/** Stop every settle poll and the tab listener (tests, teardown). */
|
|
1787
1802
|
dispose,
|
|
1803
|
+
/** Safe's service as the hold reads it, every read bounded. */
|
|
1804
|
+
safeService: service,
|
|
1805
|
+
};
|
|
1806
|
+
}
|
|
1807
|
+
/** The write hold one step is sent under: its intent's, or its exact call's. */
|
|
1808
|
+
function openStepHold(hold, account, safe, call) {
|
|
1809
|
+
return hold.open({
|
|
1810
|
+
chainId: call.chainId,
|
|
1811
|
+
account,
|
|
1812
|
+
safe,
|
|
1813
|
+
call: { to: call.to, data: call.data, value: call.value ?? 0n },
|
|
1814
|
+
...(call.intent ? { namespace: call.intent } : {}),
|
|
1815
|
+
}, call.legacy ? { legacy: [...call.legacy] } : undefined);
|
|
1816
|
+
}
|
|
1817
|
+
/**
|
|
1818
|
+
* The one call a Safe app proposes a batch of `calls` as (`ReviewedAction`'s
|
|
1819
|
+
* `batch`), as its hold holds it: their MultiSend, under the first call's
|
|
1820
|
+
* intent, or else `safeBatchIntent` of the calls.
|
|
1821
|
+
*/
|
|
1822
|
+
function safeBatchCall(account, calls) {
|
|
1823
|
+
const [{ chainId, intent, legacy }] = calls;
|
|
1824
|
+
const inner = calls.map(({ to, data, value }) => ({
|
|
1825
|
+
to,
|
|
1826
|
+
data,
|
|
1827
|
+
value: value ?? 0n,
|
|
1828
|
+
}));
|
|
1829
|
+
return {
|
|
1830
|
+
chainId,
|
|
1831
|
+
to: safe_js_1.MULTI_SEND_CALL_ONLY,
|
|
1832
|
+
data: (0, safe_js_1.encodeMultiSend)(inner),
|
|
1833
|
+
value: 0n,
|
|
1834
|
+
intent: intent ?? (0, intents_js_1.safeBatchIntent)({ chainId, safe: account, calls: inner }),
|
|
1835
|
+
legacy,
|
|
1788
1836
|
};
|
|
1789
1837
|
}
|
|
1790
1838
|
//# sourceMappingURL=writeHold.js.map
|