@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
|
@@ -16,6 +16,7 @@ exports.heldSafeProposal = heldSafeProposal;
|
|
|
16
16
|
exports.safeProposalIsHeldCall = safeProposalIsHeldCall;
|
|
17
17
|
exports.verifyReviewedWriteReceipt = verifyReviewedWriteReceipt;
|
|
18
18
|
exports.verifyReviewedWriteExpiry = verifyReviewedWriteExpiry;
|
|
19
|
+
const lineError_js_1 = require("./lineError.js");
|
|
19
20
|
const viem_1 = require("viem");
|
|
20
21
|
const safeService_js_1 = require("../safeService.js");
|
|
21
22
|
const safe_js_1 = require("../safe.js");
|
|
@@ -29,7 +30,7 @@ const TAB_SEEN = tabState_js_1.TAB.seen;
|
|
|
29
30
|
// failed. It is visible only while the exact durable reservation still exists.
|
|
30
31
|
const unpersistedSubmissions = new WeakMap();
|
|
31
32
|
/** The wallet returned this identity, but storing it failed. Keep it in memory and retry submitted(hash, record). */
|
|
32
|
-
class SubmittedWritePersistenceError extends
|
|
33
|
+
class SubmittedWritePersistenceError extends lineError_js_1.ReviewLineError {
|
|
33
34
|
constructor(record, cause) {
|
|
34
35
|
super("The wallet returned a transaction identity, but recovery storage is unavailable. Keep this transaction pending.");
|
|
35
36
|
this.name = "SubmittedWritePersistenceError";
|
|
@@ -42,7 +43,7 @@ function normalizedIdentity(input) {
|
|
|
42
43
|
if (!Number.isSafeInteger(input?.chainId) ||
|
|
43
44
|
input.chainId <= 0 ||
|
|
44
45
|
!(0, viem_1.isAddress)(input?.account, { strict: false }))
|
|
45
|
-
throw new
|
|
46
|
+
throw new lineError_js_1.ReviewLineError("Invalid reviewed write recovery evidence.");
|
|
46
47
|
return {
|
|
47
48
|
chainId: input.chainId,
|
|
48
49
|
account: input.account.toLowerCase(),
|
|
@@ -55,7 +56,7 @@ function normalized(input) {
|
|
|
55
56
|
!(0, viem_1.isAddress)(input?.call?.to, { strict: false }) ||
|
|
56
57
|
!(0, untrusted_js_1.isHexBytes)(input?.call?.data) ||
|
|
57
58
|
value === null)
|
|
58
|
-
throw new
|
|
59
|
+
throw new lineError_js_1.ReviewLineError("Invalid reviewed write recovery evidence.");
|
|
59
60
|
return {
|
|
60
61
|
...normalizedIdentity(input),
|
|
61
62
|
safe: input.safe,
|
|
@@ -99,7 +100,7 @@ function recordOf(value) {
|
|
|
99
100
|
(record.executed !== undefined && record.executed !== true) ||
|
|
100
101
|
(record.executionHash !== undefined &&
|
|
101
102
|
(record.executed !== true || !(0, untrusted_js_1.isBytes32)(record.executionHash))))
|
|
102
|
-
throw new
|
|
103
|
+
throw new lineError_js_1.ReviewLineError("Invalid saved write recovery record. Keep this action pending.");
|
|
103
104
|
return {
|
|
104
105
|
version: 1,
|
|
105
106
|
id: record.id,
|
|
@@ -174,7 +175,7 @@ function namespaceOf(value) {
|
|
|
174
175
|
return undefined;
|
|
175
176
|
if (typeof value !== "string" ||
|
|
176
177
|
!/^[a-z0-9][a-z0-9:._/-]{0,127}$/.test(value))
|
|
177
|
-
throw new
|
|
178
|
+
throw new lineError_js_1.ReviewLineError("Invalid write recovery namespace.");
|
|
178
179
|
return value;
|
|
179
180
|
}
|
|
180
181
|
function namespaceScope(input) {
|
|
@@ -188,7 +189,7 @@ function scope(input) {
|
|
|
188
189
|
function recoveryStorage(store) {
|
|
189
190
|
const result = store ?? globalThis.localStorage;
|
|
190
191
|
if (!result)
|
|
191
|
-
throw new
|
|
192
|
+
throw new lineError_js_1.ReviewLineError("Write recovery storage is unavailable.");
|
|
192
193
|
return result;
|
|
193
194
|
}
|
|
194
195
|
/** Every key `store` holds: its own `keys()`, or Web Storage's `length` and `key()`. */
|
|
@@ -380,7 +381,7 @@ function findReviewedWrites(input, options = {}) {
|
|
|
380
381
|
const identity = normalizedIdentity(input);
|
|
381
382
|
if (!(0, viem_1.isAddress)(input.to, { strict: false }) ||
|
|
382
383
|
!/^0x[0-9a-fA-F]{8}$/.test(input.selector))
|
|
383
|
-
throw new
|
|
384
|
+
throw new lineError_js_1.ReviewLineError("Invalid write hold match.");
|
|
384
385
|
const to = input.to.toLowerCase();
|
|
385
386
|
const selector = input.selector.toLowerCase();
|
|
386
387
|
const store = recoveryStorage(options.storage);
|
|
@@ -418,7 +419,7 @@ function foundAt(input, at) {
|
|
|
418
419
|
(at.startsWith(prefix) &&
|
|
419
420
|
/^\d+:0x[0-9a-f]{64}$/.test(at.slice(prefix.length)))))
|
|
420
421
|
return at;
|
|
421
|
-
throw new
|
|
422
|
+
throw new lineError_js_1.ReviewLineError("Invalid write recovery key.");
|
|
422
423
|
}
|
|
423
424
|
/**
|
|
424
425
|
* Every unresolved write saved for `account` on `chainId`, with the key it
|
|
@@ -466,7 +467,7 @@ function readBrowserWriteRecovery(input, options = {}) {
|
|
|
466
467
|
const identity = normalizedIdentity(input);
|
|
467
468
|
const namespace = namespaceOf(input?.namespace);
|
|
468
469
|
if (namespace === undefined)
|
|
469
|
-
throw new
|
|
470
|
+
throw new lineError_js_1.ReviewLineError("Provide a write recovery namespace.");
|
|
470
471
|
return readRecovery(recoveryStorage(options.storage), namespaceScope({ ...identity, namespace }));
|
|
471
472
|
}
|
|
472
473
|
/**
|
|
@@ -477,12 +478,20 @@ function readBrowserWriteRecovery(input, options = {}) {
|
|
|
477
478
|
function releasedKey(key, id) {
|
|
478
479
|
return `${key}:released:${id}`;
|
|
479
480
|
}
|
|
481
|
+
/**
|
|
482
|
+
* The key that marks the record `id` saved at `key` as ended by the user's
|
|
483
|
+
* exit or as never sent, never by a settlement's cleanup: only it lets a
|
|
484
|
+
* saved sequence send that step again.
|
|
485
|
+
*/
|
|
486
|
+
function exitedKey(key, id) {
|
|
487
|
+
return `${key}:exited:${id}`;
|
|
488
|
+
}
|
|
480
489
|
function readStored(raw, key, scopeOf = scope, store) {
|
|
481
490
|
if (raw === null)
|
|
482
491
|
return null;
|
|
483
492
|
const record = recordOf(JSON.parse(raw));
|
|
484
493
|
if (scopeOf(record) !== key)
|
|
485
|
-
throw new
|
|
494
|
+
throw new lineError_js_1.ReviewLineError("Saved write recovery scope does not match.");
|
|
486
495
|
if (store && store.getItem(releasedKey(key, record.id)) !== null)
|
|
487
496
|
return null;
|
|
488
497
|
return record;
|
|
@@ -686,6 +695,19 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
686
695
|
function scopeAt(at) {
|
|
687
696
|
return at === key ? keyOf : legacyScope;
|
|
688
697
|
}
|
|
698
|
+
/**
|
|
699
|
+
* Set `flag` on the saved settlement with this (lowercase) hash: false when
|
|
700
|
+
* it was already set, true otherwise (another settlement stays as it is).
|
|
701
|
+
*/
|
|
702
|
+
function flagSettled(store, hash, flag) {
|
|
703
|
+
const saved = JSON.parse(store.getItem(settledKey) ?? "null");
|
|
704
|
+
if (saved?.hash !== hash)
|
|
705
|
+
return true;
|
|
706
|
+
if (saved[flag] === true)
|
|
707
|
+
return false;
|
|
708
|
+
store.setItem(settledKey, JSON.stringify({ ...saved, [flag]: true }));
|
|
709
|
+
return true;
|
|
710
|
+
}
|
|
689
711
|
function storage() {
|
|
690
712
|
const store = recoveryStorage(options.storage);
|
|
691
713
|
lastStorage = store;
|
|
@@ -707,7 +729,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
707
729
|
}
|
|
708
730
|
function requireLock() {
|
|
709
731
|
if (!locked)
|
|
710
|
-
throw new
|
|
732
|
+
throw new lineError_js_1.ReviewLineError("Write recovery changes require the browser lock.");
|
|
711
733
|
}
|
|
712
734
|
function read() {
|
|
713
735
|
const store = storage();
|
|
@@ -719,7 +741,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
719
741
|
const store = storage();
|
|
720
742
|
store.setItem(at, raw);
|
|
721
743
|
if (store.getItem(at) !== raw)
|
|
722
|
-
throw new
|
|
744
|
+
throw new lineError_js_1.ReviewLineError("Write recovery storage did not retain the action.");
|
|
723
745
|
}
|
|
724
746
|
function clear(expected) {
|
|
725
747
|
requireLock();
|
|
@@ -735,7 +757,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
735
757
|
if (!current)
|
|
736
758
|
return;
|
|
737
759
|
if (JSON.stringify(current) !== JSON.stringify(recordOf(expected))) {
|
|
738
|
-
throw new
|
|
760
|
+
throw new lineError_js_1.ReviewLineError("Write recovery changed. Keep the current action pending.");
|
|
739
761
|
}
|
|
740
762
|
// The last record of an attempt goes only once its generation is the
|
|
741
763
|
// committed latest marker; otherwise it stays, released, and carries it.
|
|
@@ -743,13 +765,13 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
743
765
|
const marker = releasedKey(at, current.id);
|
|
744
766
|
store.setItem(marker, "1");
|
|
745
767
|
if (store.getItem(marker) !== "1")
|
|
746
|
-
throw new
|
|
768
|
+
throw new lineError_js_1.ReviewLineError("Write recovery storage did not clear the action.");
|
|
747
769
|
unpersistedSubmissions.get(store)?.delete(at);
|
|
748
770
|
return;
|
|
749
771
|
}
|
|
750
772
|
store.removeItem(at);
|
|
751
773
|
if (store.getItem(at) !== null)
|
|
752
|
-
throw new
|
|
774
|
+
throw new lineError_js_1.ReviewLineError("Write recovery storage did not clear the action.");
|
|
753
775
|
unpersistedSubmissions.get(store)?.delete(at);
|
|
754
776
|
}
|
|
755
777
|
/** Add `fields` to exactly `expected`, a hashed record `when` allows; extra evidence only. */
|
|
@@ -777,6 +799,12 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
777
799
|
const current = read();
|
|
778
800
|
if (current?.id === owned.id && current.hash)
|
|
779
801
|
return;
|
|
802
|
+
try {
|
|
803
|
+
storage().setItem(exitedKey(locate(storage()).at, owned.id), "1");
|
|
804
|
+
}
|
|
805
|
+
catch {
|
|
806
|
+
/* Unsaved, a sequence resumed over it asks for the user's check. */
|
|
807
|
+
}
|
|
780
808
|
// Removing the record must not uncover a settlement of an earlier
|
|
781
809
|
// attempt: unless this reservation is the verified latest, it stays as
|
|
782
810
|
// released instead, which still invalidates that settlement.
|
|
@@ -832,13 +860,13 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
832
860
|
function record(hash, expected, replace) {
|
|
833
861
|
requireLock();
|
|
834
862
|
if (!(0, untrusted_js_1.isBytes32)(hash))
|
|
835
|
-
throw new
|
|
863
|
+
throw new lineError_js_1.ReviewLineError("The wallet returned an invalid transaction identity.");
|
|
836
864
|
const previous = expected && recordOf(expected);
|
|
837
865
|
const submittedHash = hash.toLowerCase();
|
|
838
866
|
if (!previous ||
|
|
839
867
|
keyOf(previous) !== key ||
|
|
840
868
|
(!replace && previous.hash && previous.hash !== submittedHash)) {
|
|
841
|
-
throw new
|
|
869
|
+
throw new lineError_js_1.ReviewLineError("Write recovery changed before submission was recorded.");
|
|
842
870
|
}
|
|
843
871
|
// A hash the wallet returns now starts its clock; a speed-up found at its nonce keeps it.
|
|
844
872
|
const submittedAt = replace || previous.hash === submittedHash
|
|
@@ -875,7 +903,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
875
903
|
submittedAt: undefined,
|
|
876
904
|
}) ||
|
|
877
905
|
(!replace && current.hash && current.hash !== submittedHash)) {
|
|
878
|
-
throw new
|
|
906
|
+
throw new lineError_js_1.ReviewLineError("Write recovery changed before submission was recorded.");
|
|
879
907
|
}
|
|
880
908
|
owned = recordOf(submitted);
|
|
881
909
|
if (current.hash !== submittedHash) {
|
|
@@ -909,15 +937,15 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
909
937
|
? normalized({ ...reviewed, call: actualCall })
|
|
910
938
|
: reviewed;
|
|
911
939
|
if (legacyScope(actual) !== legacyScope(reviewed))
|
|
912
|
-
throw new
|
|
940
|
+
throw new lineError_js_1.ReviewLineError("The adopted write has a different recovery scope.");
|
|
913
941
|
const nonce = evidence && (0, untrusted_js_1.uint256)(evidence.nonce);
|
|
914
942
|
const fromBlock = evidence && (0, untrusted_js_1.uint256)(evidence.blockNumber);
|
|
915
943
|
if (evidence && (nonce === null || fromBlock === null))
|
|
916
|
-
throw new
|
|
944
|
+
throw new lineError_js_1.ReviewLineError("Invalid write recovery nonce evidence.");
|
|
917
945
|
const store = storage();
|
|
918
946
|
const { at, raw } = locate(store);
|
|
919
947
|
if (readRecovery(store, at, raw, scopeAt(at)))
|
|
920
|
-
throw new
|
|
948
|
+
throw new lineError_js_1.ReviewLineError("An earlier wallet write is still unresolved. Check it before trying again.");
|
|
921
949
|
// The record this one replaces, if the user released it: its marker goes too.
|
|
922
950
|
let replaced;
|
|
923
951
|
try {
|
|
@@ -956,6 +984,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
956
984
|
if (typeof replaced === "string" && replaced !== record.id)
|
|
957
985
|
try {
|
|
958
986
|
store.removeItem(releasedKey(key, replaced));
|
|
987
|
+
store.removeItem(exitedKey(key, replaced));
|
|
959
988
|
}
|
|
960
989
|
catch {
|
|
961
990
|
/* A leftover marker names only the old record. */
|
|
@@ -988,7 +1017,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
988
1017
|
requireLock();
|
|
989
1018
|
const current = read();
|
|
990
1019
|
if (current && current.mirrorOf !== of)
|
|
991
|
-
throw new
|
|
1020
|
+
throw new lineError_js_1.ReviewLineError("An earlier wallet write is still unresolved. Check it before trying again.");
|
|
992
1021
|
const mirrored = recordOf({
|
|
993
1022
|
version: 1,
|
|
994
1023
|
id: source.id,
|
|
@@ -1028,6 +1057,16 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1028
1057
|
return undefined;
|
|
1029
1058
|
}
|
|
1030
1059
|
},
|
|
1060
|
+
/** Whether the record `id` ended by the user's exit, or because nothing was sent. */
|
|
1061
|
+
released(id) {
|
|
1062
|
+
try {
|
|
1063
|
+
const store = storage();
|
|
1064
|
+
return store.getItem(exitedKey(locate(store).at, id)) !== null;
|
|
1065
|
+
}
|
|
1066
|
+
catch {
|
|
1067
|
+
return false;
|
|
1068
|
+
}
|
|
1069
|
+
},
|
|
1031
1070
|
/**
|
|
1032
1071
|
* The call's latest reservation id: the record saved at the key (held,
|
|
1033
1072
|
* or released by its exit), or else the saved latest marker.
|
|
@@ -1091,6 +1130,10 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1091
1130
|
id: expected.id,
|
|
1092
1131
|
result: settlement.result,
|
|
1093
1132
|
hash: settlement.hash.toLowerCase(),
|
|
1133
|
+
...(settlement.blockHash
|
|
1134
|
+
? { blockHash: settlement.blockHash.toLowerCase() }
|
|
1135
|
+
: {}),
|
|
1136
|
+
...(settlement.safe ? { safe: true } : {}),
|
|
1094
1137
|
at: Date.now(),
|
|
1095
1138
|
}));
|
|
1096
1139
|
}
|
|
@@ -1104,17 +1147,29 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1104
1147
|
*/
|
|
1105
1148
|
acknowledgeSettled(settled) {
|
|
1106
1149
|
requireLock();
|
|
1107
|
-
const store = storage();
|
|
1108
1150
|
try {
|
|
1109
|
-
|
|
1110
|
-
const saved = JSON.parse(raw ?? "null");
|
|
1111
|
-
if (saved?.hash === settled.hash.toLowerCase())
|
|
1112
|
-
store.setItem(settledKey, JSON.stringify({ ...saved, acknowledged: true }));
|
|
1151
|
+
flagSettled(storage(), settled.hash.toLowerCase(), "acknowledged");
|
|
1113
1152
|
}
|
|
1114
1153
|
catch {
|
|
1115
1154
|
/* An unreadable settlement names none; a refused write keeps it unacknowledged. */
|
|
1116
1155
|
}
|
|
1117
1156
|
},
|
|
1157
|
+
/**
|
|
1158
|
+
* Claim the one `onConfirmed` notice of the saved settlement `settled`
|
|
1159
|
+
* names (its hash): true for the first claim in any tab or run, false
|
|
1160
|
+
* after. A settlement no longer saved there can't be marked, so every
|
|
1161
|
+
* claim of it is true: a repeated notice over a lost one.
|
|
1162
|
+
*/
|
|
1163
|
+
claimConfirmedSettled(settled) {
|
|
1164
|
+
requireLock();
|
|
1165
|
+
try {
|
|
1166
|
+
return flagSettled(storage(), settled.hash.toLowerCase(), "confirmed");
|
|
1167
|
+
}
|
|
1168
|
+
catch {
|
|
1169
|
+
// Storage unavailable: told rather than lost.
|
|
1170
|
+
return true;
|
|
1171
|
+
}
|
|
1172
|
+
},
|
|
1118
1173
|
/**
|
|
1119
1174
|
* How the call's last write ended, if {@link markSettled} saved it for
|
|
1120
1175
|
* the call's latest reservation; a settlement of an earlier one reads as
|
|
@@ -1138,6 +1193,10 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1138
1193
|
? {
|
|
1139
1194
|
result: saved.result,
|
|
1140
1195
|
hash: saved.hash,
|
|
1196
|
+
...((0, untrusted_js_1.isBytes32)(saved.blockHash)
|
|
1197
|
+
? { blockHash: saved.blockHash }
|
|
1198
|
+
: {}),
|
|
1199
|
+
...(saved.safe === true ? { safe: true } : {}),
|
|
1141
1200
|
// Saved before 2.39 (a latest marker with no time): the user
|
|
1142
1201
|
// saw it then, so it reads as acknowledged.
|
|
1143
1202
|
...(saved.acknowledged === true || typeof latest.at !== "number"
|
|
@@ -1288,7 +1347,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1288
1347
|
executed(expected, executionHash) {
|
|
1289
1348
|
requireLock();
|
|
1290
1349
|
if (executionHash !== undefined && !(0, untrusted_js_1.isBytes32)(executionHash))
|
|
1291
|
-
throw new
|
|
1350
|
+
throw new lineError_js_1.ReviewLineError("Invalid execution transaction identity.");
|
|
1292
1351
|
const store = storage();
|
|
1293
1352
|
const { at, raw } = locate(store);
|
|
1294
1353
|
const current = readRecovery(store, at, raw, scopeAt(at));
|
|
@@ -1296,7 +1355,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1296
1355
|
if (!current?.hash ||
|
|
1297
1356
|
current.id !== wanted.id ||
|
|
1298
1357
|
current.hash !== wanted.hash)
|
|
1299
|
-
throw new
|
|
1358
|
+
throw new lineError_js_1.ReviewLineError("Write recovery changed. Keep the current action pending.");
|
|
1300
1359
|
const next = recordOf({
|
|
1301
1360
|
...current,
|
|
1302
1361
|
executed: true,
|
|
@@ -1335,7 +1394,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1335
1394
|
*/
|
|
1336
1395
|
abandon(expected, acknowledgement) {
|
|
1337
1396
|
if (acknowledgement?.checkedWallet !== true)
|
|
1338
|
-
throw new
|
|
1397
|
+
throw new lineError_js_1.ReviewLineError("Release a held write only after the user confirms they checked their wallet.");
|
|
1339
1398
|
const wanted = JSON.stringify(recordOf(expected));
|
|
1340
1399
|
const store = storage();
|
|
1341
1400
|
const { at, raw } = locate(store);
|
|
@@ -1343,15 +1402,21 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1343
1402
|
if (!durable)
|
|
1344
1403
|
return;
|
|
1345
1404
|
if (durable.executed)
|
|
1346
|
-
throw new
|
|
1405
|
+
throw new lineError_js_1.ReviewLineError("This write ran onchain. Keep it held until its result is known.");
|
|
1347
1406
|
const shown = readRecovery(store, at, raw, scopeAt(at));
|
|
1348
1407
|
if (JSON.stringify(durable) !== wanted &&
|
|
1349
1408
|
JSON.stringify(shown) !== wanted)
|
|
1350
|
-
throw new
|
|
1409
|
+
throw new lineError_js_1.ReviewLineError("Write recovery changed. Keep the current action pending.");
|
|
1351
1410
|
const marker = releasedKey(at, durable.id);
|
|
1411
|
+
try {
|
|
1412
|
+
store.setItem(exitedKey(at, durable.id), "1");
|
|
1413
|
+
}
|
|
1414
|
+
catch {
|
|
1415
|
+
/* Unsaved, a sequence resumed over it asks for the user's check. */
|
|
1416
|
+
}
|
|
1352
1417
|
store.setItem(marker, "1");
|
|
1353
1418
|
if (store.getItem(marker) !== "1")
|
|
1354
|
-
throw new
|
|
1419
|
+
throw new lineError_js_1.ReviewLineError("Write recovery storage did not release the action.");
|
|
1355
1420
|
const memory = unpersistedSubmissions.get(store);
|
|
1356
1421
|
if (memory?.get(at)?.id === durable.id)
|
|
1357
1422
|
memory.delete(at);
|
|
@@ -1362,7 +1427,7 @@ function createBrowserWriteRecovery(input, options = {}) {
|
|
|
1362
1427
|
const locks = options.locks ?? browserLocks();
|
|
1363
1428
|
return locks.request(key, { mode: "exclusive", ...(!wait && { ifAvailable: true }) }, async (lock) => {
|
|
1364
1429
|
if (!lock)
|
|
1365
|
-
throw new
|
|
1430
|
+
throw new lineError_js_1.ReviewLineError("This wallet action is already open in another tab.");
|
|
1366
1431
|
locked = true;
|
|
1367
1432
|
try {
|
|
1368
1433
|
return await work();
|
|
@@ -1520,7 +1585,13 @@ function heldBatch(record) {
|
|
|
1520
1585
|
: null;
|
|
1521
1586
|
return inner && inner.map((call) => normalized({ ...record, call }).call);
|
|
1522
1587
|
}
|
|
1523
|
-
/**
|
|
1588
|
+
/**
|
|
1589
|
+
* The MultiSend targets a held batch may run through: a Safe app folds the
|
|
1590
|
+
* same calls into its own version's MultiSendCallOnly, so any recognized
|
|
1591
|
+
* deployment carries exactly the held calldata.
|
|
1592
|
+
*/
|
|
1593
|
+
const BATCH_TARGETS = safe_js_1.MULTI_SEND_CALL_ONLY_DEPLOYMENTS.map((to) => to.toLowerCase());
|
|
1594
|
+
/** Whether `transaction` is the Safe's execTransaction of exactly the held batch: a recognized MultiSendCallOnly, its calldata, zero value and DELEGATECALL. */
|
|
1524
1595
|
function runsHeldBatch(transaction, record) {
|
|
1525
1596
|
try {
|
|
1526
1597
|
const { functionName, args } = (0, viem_1.decodeFunctionData)({
|
|
@@ -1530,7 +1601,7 @@ function runsHeldBatch(transaction, record) {
|
|
|
1530
1601
|
if (functionName !== "execTransaction")
|
|
1531
1602
|
return false;
|
|
1532
1603
|
const [to, value, data, operation] = args;
|
|
1533
|
-
return (to.toLowerCase()
|
|
1604
|
+
return (BATCH_TARGETS.includes(to.toLowerCase()) &&
|
|
1534
1605
|
value === 0n &&
|
|
1535
1606
|
data.toLowerCase() === record.call.data &&
|
|
1536
1607
|
operation === 1);
|
|
@@ -1556,13 +1627,14 @@ function heldSafeProposal(input, nonce) {
|
|
|
1556
1627
|
*/
|
|
1557
1628
|
function safeProposalIsHeldCall(proposal, input) {
|
|
1558
1629
|
const record = normalized(input);
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
:
|
|
1565
|
-
|
|
1630
|
+
const call = { ...record.call, value: BigInt(record.call.value) };
|
|
1631
|
+
return heldBatch({ ...record, version: 1, id: "" })
|
|
1632
|
+
? BATCH_TARGETS.some((to) => (0, safeService_js_1.safeTransactionMatchesCall)(proposal, {
|
|
1633
|
+
...call,
|
|
1634
|
+
to: to,
|
|
1635
|
+
operation: 1,
|
|
1636
|
+
}))
|
|
1637
|
+
: (0, safeService_js_1.safeTransactionMatchesCall)(proposal, call);
|
|
1566
1638
|
}
|
|
1567
1639
|
/**
|
|
1568
1640
|
* Authenticate the saved wallet identity, canonical inclusion and Safe effect.
|
|
@@ -1576,7 +1648,7 @@ function safeProposalIsHeldCall(proposal, input) {
|
|
|
1576
1648
|
*/
|
|
1577
1649
|
async function verifyReviewedWriteReceipt(client, saved, receipt, proof, { finality = true } = {}) {
|
|
1578
1650
|
const record = recordOf(saved);
|
|
1579
|
-
const pending = () => new
|
|
1651
|
+
const pending = () => new lineError_js_1.ReviewLineError("The saved wallet write is not yet proven. Keep this action pending.");
|
|
1580
1652
|
// A batch hold's call is its MultiSend: its proof is the calls it encodes.
|
|
1581
1653
|
const batch = heldBatch(record);
|
|
1582
1654
|
let calls = batch ?? [record.call];
|
|
@@ -1663,6 +1735,35 @@ async function verifyReviewedWriteReceipt(client, saved, receipt, proof, { final
|
|
|
1663
1735
|
throw pending();
|
|
1664
1736
|
status = result.status;
|
|
1665
1737
|
}
|
|
1738
|
+
else if (status === "success" && (0, safeService_js_1.isSafeExecTransaction)(record.call.data)) {
|
|
1739
|
+
// A Safe's execTransaction succeeds only with the Safe's own
|
|
1740
|
+
// ExecutionSuccess for its exact hash: an ExecutionFailure, or no event
|
|
1741
|
+
// for it, is a failure whatever the receipt's status. A call that only
|
|
1742
|
+
// shares the selector, to anything but a Safe, is decided as any other.
|
|
1743
|
+
if (!client.request)
|
|
1744
|
+
throw pending();
|
|
1745
|
+
const { request } = client;
|
|
1746
|
+
const at = (blockNumber) => blockNumber === undefined ? "latest" : (0, viem_1.numberToHex)(blockNumber);
|
|
1747
|
+
// Every read through the one `request` the receipt client has.
|
|
1748
|
+
const identity = await (0, safe_js_1.readAuthorityIdentity)({
|
|
1749
|
+
request,
|
|
1750
|
+
getCode: ({ address, blockNumber }) => request({
|
|
1751
|
+
method: "eth_getCode",
|
|
1752
|
+
params: [address, at(blockNumber)],
|
|
1753
|
+
}),
|
|
1754
|
+
getStorageAt: ({ address, slot, blockNumber }) => request({
|
|
1755
|
+
method: "eth_getStorageAt",
|
|
1756
|
+
params: [address, slot, at(blockNumber)],
|
|
1757
|
+
}),
|
|
1758
|
+
}, record.call.to, { blockNumber: canonical.blockNumber });
|
|
1759
|
+
if (!identity)
|
|
1760
|
+
throw pending();
|
|
1761
|
+
if (identity.kind === "safe") {
|
|
1762
|
+
const execution = await (0, safeService_js_1.safeExecTransactionResult)({ request: client.request }, record.chainId, record.call.to, record.call.data, canonical);
|
|
1763
|
+
if (execution?.status !== "success")
|
|
1764
|
+
status = "failed";
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1666
1767
|
const isCanonical = async () => {
|
|
1667
1768
|
const block = await client.getBlock({ blockNumber: canonical.blockNumber });
|
|
1668
1769
|
return (block.number === canonical.blockNumber &&
|
|
@@ -1683,7 +1784,7 @@ async function verifyReviewedWriteReceipt(client, saved, receipt, proof, { final
|
|
|
1683
1784
|
*/
|
|
1684
1785
|
async function verifyReviewedWriteExpiry(client, saved, service) {
|
|
1685
1786
|
const record = recordOf(saved);
|
|
1686
|
-
const pending = () => new
|
|
1787
|
+
const pending = () => new lineError_js_1.ReviewLineError("The saved Safe proposal is not proven expired. Keep this action pending.");
|
|
1687
1788
|
if (!record.safe ||
|
|
1688
1789
|
!record.hash ||
|
|
1689
1790
|
(await client.getChainId()) !== record.chainId)
|