@bananapus/nana-sdk-core 2.26.0 → 2.28.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.
Files changed (73) hide show
  1. package/dist/cjs/review/contractWrite.d.ts +12 -1
  2. package/dist/cjs/review/contractWrite.d.ts.map +1 -1
  3. package/dist/cjs/review/contractWrite.js +28 -2
  4. package/dist/cjs/review/contractWrite.js.map +1 -1
  5. package/dist/cjs/review/index.d.ts +1 -0
  6. package/dist/cjs/review/index.d.ts.map +1 -1
  7. package/dist/cjs/review/index.js +1 -0
  8. package/dist/cjs/review/index.js.map +1 -1
  9. package/dist/cjs/review/writeRecovery.d.ts +106 -0
  10. package/dist/cjs/review/writeRecovery.d.ts.map +1 -0
  11. package/dist/cjs/review/writeRecovery.js +385 -0
  12. package/dist/cjs/review/writeRecovery.js.map +1 -0
  13. package/dist/cjs/safeService.d.ts +16 -9
  14. package/dist/cjs/safeService.d.ts.map +1 -1
  15. package/dist/cjs/safeService.js +33 -26
  16. package/dist/cjs/safeService.js.map +1 -1
  17. package/dist/cjs/v6/index.d.ts +1 -0
  18. package/dist/cjs/v6/index.d.ts.map +1 -1
  19. package/dist/cjs/v6/index.js +1 -0
  20. package/dist/cjs/v6/index.js.map +1 -1
  21. package/dist/cjs/v6/nft.d.ts +7 -1
  22. package/dist/cjs/v6/nft.d.ts.map +1 -1
  23. package/dist/cjs/v6/nft.js +7 -2
  24. package/dist/cjs/v6/nft.js.map +1 -1
  25. package/dist/cjs/v6/nftInventory.d.ts +72 -0
  26. package/dist/cjs/v6/nftInventory.d.ts.map +1 -0
  27. package/dist/cjs/v6/nftInventory.js +229 -0
  28. package/dist/cjs/v6/nftInventory.js.map +1 -0
  29. package/dist/cjs/v6/sticky.d.ts +2 -0
  30. package/dist/cjs/v6/sticky.d.ts.map +1 -1
  31. package/dist/cjs/v6/sticky.js +43 -8
  32. package/dist/cjs/v6/sticky.js.map +1 -1
  33. package/dist/cjs/v6/suckers.d.ts +32 -0
  34. package/dist/cjs/v6/suckers.d.ts.map +1 -1
  35. package/dist/cjs/v6/suckers.js +70 -0
  36. package/dist/cjs/v6/suckers.js.map +1 -1
  37. package/dist/esm/review/contractWrite.d.ts +12 -1
  38. package/dist/esm/review/contractWrite.d.ts.map +1 -1
  39. package/dist/esm/review/contractWrite.js +26 -2
  40. package/dist/esm/review/contractWrite.js.map +1 -1
  41. package/dist/esm/review/index.d.ts +1 -0
  42. package/dist/esm/review/index.d.ts.map +1 -1
  43. package/dist/esm/review/index.js +1 -0
  44. package/dist/esm/review/index.js.map +1 -1
  45. package/dist/esm/review/writeRecovery.d.ts +106 -0
  46. package/dist/esm/review/writeRecovery.d.ts.map +1 -0
  47. package/dist/esm/review/writeRecovery.js +378 -0
  48. package/dist/esm/review/writeRecovery.js.map +1 -0
  49. package/dist/esm/safeService.d.ts +16 -9
  50. package/dist/esm/safeService.d.ts.map +1 -1
  51. package/dist/esm/safeService.js +33 -26
  52. package/dist/esm/safeService.js.map +1 -1
  53. package/dist/esm/v6/index.d.ts +1 -0
  54. package/dist/esm/v6/index.d.ts.map +1 -1
  55. package/dist/esm/v6/index.js +1 -0
  56. package/dist/esm/v6/index.js.map +1 -1
  57. package/dist/esm/v6/nft.d.ts +7 -1
  58. package/dist/esm/v6/nft.d.ts.map +1 -1
  59. package/dist/esm/v6/nft.js +7 -2
  60. package/dist/esm/v6/nft.js.map +1 -1
  61. package/dist/esm/v6/nftInventory.d.ts +72 -0
  62. package/dist/esm/v6/nftInventory.d.ts.map +1 -0
  63. package/dist/esm/v6/nftInventory.js +226 -0
  64. package/dist/esm/v6/nftInventory.js.map +1 -0
  65. package/dist/esm/v6/sticky.d.ts +2 -0
  66. package/dist/esm/v6/sticky.d.ts.map +1 -1
  67. package/dist/esm/v6/sticky.js +44 -9
  68. package/dist/esm/v6/sticky.js.map +1 -1
  69. package/dist/esm/v6/suckers.d.ts +32 -0
  70. package/dist/esm/v6/suckers.d.ts.map +1 -1
  71. package/dist/esm/v6/suckers.js +71 -2
  72. package/dist/esm/v6/suckers.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,378 @@
