@bananapus/nana-sdk-core 4.0.0 → 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 +7 -1
- package/dist/cjs/review/confirm.d.ts +4 -0
- package/dist/cjs/review/confirm.d.ts.map +1 -1
- package/dist/cjs/review/confirm.js +14 -3
- package/dist/cjs/review/confirm.js.map +1 -1
- package/dist/cjs/review/contractWrite.d.ts.map +1 -1
- package/dist/cjs/review/contractWrite.js +2 -1
- package/dist/cjs/review/contractWrite.js.map +1 -1
- 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 +31 -28
- package/dist/cjs/review/heldWrite.js.map +1 -1
- package/dist/cjs/review/index.d.ts +1 -1
- package/dist/cjs/review/index.d.ts.map +1 -1
- package/dist/cjs/review/index.js +6 -2
- package/dist/cjs/review/index.js.map +1 -1
- package/dist/cjs/review/lineError.d.ts +38 -0
- package/dist/cjs/review/lineError.d.ts.map +1 -1
- package/dist/cjs/review/lineError.js +35 -1
- package/dist/cjs/review/lineError.js.map +1 -1
- package/dist/cjs/review/plan.d.ts +0 -2
- package/dist/cjs/review/plan.d.ts.map +1 -1
- package/dist/cjs/review/plan.js +0 -6
- package/dist/cjs/review/plan.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 +29 -3
- package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -1
- package/dist/cjs/review/react/useReviewedRun.js +219 -37
- package/dist/cjs/review/react/useReviewedRun.js.map +1 -1
- package/dist/cjs/review/receipt.d.ts +33 -0
- package/dist/cjs/review/receipt.d.ts.map +1 -1
- package/dist/cjs/review/receipt.js +69 -0
- package/dist/cjs/review/receipt.js.map +1 -1
- package/dist/cjs/review/relayr.d.ts.map +1 -1
- package/dist/cjs/review/relayr.js +1 -0
- package/dist/cjs/review/relayr.js.map +1 -1
- package/dist/cjs/review/relayrSend.d.ts +3 -32
- package/dist/cjs/review/relayrSend.d.ts.map +1 -1
- package/dist/cjs/review/relayrSend.js +78 -226
- package/dist/cjs/review/relayrSend.js.map +1 -1
- package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
- package/dist/cjs/review/safeRelayr.js +4 -8
- package/dist/cjs/review/safeRelayr.js.map +1 -1
- package/dist/cjs/review/safeSend.js +3 -5
- package/dist/cjs/review/safeSend.js.map +1 -1
- package/dist/cjs/review/send.d.ts +38 -7
- package/dist/cjs/review/send.d.ts.map +1 -1
- package/dist/cjs/review/send.js +267 -121
- package/dist/cjs/review/send.js.map +1 -1
- package/dist/cjs/review/sign.d.ts +6 -4
- package/dist/cjs/review/sign.d.ts.map +1 -1
- package/dist/cjs/review/sign.js +22 -18
- package/dist/cjs/review/sign.js.map +1 -1
- package/dist/cjs/review/wallet.d.ts +18 -2
- package/dist/cjs/review/wallet.d.ts.map +1 -1
- package/dist/cjs/review/wallet.js +127 -50
- package/dist/cjs/review/wallet.js.map +1 -1
- package/dist/cjs/review/writeHold.d.ts +38 -1
- package/dist/cjs/review/writeHold.d.ts.map +1 -1
- package/dist/cjs/review/writeHold.js +37 -5
- package/dist/cjs/review/writeHold.js.map +1 -1
- package/dist/cjs/review/writeRecovery.d.ts +11 -0
- package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
- package/dist/cjs/review/writeRecovery.js +38 -5
- package/dist/cjs/review/writeRecovery.js.map +1 -1
- package/dist/esm/review/confirm.d.ts +4 -0
- package/dist/esm/review/confirm.d.ts.map +1 -1
- package/dist/esm/review/confirm.js +13 -3
- package/dist/esm/review/confirm.js.map +1 -1
- package/dist/esm/review/contractWrite.d.ts.map +1 -1
- package/dist/esm/review/contractWrite.js +3 -2
- package/dist/esm/review/contractWrite.js.map +1 -1
- 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 +30 -27
- package/dist/esm/review/heldWrite.js.map +1 -1
- package/dist/esm/review/index.d.ts +1 -1
- package/dist/esm/review/index.d.ts.map +1 -1
- package/dist/esm/review/index.js +1 -1
- package/dist/esm/review/index.js.map +1 -1
- package/dist/esm/review/lineError.d.ts +38 -0
- package/dist/esm/review/lineError.d.ts.map +1 -1
- package/dist/esm/review/lineError.js +33 -1
- package/dist/esm/review/lineError.js.map +1 -1
- package/dist/esm/review/plan.d.ts +0 -2
- package/dist/esm/review/plan.d.ts.map +1 -1
- package/dist/esm/review/plan.js +0 -5
- package/dist/esm/review/plan.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 +29 -3
- package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -1
- package/dist/esm/review/react/useReviewedRun.js +220 -38
- package/dist/esm/review/react/useReviewedRun.js.map +1 -1
- package/dist/esm/review/receipt.d.ts +33 -0
- package/dist/esm/review/receipt.d.ts.map +1 -1
- package/dist/esm/review/receipt.js +66 -0
- package/dist/esm/review/receipt.js.map +1 -1
- package/dist/esm/review/relayr.d.ts.map +1 -1
- package/dist/esm/review/relayr.js +2 -1
- package/dist/esm/review/relayr.js.map +1 -1
- package/dist/esm/review/relayrSend.d.ts +3 -32
- package/dist/esm/review/relayrSend.d.ts.map +1 -1
- package/dist/esm/review/relayrSend.js +85 -232
- package/dist/esm/review/relayrSend.js.map +1 -1
- package/dist/esm/review/safeRelayr.d.ts.map +1 -1
- package/dist/esm/review/safeRelayr.js +4 -8
- package/dist/esm/review/safeRelayr.js.map +1 -1
- package/dist/esm/review/safeSend.js +4 -6
- package/dist/esm/review/safeSend.js.map +1 -1
- package/dist/esm/review/send.d.ts +38 -7
- package/dist/esm/review/send.d.ts.map +1 -1
- package/dist/esm/review/send.js +270 -125
- package/dist/esm/review/send.js.map +1 -1
- package/dist/esm/review/sign.d.ts +6 -4
- package/dist/esm/review/sign.d.ts.map +1 -1
- package/dist/esm/review/sign.js +24 -20
- package/dist/esm/review/sign.js.map +1 -1
- package/dist/esm/review/wallet.d.ts +18 -2
- package/dist/esm/review/wallet.d.ts.map +1 -1
- package/dist/esm/review/wallet.js +128 -51
- package/dist/esm/review/wallet.js.map +1 -1
- package/dist/esm/review/writeHold.d.ts +38 -1
- package/dist/esm/review/writeHold.d.ts.map +1 -1
- package/dist/esm/review/writeHold.js +37 -6
- package/dist/esm/review/writeHold.js.map +1 -1
- package/dist/esm/review/writeRecovery.d.ts +11 -0
- package/dist/esm/review/writeRecovery.d.ts.map +1 -1
- package/dist/esm/review/writeRecovery.js +38 -5
- package/dist/esm/review/writeRecovery.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ReviewLineError } from "./lineError.js";
|
|
1
|
+
import { ReviewLineError, WalletNotInvokedError } from "./lineError.js";
|
|
2
|
+
import { BaseError, ChainMismatchError, createWalletClient, custom, } from "viem";
|
|
2
3
|
import { timeout } from "../pause.js";
|
|
3
4
|
/** How long a wallet's `ready` may take before nothing is sent. */
|
|
4
5
|
const WALLET_READY_MS = 10_000;
|
|
@@ -20,35 +21,122 @@ export async function walletReady(adapter) {
|
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
}
|
|
24
|
+
const CONNECTION_CHANGED = "Wallet connection changed. Review the transaction again.";
|
|
25
|
+
const NETWORK_CHANGED = "Your wallet changed networks. Review again.";
|
|
26
|
+
const UNREACHABLE = "Your wallet could not be reached. Nothing was sent; try again.";
|
|
27
|
+
const RUN_ENDED = "This action was closed. Nothing more was sent.";
|
|
28
|
+
/** The provider requests that send or sign: each is checked again as it is forwarded. */
|
|
29
|
+
const DISPATCHED = new Set([
|
|
30
|
+
"eth_sendTransaction",
|
|
31
|
+
"wallet_sendTransaction",
|
|
32
|
+
"eth_sendRawTransaction",
|
|
33
|
+
"wallet_sendCalls",
|
|
34
|
+
"eth_signTypedData_v4",
|
|
35
|
+
"personal_sign",
|
|
36
|
+
]);
|
|
23
37
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
38
|
+
* Calls `invoke` with a client over the connected wallet whose every sending
|
|
39
|
+
* or signing request first checks, synchronously, that the account, chain,
|
|
40
|
+
* Safe mode, connector and the site's `check` read as they did when asked:
|
|
41
|
+
* viem awaits its own reads before it sends, so no earlier check is the last.
|
|
42
|
+
* A refusal before any such request went out is a {@link WalletNotInvokedError}.
|
|
43
|
+
* A connector that changes while the client loads is fetched again, three
|
|
44
|
+
* times at most.
|
|
27
45
|
*/
|
|
28
|
-
async function
|
|
29
|
-
const
|
|
30
|
-
if (!
|
|
31
|
-
throw new
|
|
46
|
+
async function withConnection(options, invoke, signal) {
|
|
47
|
+
const account = options.account();
|
|
48
|
+
if (!account)
|
|
49
|
+
throw new WalletNotInvokedError("Connect a wallet first.");
|
|
32
50
|
const chainId = options.chainId();
|
|
33
51
|
const safe = options.isSafe();
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
52
|
+
const current = () => {
|
|
53
|
+
if (signal?.aborted)
|
|
54
|
+
throw new WalletNotInvokedError(RUN_ENDED);
|
|
55
|
+
if (options.account()?.toLowerCase() !== account.toLowerCase()) {
|
|
56
|
+
throw new WalletNotInvokedError("The connected account changed. Review again.");
|
|
57
|
+
}
|
|
58
|
+
if (options.chainId() !== chainId || options.isSafe() !== safe) {
|
|
59
|
+
throw new WalletNotInvokedError(CONNECTION_CHANGED);
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
options.check?.();
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw Object.assign(new WalletNotInvokedError(error instanceof Error ? error.message : CONNECTION_CHANGED), { cause: error });
|
|
66
|
+
}
|
|
67
|
+
return options.connector?.();
|
|
68
|
+
};
|
|
69
|
+
let wallet;
|
|
70
|
+
let connector;
|
|
71
|
+
for (let attempt = 0; attempt < 3 && !wallet; attempt += 1) {
|
|
72
|
+
connector = current();
|
|
73
|
+
let fetched;
|
|
74
|
+
try {
|
|
75
|
+
fetched = await options.walletClient();
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
throw Object.assign(new WalletNotInvokedError(UNREACHABLE), {
|
|
79
|
+
cause: error,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (current() === connector)
|
|
83
|
+
wallet = fetched;
|
|
40
84
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (
|
|
46
|
-
throw new
|
|
85
|
+
if (!wallet)
|
|
86
|
+
throw new WalletNotInvokedError(CONNECTION_CHANGED);
|
|
87
|
+
// A composite transport (viem's fallback) can pass one send to a second
|
|
88
|
+
// provider, so a later 4001 would not prove the first never sent it.
|
|
89
|
+
if (!ONE_PROVIDER.has(wallet.transport.type))
|
|
90
|
+
throw new WalletNotInvokedError(COMPOSITE);
|
|
91
|
+
const inner = wallet;
|
|
92
|
+
let forwarded = false;
|
|
93
|
+
let refusal;
|
|
94
|
+
const client = createWalletClient({
|
|
95
|
+
account: inner.account,
|
|
96
|
+
chain: inner.chain,
|
|
97
|
+
transport: custom({
|
|
98
|
+
request: (args) => {
|
|
99
|
+
const forwardedNow = DISPATCHED.has(args.method);
|
|
100
|
+
if (forwardedNow) {
|
|
101
|
+
try {
|
|
102
|
+
if (current() !== connector)
|
|
103
|
+
throw new WalletNotInvokedError(CONNECTION_CHANGED);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
// Unsent only while none of this call's requests went out.
|
|
107
|
+
if (forwarded)
|
|
108
|
+
return Promise.reject(new ReviewLineError(CONNECTION_CHANGED));
|
|
109
|
+
refusal = error;
|
|
110
|
+
return Promise.reject(error);
|
|
111
|
+
}
|
|
112
|
+
forwarded = true;
|
|
113
|
+
}
|
|
114
|
+
// A send or signature reaches the wallet once, never retried past this check.
|
|
115
|
+
return forwardedNow
|
|
116
|
+
? inner.request(args, { retryCount: 0 })
|
|
117
|
+
: inner.request(args);
|
|
118
|
+
},
|
|
119
|
+
}, { retryCount: 0 }),
|
|
120
|
+
});
|
|
121
|
+
try {
|
|
122
|
+
return await invoke({ account, client });
|
|
47
123
|
}
|
|
48
|
-
|
|
49
|
-
|
|
124
|
+
catch (error) {
|
|
125
|
+
// viem wraps what its transport threw; the refusal is this one, by identity.
|
|
126
|
+
if (refusal)
|
|
127
|
+
throw refusal;
|
|
128
|
+
// viem failed before asking the wallet anything (a chain read, another chain).
|
|
129
|
+
if (!forwarded)
|
|
130
|
+
throw Object.assign(new WalletNotInvokedError(error instanceof BaseError &&
|
|
131
|
+
error.walk((e) => e instanceof ChainMismatchError)
|
|
132
|
+
? NETWORK_CHANGED
|
|
133
|
+
: UNREACHABLE), { cause: error });
|
|
134
|
+
throw error;
|
|
50
135
|
}
|
|
51
136
|
}
|
|
137
|
+
/** viem transports that hand each request to exactly one provider. */
|
|
138
|
+
const ONE_PROVIDER = new Set(["custom", "http", "webSocket", "ipc"]);
|
|
139
|
+
const COMPOSITE = "This wallet connection uses more than one provider. Connect through one wallet provider; nothing was sent.";
|
|
52
140
|
/**
|
|
53
141
|
* The chain a write is sent on: the client's own when it is that chain, so
|
|
54
142
|
* its formatters apply. viem checks the wallet is on it before sending.
|
|
@@ -80,43 +168,31 @@ export function viemWalletAdapter(options) {
|
|
|
80
168
|
switchChain: async (chainId) => {
|
|
81
169
|
await options.switchChain(chainId);
|
|
82
170
|
},
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
});
|
|
93
|
-
},
|
|
94
|
-
async signTypedData(typedData) {
|
|
95
|
-
const connected = await connection(options);
|
|
96
|
-
unchanged(options, connected);
|
|
97
|
-
const { account, client } = connected;
|
|
171
|
+
sendTransaction: ({ chainId, to, data, value, gas, signal }) => withConnection(options, ({ account, client }) => client.sendTransaction({
|
|
172
|
+
account,
|
|
173
|
+
chain: chainOf(client, chainId),
|
|
174
|
+
to,
|
|
175
|
+
data,
|
|
176
|
+
value,
|
|
177
|
+
...(gas === undefined ? {} : { gas }),
|
|
178
|
+
}), signal),
|
|
179
|
+
signTypedData: async (typedData) => {
|
|
98
180
|
// viem does not check the wallet's chain against the domain's.
|
|
99
181
|
const chainId = typedData.domain?.chainId;
|
|
100
182
|
if (chainId !== undefined && options.chainId() !== Number(chainId)) {
|
|
101
|
-
throw new
|
|
183
|
+
throw new WalletNotInvokedError(NETWORK_CHANGED);
|
|
102
184
|
}
|
|
103
|
-
return client.signTypedData({ ...typedData, account });
|
|
104
|
-
},
|
|
105
|
-
async signMessage(message) {
|
|
106
|
-
const connected = await connection(options);
|
|
107
|
-
unchanged(options, connected);
|
|
108
|
-
const { account, client } = connected;
|
|
109
|
-
return client.signMessage({ account, message });
|
|
185
|
+
return withConnection(options, ({ account, client }) => client.signTypedData({ ...typedData, account }));
|
|
110
186
|
},
|
|
111
|
-
|
|
112
|
-
|
|
187
|
+
signMessage: (message) => withConnection(options, ({ account, client }) => client.signMessage({ account, message })),
|
|
188
|
+
sendCalls: (chainId, calls) => withConnection(options, async ({ account, client }) => {
|
|
113
189
|
const { id } = await client.sendCalls({
|
|
114
190
|
account,
|
|
115
191
|
chain: chainOf(client, chainId),
|
|
116
192
|
calls: calls.map(({ to, data, value }) => ({ to, data, value })),
|
|
117
193
|
});
|
|
118
194
|
return id;
|
|
119
|
-
},
|
|
195
|
+
}),
|
|
120
196
|
};
|
|
121
197
|
}
|
|
122
198
|
/** EIP-1193 4200, as Signa's connector refuses a request it does not take. */
|
|
@@ -127,7 +203,8 @@ export function unsupportedWalletRequest() {
|
|
|
127
203
|
}
|
|
128
204
|
/**
|
|
129
205
|
* A {@link WalletAdapter} for a wallet that reviews on its own page (Signa).
|
|
130
|
-
* It takes raw calls through `submit
|
|
206
|
+
* It takes raw calls through `submit`, and raw typed data or text through
|
|
207
|
+
* `signTypedData` and `signMessage` when given; anything else is refused
|
|
131
208
|
* with EIP-1193 4200.
|
|
132
209
|
*/
|
|
133
210
|
export function selfReviewingAdapter(options) {
|
|
@@ -142,8 +219,8 @@ export function selfReviewingAdapter(options) {
|
|
|
142
219
|
isSafe: refuse,
|
|
143
220
|
switchChain: reject,
|
|
144
221
|
sendTransaction: reject,
|
|
145
|
-
signTypedData: reject,
|
|
146
|
-
signMessage: reject,
|
|
222
|
+
signTypedData: options.signTypedData ?? reject,
|
|
223
|
+
signMessage: options.signMessage ?? reject,
|
|
147
224
|
submitToReviewer: (request) => options.submit(request),
|
|
148
225
|
};
|
|
149
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/review/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/review/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,10 +14,17 @@ export type UnacknowledgedSuccess = {
|
|
|
14
14
|
export type WriteHoldClient = Pick<PublicClient, "getBlock" | "getBlockNumber" | "getChainId" | "getTransaction" | "getTransactionCount" | "getTransactionReceipt" | "request">;
|
|
15
15
|
/** How a held write ended, when the hold saw it end. */
|
|
16
16
|
export type WriteHoldSettled =
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Its verified receipt in a canonical block (a Safe failure only once
|
|
19
|
+
* final), `blockHash` that block's (none when a finalized log proved it);
|
|
20
|
+
* `safe` when it is a Safe's execution, whose failure is the Safe's own
|
|
21
|
+
* (its outer transaction may succeed); `acknowledged` once the user saw it.
|
|
22
|
+
*/
|
|
18
23
|
{
|
|
19
24
|
result: "success" | "failed";
|
|
20
25
|
hash: Hex;
|
|
26
|
+
blockHash?: Hex;
|
|
27
|
+
safe?: true;
|
|
21
28
|
acknowledged?: true;
|
|
22
29
|
}
|
|
23
30
|
/** A Safe proposal's expiry before it ran is proven. */
|
|
@@ -136,6 +143,12 @@ export declare class WriteHeldError extends ReviewLineError {
|
|
|
136
143
|
readonly name = "WriteHeldError";
|
|
137
144
|
constructor(state: WriteHeldState);
|
|
138
145
|
}
|
|
146
|
+
/** A run refused while the action's last success is unacknowledged; "Send it again" acknowledges `success`. */
|
|
147
|
+
export declare class WriteHoldUnacknowledgedSuccessError extends ReviewLineError {
|
|
148
|
+
readonly success: UnacknowledgedSuccess;
|
|
149
|
+
readonly name = "WriteHoldUnacknowledgedSuccessError";
|
|
150
|
+
constructor(success: UnacknowledgedSuccess);
|
|
151
|
+
}
|
|
139
152
|
/** The account's nonce couldn't be read, so the wallet never opened. */
|
|
140
153
|
export declare class WriteHoldNonceError extends ReviewLineError {
|
|
141
154
|
readonly cause: unknown;
|
|
@@ -263,6 +276,14 @@ export declare function createWriteHold(options?: {
|
|
|
263
276
|
result: "success" | "failed";
|
|
264
277
|
hash: Hex;
|
|
265
278
|
}): Promise<WriteHoldState>;
|
|
279
|
+
/**
|
|
280
|
+
* Claim the one `onConfirmed` notice of the settlement `settled` names,
|
|
281
|
+
* under the call's lock: true for the first completion in any tab or
|
|
282
|
+
* run; a completion that loses it stays silent.
|
|
283
|
+
*/
|
|
284
|
+
claimConfirmed(settled: {
|
|
285
|
+
hash: Hex;
|
|
286
|
+
}): Promise<boolean>;
|
|
266
287
|
};
|
|
267
288
|
list: ({ account, chainId }: {
|
|
268
289
|
account: Address;
|
|
@@ -329,6 +350,14 @@ export declare function createWriteHold(options?: {
|
|
|
329
350
|
result: "success" | "failed";
|
|
330
351
|
hash: Hex;
|
|
331
352
|
}): Promise<WriteHoldState>;
|
|
353
|
+
/**
|
|
354
|
+
* Claim the one `onConfirmed` notice of the settlement `settled` names,
|
|
355
|
+
* under the call's lock: true for the first completion in any tab or
|
|
356
|
+
* run; a completion that loses it stays silent.
|
|
357
|
+
*/
|
|
358
|
+
claimConfirmed(settled: {
|
|
359
|
+
hash: Hex;
|
|
360
|
+
}): Promise<boolean>;
|
|
332
361
|
};
|
|
333
362
|
}[];
|
|
334
363
|
/** Whether holds outlive this tab right now. */
|
|
@@ -415,6 +444,14 @@ export declare function openStepHold(hold: WriteHold, account: Address, safe: bo
|
|
|
415
444
|
result: "success" | "failed";
|
|
416
445
|
hash: Hex;
|
|
417
446
|
}): Promise<WriteHoldState>;
|
|
447
|
+
/**
|
|
448
|
+
* Claim the one `onConfirmed` notice of the settlement `settled` names,
|
|
449
|
+
* under the call's lock: true for the first completion in any tab or
|
|
450
|
+
* run; a completion that loses it stays silent.
|
|
451
|
+
*/
|
|
452
|
+
claimConfirmed(settled: {
|
|
453
|
+
hash: Hex;
|
|
454
|
+
}): Promise<boolean>;
|
|
418
455
|
};
|
|
419
456
|
/**
|
|
420
457
|
* The one call a Safe app proposes a batch of `calls` as (`ReviewedAction`'s
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeHold.d.ts","sourceRoot":"","sources":["../../../src/review/writeHold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,MAAM,CAAC;AACd,OAAO,
|
|
1
|
+
{"version":3,"file":"writeHold.d.ts","sourceRoot":"","sources":["../../../src/review/writeHold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReviewLineError } from "./lineError.js";
|
|
2
2
|
import { isAddress, toEventSelector, } from "viem";
|
|
3
|
-
import { canonicalSafeTxHash, lookAtSafeProposalEnd, provenSafeProposalEnd, readSafeTransaction, SAFE_PROPOSAL_AWAITING, safeTransactionMessage, } from "../safeService.js";
|
|
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";
|
|
3
|
+
import { canonicalSafeTxHash, lookAtSafeProposalEnd, provenSafeProposalEnd, isSafeExecTransaction, readSafeTransaction, SAFE_PROPOSAL_AWAITING, safeTransactionMessage, } from "../safeService.js";
|
|
4
|
+
import { HELD_AWAY_SUCCESS_LINE, 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";
|
|
5
5
|
import { createBrowserWriteRecovery, createHeldWriteStorage, findReviewedWrites, heldSafeProposal, findTransactionAtNonce, listReviewedWrites, readReviewedWriteNonce, safeProposalIsHeldCall, SubmittedWritePersistenceError, verifyReviewedWriteExpiry, verifyReviewedWriteReceipt, } from "./writeRecovery.js";
|
|
6
6
|
import { isBytes32 } from "../untrusted.js";
|
|
7
7
|
import { encodeMultiSend, MULTI_SEND_CALL_ONLY } from "../safe.js";
|
|
@@ -39,6 +39,14 @@ export class WriteHeldError extends ReviewLineError {
|
|
|
39
39
|
this.name = "WriteHeldError";
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
+
/** A run refused while the action's last success is unacknowledged; "Send it again" acknowledges `success`. */
|
|
43
|
+
export class WriteHoldUnacknowledgedSuccessError extends ReviewLineError {
|
|
44
|
+
constructor(success) {
|
|
45
|
+
super(HELD_AWAY_SUCCESS_LINE);
|
|
46
|
+
this.success = success;
|
|
47
|
+
this.name = "WriteHoldUnacknowledgedSuccessError";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
42
50
|
/** The account's nonce couldn't be read, so the wallet never opened. */
|
|
43
51
|
export class WriteHoldNonceError extends ReviewLineError {
|
|
44
52
|
constructor(cause) {
|
|
@@ -367,6 +375,11 @@ export function createWriteHold(options = {}) {
|
|
|
367
375
|
const settled = {
|
|
368
376
|
result: verdict,
|
|
369
377
|
hash: receipt.transactionHash.toLowerCase(),
|
|
378
|
+
blockHash: receipt.blockHash.toLowerCase(),
|
|
379
|
+
// A Safe's execution, proposed or sent by an owner: its failure is its own.
|
|
380
|
+
...(record.safe || isSafeExecTransaction(record.call.data)
|
|
381
|
+
? { safe: true }
|
|
382
|
+
: {}),
|
|
370
383
|
};
|
|
371
384
|
// Saved before the hold ends, so no reader sees it clear without its
|
|
372
385
|
// result: another tab, a reload, a follow timer.
|
|
@@ -687,6 +700,7 @@ export function createWriteHold(options = {}) {
|
|
|
687
700
|
const settled = {
|
|
688
701
|
result: end.execution.status,
|
|
689
702
|
hash: end.execution.executionHash,
|
|
703
|
+
safe: true,
|
|
690
704
|
};
|
|
691
705
|
recovery.markSettled(record, settled);
|
|
692
706
|
if (release(record))
|
|
@@ -1199,6 +1213,15 @@ export function createWriteHold(options = {}) {
|
|
|
1199
1213
|
}, true);
|
|
1200
1214
|
return shown(result?.value ?? peek());
|
|
1201
1215
|
},
|
|
1216
|
+
/**
|
|
1217
|
+
* Claim the one `onConfirmed` notice of the settlement `settled` names,
|
|
1218
|
+
* under the call's lock: true for the first completion in any tab or
|
|
1219
|
+
* run; a completion that loses it stays silent.
|
|
1220
|
+
*/
|
|
1221
|
+
async claimConfirmed(settled) {
|
|
1222
|
+
const result = await locked(async () => recovery.claimConfirmedSettled(settled), true);
|
|
1223
|
+
return result?.value === true;
|
|
1224
|
+
},
|
|
1202
1225
|
async attachHash(client, hash) {
|
|
1203
1226
|
const result = await locked(async () => {
|
|
1204
1227
|
const record = recovery.read();
|
|
@@ -1389,6 +1412,13 @@ export function createWriteHold(options = {}) {
|
|
|
1389
1412
|
}
|
|
1390
1413
|
return null;
|
|
1391
1414
|
}
|
|
1415
|
+
/** The legacy hold that saved the settlement with this hash, if any. */
|
|
1416
|
+
function legacySaving(hash) {
|
|
1417
|
+
const lower = hash.toLowerCase();
|
|
1418
|
+
return eligibleLegacy().find(({ state }) => state.settled !== undefined &&
|
|
1419
|
+
"hash" in state.settled &&
|
|
1420
|
+
state.settled.hash === lower);
|
|
1421
|
+
}
|
|
1392
1422
|
/**
|
|
1393
1423
|
* How a legacy hold this intent stood for ended, while the intent itself
|
|
1394
1424
|
* never reserved: its settlement (acknowledged or not) is the intent's,
|
|
@@ -1639,14 +1669,15 @@ export function createWriteHold(options = {}) {
|
|
|
1639
1669
|
},
|
|
1640
1670
|
/** A settlement is acknowledged where it was saved, found by its hash. */
|
|
1641
1671
|
async acknowledge(settled) {
|
|
1642
|
-
const
|
|
1643
|
-
const legacy = eligibleLegacy().find(({ state }) => state.settled !== undefined &&
|
|
1644
|
-
"hash" in state.settled &&
|
|
1645
|
-
state.settled.hash === hash);
|
|
1672
|
+
const legacy = legacySaving(settled.hash);
|
|
1646
1673
|
return legacy
|
|
1647
1674
|
? withLegacy(await legacy.handle.acknowledge(settled))
|
|
1648
1675
|
: own.acknowledge(settled);
|
|
1649
1676
|
},
|
|
1677
|
+
/** A settlement's notice is claimed where it was saved, found by its hash. */
|
|
1678
|
+
claimConfirmed(settled) {
|
|
1679
|
+
return (legacySaving(settled.hash)?.handle ?? own).claimConfirmed(settled);
|
|
1680
|
+
},
|
|
1650
1681
|
async send(client, run) {
|
|
1651
1682
|
const held = await delegated(client);
|
|
1652
1683
|
if (held)
|