@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
|
@@ -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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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { ReviewLineError } from "./lineError.js";
|
|
1
2
|
import { isAddress, toEventSelector, } from "viem";
|
|
2
3
|
import { canonicalSafeTxHash, lookAtSafeProposalEnd, provenSafeProposalEnd, readSafeTransaction, SAFE_PROPOSAL_AWAITING, safeTransactionMessage, } from "../safeService.js";
|
|
3
4
|
import { SAFE_PROPOSAL_EXECUTED_LINE, WRITE_HOLD_HASHED_EXIT_LINE, WRITE_HOLD_IN_TAB_LINE, WRITE_HOLD_LOOKS_DONE_LINE, WRITE_HOLD_MINED_LINE, WRITE_HOLD_NONCE_LINE, WRITE_HOLD_PENDING_LINE, WRITE_HOLD_UNCHECKED_LINE, WRITE_HOLD_REVERTED_LINE, WRITE_HOLD_SAFE_REPLACED_LINE, WRITE_HOLD_SAFE_UNPROVEN_LINE, WRITE_HOLD_STALE_REVIEW_LINE, writeHeldMessage, } from "./messages.js";
|
|
4
5
|
import { createBrowserWriteRecovery, createHeldWriteStorage, findReviewedWrites, heldSafeProposal, findTransactionAtNonce, listReviewedWrites, readReviewedWriteNonce, safeProposalIsHeldCall, SubmittedWritePersistenceError, verifyReviewedWriteExpiry, verifyReviewedWriteReceipt, } from "./writeRecovery.js";
|
|
5
6
|
import { isBytes32 } from "../untrusted.js";
|
|
7
|
+
import { encodeMultiSend, MULTI_SEND_CALL_ONLY } from "../safe.js";
|
|
8
|
+
import { safeBatchIntent } from "./intents.js";
|
|
6
9
|
import { atCanonicalFinalizedBlock } from "./relayr.js";
|
|
7
10
|
import { TAB, tabShared } from "./tabState.js";
|
|
8
11
|
/** `sent` is the transaction at `hash`, exactly `record`'s call, from its account, on its chain. */
|
|
@@ -29,7 +32,7 @@ function ungated(state) {
|
|
|
29
32
|
: { ...state, exit: false };
|
|
30
33
|
}
|
|
31
34
|
/** A send was refused because the exact call is held; `state` says how. */
|
|
32
|
-
export class WriteHeldError extends
|
|
35
|
+
export class WriteHeldError extends ReviewLineError {
|
|
33
36
|
constructor(state) {
|
|
34
37
|
super(state.line);
|
|
35
38
|
this.state = state;
|
|
@@ -37,7 +40,7 @@ export class WriteHeldError extends Error {
|
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
42
|
/** The account's nonce couldn't be read, so the wallet never opened. */
|
|
40
|
-
export class WriteHoldNonceError extends
|
|
43
|
+
export class WriteHoldNonceError extends ReviewLineError {
|
|
41
44
|
constructor(cause) {
|
|
42
45
|
super(WRITE_HOLD_NONCE_LINE);
|
|
43
46
|
this.cause = cause;
|
|
@@ -49,7 +52,7 @@ export class WriteHoldNonceError extends Error {
|
|
|
49
52
|
* reserved, and maybe settled (`settled`), while it was open. Review again;
|
|
50
53
|
* the next review sends normally.
|
|
51
54
|
*/
|
|
52
|
-
export class WriteHoldStaleReviewError extends
|
|
55
|
+
export class WriteHoldStaleReviewError extends ReviewLineError {
|
|
53
56
|
constructor(settled) {
|
|
54
57
|
super(WRITE_HOLD_STALE_REVIEW_LINE);
|
|
55
58
|
this.settled = settled;
|
|
@@ -57,7 +60,7 @@ export class WriteHoldStaleReviewError extends Error {
|
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
/** The exact call is already being sent from another flow or tab. */
|
|
60
|
-
export class WriteHoldBusyError extends
|
|
63
|
+
export class WriteHoldBusyError extends ReviewLineError {
|
|
61
64
|
constructor() {
|
|
62
65
|
super("This transaction is already open in another window.");
|
|
63
66
|
this.name = "WriteHoldBusyError";
|
|
@@ -215,7 +218,7 @@ export function createWriteHold(options = {}) {
|
|
|
215
218
|
headers: response.headers,
|
|
216
219
|
})),
|
|
217
220
|
new Promise((_, reject) => {
|
|
218
|
-
timer = setTimeout(() => reject(new
|
|
221
|
+
timer = setTimeout(() => reject(new ReviewLineError("Safe's service did not answer in time.")), SAFE_SERVICE_READ_MS);
|
|
219
222
|
}),
|
|
220
223
|
]).finally(() => clearTimeout(timer));
|
|
221
224
|
},
|
|
@@ -360,14 +363,16 @@ export function createWriteHold(options = {}) {
|
|
|
360
363
|
// failure waits for finality. A block the node no longer shows as
|
|
361
364
|
// canonical proves nothing and keeps the hold.
|
|
362
365
|
const verdict = await verifyReviewedWriteReceipt(client, record, receipt, proof, { finality: record.safe }).catch(() => null);
|
|
363
|
-
if (verdict
|
|
366
|
+
if (verdict) {
|
|
364
367
|
const settled = {
|
|
365
368
|
result: verdict,
|
|
366
369
|
hash: receipt.transactionHash.toLowerCase(),
|
|
367
370
|
};
|
|
368
|
-
//
|
|
371
|
+
// Saved before the hold ends, so no reader sees it clear without its
|
|
372
|
+
// result: another tab, a reload, a follow timer.
|
|
369
373
|
recovery.markSettled(record, settled);
|
|
370
|
-
|
|
374
|
+
if (release(record))
|
|
375
|
+
return clear(settled, record.id);
|
|
371
376
|
}
|
|
372
377
|
if (!record.safe &&
|
|
373
378
|
receipt.status === "reverted" &&
|
|
@@ -678,13 +683,14 @@ export function createWriteHold(options = {}) {
|
|
|
678
683
|
}
|
|
679
684
|
// It ran: with its receipt unreadable, the canonical log at a
|
|
680
685
|
// finalized block carries its result. Never a resend exit.
|
|
681
|
-
if (end.execution
|
|
686
|
+
if (end.execution) {
|
|
682
687
|
const settled = {
|
|
683
688
|
result: end.execution.status,
|
|
684
689
|
hash: end.execution.executionHash,
|
|
685
690
|
};
|
|
686
691
|
recovery.markSettled(record, settled);
|
|
687
|
-
|
|
692
|
+
if (release(record))
|
|
693
|
+
return clear(settled, record.id);
|
|
688
694
|
}
|
|
689
695
|
}
|
|
690
696
|
// Its wait is bounded like any unchecked write, the clock restarted by
|
|
@@ -905,7 +911,7 @@ export function createWriteHold(options = {}) {
|
|
|
905
911
|
},
|
|
906
912
|
afterSubmit(hash, proposal) {
|
|
907
913
|
if (!attempt)
|
|
908
|
-
throw new
|
|
914
|
+
throw new ReviewLineError("Hold the write before the wallet opens.");
|
|
909
915
|
try {
|
|
910
916
|
attempt = recovery.submitted(hash, attempt);
|
|
911
917
|
}
|
|
@@ -971,7 +977,7 @@ export function createWriteHold(options = {}) {
|
|
|
971
977
|
*/
|
|
972
978
|
async exit(snapshot, acknowledgement, client) {
|
|
973
979
|
if (acknowledgement?.checkedWallet !== true)
|
|
974
|
-
throw new
|
|
980
|
+
throw new ReviewLineError("Release a held write only after the user confirms they checked their wallet.");
|
|
975
981
|
const result = await locked(async () => {
|
|
976
982
|
const now = await inspect(client, lastEffect);
|
|
977
983
|
if (snapshot.status === "clear" ||
|
|
@@ -1089,7 +1095,7 @@ export function createWriteHold(options = {}) {
|
|
|
1089
1095
|
try {
|
|
1090
1096
|
const { released } = await hooks.across((work) => recovery.withLock(work), () => {
|
|
1091
1097
|
if (!free())
|
|
1092
|
-
throw new
|
|
1098
|
+
throw new ReviewLineError("Held since the app's read.");
|
|
1093
1099
|
reserve();
|
|
1094
1100
|
adopted = true;
|
|
1095
1101
|
}, recovery.rejected, Promise.resolve(), hooks.generations());
|
|
@@ -1169,6 +1175,10 @@ export function createWriteHold(options = {}) {
|
|
|
1169
1175
|
}
|
|
1170
1176
|
: undefined;
|
|
1171
1177
|
},
|
|
1178
|
+
/** Whether `reservation` was released (the user's exit, or nothing sent), never settled. */
|
|
1179
|
+
released(reservation) {
|
|
1180
|
+
return recovery.released(reservation);
|
|
1181
|
+
},
|
|
1172
1182
|
/** How `reservation` settled, if it is this key's latest and settled. */
|
|
1173
1183
|
settlementOf(reservation) {
|
|
1174
1184
|
const now = peek();
|
|
@@ -1616,6 +1626,9 @@ export function createWriteHold(options = {}) {
|
|
|
1616
1626
|
* How a reservation this intent stood for settled, on its own key or a
|
|
1617
1627
|
* legacy one, whichever hold is shown now.
|
|
1618
1628
|
*/
|
|
1629
|
+
released(reservation) {
|
|
1630
|
+
return [own, ...delegates].some((handle) => handle.released(reservation));
|
|
1631
|
+
},
|
|
1619
1632
|
settlementOf(reservation) {
|
|
1620
1633
|
for (const handle of [own, ...delegates]) {
|
|
1621
1634
|
const settled = handle.settlementOf(reservation);
|
|
@@ -1777,6 +1790,39 @@ export function createWriteHold(options = {}) {
|
|
|
1777
1790
|
reviewLine: () => (storage.durable() ? null : WRITE_HOLD_IN_TAB_LINE),
|
|
1778
1791
|
/** Stop every settle poll and the tab listener (tests, teardown). */
|
|
1779
1792
|
dispose,
|
|
1793
|
+
/** Safe's service as the hold reads it, every read bounded. */
|
|
1794
|
+
safeService: service,
|
|
1795
|
+
};
|
|
1796
|
+
}
|
|
1797
|
+
/** The write hold one step is sent under: its intent's, or its exact call's. */
|
|
1798
|
+
export function openStepHold(hold, account, safe, call) {
|
|
1799
|
+
return hold.open({
|
|
1800
|
+
chainId: call.chainId,
|
|
1801
|
+
account,
|
|
1802
|
+
safe,
|
|
1803
|
+
call: { to: call.to, data: call.data, value: call.value ?? 0n },
|
|
1804
|
+
...(call.intent ? { namespace: call.intent } : {}),
|
|
1805
|
+
}, call.legacy ? { legacy: [...call.legacy] } : undefined);
|
|
1806
|
+
}
|
|
1807
|
+
/**
|
|
1808
|
+
* The one call a Safe app proposes a batch of `calls` as (`ReviewedAction`'s
|
|
1809
|
+
* `batch`), as its hold holds it: their MultiSend, under the first call's
|
|
1810
|
+
* intent, or else `safeBatchIntent` of the calls.
|
|
1811
|
+
*/
|
|
1812
|
+
export function safeBatchCall(account, calls) {
|
|
1813
|
+
const [{ chainId, intent, legacy }] = calls;
|
|
1814
|
+
const inner = calls.map(({ to, data, value }) => ({
|
|
1815
|
+
to,
|
|
1816
|
+
data,
|
|
1817
|
+
value: value ?? 0n,
|
|
1818
|
+
}));
|
|
1819
|
+
return {
|
|
1820
|
+
chainId,
|
|
1821
|
+
to: MULTI_SEND_CALL_ONLY,
|
|
1822
|
+
data: encodeMultiSend(inner),
|
|
1823
|
+
value: 0n,
|
|
1824
|
+
intent: intent ?? safeBatchIntent({ chainId, safe: account, calls: inner }),
|
|
1825
|
+
legacy,
|
|
1780
1826
|
};
|
|
1781
1827
|
}
|
|
1782
1828
|
//# sourceMappingURL=writeHold.js.map
|