1
+ import { isAddress, } from "viem";
2
+ import { lookAtSafeProposal, readSafeAppExecution, readSafeTransaction, safeTransactionMatchesCall, } from "../safeService.js";
3
+ import { isBytes32, isHexBytes, uint256 } from "../untrusted.js";
4
+ import { atCanonicalFinalizedBlock } from "./relayr.js";
5
+ // A returned hash must survive a component remount even when its durable update
6
+ // failed. It is visible only while the exact durable reservation still exists.
7
+ const unpersistedSubmissions = new WeakMap();
8
+ /** The wallet returned this identity, but storing it failed. Keep it in memory and retry submitted(hash, record). */
9
+ export class SubmittedWritePersistenceError extends Error {
10
+ constructor(record, cause) {
11
+ super("The wallet returned a transaction identity, but recovery storage is unavailable. Keep this transaction pending.");
12
+ this.name = "SubmittedWritePersistenceError";
13
+ this.record = recordOf(record);
14
+ Object.defineProperty(this, "cause", { value: cause, configurable: true });
15
+ }
16
+ }
17
+ function normalized(input) {
18
+ const value = uint256(input?.call?.value ?? 0n);
19
+ if (!Number.isSafeInteger(input?.chainId) ||
20
+ input.chainId <= 0 ||
21
+ !isAddress(input?.account, { strict: false }) ||
22
+ typeof input?.safe !== "boolean" ||
23
+ !isAddress(input?.call?.to, { strict: false }) ||
24
+ !isHexBytes(input?.call?.data) ||
25
+ value === null)
26
+ throw new Error("Invalid reviewed write recovery evidence.");
27
+ return {
28
+ chainId: input.chainId,
29
+ account: input.account.toLowerCase(),
30
+ safe: input.safe,
31
+ call: {
32
+ to: input.call.to.toLowerCase(),
33
+ data: input.call.data.toLowerCase(),
34
+ value: value.toString(),
35
+ },
36
+ };
37
+ }
38
+ function recordOf(value) {
39
+ const record = value;
40
+ if (record?.version !== 1 ||
41
+ typeof record.id !== "string" ||
42
+ !record.id ||
43
+ typeof record.call?.value !== "string" ||
44
+ !/^(0|[1-9]\d*)$/.test(record.call.value) ||
45
+ (record.hash !== undefined && !isBytes32(record.hash)))
46
+ throw new Error("Invalid saved write recovery record. Keep this action pending.");
47
+ return {
48
+ version: 1,
49
+ id: record.id,
50
+ ...normalized(record),
51
+ ...(record.hash === undefined
52
+ ? {}
53
+ : { hash: record.hash.toLowerCase() }),
54
+ };
55
+ }
56
+ /** Validate an existing domain journal's recovered record with the shared storage rules. */
57
+ export { recordOf as parseReviewedWriteRecoveryRecord };
58
+ /** Amounts and quote changes must not evade an unresolved action. */
59
+ function scope(input) {
60
+ return `nana-sdk:reviewed-write:v1:${input.chainId}:${input.account}:${input.call.to}:${input.call.data.slice(0, 10)}`;
61
+ }
62
+ /** Exact reviewed evidence, independent of the reservation and submission identities. */
63
+ export function sameReviewedWrite(record, input) {
64
+ return (JSON.stringify(normalized(record)) === JSON.stringify(normalized(input)));
65
+ }
66
+ /**
67
+ * One ordinary-write reservation per account/chain/target/selector. Use the
68
+ * existing domain journal instead when an action already has one. There is no
69
+ * expiry or nonce-based release: an unknown broadcast remains unknown.
70
+ *
71
+ * Every mutation must run inside withLock, including receipt-based clearing.
72
+ * Storage and native cross-tab exclusion are mandatory before opening a wallet.
73
+ */
74
+ export function createBrowserWriteRecovery(input, options = {}) {
75
+ const reviewed = normalized(input);
76
+ const key = scope(reviewed);
77
+ let owned;
78
+ let locked = false;
79
+ let lastStorage;
80
+ function storage() {
81
+ const store = options.storage ?? globalThis.localStorage;
82
+ if (!store)
83
+ throw new Error("Write recovery storage is unavailable.");
84
+ lastStorage = store;
85
+ return store;
86
+ }
87
+ function rememberSubmission(record, verifiedReservation = false) {
88
+ if (!lastStorage)
89
+ return;
90
+ let pending = unpersistedSubmissions.get(lastStorage);
91
+ const previous = pending?.get(key);
92
+ // An unreadable stale callback cannot replace another attempt's only hash.
93
+ if (previous &&
94
+ !verifiedReservation &&
95
+ JSON.stringify(previous) !== JSON.stringify(record))
96
+ return;
97
+ if (!pending)
98
+ unpersistedSubmissions.set(lastStorage, (pending = new Map()));
99
+ pending.set(key, recordOf(record));
100
+ }
101
+ function requireLock() {
102
+ if (!locked)
103
+ throw new Error("Write recovery changes require the browser lock.");
104
+ }
105
+ function readStored(raw) {
106
+ if (raw === null)
107
+ return null;
108
+ const record = recordOf(JSON.parse(raw));
109
+ if (scope(record) !== key)
110
+ throw new Error("Saved write recovery scope does not match.");
111
+ return record;
112
+ }
113
+ function read() {
114
+ const store = storage();
115
+ const record = readStored(store.getItem(key));
116
+ const memory = unpersistedSubmissions.get(store)?.get(key);
117
+ if (!record ||
118
+ !memory ||
119
+ JSON.stringify({ ...record, hash: undefined }) !==
120
+ JSON.stringify({ ...memory, hash: undefined }) ||
121
+ (record.hash && record.hash !== memory.hash)) {
122
+ // A readable durable snapshot also proves whether cached evidence is stale.
123
+ unpersistedSubmissions.get(store)?.delete(key);
124
+ return record;
125
+ }
126
+ if (record.hash)
127
+ unpersistedSubmissions.get(store)?.delete(key);
128
+ return recordOf(memory);
129
+ }
130
+ function persist(record) {
131
+ const raw = JSON.stringify(record);
132
+ const store = storage();
133
+ store.setItem(key, raw);
134
+ if (store.getItem(key) !== raw)
135
+ throw new Error("Write recovery storage did not retain the action.");
136
+ }
137
+ function clear(expected) {
138
+ requireLock();
139
+ // A volatile returned hash is useful for tracking, but is not a successful
140
+ // durable commit. submitted(hash, record) must retry that commit first.
141
+ const current = readStored(storage().getItem(key));
142
+ if (!current)
143
+ return;
144
+ if (JSON.stringify(current) !== JSON.stringify(recordOf(expected))) {
145
+ throw new Error("Write recovery changed. Keep the current action pending.");
146
+ }
147
+ const store = storage();
148
+ store.removeItem(key);
149
+ if (store.getItem(key) !== null)
150
+ throw new Error("Write recovery storage did not clear the action.");
151
+ unpersistedSubmissions.get(store)?.delete(key);
152
+ }
153
+ function rejected() {
154
+ requireLock();
155
+ // A rejection callback from another attempt must never release this one.
156
+ if (!owned || owned.hash)
157
+ return;
158
+ const current = read();
159
+ if (current?.id === owned.id && current.hash)
160
+ return;
161
+ clear(owned);
162
+ owned = undefined;
163
+ }
164
+ return {
165
+ read,
166
+ reserve(actualCall) {
167
+ requireLock();
168
+ // A reused Safe proposal may have a different, already verified deadline.
169
+ // Retain its actual call, without widening the unresolved-action scope.
170
+ const actual = actualCall
171
+ ? normalized({ ...reviewed, call: actualCall })
172
+ : reviewed;
173
+ if (scope(actual) !== key)
174
+ throw new Error("The adopted write has a different recovery scope.");
175
+ if (read())
176
+ throw new Error("An earlier wallet write is still unresolved. Check it before trying again.");
177
+ const record = {
178
+ version: 1,
179
+ id: globalThis.crypto.randomUUID(),
180
+ ...actual,
181
+ };
182
+ owned = recordOf(record);
183
+ try {
184
+ persist(record);
185
+ }
186
+ catch (error) {
187
+ // The wallet has not been invoked. A failed readback may still have
188
+ // stored this marker; clean only our exact reservation if readable.
189
+ try {
190
+ rejected();
191
+ }
192
+ catch {
193
+ /* Retain ownership for a later cleanup. */
194
+ }
195
+ throw error;
196
+ }
197
+ return recordOf(record);
198
+ },
199
+ submitted(hash, expected = owned) {
200
+ requireLock();
201
+ if (!isBytes32(hash))
202
+ throw new Error("The wallet returned an invalid transaction identity.");
203
+ const previous = expected && recordOf(expected);
204
+ const submittedHash = hash.toLowerCase();
205
+ if (!previous ||
206
+ scope(previous) !== key ||
207
+ (previous.hash && previous.hash !== submittedHash)) {
208
+ throw new Error("Write recovery changed before submission was recorded.");
209
+ }
210
+ const submitted = { ...previous, hash: submittedHash };
211
+ let raw;
212
+ try {
213
+ raw = storage().getItem(key);
214
+ }
215
+ catch (cause) {
216
+ owned = submitted;
217
+ rememberSubmission(submitted);
218
+ throw new SubmittedWritePersistenceError(submitted, cause);
219
+ }
220
+ const current = readStored(raw);
221
+ if (!current ||
222
+ JSON.stringify({ ...current, hash: undefined }) !==
223
+ JSON.stringify({ ...previous, hash: undefined }) ||
224
+ (current.hash && current.hash !== submittedHash)) {
225
+ throw new Error("Write recovery changed before submission was recorded.");
226
+ }
227
+ owned = recordOf(submitted);
228
+ if (!current.hash) {
229
+ try {
230
+ persist(submitted);
231
+ }
232
+ catch (cause) {
233
+ rememberSubmission(submitted, true);
234
+ throw new SubmittedWritePersistenceError(submitted, cause);
235
+ }
236
+ }
237
+ if (lastStorage)
238
+ unpersistedSubmissions.get(lastStorage)?.delete(key);
239
+ return submitted;
240
+ },
241
+ rejected,
242
+ clear,
243
+ async withLock(work, wait = false) {
244
+ const locks = options.locks ?? globalThis.navigator?.locks;
245
+ if (!locks)
246
+ throw new Error("This browser cannot safely coordinate wallet writes.");
247
+ return locks.request(key, { mode: "exclusive", ...(!wait && { ifAvailable: true }) }, async (lock) => {
248
+ if (!lock)
249
+ throw new Error("This wallet action is already open in another tab.");
250
+ locked = true;
251
+ try {
252
+ return await work();
253
+ }
254
+ finally {
255
+ locked = false;
256
+ }
257
+ });
258
+ },
259
+ };
260
+ }
261
+ /**
262
+ * Authenticate the saved wallet identity, canonical inclusion and Safe effect.
263
+ * Ordinary wallet wrappers are allowed: the wallet's returned hash binds their
264
+ * execution. A wallet-returned Safe proposal hash authenticates its execution
265
+ * event even through a wrapper; an immediate execution hash additionally needs
266
+ * exact reviewed calldata. A failure releases only after finality.
267
+ * Throws on missing or inconsistent evidence; the caller retains its record.
268
+ */
269
+ export async function verifyReviewedWriteReceipt(client, saved, receipt, proof) {
270
+ const record = recordOf(saved);
271
+ const pending = () => new Error("The saved wallet write is not yet proven. Keep this action pending.");
272
+ let calls = [record.call];
273
+ if (proof) {
274
+ if (!record.safe ||
275
+ !Array.isArray(proof.calls) ||
276
+ !proof.calls.length ||
277
+ (proof.batch !== undefined && typeof proof.batch !== "boolean"))
278
+ throw pending();
279
+ calls = proof.calls.map((call) => normalized({ ...record, call }).call);
280
+ if (JSON.stringify(calls[0]) !== JSON.stringify(record.call))
281
+ throw pending();
282
+ }
283
+ if (!record.hash ||
284
+ !isBytes32(receipt?.transactionHash) ||
285
+ (!record.safe && record.hash !== receipt.transactionHash.toLowerCase()))
286
+ throw pending();
287
+ const hash = receipt.transactionHash;
288
+ const [chainId, transaction, canonical] = await Promise.all([
289
+ client.getChainId(),
290
+ client.getTransaction({ hash }),
291
+ client.getTransactionReceipt({ hash }),
292
+ ]);
293
+ if (chainId !== record.chainId ||
294
+ (transaction.chainId !== undefined &&
295
+ transaction.chainId !== record.chainId) ||
296
+ transaction.hash?.toLowerCase() !== hash.toLowerCase() ||
297
+ canonical.transactionHash?.toLowerCase() !== hash.toLowerCase() ||
298
+ !isBytes32(canonical.blockHash) ||
299
+ canonical.blockHash.toLowerCase() !== receipt.blockHash?.toLowerCase() ||
300
+ canonical.blockHash.toLowerCase() !==
301
+ transaction.blockHash?.toLowerCase() ||
302
+ typeof canonical.blockNumber !== "bigint" ||
303
+ canonical.blockNumber < 0n ||
304
+ canonical.blockNumber !== receipt.blockNumber ||
305
+ canonical.blockNumber !== transaction.blockNumber ||
306
+ !isAddress(transaction.from, { strict: false }) ||
307
+ transaction.from.toLowerCase() !== canonical.from?.toLowerCase() ||
308
+ transaction.to?.toLowerCase() !== canonical.to?.toLowerCase() ||
309
+ !Number.isSafeInteger(transaction.transactionIndex) ||
310
+ transaction.transactionIndex < 0 ||
311
+ transaction.transactionIndex !== canonical.transactionIndex ||
312
+ canonical.status !== receipt.status ||
313
+ (canonical.status !== "success" && canonical.status !== "reverted"))
314
+ throw pending();
315
+ let status = canonical.status === "success" ? "success" : "failed";
316
+ if (record.safe) {
317
+ if (!Array.isArray(canonical.logs) ||
318
+ canonical.logs.some((log) => log.removed !== false ||
319
+ log.transactionHash?.toLowerCase() !== hash.toLowerCase() ||
320
+ log.blockHash?.toLowerCase() !== canonical.blockHash.toLowerCase() ||
321
+ log.blockNumber !== canonical.blockNumber ||
322
+ log.transactionIndex !== canonical.transactionIndex))
323
+ throw pending();
324
+ const result = await readSafeAppExecution({
325
+ client: { getTransaction: async () => transaction },
326
+ receipt: canonical,
327
+ safe: record.account,
328
+ proposalHash: record.hash,
329
+ calls,
330
+ batch: proof?.batch,
331
+ });
332
+ // A reverted outer executor has not consumed the Safe proposal's nonce.
333
+ if (result.status !== "success" && result.status !== "failed")
334
+ throw pending();
335
+ status = result.status;
336
+ }
337
+ const isCanonical = async () => {
338
+ const block = await client.getBlock({ blockNumber: canonical.blockNumber });
339
+ return (block.number === canonical.blockNumber &&
340
+ block.hash?.toLowerCase() === canonical.blockHash.toLowerCase());
341
+ };
342
+ if (status === "failed") {
343
+ const finalized = await atCanonicalFinalizedBlock(client, async (number) => number >= canonical.blockNumber && (await isCanonical()));
344
+ if (!finalized?.value)
345
+ throw pending();
346
+ }
347
+ else if (!(await isCanonical()))
348
+ throw pending();
349
+ return status;
350
+ }
351
+ /**
352
+ * Prove a stamped Safe call expired before execution. An advanced nonce, stale
353
+ * service result, UI phase or local clock never releases a saved write.
354
+ */
355
+ export async function verifyReviewedWriteExpiry(client, saved, service) {
356
+ const record = recordOf(saved);
357
+ const pending = () => new Error("The saved Safe proposal is not proven expired. Keep this action pending.");
358
+ if (!record.safe ||
359
+ !record.hash ||
360
+ (await client.getChainId()) !== record.chainId)
361
+ throw pending();
362
+ const proposal = await readSafeTransaction(record.chainId, record.account, record.hash, service);
363
+ if (!safeTransactionMatchesCall(proposal, {
364
+ ...record.call,
365
+ value: BigInt(record.call.value),
366
+ }))
367
+ throw pending();
368
+ const proof = await atCanonicalFinalizedBlock(client, async (blockNumber) => {
369
+ const block = await client.getBlock({ blockNumber });
370
+ if (block.number !== blockNumber)
371
+ return false;
372
+ return ((await lookAtSafeProposal({ request: client.request, getBlock: async () => block }, record.chainId, record.account, record.hash, service)) === "expired");
373
+ });
374
+ if (!proof?.value)
375
+ throw pending();
376
+ return true;
377
+ }
378
+ //# sourceMappingURL=writeRecovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeRecovery.js","sourceRoot":"","sources":["../../../src/review/writeRecovery.ts"],"names":[],"mappings":"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"}
@@ -359,8 +359,12 @@ export declare function requireSafeProposalSuccess(execution: SafeAppExecution,
359
359
  * exactly as sent.
360
360
  */
361
361
  export declare function heldCall(call: SafeAppCall): SafeAppCall;
362
- /** The deadline after which the contract refuses `call`, or null for a call without one. */
363
- export declare function stampedDeadline(call: SafeAppCall): bigint | null;
362
+ /**
363
+ * The deadline enforced by `call`'s canonical target on `chainId`, or null
364
+ * without that evidence. A matching selector alone proves no deadline;
365
+ * another contract or an EOA can accept the same calldata after its stamp.
366
+ */
367
+ export declare function stampedDeadline(call: SafeAppCall, chainId?: number): bigint | null;
364
368
  /** A chain client that reads the Safe's nonce and the latest block. */
365
369
  type SafeQueueClient = Parameters<typeof readBoundedSafeNonce>[0] & {
366
370
  getBlock(): Promise<{
@@ -373,10 +377,11 @@ type SafeQueueClient = Parameters<typeof readBoundedSafeNonce>[0] & {
373
377
  * service record, its safeTxHash and the call it runs), read from Safe's
374
378
  * service from the Safe's nonce in the latest block, or null: a Safe app
375
379
  * never proposes an action that is already queued, whoever queued it,
376
- * whatever its stamp ({@link heldCall}). A queued call the contract refuses
377
- * once its deadline passed is passed over when that block is past the
378
- * deadline: it can no longer run. Throws when the block, the nonce or the
379
- * queue can't be read.
380
+ * whatever its stamp ({@link heldCall}). A queued call to a canonical target
381
+ * that enforces its deadline is passed over when that numbered block is past
382
+ * the deadline: it can no longer run. Without a numbered block, matching
383
+ * proposals remain held. Throws when the block, the nonce or the queue can't
384
+ * be read.
380
385
  */
381
386
  export declare function findPendingSafeAppProposal(client: SafeQueueClient, chainId: number, safe: Address, call: SafeAppCall, service?: SafeServiceOptions): Promise<{
382
387
  tx: SafeQueuedTransaction;
@@ -404,9 +409,11 @@ export declare function lookAtSafeProposal(client: SafeQueueClient, chainId: num
404
409
  /**
405
410
  * Watches a proposal awaiting its signers, one {@link lookAtSafeProposal} a
406
411
  * minute, until `signal` aborts. It ends `expired` at the first look that
407
- * finds it expired, and `replaced` once looks in a row have found it passed
408
- * for ten minutes: one such look proves nothing, since Safe's service may list
409
- * the proposal's own execution later. Any other look starts that count again.
412
+ * proves it expired before execution. A passed nonce with no indexed execution
413
+ * remains uncertain however long it lasts: the proposal itself may have run.
414
+ * Execution confirmation belongs to the caller's receipt reader. The return
415
+ * type retains `replaced` for compatibility, but this watch does not infer it
416
+ * from elapsed time or a missing service record.
410
417
  */
411
418
  export declare function watchSafeProposal(client: SafeQueueClient, chainId: number, safe: Address, proposalHash: Hex, signal: AbortSignal, service?: SafeServiceOptions): Promise<"expired" | "replaced">;
412
419
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"safeService.d.ts","sourceRoot":"","sources":["../../src/safeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safeService.d.ts","sourceRoot":"","sources":["../../src/safeService.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { decodeAbiParameters, decodeFunctionData, encodeAbiParameters, Transacti
2
2
  import { encodeMultiSend, multiSendCallsOf, readBoundedSafeNonce, isRecognizedSafeDeployment, MULTI_SEND_CALL_ONLY, } from "./safe.js";
3
3
  import { pause } from "./pause.js";
4
4
  import { isBytes32, isHexBytes, retryAfterMs, uint256 } from "./untrusted.js";
5
+ import { uniswapV4Deployment } from "./v6/uniswapV4Deployments.js";
5
6
  /**
6
7
  * Safe's per-chain app URL prefix. Wider than {@link SAFE_SERVICE_PREFIX}:
7
8
  * Safe app links work on chains without a hosted transaction service.
@@ -607,8 +608,8 @@ export async function requireSafeProposalSuccess(execution, failure) {
607
608
  }
608
609
  /**
609
610
  * The calls this app stamps with a field at send time, by selector: the
610
- * stamp's argument, and whether the contract refuses the call once the chain
611
- * passes it. Universal Router's `execute` and PositionManager's
611
+ * stamp's argument, and the canonical deployment that enforces its deadline.
612
+ * Universal Router's `execute` and PositionManager's
612
613
  * `modifyLiquidities` check a deadline; the expiration Permit2's `approve`
613
614
  * sets only bounds the allowance it grants.
614
615
  */
@@ -617,13 +618,13 @@ const STAMPED_CALLS = {
617
618
  "0x3593564c": {
618
619
  params: [{ type: "bytes" }, { type: "bytes[]" }, { type: "uint256" }],
619
620
  stamp: 2,
620
- reverts: true,
621
+ deadlineTarget: "universalRouter",
621
622
  },
622
623
  // modifyLiquidities(bytes unlockData, uint256 deadline)
623
624
  "0xdd46508f": {
624
625
  params: [{ type: "bytes" }, { type: "uint256" }],
625
626
  stamp: 1,
626
- reverts: true,
627
+ deadlineTarget: "positionManager",
627
628
  },
628
629
  // approve(address token, address spender, uint160 amount, uint48 expiration)
629
630
  "0x87517c45": {
@@ -634,7 +635,7 @@ const STAMPED_CALLS = {
634
635
  { type: "uint48" },
635
636
  ],
636
637
  stamp: 3,
637
- reverts: false,
638
+ deadlineTarget: null,
638
639
  },
639
640
  };
640
641
  /** A stamped call's shape and arguments, when its data is exactly their ABI encoding. */
@@ -672,10 +673,17 @@ export function heldCall(call) {
672
673
  data: `${call.data.slice(0, 10)}${encodeAbiParameters(stamped.shape.params, args).slice(2)}`,
673
674
  };
674
675
  }
675
- /** The deadline after which the contract refuses `call`, or null for a call without one. */
676
- export function stampedDeadline(call) {
676
+ /**
677
+ * The deadline enforced by `call`'s canonical target on `chainId`, or null
678
+ * without that evidence. A matching selector alone proves no deadline;
679
+ * another contract or an EOA can accept the same calldata after its stamp.
680
+ */
681
+ export function stampedDeadline(call, chainId) {
677
682
  const stamped = stampedArgs(call);
678
- return stamped?.shape.reverts
683
+ if (!stamped?.shape.deadlineTarget || chainId === undefined)
684
+ return null;
685
+ const target = uniswapV4Deployment(chainId)?.[stamped.shape.deadlineTarget];
686
+ return target && isAddressEqual(call.to, target)
679
687
  ? BigInt(stamped.args[stamped.shape.stamp])
680
688
  : null;
681
689
  }
@@ -698,10 +706,11 @@ function proposedCall(tx) {
698
706
  * service record, its safeTxHash and the call it runs), read from Safe's
699
707
  * service from the Safe's nonce in the latest block, or null: a Safe app
700
708
  * never proposes an action that is already queued, whoever queued it,
701
- * whatever its stamp ({@link heldCall}). A queued call the contract refuses
702
- * once its deadline passed is passed over when that block is past the
703
- * deadline: it can no longer run. Throws when the block, the nonce or the
704
- * queue can't be read.
709
+ * whatever its stamp ({@link heldCall}). A queued call to a canonical target
710
+ * that enforces its deadline is passed over when that numbered block is past
711
+ * the deadline: it can no longer run. Without a numbered block, matching
712
+ * proposals remain held. Throws when the block, the nonce or the queue can't
713
+ * be read.
705
714
  */
706
715
  export async function findPendingSafeAppProposal(client, chainId, safe, call, service) {
707
716
  // One block's view: its time, and the Safe's nonce in it. A proposal listed
@@ -718,10 +727,10 @@ export async function findPendingSafeAppProposal(client, chainId, safe, call, se
718
727
  const queued = (await listPendingSafeTransactions(chainId, safe, Number(nonce), service)).flatMap((tx) => {
719
728
  const proposed = proposedCall(tx);
720
729
  return proposed && sameCall(heldCall(proposed), held)
721
- ? [{ tx, call: proposed, deadline: stampedDeadline(proposed) }]
730
+ ? [{ tx, call: proposed, deadline: stampedDeadline(proposed, chainId) }]
722
731
  : [];
723
732
  });
724
- const live = queued.find(({ deadline }) => deadline === null || deadline >= block.timestamp);
733
+ const live = queued.find(({ deadline }) => block.number === null || deadline === null || deadline >= block.timestamp);
725
734
  return live
726
735
  ? {
727
736
  tx: live.tx,
@@ -738,8 +747,11 @@ export async function findPendingSafeAppProposal(client, chainId, safe, call, se
738
747
  export async function lookAtSafeProposal(client, chainId, safe, proposalHash, service) {
739
748
  try {
740
749
  const block = await client.getBlock();
750
+ // Without a numbered block, the nonce and deadline have no common snapshot.
751
+ if (block.number === null)
752
+ return "live";
741
753
  const nonce = await readBoundedSafeNonce(client, safe, {
742
- blockNumber: block.number ?? undefined,
754
+ blockNumber: block.number,
743
755
  });
744
756
  const record = await readSafeTransaction(chainId, safe, proposalHash, service);
745
757
  if (nonce === null || record.isExecuted)
@@ -747,7 +759,7 @@ export async function lookAtSafeProposal(client, chainId, safe, proposalHash, se
747
759
  if (nonce > safeTransactionMessage(record).nonce)
748
760
  return "passed";
749
761
  const call = proposedCall(record);
750
- const deadline = call && stampedDeadline(call);
762
+ const deadline = call && stampedDeadline(call, chainId);
751
763
  return deadline !== null && block.timestamp > deadline ? "expired" : "live";
752
764
  }
753
765
  catch {
@@ -756,26 +768,21 @@ export async function lookAtSafeProposal(client, chainId, safe, proposalHash, se
756
768
  }
757
769
  /** A watch looks at its proposal once a minute, so it reads the Safe's nonce at most that often. */
758
770
  const SAFE_LOOK_MS = 60_000;
759
- /** How long looks in a row must find the Safe past a proposal before it counts as replaced. */
760
- const SAFE_REPLACED_AFTER_MS = 10 * 60_000;
761
771
  /**
762
772
  * Watches a proposal awaiting its signers, one {@link lookAtSafeProposal} a
763
773
  * minute, until `signal` aborts. It ends `expired` at the first look that
764
- * finds it expired, and `replaced` once looks in a row have found it passed
765
- * for ten minutes: one such look proves nothing, since Safe's service may list
766
- * the proposal's own execution later. Any other look starts that count again.
774
+ * proves it expired before execution. A passed nonce with no indexed execution
775
+ * remains uncertain however long it lasts: the proposal itself may have run.
776
+ * Execution confirmation belongs to the caller's receipt reader. The return
777
+ * type retains `replaced` for compatibility, but this watch does not infer it
778
+ * from elapsed time or a missing service record.
767
779
  */
768
780
  export async function watchSafeProposal(client, chainId, safe, proposalHash, signal, service) {
769
- let passedSince = null;
770
781
  for (;;) {
771
782
  await pause(SAFE_LOOK_MS, signal, waitAborted);
772
783
  const look = await lookAtSafeProposal(client, chainId, safe, proposalHash, service);
773
784
  if (look === "expired")
774
785
  return look;
775
- passedSince = look === "passed" ? (passedSince ?? Date.now()) : null;
776
- if (passedSince !== null &&
777
- Date.now() - passedSince >= SAFE_REPLACED_AFTER_MS)
778
- return "replaced";
779
786
  }
780
787
  }
781
788
  /** Looks at the chain for an execution returned at once, and the pause between them. */