@bananapus/nana-sdk-core 3.5.2 → 5.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 +495 -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 +56 -0
- package/dist/cjs/review/confirm.d.ts.map +1 -0
- package/dist/cjs/review/confirm.js +99 -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 +10 -8
- 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 +4 -0
- package/dist/cjs/review/heldWrite.d.ts.map +1 -1
- package/dist/cjs/review/heldWrite.js +35 -31
- package/dist/cjs/review/heldWrite.js.map +1 -1
- package/dist/cjs/review/index.d.ts +12 -1
- package/dist/cjs/review/index.d.ts.map +1 -1
- package/dist/cjs/review/index.js +29 -1
- 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 +72 -0
- package/dist/cjs/review/lineError.d.ts.map +1 -0
- package/dist/cjs/review/lineError.js +76 -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 +61 -0
- package/dist/cjs/review/plan.d.ts.map +1 -0
- package/dist/cjs/review/plan.js +143 -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/useHeldSend.js +3 -4
- package/dist/cjs/review/react/useHeldSend.js.map +1 -1
- package/dist/cjs/review/react/useHeldWrite.d.ts.map +1 -1
- package/dist/cjs/review/react/useHeldWrite.js +2 -1
- package/dist/cjs/review/react/useHeldWrite.js.map +1 -1
- package/dist/cjs/review/react/useReviewedRun.d.ts +122 -0
- package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/cjs/review/react/useReviewedRun.js +443 -0
- package/dist/cjs/review/react/useReviewedRun.js.map +1 -0
- package/dist/cjs/review/receipt.d.ts +37 -1
- package/dist/cjs/review/receipt.d.ts.map +1 -1
- package/dist/cjs/review/receipt.js +76 -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 +52 -8
- package/dist/cjs/review/relayr.js.map +1 -1
- package/dist/cjs/review/relayrSend.d.ts +106 -0
- package/dist/cjs/review/relayrSend.d.ts.map +1 -0
- package/dist/cjs/review/relayrSend.js +795 -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 +9 -9
- 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 +306 -0
- package/dist/cjs/review/safeSend.js.map +1 -0
- package/dist/cjs/review/send.d.ts +272 -0
- package/dist/cjs/review/send.d.ts.map +1 -0
- package/dist/cjs/review/send.js +1163 -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 +111 -0
- package/dist/cjs/review/sign.d.ts.map +1 -0
- package/dist/cjs/review/sign.js +378 -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 +98 -0
- package/dist/cjs/review/wallet.d.ts.map +1 -0
- package/dist/cjs/review/wallet.js +234 -0
- package/dist/cjs/review/wallet.js.map +1 -0
- package/dist/cjs/review/writeHold.d.ts +138 -13
- package/dist/cjs/review/writeHold.d.ts.map +1 -1
- package/dist/cjs/review/writeHold.js +98 -18
- package/dist/cjs/review/writeHold.js.map +1 -1
- package/dist/cjs/review/writeRecovery.d.ts +17 -1
- package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
- package/dist/cjs/review/writeRecovery.js +146 -45
- 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 +56 -0
- package/dist/esm/review/confirm.d.ts.map +1 -0
- package/dist/esm/review/confirm.js +93 -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 +10 -8
- 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 +4 -0
- package/dist/esm/review/heldWrite.d.ts.map +1 -1
- package/dist/esm/review/heldWrite.js +34 -30
- package/dist/esm/review/heldWrite.js.map +1 -1
- package/dist/esm/review/index.d.ts +12 -1
- package/dist/esm/review/index.d.ts.map +1 -1
- package/dist/esm/review/index.js +12 -1
- 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 +72 -0
- package/dist/esm/review/lineError.d.ts.map +1 -0
- package/dist/esm/review/lineError.js +68 -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 +61 -0
- package/dist/esm/review/plan.d.ts.map +1 -0
- package/dist/esm/review/plan.js +136 -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/useHeldSend.js +3 -4
- package/dist/esm/review/react/useHeldSend.js.map +1 -1
- package/dist/esm/review/react/useHeldWrite.d.ts.map +1 -1
- package/dist/esm/review/react/useHeldWrite.js +2 -1
- package/dist/esm/review/react/useHeldWrite.js.map +1 -1
- package/dist/esm/review/react/useReviewedRun.d.ts +122 -0
- package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/esm/review/react/useReviewedRun.js +439 -0
- package/dist/esm/review/react/useReviewedRun.js.map +1 -0
- package/dist/esm/review/receipt.d.ts +37 -1
- package/dist/esm/review/receipt.d.ts.map +1 -1
- package/dist/esm/review/receipt.js +72 -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 +51 -8
- package/dist/esm/review/relayr.js.map +1 -1
- package/dist/esm/review/relayrSend.d.ts +106 -0
- package/dist/esm/review/relayrSend.d.ts.map +1 -0
- package/dist/esm/review/relayrSend.js +787 -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 +9 -9
- 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 +301 -0
- package/dist/esm/review/safeSend.js.map +1 -0
- package/dist/esm/review/send.d.ts +272 -0
- package/dist/esm/review/send.d.ts.map +1 -0
- package/dist/esm/review/send.js +1156 -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 +111 -0
- package/dist/esm/review/sign.d.ts.map +1 -0
- package/dist/esm/review/sign.js +372 -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 +98 -0
- package/dist/esm/review/wallet.d.ts.map +1 -0
- package/dist/esm/review/wallet.js +227 -0
- package/dist/esm/review/wallet.js.map +1 -0
- package/dist/esm/review/writeHold.d.ts +138 -13
- package/dist/esm/review/writeHold.d.ts.map +1 -1
- package/dist/esm/review/writeHold.js +96 -19
- package/dist/esm/review/writeHold.js.map +1 -1
- package/dist/esm/review/writeRecovery.d.ts +17 -1
- package/dist/esm/review/writeRecovery.d.ts.map +1 -1
- package/dist/esm/review/writeRecovery.js +149 -48
- 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,443 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REVIEWED_RUN_BUSY_LINE = exports.REVIEWED_RUN_SCOPE_LINE = void 0;
|
|
4
|
+
exports.useReviewedRun = useReviewedRun;
|
|
5
|
+
const lineError_js_1 = require("../lineError.js");
|
|
6
|
+
const receipt_js_1 = require("../receipt.js");
|
|
7
|
+
const index_js_1 = require("../index.js");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const heldView_js_1 = require("./heldView.js");
|
|
10
|
+
const IDLE = {
|
|
11
|
+
phase: "idle",
|
|
12
|
+
step: 0,
|
|
13
|
+
total: 0,
|
|
14
|
+
error: null,
|
|
15
|
+
failure: null,
|
|
16
|
+
hash: null,
|
|
17
|
+
safeTxHash: null,
|
|
18
|
+
receipt: null,
|
|
19
|
+
settled: null,
|
|
20
|
+
};
|
|
21
|
+
/** The bytes a call sends, for comparing two actions. */
|
|
22
|
+
const sent = ({ chainId, to, data, value, gas }) => [
|
|
23
|
+
chainId,
|
|
24
|
+
to.toLowerCase(),
|
|
25
|
+
data.toLowerCase(),
|
|
26
|
+
value ?? 0n,
|
|
27
|
+
gas ?? null,
|
|
28
|
+
];
|
|
29
|
+
exports.REVIEWED_RUN_SCOPE_LINE = "This action has more than one step and no scope to resume it by. Nothing was sent.";
|
|
30
|
+
exports.REVIEWED_RUN_BUSY_LINE = "This action is still running. Wait for it to finish, then try again.";
|
|
31
|
+
/**
|
|
32
|
+
* The one reviewed-send hook every site shares: its state, progress and
|
|
33
|
+
* error lines. A site's own hook only builds `deps` from its wallet library;
|
|
34
|
+
* null `deps` (no wallet yet) refuses every run.
|
|
35
|
+
*/
|
|
36
|
+
function useReviewedRun(deps) {
|
|
37
|
+
const [state, setState] = (0, react_1.useState)(IDLE);
|
|
38
|
+
/** The hold followed after a run, and its chain's client: its view is `held`. */
|
|
39
|
+
const [watched, setWatched] = (0, react_1.useState)(null);
|
|
40
|
+
/** The latest run: an earlier one's late answers change nothing. */
|
|
41
|
+
const latest = (0, react_1.useRef)(0);
|
|
42
|
+
/** How many runs are open: a discard waits for none. */
|
|
43
|
+
const open = (0, react_1.useRef)(0);
|
|
44
|
+
const mounted = (0, react_1.useRef)(false);
|
|
45
|
+
/** This render's `run`: a run's end that continues the action runs it. */
|
|
46
|
+
const runLatest = (0, react_1.useRef)(async () => null);
|
|
47
|
+
/**
|
|
48
|
+
* Ends the latest run's in-place follow, and resolves an `ended()` it left
|
|
49
|
+
* pending with null (released): a reset or a later run replaced it. Its
|
|
50
|
+
* hold keeps the sent step.
|
|
51
|
+
*/
|
|
52
|
+
const leave = (0, react_1.useRef)(() => { });
|
|
53
|
+
const replaced = () => {
|
|
54
|
+
latest.current += 1;
|
|
55
|
+
const left = leave.current;
|
|
56
|
+
leave.current = () => { };
|
|
57
|
+
left();
|
|
58
|
+
};
|
|
59
|
+
(0, react_1.useEffect)(() => {
|
|
60
|
+
mounted.current = true;
|
|
61
|
+
return () => {
|
|
62
|
+
mounted.current = false;
|
|
63
|
+
// Unmounted: the run ends as on a reset.
|
|
64
|
+
replaced();
|
|
65
|
+
};
|
|
66
|
+
}, []);
|
|
67
|
+
/** How a followed step ended, as the run that followed it shows it. */
|
|
68
|
+
const showSettled = (run, step, total, settled, receipt) => {
|
|
69
|
+
if (latest.current !== run)
|
|
70
|
+
return;
|
|
71
|
+
const finished = step === total - 1;
|
|
72
|
+
setState((now) => settled.result !== "success"
|
|
73
|
+
? { ...IDLE, error: (0, index_js_1.settledLine)(settled), receipt }
|
|
74
|
+
: finished
|
|
75
|
+
? {
|
|
76
|
+
...now,
|
|
77
|
+
phase: "done",
|
|
78
|
+
hash: settled.hash,
|
|
79
|
+
receipt,
|
|
80
|
+
error: null,
|
|
81
|
+
failure: null,
|
|
82
|
+
settled: { step, finished },
|
|
83
|
+
}
|
|
84
|
+
: {
|
|
85
|
+
...IDLE,
|
|
86
|
+
step,
|
|
87
|
+
total,
|
|
88
|
+
hash: settled.hash,
|
|
89
|
+
receipt,
|
|
90
|
+
settled: { step, finished },
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
/** The engine's load, shared by every preload and run until one fails. */
|
|
94
|
+
const loading = (0, react_1.useRef)(null);
|
|
95
|
+
const view = (0, react_1.useMemo)(() => watched
|
|
96
|
+
? (0, index_js_1.createHeldWriteView)(watched.handle, {
|
|
97
|
+
client: watched.client,
|
|
98
|
+
// The followed step's end ends the run once checked: a proposal
|
|
99
|
+
// never stays proposed, and never shows done unverified.
|
|
100
|
+
onSettled: (settled, receipt) => watched.finish(settled, receipt),
|
|
101
|
+
onReleased: () => {
|
|
102
|
+
watched.released?.();
|
|
103
|
+
if (latest.current === watched.run)
|
|
104
|
+
setState(IDLE);
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
: undefined, [watched]);
|
|
108
|
+
(0, react_1.useEffect)(() => view?.start(), [view]);
|
|
109
|
+
const engine = deps?.engine;
|
|
110
|
+
const load = (from) => {
|
|
111
|
+
const pending = (loading.current ??= from());
|
|
112
|
+
pending.catch(() => {
|
|
113
|
+
// A failed load is tried again by the next preload or run.
|
|
114
|
+
if (loading.current === pending)
|
|
115
|
+
loading.current = null;
|
|
116
|
+
});
|
|
117
|
+
return pending;
|
|
118
|
+
};
|
|
119
|
+
const preload = () => {
|
|
120
|
+
if (engine)
|
|
121
|
+
load(engine).catch(() => {
|
|
122
|
+
/* A run loads it again, and reports its failure. */
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
(0, react_1.useEffect)(preload, [engine]);
|
|
126
|
+
const shown = (0, react_1.useSyncExternalStore)(view?.subscribe ?? heldView_js_1.none, view?.get ?? heldView_js_1.idle, view?.get ?? heldView_js_1.idle);
|
|
127
|
+
const held = shown.phase === "clear" ||
|
|
128
|
+
shown.phase === "released" ||
|
|
129
|
+
shown.phase === "settled"
|
|
130
|
+
? null
|
|
131
|
+
: shown;
|
|
132
|
+
const api = {
|
|
133
|
+
...state,
|
|
134
|
+
held,
|
|
135
|
+
...(0, heldView_js_1.actionsOf)(shown, held ? view : undefined),
|
|
136
|
+
reset: () => {
|
|
137
|
+
replaced();
|
|
138
|
+
setState(IDLE);
|
|
139
|
+
setWatched(null);
|
|
140
|
+
},
|
|
141
|
+
preload,
|
|
142
|
+
discard: async (scope, account = deps?.account) => {
|
|
143
|
+
if (open.current)
|
|
144
|
+
throw new lineError_js_1.ReviewLineError(exports.REVIEWED_RUN_BUSY_LINE);
|
|
145
|
+
if (!deps || !account)
|
|
146
|
+
throw new lineError_js_1.ReviewLineError("Connect a wallet first.");
|
|
147
|
+
const { storage } = deps;
|
|
148
|
+
const saved = (0, index_js_1.findReviewedSequence)(scope, account, { storage });
|
|
149
|
+
if (saved)
|
|
150
|
+
await (0, index_js_1.discardReviewedSequence)(saved, { storage });
|
|
151
|
+
if (open.current)
|
|
152
|
+
return;
|
|
153
|
+
replaced();
|
|
154
|
+
setState(IDLE);
|
|
155
|
+
setWatched(null);
|
|
156
|
+
},
|
|
157
|
+
run: async (action) => {
|
|
158
|
+
replaced();
|
|
159
|
+
const id = latest.current;
|
|
160
|
+
// A step still confirming is followed in place, in the same review,
|
|
161
|
+
// until a reset or a later run ends it.
|
|
162
|
+
const following = new AbortController();
|
|
163
|
+
leave.current = () => following.abort();
|
|
164
|
+
open.current += 1;
|
|
165
|
+
const update = (next) => {
|
|
166
|
+
if (latest.current === id)
|
|
167
|
+
setState((now) => ({ ...now, ...next }));
|
|
168
|
+
};
|
|
169
|
+
setState({ ...IDLE, phase: "review", total: action.calls.length });
|
|
170
|
+
let loaded;
|
|
171
|
+
setWatched(null);
|
|
172
|
+
/**
|
|
173
|
+
* Completes a sent step once its hold settled it, as the run would
|
|
174
|
+
* have (`completeReviewedStep`: the journal, `onConfirmed` once with
|
|
175
|
+
* the receipt its hold verified, the acknowledgement), then shows how
|
|
176
|
+
* it ended, once. Until it can (the receipt unread, or the hold not yet
|
|
177
|
+
* settled for this send), it is tried again, never shown.
|
|
178
|
+
*/
|
|
179
|
+
const completing = (target, total, end) => {
|
|
180
|
+
let completed = Promise.resolve(null);
|
|
181
|
+
let shown = false;
|
|
182
|
+
const action$ = {
|
|
183
|
+
account: deps.account,
|
|
184
|
+
scope: action.scope,
|
|
185
|
+
onConfirmed: action.onConfirmed,
|
|
186
|
+
};
|
|
187
|
+
const finish = (seen, receipt = null) => {
|
|
188
|
+
let unread = false;
|
|
189
|
+
completed = completed.then((prior) => prior ??
|
|
190
|
+
(loaded ? Promise.resolve(loaded) : load(deps.engine))
|
|
191
|
+
.then((engine) => engine.completeReviewedStep(target, action$, deps, receipt))
|
|
192
|
+
.catch(() => {
|
|
193
|
+
unread = true;
|
|
194
|
+
return null;
|
|
195
|
+
}));
|
|
196
|
+
void completed.then((ended) => {
|
|
197
|
+
if (shown || latest.current !== id)
|
|
198
|
+
return;
|
|
199
|
+
// Nothing advanced (its receipt unread, or its hold not settled
|
|
200
|
+
// for this send yet): it is tried again.
|
|
201
|
+
if (unread || (!ended && seen)) {
|
|
202
|
+
if (mounted.current)
|
|
203
|
+
setTimeout(() => finish(seen, receipt), index_js_1.RECEIPT_RETRY_MS);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (!ended)
|
|
207
|
+
return;
|
|
208
|
+
shown = true;
|
|
209
|
+
// Shown with the receipt completion checked, a failure's too.
|
|
210
|
+
showSettled(id, target.step, total, ended.settled, ended.receipt);
|
|
211
|
+
setWatched(null);
|
|
212
|
+
end?.(ended);
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
return finish;
|
|
216
|
+
};
|
|
217
|
+
/** The step a run that did not finish leaves held, if any. */
|
|
218
|
+
const follow = async (finish, released) => {
|
|
219
|
+
if (latest.current !== id || !deps?.account)
|
|
220
|
+
return;
|
|
221
|
+
try {
|
|
222
|
+
const { account, adapter, hold, storage } = deps;
|
|
223
|
+
// Its Safe mode is read only once the wallet says it is known.
|
|
224
|
+
await (0, index_js_1.walletReady)(adapter);
|
|
225
|
+
if (latest.current !== id)
|
|
226
|
+
return;
|
|
227
|
+
const safe = adapter.isSafe();
|
|
228
|
+
const saved = !action.scope
|
|
229
|
+
? null
|
|
230
|
+
: (0, index_js_1.findReviewedSequence)(action.scope, account, { storage });
|
|
231
|
+
const total = saved?.calls.length ?? action.calls.length;
|
|
232
|
+
// A Safe app's batch is held as its one MultiSend proposal, its last step.
|
|
233
|
+
const steps = saved?.sending
|
|
234
|
+
? [
|
|
235
|
+
{
|
|
236
|
+
call: saved.calls[saved.sending.step],
|
|
237
|
+
step: saved.sending.step,
|
|
238
|
+
},
|
|
239
|
+
]
|
|
240
|
+
: !saved && action.batch && safe && action.calls.length > 1
|
|
241
|
+
? [
|
|
242
|
+
{
|
|
243
|
+
call: (0, index_js_1.safeBatchCall)(account, action.calls),
|
|
244
|
+
step: total - 1,
|
|
245
|
+
},
|
|
246
|
+
]
|
|
247
|
+
: action.calls.map((call, step) => ({ call, step }));
|
|
248
|
+
// A held step, or the last step's success nothing showed.
|
|
249
|
+
const found = steps
|
|
250
|
+
.map(({ call, step }) => ({
|
|
251
|
+
call,
|
|
252
|
+
step,
|
|
253
|
+
handle: (0, index_js_1.openStepHold)(hold, account, safe, call),
|
|
254
|
+
}))
|
|
255
|
+
.find(({ handle, step }) => handle.peek().status !== "clear" ||
|
|
256
|
+
(step === total - 1 && handle.unacknowledgedSuccess()));
|
|
257
|
+
// Its settlement completes it as a send's would: a proposal too.
|
|
258
|
+
const reservation = found?.handle.peek().reservation ??
|
|
259
|
+
found?.handle.unacknowledgedSuccess()?.reservation;
|
|
260
|
+
setWatched(found
|
|
261
|
+
? {
|
|
262
|
+
handle: found.handle,
|
|
263
|
+
client: deps.clientFor(found.call.chainId),
|
|
264
|
+
run: id,
|
|
265
|
+
step: found.step,
|
|
266
|
+
total,
|
|
267
|
+
finish: finish ??
|
|
268
|
+
completing({
|
|
269
|
+
step: found.step,
|
|
270
|
+
held: { call: found.call, reservation },
|
|
271
|
+
}, total),
|
|
272
|
+
...(released ? { released } : {}),
|
|
273
|
+
}
|
|
274
|
+
: null);
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
/* A call the hold can't open holds nothing to show. */
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
try {
|
|
281
|
+
if (!deps?.account)
|
|
282
|
+
throw new lineError_js_1.ReviewLineError("Connect a wallet first.");
|
|
283
|
+
if (action.account &&
|
|
284
|
+
action.account.toLowerCase() !== deps.account.toLowerCase())
|
|
285
|
+
throw new lineError_js_1.ReviewLineError(index_js_1.REVIEWED_ACCOUNT_CHANGED_LINE);
|
|
286
|
+
if (action.calls.length > 1 && action.scope === undefined)
|
|
287
|
+
throw new lineError_js_1.ReviewLineError(exports.REVIEWED_RUN_SCOPE_LINE);
|
|
288
|
+
const { signal } = action;
|
|
289
|
+
if (signal?.aborted)
|
|
290
|
+
throw new index_js_1.TransactionReviewCancelledError();
|
|
291
|
+
let withdraw = () => { };
|
|
292
|
+
loaded = await Promise.race([
|
|
293
|
+
load(deps.engine).catch((cause) => {
|
|
294
|
+
throw Object.assign(new lineError_js_1.ReviewLineError(index_js_1.REVIEWED_ENGINE_LOAD_LINE), { cause });
|
|
295
|
+
}),
|
|
296
|
+
// A review withdrawn while the engine loads ends here, cancelled.
|
|
297
|
+
new Promise((_, reject) => {
|
|
298
|
+
withdraw = () => reject(new index_js_1.TransactionReviewCancelledError());
|
|
299
|
+
signal?.addEventListener("abort", withdraw, { once: true });
|
|
300
|
+
}),
|
|
301
|
+
]).finally(() => signal?.removeEventListener("abort", withdraw));
|
|
302
|
+
const { resumeReviewed, sendReviewed } = loaded;
|
|
303
|
+
const { account, guard } = deps;
|
|
304
|
+
const tracked = {
|
|
305
|
+
...deps,
|
|
306
|
+
onProgress: (progress) => {
|
|
307
|
+
(0, receipt_js_1.tell)(deps.onProgress, progress);
|
|
308
|
+
update({
|
|
309
|
+
phase: progress.phase,
|
|
310
|
+
step: progress.step,
|
|
311
|
+
total: progress.total,
|
|
312
|
+
...(progress.hash
|
|
313
|
+
? progress.phase === "proposed"
|
|
314
|
+
? { safeTxHash: progress.hash }
|
|
315
|
+
: { hash: progress.hash }
|
|
316
|
+
: {}),
|
|
317
|
+
});
|
|
318
|
+
},
|
|
319
|
+
};
|
|
320
|
+
const unfinished = action.scope === undefined
|
|
321
|
+
? null
|
|
322
|
+
: (0, index_js_1.findReviewedSequence)(action.scope, account, {
|
|
323
|
+
storage: deps.storage,
|
|
324
|
+
});
|
|
325
|
+
// Resumed only when the user asked for the same calls again;
|
|
326
|
+
// otherwise sendReviewed refuses while it is unfinished.
|
|
327
|
+
const saved = unfinished &&
|
|
328
|
+
(0, heldView_js_1.keyOf)(unfinished.calls.map(sent)) === (0, heldView_js_1.keyOf)(action.calls.map(sent))
|
|
329
|
+
? unfinished
|
|
330
|
+
: null;
|
|
331
|
+
const given = action.follow?.signal;
|
|
332
|
+
const inPlace = {
|
|
333
|
+
...action.follow,
|
|
334
|
+
signal: given
|
|
335
|
+
? AbortSignal.any([following.signal, given])
|
|
336
|
+
: following.signal,
|
|
337
|
+
onConfirming: (step) => {
|
|
338
|
+
update({ phase: "receipt", step });
|
|
339
|
+
(0, receipt_js_1.tell)(action.follow?.onConfirming, step);
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
const result = saved
|
|
343
|
+
? await resumeReviewed(saved, { ...action, guard, follow: inPlace }, tracked)
|
|
344
|
+
: await sendReviewed({ ...action, account, guard, follow: inPlace }, tracked);
|
|
345
|
+
if (result.status === "proposed")
|
|
346
|
+
void follow();
|
|
347
|
+
else if (mounted.current && latest.current === id) {
|
|
348
|
+
// Shown: its success blocks no later run.
|
|
349
|
+
const calls = saved?.calls ?? action.calls;
|
|
350
|
+
const handle = (0, index_js_1.openStepHold)(deps.hold, account, false, calls[calls.length - 1]);
|
|
351
|
+
const success = handle.unacknowledgedSuccess();
|
|
352
|
+
if (success &&
|
|
353
|
+
result.hashes.some((h) => h.toLowerCase() === success.hash))
|
|
354
|
+
await handle.acknowledge(success).catch(() => undefined);
|
|
355
|
+
}
|
|
356
|
+
return result;
|
|
357
|
+
}
|
|
358
|
+
catch (error) {
|
|
359
|
+
if (error instanceof index_js_1.ReviewedReceiptUnverifiedError) {
|
|
360
|
+
// Still confirming: followed until its hold settles it.
|
|
361
|
+
update({
|
|
362
|
+
phase: "receipt",
|
|
363
|
+
step: error.step,
|
|
364
|
+
hash: error.hash,
|
|
365
|
+
error: null,
|
|
366
|
+
failure: null,
|
|
367
|
+
});
|
|
368
|
+
let end;
|
|
369
|
+
const outcome = new Promise((resolve) => (end = resolve));
|
|
370
|
+
// Replaced, or the caller's follow ended (a cancel, unlike its
|
|
371
|
+
// timeout), already or later: its end is null, the step still held,
|
|
372
|
+
// and nothing continues the action.
|
|
373
|
+
const cancelled = action.follow?.signal;
|
|
374
|
+
if (latest.current !== id || cancelled?.aborted)
|
|
375
|
+
end(null);
|
|
376
|
+
else {
|
|
377
|
+
leave.current = () => end(null);
|
|
378
|
+
cancelled?.addEventListener("abort", () => end(null), {
|
|
379
|
+
once: true,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
const finish = completing(error, action.calls.length, end);
|
|
383
|
+
// Followed for a later settlement; one already there is read once it attaches.
|
|
384
|
+
void follow(finish, () => end(null)).then(() => finish());
|
|
385
|
+
const before = error.held?.hashes ?? [];
|
|
386
|
+
return {
|
|
387
|
+
status: "receipt",
|
|
388
|
+
step: error.step,
|
|
389
|
+
hash: error.hash,
|
|
390
|
+
...(error.held?.signatures
|
|
391
|
+
? { signatures: error.held.signatures }
|
|
392
|
+
: {}),
|
|
393
|
+
ended: () => outcome.then(async (ran) => {
|
|
394
|
+
if (!ran)
|
|
395
|
+
return null;
|
|
396
|
+
const { settled, receipt } = ran;
|
|
397
|
+
if (settled.result !== "success") {
|
|
398
|
+
const line = (0, index_js_1.settledLine)(settled);
|
|
399
|
+
return {
|
|
400
|
+
status: "failed",
|
|
401
|
+
error: line,
|
|
402
|
+
failure: new lineError_js_1.ReviewLineError(line),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
const signatures = error.held?.signatures;
|
|
406
|
+
if (error.step < action.calls.length - 1) {
|
|
407
|
+
const started = await runLatest.current(action);
|
|
408
|
+
const next = started?.status === "receipt"
|
|
409
|
+
? await started.ended()
|
|
410
|
+
: started;
|
|
411
|
+
return next?.status === "done" &&
|
|
412
|
+
signatures &&
|
|
413
|
+
!next.signatures
|
|
414
|
+
? { ...next, signatures }
|
|
415
|
+
: next;
|
|
416
|
+
}
|
|
417
|
+
return {
|
|
418
|
+
status: "done",
|
|
419
|
+
hashes: [...before, settled.hash],
|
|
420
|
+
receipts: receipt ? [receipt] : [],
|
|
421
|
+
...(signatures ? { signatures } : {}),
|
|
422
|
+
};
|
|
423
|
+
}),
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
const cancelled = error instanceof index_js_1.TransactionReviewCancelledError ||
|
|
427
|
+
(0, index_js_1.isDefiniteWalletRejection)(error);
|
|
428
|
+
const line = cancelled ? null : (0, index_js_1.errorLine)(error);
|
|
429
|
+
update({ ...IDLE, error: line, failure: cancelled ? null : error });
|
|
430
|
+
void follow();
|
|
431
|
+
return line === null
|
|
432
|
+
? null
|
|
433
|
+
: { status: "failed", error: line, failure: error };
|
|
434
|
+
}
|
|
435
|
+
finally {
|
|
436
|
+
open.current -= 1;
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
};
|
|
440
|
+
runLatest.current = api.run;
|
|
441
|
+
return api;
|
|
442
|
+
}
|
|
443
|
+
//# sourceMappingURL=useReviewedRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReviewedRun.js","sourceRoot":"","sources":["../../../../src/review/react/useReviewedRun.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { ReviewLineError } from "./lineError.js";
|
|
1
2
|
import type { Hex, PublicClient, TransactionReceipt } from "viem";
|
|
3
|
+
/** The line when a broadcast transaction's receipt can't be tracked. */
|
|
4
|
+
export declare const TRANSACTION_TRACKING_UNAVAILABLE_LINE = "This transaction was submitted, but its confirmation can't be tracked right now. Check it in your wallet and do not submit it again yet.";
|
|
2
5
|
/**
|
|
3
6
|
* A transaction was broadcast, but neither the receipt watcher nor direct
|
|
4
7
|
* receipt reads could confirm it. Its outcome is unknown, so the app must keep
|
|
5
8
|
* treating it as submitted and must not offer to send it again.
|
|
6
9
|
*/
|
|
7
|
-
export declare class TransactionReceiptUnavailableError extends
|
|
10
|
+
export declare class TransactionReceiptUnavailableError extends ReviewLineError {
|
|
8
11
|
readonly hash: Hex;
|
|
9
12
|
readonly chainId?: number | undefined;
|
|
10
13
|
readonly name = "TransactionReceiptUnavailableError";
|
|
@@ -29,4 +32,37 @@ export declare function waitForTrackedReceipt(client: Pick<PublicClient, "chain"
|
|
|
29
32
|
attempts?: number;
|
|
30
33
|
intervalMs?: number;
|
|
31
34
|
}): Promise<TransactionReceipt>;
|
|
35
|
+
/** How a held write settled, as {@link heldReceipt} checks a receipt against it. */
|
|
36
|
+
type Settled = {
|
|
37
|
+
result: "success" | "failed";
|
|
38
|
+
hash: Hex;
|
|
39
|
+
blockHash?: Hex;
|
|
40
|
+
safe?: true;
|
|
41
|
+
};
|
|
42
|
+
type HeldClient = Pick<PublicClient, "getTransactionReceipt" | "getBlock">;
|
|
43
|
+
/**
|
|
44
|
+
* The receipt a hold verified for `settled`, the only one a sent step's
|
|
45
|
+
* outcome is told by: `seen` (a watcher's, say) when it is that transaction,
|
|
46
|
+
* else read. It must be in the block the hold verified; with none kept (a
|
|
47
|
+
* Safe log proved it, or it was saved by 4.x), in a block still canonical
|
|
48
|
+
* and final. A success must read a success, and a failure a revert unless
|
|
49
|
+
* it is a Safe's (`safe`: its own failure). Anything else throws: the step
|
|
50
|
+
* stays unverified until the chain agrees with its hold.
|
|
51
|
+
*/
|
|
52
|
+
export declare function heldReceipt(settled: Settled, client: HeldClient, seen?: TransactionReceipt | null): Promise<TransactionReceipt>;
|
|
53
|
+
/**
|
|
54
|
+
* Where `settled` confirmed: the block its hold verified, while still
|
|
55
|
+
* canonical, or with none kept, its {@link heldReceipt}'s. Throws otherwise.
|
|
56
|
+
*/
|
|
57
|
+
export declare function heldBlock(settled: Settled, client: HeldClient): Promise<{
|
|
58
|
+
blockNumber: bigint;
|
|
59
|
+
blockHash: Hex;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Calls a site's callback (`onProgress`, `onConfirming`, `onSubmitted`,
|
|
63
|
+
* `onConfirmed`, `onSettled`). One that throws or rejects is logged, and
|
|
64
|
+
* never changes what was sent or how it settled.
|
|
65
|
+
*/
|
|
66
|
+
export declare function tell<Args extends unknown[]>(callback: ((...args: Args) => unknown) | undefined, ...args: Args): void | Promise<void>;
|
|
67
|
+
export {};
|
|
32
68
|
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAElE;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAElE,wEAAwE;AACxE,eAAO,MAAM,qCAAqC,6IAC0F,CAAC;AAE7I;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,eAAe;IAUnE,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IAV3B,QAAQ,CAAC,IAAI,wCAAwC;IACrD;;;;OAIG;IACH,SAAiB,KAAK,EAAE,OAAO,CAAC;gBAGrB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,MAAM,YAAA,EACzB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAWpC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,kCAAkC,CAE7C;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,IAAI,CACV,YAAY,EACZ,OAAO,GAAG,uBAAuB,GAAG,2BAA2B,CAChE,EACD,IAAI,EAAE,GAAG,EACT,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,kBAAkB,CAAC,CAmB7B;AAED,oFAAoF;AACpF,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb,CAAC;AACF,KAAK,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,uBAAuB,GAAG,UAAU,CAAC,CAAC;AAK3E;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,EAClB,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,GAAG,CAAA;CAAE,CAAC,CAUlD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,SAAS,OAAO,EAAE,EACzC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,GAAG,SAAS,EAClD,GAAG,IAAI,EAAE,IAAI,GACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtB"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TransactionReceiptUnavailableError = void 0;
|
|
3
|
+
exports.TransactionReceiptUnavailableError = exports.TRANSACTION_TRACKING_UNAVAILABLE_LINE = void 0;
|
|
4
4
|
exports.isTransactionReceiptUnavailableError = isTransactionReceiptUnavailableError;
|
|
5
5
|
exports.waitForTrackedReceipt = waitForTrackedReceipt;
|
|
6
|
+
exports.heldReceipt = heldReceipt;
|
|
7
|
+
exports.heldBlock = heldBlock;
|
|
8
|
+
exports.tell = tell;
|
|
9
|
+
const lineError_js_1 = require("./lineError.js");
|
|
10
|
+
/** The line when a broadcast transaction's receipt can't be tracked. */
|
|
11
|
+
exports.TRANSACTION_TRACKING_UNAVAILABLE_LINE = "This transaction was submitted, but its confirmation can't be tracked right now. Check it in your wallet and do not submit it again yet.";
|
|
6
12
|
/**
|
|
7
13
|
* A transaction was broadcast, but neither the receipt watcher nor direct
|
|
8
14
|
* receipt reads could confirm it. Its outcome is unknown, so the app must keep
|
|
9
15
|
* treating it as submitted and must not offer to send it again.
|
|
10
16
|
*/
|
|
11
|
-
class TransactionReceiptUnavailableError extends
|
|
17
|
+
class TransactionReceiptUnavailableError extends lineError_js_1.ReviewLineError {
|
|
12
18
|
constructor(hash, chainId, options = {}) {
|
|
13
|
-
|
|
19
|
+
// The hash and chain stay fields: a caller's hash is not validated here.
|
|
20
|
+
super(exports.TRANSACTION_TRACKING_UNAVAILABLE_LINE);
|
|
14
21
|
this.hash = hash;
|
|
15
22
|
this.chainId = chainId;
|
|
16
23
|
this.name = "TransactionReceiptUnavailableError";
|
|
@@ -54,4 +61,70 @@ async function waitForTrackedReceipt(client, hash, options = {}) {
|
|
|
54
61
|
});
|
|
55
62
|
}
|
|
56
63
|
}
|
|
64
|
+
const unverified = (hash) => new Error(`Transaction ${hash}'s receipt is not the one its hold verified.`);
|
|
65
|
+
/**
|
|
66
|
+
* The receipt a hold verified for `settled`, the only one a sent step's
|
|
67
|
+
* outcome is told by: `seen` (a watcher's, say) when it is that transaction,
|
|
68
|
+
* else read. It must be in the block the hold verified; with none kept (a
|
|
69
|
+
* Safe log proved it, or it was saved by 4.x), in a block still canonical
|
|
70
|
+
* and final. A success must read a success, and a failure a revert unless
|
|
71
|
+
* it is a Safe's (`safe`: its own failure). Anything else throws: the step
|
|
72
|
+
* stays unverified until the chain agrees with its hold.
|
|
73
|
+
*/
|
|
74
|
+
async function heldReceipt(settled, client, seen) {
|
|
75
|
+
const hash = settled.hash.toLowerCase();
|
|
76
|
+
const inBlock = (receipt) => receipt.transactionHash.toLowerCase() === hash &&
|
|
77
|
+
(!settled.blockHash ||
|
|
78
|
+
receipt.blockHash?.toLowerCase() === settled.blockHash.toLowerCase());
|
|
79
|
+
const receipt = seen && inBlock(seen)
|
|
80
|
+
? seen
|
|
81
|
+
: await client.getTransactionReceipt({ hash: settled.hash });
|
|
82
|
+
if (!inBlock(receipt) ||
|
|
83
|
+
(settled.result === "success"
|
|
84
|
+
? receipt.status !== "success"
|
|
85
|
+
: // Only a Safe's own failure runs under an outer success.
|
|
86
|
+
!settled.safe && receipt.status !== "reverted"))
|
|
87
|
+
throw unverified(settled.hash);
|
|
88
|
+
if (!settled.blockHash) {
|
|
89
|
+
const [block, final] = await Promise.all([
|
|
90
|
+
client.getBlock({ blockNumber: receipt.blockNumber }),
|
|
91
|
+
client.getBlock({ blockTag: "finalized" }),
|
|
92
|
+
]);
|
|
93
|
+
if (block.hash?.toLowerCase() !== receipt.blockHash?.toLowerCase() ||
|
|
94
|
+
final.number < receipt.blockNumber)
|
|
95
|
+
throw unverified(settled.hash);
|
|
96
|
+
}
|
|
97
|
+
return receipt;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Where `settled` confirmed: the block its hold verified, while still
|
|
101
|
+
* canonical, or with none kept, its {@link heldReceipt}'s. Throws otherwise.
|
|
102
|
+
*/
|
|
103
|
+
async function heldBlock(settled, client) {
|
|
104
|
+
if (!settled.blockHash) {
|
|
105
|
+
const { blockNumber, blockHash } = await heldReceipt(settled, client);
|
|
106
|
+
return { blockNumber, blockHash };
|
|
107
|
+
}
|
|
108
|
+
const { number } = await client.getBlock({ blockHash: settled.blockHash });
|
|
109
|
+
const canonical = await client.getBlock({ blockNumber: number });
|
|
110
|
+
if (canonical.hash?.toLowerCase() !== settled.blockHash.toLowerCase())
|
|
111
|
+
throw unverified(settled.hash);
|
|
112
|
+
return { blockNumber: number, blockHash: canonical.hash };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Calls a site's callback (`onProgress`, `onConfirming`, `onSubmitted`,
|
|
116
|
+
* `onConfirmed`, `onSettled`). One that throws or rejects is logged, and
|
|
117
|
+
* never changes what was sent or how it settled.
|
|
118
|
+
*/
|
|
119
|
+
function tell(callback, ...args) {
|
|
120
|
+
try {
|
|
121
|
+
const told = callback?.(...args);
|
|
122
|
+
if (told instanceof Promise)
|
|
123
|
+
return told.then(() => undefined, logged);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
logged(error);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const logged = (error) => console.error("A site callback failed; the write stands.", error);
|
|
57
130
|
//# sourceMappingURL=receipt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":"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"}
|