@bananapus/nana-sdk-core 2.39.0 → 2.41.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 (77) hide show
  1. package/dist/cjs/review/heldWrite.d.ts.map +1 -1
  2. package/dist/cjs/review/heldWrite.js +80 -46
  3. package/dist/cjs/review/heldWrite.js.map +1 -1
  4. package/dist/cjs/review/intents.d.ts +45 -0
  5. package/dist/cjs/review/intents.d.ts.map +1 -1
  6. package/dist/cjs/review/intents.js +57 -0
  7. package/dist/cjs/review/intents.js.map +1 -1
  8. package/dist/cjs/review/react/HeldWritesNotice.d.ts +11 -0
  9. package/dist/cjs/review/react/HeldWritesNotice.d.ts.map +1 -0
  10. package/dist/cjs/review/react/HeldWritesNotice.js +22 -0
  11. package/dist/cjs/review/react/HeldWritesNotice.js.map +1 -0
  12. package/dist/cjs/review/react/heldView.d.ts +25 -0
  13. package/dist/cjs/review/react/heldView.d.ts.map +1 -0
  14. package/dist/cjs/review/react/heldView.js +29 -0
  15. package/dist/cjs/review/react/heldView.js.map +1 -0
  16. package/dist/cjs/review/react/index.d.ts +6 -0
  17. package/dist/cjs/review/react/index.d.ts.map +1 -0
  18. package/dist/cjs/review/react/index.js +22 -0
  19. package/dist/cjs/review/react/index.js.map +1 -0
  20. package/dist/cjs/review/react/useHeldSend.d.ts +30 -0
  21. package/dist/cjs/review/react/useHeldSend.d.ts.map +1 -0
  22. package/dist/cjs/review/react/useHeldSend.js +80 -0
  23. package/dist/cjs/review/react/useHeldSend.js.map +1 -0
  24. package/dist/cjs/review/react/useHeldWrite.d.ts +51 -0
  25. package/dist/cjs/review/react/useHeldWrite.d.ts.map +1 -0
  26. package/dist/cjs/review/react/useHeldWrite.js +94 -0
  27. package/dist/cjs/review/react/useHeldWrite.js.map +1 -0
  28. package/dist/cjs/review/react/useHeldWrites.d.ts +40 -0
  29. package/dist/cjs/review/react/useHeldWrites.d.ts.map +1 -0
  30. package/dist/cjs/review/react/useHeldWrites.js +95 -0
  31. package/dist/cjs/review/react/useHeldWrites.js.map +1 -0
  32. package/dist/cjs/review/react/useSavedAttempt.d.ts +54 -0
  33. package/dist/cjs/review/react/useSavedAttempt.d.ts.map +1 -0
  34. package/dist/cjs/review/react/useSavedAttempt.js +105 -0
  35. package/dist/cjs/review/react/useSavedAttempt.js.map +1 -0
  36. package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
  37. package/dist/cjs/review/writeRecovery.js +3 -1
  38. package/dist/cjs/review/writeRecovery.js.map +1 -1
  39. package/dist/esm/review/heldWrite.d.ts.map +1 -1
  40. package/dist/esm/review/heldWrite.js +80 -46
  41. package/dist/esm/review/heldWrite.js.map +1 -1
  42. package/dist/esm/review/intents.d.ts +45 -0
  43. package/dist/esm/review/intents.d.ts.map +1 -1
  44. package/dist/esm/review/intents.js +52 -0
  45. package/dist/esm/review/intents.js.map +1 -1
  46. package/dist/esm/review/react/HeldWritesNotice.d.ts +11 -0
  47. package/dist/esm/review/react/HeldWritesNotice.d.ts.map +1 -0
  48. package/dist/esm/review/react/HeldWritesNotice.js +19 -0
  49. package/dist/esm/review/react/HeldWritesNotice.js.map +1 -0
  50. package/dist/esm/review/react/heldView.d.ts +25 -0
  51. package/dist/esm/review/react/heldView.d.ts.map +1 -0
  52. package/dist/esm/review/react/heldView.js +22 -0
  53. package/dist/esm/review/react/heldView.js.map +1 -0
  54. package/dist/esm/review/react/index.d.ts +6 -0
  55. package/dist/esm/review/react/index.d.ts.map +1 -0
  56. package/dist/esm/review/react/index.js +6 -0
  57. package/dist/esm/review/react/index.js.map +1 -0
  58. package/dist/esm/review/react/useHeldSend.d.ts +30 -0
  59. package/dist/esm/review/react/useHeldSend.d.ts.map +1 -0
  60. package/dist/esm/review/react/useHeldSend.js +77 -0
  61. package/dist/esm/review/react/useHeldSend.js.map +1 -0
  62. package/dist/esm/review/react/useHeldWrite.d.ts +51 -0
  63. package/dist/esm/review/react/useHeldWrite.d.ts.map +1 -0
  64. package/dist/esm/review/react/useHeldWrite.js +91 -0
  65. package/dist/esm/review/react/useHeldWrite.js.map +1 -0
  66. package/dist/esm/review/react/useHeldWrites.d.ts +40 -0
  67. package/dist/esm/review/react/useHeldWrites.d.ts.map +1 -0
  68. package/dist/esm/review/react/useHeldWrites.js +91 -0
  69. package/dist/esm/review/react/useHeldWrites.js.map +1 -0
  70. package/dist/esm/review/react/useSavedAttempt.d.ts +54 -0
  71. package/dist/esm/review/react/useSavedAttempt.d.ts.map +1 -0
  72. package/dist/esm/review/react/useSavedAttempt.js +102 -0
  73. package/dist/esm/review/react/useSavedAttempt.js.map +1 -0
  74. package/dist/esm/review/writeRecovery.d.ts.map +1 -1
  75. package/dist/esm/review/writeRecovery.js +3 -1
  76. package/dist/esm/review/writeRecovery.js.map +1 -1
  77. package/package.json +16 -2
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useHeldSend = useHeldSend;
4
+ const index_js_1 = require("../index.js");
5
+ const react_1 = require("react");
6
+ const heldView_js_1 = require("./heldView.js");
7
+ /**
8
+ * Held sends whose call is known only at send time (a generic contract write
9
+ * or Safe transaction): each send runs through the held-write view of its
10
+ * intent or exact call, made once and reused, and the result shows the
11
+ * current send's line, notice and exit as {@link useHeldWrite} does. Only
12
+ * the current send's view runs and reaches the app's callbacks.
13
+ */
14
+ function useHeldSend(options) {
15
+ const { hold, client, pollMs, follow } = options;
16
+ const latest = (0, react_1.useRef)(options);
17
+ latest.current = options;
18
+ /** This hold and client's views, by their send's identity. */
19
+ const views = (0, react_1.useMemo)(() => new Map(), [hold, client, pollMs, follow]);
20
+ const [current, setCurrent] = (0, react_1.useState)();
21
+ // A view of an earlier hold or client shows nothing.
22
+ const held = current?.views === views ? current.held : undefined;
23
+ const view = held?.view;
24
+ /**
25
+ * The one view running, started at its send: a replaced view is stopped
26
+ * then, so only the current send's view ever tells the app anything, and
27
+ * a success it never told stays pending for the gate.
28
+ */
29
+ const running = (0, react_1.useRef)(undefined);
30
+ (0, react_1.useEffect)(() => () => {
31
+ if (running.current?.views !== views)
32
+ return;
33
+ running.current.stop();
34
+ running.current = undefined;
35
+ }, [views]);
36
+ const shown = (0, react_1.useSyncExternalStore)(view?.subscribe ?? heldView_js_1.none, view?.get ?? heldView_js_1.idle, view?.get ?? heldView_js_1.idle);
37
+ return {
38
+ ...shown,
39
+ ...(0, heldView_js_1.actionsOf)(shown, view),
40
+ send: (input, run) => {
41
+ if (!client)
42
+ return Promise.reject(new Error("Connect a wallet and build the call before sending."));
43
+ const { chainId, account, safe = false, namespace, legacy, call } = input;
44
+ const key = (0, heldView_js_1.keyOf)([
45
+ chainId,
46
+ account.toLowerCase(),
47
+ safe,
48
+ namespace ?? null,
49
+ call,
50
+ legacy ?? null,
51
+ ]);
52
+ let next = views.get(key);
53
+ if (!next) {
54
+ const handle = hold.open({ chainId, account, safe, call, ...(namespace ? { namespace } : {}) }, legacy ? { legacy } : undefined);
55
+ const created = (0, index_js_1.createHeldWriteView)(handle, {
56
+ client,
57
+ pollMs,
58
+ ...(follow === undefined ? {} : { follow }),
59
+ // A stopped view tells no settlement; a late release is dropped here.
60
+ onSettled: (settled, receipt) => latest.current.onSettled?.(settled, receipt),
61
+ onReleased: (by) => {
62
+ if (running.current?.view === created)
63
+ latest.current.onReleased?.(by);
64
+ },
65
+ });
66
+ next = { handle, view: created };
67
+ views.set(key, next);
68
+ }
69
+ if (running.current?.view !== next.view) {
70
+ running.current?.stop();
71
+ running.current = { views, view: next.view, stop: next.view.start() };
72
+ }
73
+ setCurrent({ views, held: next });
74
+ return next.view.send(run);
75
+ },
76
+ check: () => (view ? view.check() : Promise.resolve(heldView_js_1.IDLE)),
77
+ handle: held?.handle,
78
+ };
79
+ }
80
+ //# sourceMappingURL=useHeldSend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHeldSend.js","sourceRoot":"","sources":["../../../../src/review/react/useHeldSend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { type HeldWriteEvidence, type HeldWriteView, type ReviewedWriteRecoveryInput, type WriteHold, type WriteHoldClient, type WriteHoldGate, type WriteHoldHandle, type WriteHoldSettled, type WriteHoldState } from "../index.js";
2
+ import type { Address, Hex, TransactionReceipt } from "viem";
3
+ import { type HeldViewActions } from "./heldView.js";
4
+ export type UseHeldWriteOptions = {
5
+ /** The app's one write hold controller (createWriteHold()). */
6
+ hold: WriteHold;
7
+ chainId: number;
8
+ /** The account that sends: the wallet, or the Safe. */
9
+ account: Address;
10
+ /** Whether `account` is a Safe whose writes are proposals. */
11
+ safe?: boolean;
12
+ /** The action's intent key (payIntent and the other builders). */
13
+ namespace?: string;
14
+ /** Keys an earlier version held this write under. */
15
+ legacy?: Parameters<WriteHold["open"]>[1] extends infer O ? O extends {
16
+ legacy?: infer L;
17
+ } ? L : never : never;
18
+ /** The reviewed call, when built; without one, the hold is found by `namespace`. */
19
+ call?: ReviewedWriteRecoveryInput["call"];
20
+ /** Reads the account's chain. */
21
+ client: WriteHoldClient | undefined;
22
+ /** A previous deploy's saved evidence of this write: adopted before any send. */
23
+ adopt?: () => Promise<HeldWriteEvidence | null | undefined>;
24
+ onAdopted?: (state: WriteHoldState) => void;
25
+ /** The hold settled what this view saw held, on authenticated evidence: once. */
26
+ onSettled?: (settled: WriteHoldSettled, receipt: TransactionReceipt | null) => void;
27
+ /** Released: by the user's exit (reopen the review), or by another window. */
28
+ onReleased?: (by: "user" | "other-tab") => void;
29
+ /** How often a held write is asked again (15 s to 60 s, 30 s by default). */
30
+ pollMs?: number;
31
+ };
32
+ export type UseHeldWriteResult = HeldWriteView & HeldViewActions & {
33
+ /** Send under the hold, once any adoption is done. */
34
+ send: (run: (gate: WriteHoldGate) => Promise<Hex>) => Promise<Hex>;
35
+ /** Ask the chain now. */
36
+ check: () => Promise<HeldWriteView>;
37
+ /** The hold handle, for anything else. */
38
+ handle: WriteHoldHandle | undefined;
39
+ };
40
+ /**
41
+ * One held write, the one way every app runs it: its send under the hold,
42
+ * the watch, the shared follower of its transaction or Safe proposal, its
43
+ * one line, its exit and the adoption of a previous deploy's record.
44
+ *
45
+ * The exit ("I checked my wallet") only releases the hold: `onReleased("user")`
46
+ * is where the app reopens its review, so a resend always shows the values it
47
+ * sends. A release by another window is neutral (`releasedBy: "other-tab"`),
48
+ * and `onSettled` fires only for a settlement of what this view saw held.
49
+ */
50
+ export declare function useHeldWrite(options: UseHeldWriteOptions): UseHeldWriteResult;
51
+ //# sourceMappingURL=useHeldWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHeldWrite.d.ts","sourceRoot":"","sources":["../../../../src/review/react/useHeldWrite.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAElB,KAAK,0BAA0B,EAC/B,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAQvB,MAAM,MAAM,mBAAmB,GAAG;IAChC,+DAA+D;IAC/D,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,MAAM,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GACrD,CAAC,SAAS;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;KAAE,GAC5B,CAAC,GACD,KAAK,GACP,KAAK,CAAC;IACV,oFAAoF;IACpF,IAAI,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC1C,iCAAiC;IACjC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,iFAAiF;IACjF,SAAS,CAAC,EAAE,CACV,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,kBAAkB,GAAG,IAAI,KAC/B,IAAI,CAAC;IACV,8EAA8E;IAC9E,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,KAAK,IAAI,CAAC;IAChD,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAC5C,eAAe,GAAG;IAChB,sDAAsD;IACtD,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACnE,yBAAyB;IACzB,KAAK,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACpC,0CAA0C;IAC1C,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;CACrC,CAAC;AAEJ;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA2F7E"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useHeldWrite = useHeldWrite;
4
+ const index_js_1 = require("../index.js");
5
+ const react_1 = require("react");
6
+ const heldView_js_1 = require("./heldView.js");
7
+ /** A call stand-in for a hold found by its intent alone, before any call is built. */
8
+ const NO_CALL = {
9
+ to: "0x0000000000000000000000000000000000000000",
10
+ data: "0x",
11
+ };
12
+ /**
13
+ * One held write, the one way every app runs it: its send under the hold,
14
+ * the watch, the shared follower of its transaction or Safe proposal, its
15
+ * one line, its exit and the adoption of a previous deploy's record.
16
+ *
17
+ * The exit ("I checked my wallet") only releases the hold: `onReleased("user")`
18
+ * is where the app reopens its review, so a resend always shows the values it
19
+ * sends. A release by another window is neutral (`releasedBy: "other-tab"`),
20
+ * and `onSettled` fires only for a settlement of what this view saw held.
21
+ */
22
+ function useHeldWrite(options) {
23
+ const { hold, chainId, account, safe = false, namespace, client, pollMs, } = options;
24
+ const callKey = (0, heldView_js_1.keyOf)(options.call ?? null);
25
+ const legacyKey = (0, heldView_js_1.keyOf)(options.legacy ?? null);
26
+ const latest = (0, react_1.useRef)(options);
27
+ latest.current = options;
28
+ const handle = (0, react_1.useMemo)(() => {
29
+ const call = latest.current.call;
30
+ if (!call && !namespace)
31
+ return undefined;
32
+ const legacy = latest.current.legacy;
33
+ return hold.open({
34
+ chainId,
35
+ account,
36
+ safe,
37
+ call: call ?? NO_CALL,
38
+ ...(namespace ? { namespace } : {}),
39
+ }, legacy ? { legacy } : undefined);
40
+ // The call and legacy keys stand for their values.
41
+ }, [hold, chainId, account, safe, namespace, callKey, legacyKey]);
42
+ // Whether the app has a previous deploy's record to adopt: a change makes a
43
+ // new view, whose adoption runs before any send.
44
+ const adopts = !!options.adopt;
45
+ /** The view whose callbacks are the app's now: an earlier one's late answers reach none. */
46
+ const active = (0, react_1.useRef)(undefined);
47
+ const view = (0, react_1.useMemo)(() => {
48
+ if (!handle || !client)
49
+ return undefined;
50
+ /** Only while this view is the app's: an earlier one's late answers reach no callback. */
51
+ const own = (callback) => (...args) => {
52
+ if (active.current === created)
53
+ callback(...args);
54
+ };
55
+ const created = (0, index_js_1.createHeldWriteView)(handle, {
56
+ client,
57
+ pollMs,
58
+ onSettled: own((settled, receipt) => latest.current.onSettled?.(settled, receipt)),
59
+ onReleased: own((by) => latest.current.onReleased?.(by)),
60
+ onAdopted: own((state) => latest.current.onAdopted?.(state)),
61
+ // A view made with a provider: the app's current one (a removed one
62
+ // makes a new view, and this one stops).
63
+ ...(adopts ? { adopt: () => latest.current.adopt() } : {}),
64
+ });
65
+ return created;
66
+ }, [handle, client, pollMs, adopts]);
67
+ (0, react_1.useEffect)(() => {
68
+ if (!view)
69
+ return;
70
+ active.current = view;
71
+ const stop = view.start();
72
+ return () => {
73
+ if (active.current === view)
74
+ active.current = undefined;
75
+ stop();
76
+ };
77
+ }, [view]);
78
+ const shown = (0, react_1.useSyncExternalStore)(view?.subscribe ?? heldView_js_1.none, view?.get ?? heldView_js_1.idle, view?.get ?? heldView_js_1.idle);
79
+ return {
80
+ ...shown,
81
+ ...(0, heldView_js_1.actionsOf)(shown, view),
82
+ send: (run) => {
83
+ if (!view)
84
+ return Promise.reject(new Error("Connect a wallet and build the call before sending."));
85
+ // A record to adopt that this view doesn't know of yet: never send past it.
86
+ if (!!latest.current.adopt !== adopts)
87
+ return Promise.reject(new Error("Saved transactions are still being checked. Try again in a moment."));
88
+ return view.send(run);
89
+ },
90
+ check: () => (view ? view.check() : Promise.resolve(heldView_js_1.IDLE)),
91
+ handle,
92
+ };
93
+ }
94
+ //# sourceMappingURL=useHeldWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHeldWrite.js","sourceRoot":"","sources":["../../../../src/review/react/useHeldWrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type HeldWriteView, type WriteHold, type WriteHoldClient } from "../index.js";
2
+ import type { Address } from "viem";
3
+ /** One held write an app-wide notice shows. */
4
+ export type HeldWriteItem = {
5
+ key: string;
6
+ /** What the action is, when the app names it. */
7
+ label?: string;
8
+ view: HeldWriteView;
9
+ /** Release it (the notice's exit): true when released. */
10
+ release: () => Promise<boolean>;
11
+ };
12
+ /**
13
+ * The holds of a fixed set of actions, found by their intents alone and
14
+ * shown with their lines and exits, whatever the actions' buttons allow now.
15
+ */
16
+ export declare function useHeldIntents({ hold, chainId, account, client, intents, pollMs, }: {
17
+ hold: WriteHold;
18
+ chainId: number;
19
+ account: Address | undefined;
20
+ client: WriteHoldClient | undefined;
21
+ intents: readonly {
22
+ namespace: string;
23
+ label?: string;
24
+ }[];
25
+ pollMs?: number;
26
+ }): HeldWriteItem[];
27
+ /**
28
+ * Every write held for `account` on `chainId`, whatever action made it
29
+ * (`hold.list`), read again when another window changes one and every poll.
30
+ */
31
+ export declare function useHeldWrites({ hold, chainId, account, client, label, pollMs, }: {
32
+ hold: WriteHold;
33
+ chainId: number;
34
+ account: Address | undefined;
35
+ client: WriteHoldClient | undefined;
36
+ /** The app's name for a listed write's action, when it knows it. */
37
+ label?: (record: ReturnType<WriteHold["list"]>[number]["record"]) => string | undefined;
38
+ pollMs?: number;
39
+ }): HeldWriteItem[];
40
+ //# sourceMappingURL=useHeldWrites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHeldWrites.d.ts","sourceRoot":"","sources":["../../../../src/review/react/useHeldWrites.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,SAAS,EACd,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,MAAM,CAAC;AAEzC,+CAA+C;AAC/C,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;IACpB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAqDF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE;IACD,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,SAAS;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,aAAa,EAAE,CAqBlB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAe,GAChB,EAAE;IACD,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,oEAAoE;IACpE,KAAK,CAAC,EAAE,CACN,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KACpD,MAAM,GAAG,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,aAAa,EAAE,CA6BlB"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useHeldIntents = useHeldIntents;
4
+ exports.useHeldWrites = useHeldWrites;
5
+ const index_js_1 = require("../index.js");
6
+ const react_1 = require("react");
7
+ /** Watch each entry's hold as one held write view; held ones (and fresh results) come back as items. */
8
+ function useHeldViews(entries, client, pollMs) {
9
+ const views = (0, react_1.useMemo)(() => client
10
+ ? entries.map((entry) => ({
11
+ entry,
12
+ view: (0, index_js_1.createHeldWriteView)(entry.handle, { client, pollMs }),
13
+ }))
14
+ : [], [entries, client, pollMs]);
15
+ (0, react_1.useEffect)(() => {
16
+ const stops = views.map(({ view }) => view.start());
17
+ return () => stops.forEach((stop) => stop());
18
+ }, [views]);
19
+ const store = (0, react_1.useMemo)(() => feed(views.map(({ view }) => view)), [views]);
20
+ const shown = (0, react_1.useSyncExternalStore)(store.subscribe, store.get, store.get);
21
+ return views
22
+ .map(({ entry, view }, index) => ({
23
+ key: entry.key,
24
+ ...(entry.label ? { label: entry.label } : {}),
25
+ view: shown[index],
26
+ release: view.exit,
27
+ }))
28
+ .filter(({ view }) => view.phase !== "clear");
29
+ }
30
+ /** Several views as one store: a snapshot array that changes when any view does. */
31
+ function feed(views) {
32
+ let snapshot = views.map((view) => view.get());
33
+ return {
34
+ subscribe(listener) {
35
+ const stops = views.map((view) => view.subscribe(() => {
36
+ snapshot = views.map((each) => each.get());
37
+ listener();
38
+ }));
39
+ return () => stops.forEach((stop) => stop());
40
+ },
41
+ get: () => snapshot,
42
+ };
43
+ }
44
+ /**
45
+ * The holds of a fixed set of actions, found by their intents alone and
46
+ * shown with their lines and exits, whatever the actions' buttons allow now.
47
+ */
48
+ function useHeldIntents({ hold, chainId, account, client, intents, pollMs, }) {
49
+ const intentsKey = JSON.stringify(intents);
50
+ const entries = (0, react_1.useMemo)(() => account
51
+ ? intents.map(({ namespace, label }) => ({
52
+ key: namespace,
53
+ label,
54
+ handle: hold.open({
55
+ chainId,
56
+ account,
57
+ safe: false,
58
+ namespace,
59
+ call: { to: account, data: "0x" },
60
+ }),
61
+ }))
62
+ : [],
63
+ // The intents key stands for the intents.
64
+ [hold, chainId, account, intentsKey]);
65
+ return useHeldViews(entries, client, pollMs);
66
+ }
67
+ /**
68
+ * Every write held for `account` on `chainId`, whatever action made it
69
+ * (`hold.list`), read again when another window changes one and every poll.
70
+ */
71
+ function useHeldWrites({ hold, chainId, account, client, label, pollMs = 30_000, }) {
72
+ const [generation, setGeneration] = (0, react_1.useState)(0);
73
+ (0, react_1.useEffect)(() => {
74
+ const again = () => setGeneration((value) => value + 1);
75
+ globalThis.addEventListener?.("storage", again);
76
+ const timer = setInterval(again, pollMs);
77
+ return () => {
78
+ globalThis.removeEventListener?.("storage", again);
79
+ clearInterval(timer);
80
+ };
81
+ }, [pollMs]);
82
+ const listed = (0, react_1.useMemo)(() => (account ? hold.list({ account, chainId }) : []), [hold, account, chainId, generation]);
83
+ const listedKey = listed
84
+ .map(({ key, record }) => `${key}:${record.id}`)
85
+ .join("|");
86
+ const entries = (0, react_1.useMemo)(() => listed.map(({ key, record, handle }) => ({
87
+ key,
88
+ label: label?.(record),
89
+ handle,
90
+ })),
91
+ // The listed key stands for the list.
92
+ [listedKey]);
93
+ return useHeldViews(entries, client, pollMs);
94
+ }
95
+ //# sourceMappingURL=useHeldWrites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHeldWrites.js","sourceRoot":"","sources":["../../../../src/review/react/useHeldWrites.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { type SavedAttempt, type SavedAttemptOutcome, type SavedAttemptRecovery, type SavedAttemptRetirement, type WriteHoldClient } from "../index.js";
2
+ export type UseSavedAttemptOptions<T> = {
3
+ /** The app's one saved-attempt recovery (createSavedAttemptRecovery()). */
4
+ recovery: SavedAttemptRecovery;
5
+ /** The saved attempt; none while nothing is saved. */
6
+ attempt: SavedAttempt<T> | null | undefined;
7
+ /** Reads the attempt's chain. */
8
+ client: WriteHoldClient | undefined;
9
+ /** The check action's next step: "I checked it. <next>." ("Review it again" by default). */
10
+ checkNext?: string;
11
+ };
12
+ /** What a retirement returned: whether it took, and whether it outlives this tab. */
13
+ type Retired = Awaited<ReturnType<SavedAttemptRecovery["retire"]>>;
14
+ export type UseSavedAttemptResult<T> = {
15
+ /** How recovery ended; null until it has, or with no attempt. */
16
+ outcome: SavedAttemptOutcome<T> | null;
17
+ recovering: boolean;
18
+ /** Recover again now: also "Check again" on a success whose details are unavailable. */
19
+ recover: () => Promise<SavedAttemptOutcome<T> | null>;
20
+ /** On `check`: the one explicit action, which retires the attempt for every tab and reload. */
21
+ checkAction: {
22
+ line: string;
23
+ warning: string;
24
+ label: string;
25
+ run: () => Promise<Retired>;
26
+ } | null;
27
+ /**
28
+ * Only after the check action came back `reason: "unreadable"` (the browser
29
+ * has storage it can't read): the warned exit, "I checked my wallet.
30
+ * Continue anyway", which retires in this tab alone if storage still can't
31
+ * be read. Never a first option.
32
+ */
33
+ unreadableAction: {
34
+ line: string;
35
+ label: string;
36
+ run: () => Promise<Retired>;
37
+ } | null;
38
+ /**
39
+ * Retire after the user's exit or a followed settlement; recovers again.
40
+ * Bound to the attempt it was rendered for: called after that attempt (or
41
+ * its recovery or client) changed, it refuses before anything is saved.
42
+ */
43
+ retire: (reason: SavedAttemptRetirement) => Promise<Retired>;
44
+ };
45
+ /**
46
+ * One saved attempt's recovery, the one way every app runs it: recovered
47
+ * when it (or the client) appears, before the app prepares any new send, with
48
+ * the check action ready on `check`. Every answer and callback belongs to the
49
+ * attempt, recovery and client it started with: an earlier one's, or an older
50
+ * request's, never reaches the current one.
51
+ */
52
+ export declare function useSavedAttempt<T>(options: UseSavedAttemptOptions<T>): UseSavedAttemptResult<T>;
53
+ export {};
54
+ //# sourceMappingURL=useSavedAttempt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSavedAttempt.d.ts","sourceRoot":"","sources":["../../../../src/review/react/useSavedAttempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAUrB,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC,2EAA2E;IAC3E,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,sDAAsD;IACtD,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,iCAAiC;IACjC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qFAAqF;AACrF,KAAK,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI;IACrC,iEAAiE;IACjE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,wFAAwF;IACxF,OAAO,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,+FAA+F;IAC/F,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7B,GAAG,IAAI,CAAC;IACT;;;;;OAKG;IACH,gBAAgB,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7B,GAAG,IAAI,CAAC;IACT;;;;OAIG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D,CAAC;AASF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,qBAAqB,CAAC,CAAC,CAAC,CAoG1B"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSavedAttempt = useSavedAttempt;
4
+ const index_js_1 = require("../index.js");
5
+ const react_1 = require("react");
6
+ const keyOf = (attempt) => attempt
7
+ ? JSON.stringify({ ...attempt, authenticate: undefined }, (_, value) => typeof value === "bigint" ? value.toString() : value)
8
+ : null;
9
+ /**
10
+ * One saved attempt's recovery, the one way every app runs it: recovered
11
+ * when it (or the client) appears, before the app prepares any new send, with
12
+ * the check action ready on `check`. Every answer and callback belongs to the
13
+ * attempt, recovery and client it started with: an earlier one's, or an older
14
+ * request's, never reaches the current one.
15
+ */
16
+ function useSavedAttempt(options) {
17
+ const { recovery, client, checkNext } = options;
18
+ const key = keyOf(options.attempt);
19
+ const attempt = options.attempt;
20
+ /** The attempt as last rendered: the same saved fields, with the app's newest callbacks. */
21
+ const latest = (0, react_1.useRef)(attempt);
22
+ latest.current = attempt;
23
+ /** One lifecycle per attempt, recovery and client, with its latest request. */
24
+ const lifecycle = (0, react_1.useMemo)(() => ({ attempt, recovery, client, request: 0 }),
25
+ // The key stands for the attempt.
26
+ [key, recovery, client]);
27
+ /** Whether `of` is the mounted hook's lifecycle now. */
28
+ const current = (of) => mounted.current && rendered.current === of;
29
+ /**
30
+ * The lifecycle last rendered: set during render, so a callback of an
31
+ * earlier one is refused from the next commit's first layout effect on. A
32
+ * render React then discards leaves the shown callbacks refused (fail
33
+ * closed) until the next commit.
34
+ */
35
+ const rendered = (0, react_1.useRef)(undefined);
36
+ rendered.current = lifecycle;
37
+ /** Whether the hook is mounted: no callback or answer acts after unmount. */
38
+ const mounted = (0, react_1.useRef)(false);
39
+ (0, react_1.useLayoutEffect)(() => {
40
+ mounted.current = true;
41
+ return () => {
42
+ mounted.current = false;
43
+ };
44
+ }, []);
45
+ const [shown, setShown] = (0, react_1.useState)({ outcome: null, recovering: false });
46
+ /** The lifecycle whose check action last found storage unreadable. */
47
+ const [unreadable, setUnreadable] = (0, react_1.useState)();
48
+ const recover = (0, react_1.useCallback)(async () => {
49
+ const { recovery, client } = lifecycle;
50
+ const attempt = latest.current;
51
+ if (!attempt || !client || !current(lifecycle))
52
+ return null;
53
+ const request = ++lifecycle.request;
54
+ setShown((now) => ({
55
+ of: lifecycle,
56
+ outcome: now.of === lifecycle ? now.outcome : null,
57
+ recovering: true,
58
+ }));
59
+ const outcome = await recovery.recover(attempt, client);
60
+ // Only the latest request of the mounted lifecycle shows.
61
+ if (!current(lifecycle) || lifecycle.request !== request)
62
+ return null;
63
+ setShown({ of: lifecycle, outcome, recovering: false });
64
+ return outcome;
65
+ }, [lifecycle]);
66
+ (0, react_1.useEffect)(() => {
67
+ void recover();
68
+ }, [recover]);
69
+ const retire = (0, react_1.useCallback)(async (reason) => {
70
+ const { recovery } = lifecycle;
71
+ const attempt = latest.current;
72
+ if (!attempt || !current(lifecycle))
73
+ return { retired: false };
74
+ const retired = await recovery.retire(attempt, reason);
75
+ if (!current(lifecycle))
76
+ return retired;
77
+ if (!retired.retired && retired.reason === "unreadable")
78
+ setUnreadable(lifecycle);
79
+ await recover();
80
+ return retired;
81
+ }, [lifecycle, recover]);
82
+ const outcome = shown.of === lifecycle ? shown.outcome : null;
83
+ return {
84
+ outcome,
85
+ recovering: shown.of === lifecycle && shown.recovering,
86
+ recover,
87
+ checkAction: outcome?.status === "check"
88
+ ? {
89
+ line: outcome.line,
90
+ warning: outcome.warning,
91
+ label: (0, index_js_1.checkedItLabel)(checkNext),
92
+ run: () => retire({ by: "check", outcome }),
93
+ }
94
+ : null,
95
+ unreadableAction: outcome?.status === "check" && unreadable === lifecycle
96
+ ? {
97
+ line: index_js_1.SAVED_ATTEMPT_UNREADABLE_LINE,
98
+ label: index_js_1.SAVED_ATTEMPT_CONTINUE_ANYWAY_LABEL,
99
+ run: () => retire({ by: "check", outcome, force: "unreadable" }),
100
+ }
101
+ : null,
102
+ retire,
103
+ };
104
+ }
105
+ //# sourceMappingURL=useSavedAttempt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSavedAttempt.js","sourceRoot":"","sources":["../../../../src/review/react/useSavedAttempt.ts"],"names":[],"mappings":";;AA+EA,0CAsGC;AArLD,0CASqB;AACrB,iCAOe;AAgDf,MAAM,KAAK,GAAG,CAAC,OAAiD,EAAE,EAAE,CAClE,OAAO;IACL,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACnE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CACrD;IACH,CAAC,CAAC,IAAI,CAAC;AAEX;;;;;;GAMG;AACH,SAAgB,eAAe,CAC7B,OAAkC;IAElC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,4FAA4F;IAC5F,MAAM,MAAM,GAAG,IAAA,cAAM,EAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,+EAA+E;IAC/E,MAAM,SAAS,GAAG,IAAA,eAAO,EACvB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjD,kCAAkC;IAClC,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CACxB,CAAC;IAEF,wDAAwD;IACxD,MAAM,OAAO,GAAG,CAAC,EAAa,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,EAAE,CAAC;IAC9E;;;;;OAKG;IACH,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAwB,SAAS,CAAC,CAAC;IAC1D,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,6EAA6E;IAC7E,MAAM,OAAO,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAC9B,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAI/B,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,sEAAsE;IACtE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,GAAyB,CAAC;IAEtE,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,KAAK,IAAI,EAAE;QACrC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5D,MAAM,OAAO,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC;QACpC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACjB,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YAClD,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxD,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QACtE,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,KAAK,OAAO,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,KAAK,EAAE,MAA8B,EAAoB,EAAE;QACzD,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,OAAO,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY;YACrD,aAAa,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC;IACjB,CAAC,EACD,CAAC,SAAS,EAAE,OAAO,CAAC,CACrB,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,OAAO;QACL,OAAO;QACP,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU;QACtD,OAAO;QACP,WAAW,EACT,OAAO,EAAE,MAAM,KAAK,OAAO;YACzB,CAAC,CAAC;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,IAAA,yBAAc,EAAC,SAAS,CAAC;gBAChC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aAC5C;YACH,CAAC,CAAC,IAAI;QACV,gBAAgB,EACd,OAAO,EAAE,MAAM,KAAK,OAAO,IAAI,UAAU,KAAK,SAAS;YACrD,CAAC,CAAC;gBACE,IAAI,EAAE,wCAA6B;gBACnC,KAAK,EAAE,8CAAmC;gBAC1C,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;aACjE;YACH,CAAC,CAAC,IAAI;QACV,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"writeRecovery.d.ts","sourceRoot":"","sources":["../../../src/review/writeRecovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writeRecovery.d.ts","sourceRoot":"","sources":["../../../src/review/writeRecovery.ts"],"names":[],"mappings":"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"}
@@ -1136,7 +1136,9 @@ function createBrowserWriteRecovery(input, options = {}) {
1136
1136
  ? {
1137
1137
  result: saved.result,
1138
1138
  hash: saved.hash,
1139
- ...(saved.acknowledged === true
1139
+ // Saved before 2.39 (a latest marker with no time): the user
1140
+ // saw it then, so it reads as acknowledged.
1141
+ ...(saved.acknowledged === true || typeof latest.at !== "number"
1140
1142
  ? { acknowledged: true }
1141
1143
  : {}),
1142
1144
  }