@bananapus/nana-sdk-core 6.1.0 → 6.3.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 (149) hide show
  1. package/dist/cjs/review/confirming.d.ts +8 -0
  2. package/dist/cjs/review/confirming.d.ts.map +1 -0
  3. package/dist/cjs/review/confirming.js +11 -0
  4. package/dist/cjs/review/confirming.js.map +1 -0
  5. package/dist/cjs/review/heldWrite.d.ts +6 -1
  6. package/dist/cjs/review/heldWrite.d.ts.map +1 -1
  7. package/dist/cjs/review/heldWrite.js +13 -6
  8. package/dist/cjs/review/heldWrite.js.map +1 -1
  9. package/dist/cjs/review/locks.d.ts +141 -2
  10. package/dist/cjs/review/locks.d.ts.map +1 -1
  11. package/dist/cjs/review/locks.js +406 -58
  12. package/dist/cjs/review/locks.js.map +1 -1
  13. package/dist/cjs/review/messages.d.ts +16 -0
  14. package/dist/cjs/review/messages.d.ts.map +1 -1
  15. package/dist/cjs/review/messages.js +17 -1
  16. package/dist/cjs/review/messages.js.map +1 -1
  17. package/dist/cjs/review/react/ownership.d.ts +30 -0
  18. package/dist/cjs/review/react/ownership.d.ts.map +1 -0
  19. package/dist/cjs/review/react/ownership.js +27 -0
  20. package/dist/cjs/review/react/ownership.js.map +1 -0
  21. package/dist/cjs/review/react/useReviewedRun.d.ts +17 -3
  22. package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -1
  23. package/dist/cjs/review/react/useReviewedRun.js +528 -68
  24. package/dist/cjs/review/react/useReviewedRun.js.map +1 -1
  25. package/dist/cjs/review/react/useSavedAttempt.d.ts.map +1 -1
  26. package/dist/cjs/review/react/useSavedAttempt.js +12 -0
  27. package/dist/cjs/review/react/useSavedAttempt.js.map +1 -1
  28. package/dist/cjs/review/relayrSend.d.ts +20 -0
  29. package/dist/cjs/review/relayrSend.d.ts.map +1 -1
  30. package/dist/cjs/review/relayrSend.js +150 -105
  31. package/dist/cjs/review/relayrSend.js.map +1 -1
  32. package/dist/cjs/review/runStatus.d.ts +6 -2
  33. package/dist/cjs/review/runStatus.d.ts.map +1 -1
  34. package/dist/cjs/review/runStatus.js +3 -1
  35. package/dist/cjs/review/runStatus.js.map +1 -1
  36. package/dist/cjs/review/safeRelayr.d.ts +12 -2
  37. package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
  38. package/dist/cjs/review/safeRelayr.js +226 -156
  39. package/dist/cjs/review/safeRelayr.js.map +1 -1
  40. package/dist/cjs/review/savedAttempt.d.ts.map +1 -1
  41. package/dist/cjs/review/savedAttempt.js +7 -2
  42. package/dist/cjs/review/savedAttempt.js.map +1 -1
  43. package/dist/cjs/review/send.d.ts +46 -5
  44. package/dist/cjs/review/send.d.ts.map +1 -1
  45. package/dist/cjs/review/send.js +251 -58
  46. package/dist/cjs/review/send.js.map +1 -1
  47. package/dist/cjs/review/sequence.d.ts +25 -0
  48. package/dist/cjs/review/sequence.d.ts.map +1 -1
  49. package/dist/cjs/review/sequence.js +45 -7
  50. package/dist/cjs/review/sequence.js.map +1 -1
  51. package/dist/cjs/review/sign.d.ts +6 -1
  52. package/dist/cjs/review/sign.d.ts.map +1 -1
  53. package/dist/cjs/review/sign.js +10 -4
  54. package/dist/cjs/review/sign.js.map +1 -1
  55. package/dist/cjs/review/tabState.d.ts +4 -0
  56. package/dist/cjs/review/tabState.d.ts.map +1 -1
  57. package/dist/cjs/review/tabState.js +4 -0
  58. package/dist/cjs/review/tabState.js.map +1 -1
  59. package/dist/cjs/review/wallet.d.ts +16 -4
  60. package/dist/cjs/review/wallet.d.ts.map +1 -1
  61. package/dist/cjs/review/wallet.js +62 -17
  62. package/dist/cjs/review/wallet.js.map +1 -1
  63. package/dist/cjs/review/writeHold.d.ts +92 -14
  64. package/dist/cjs/review/writeHold.d.ts.map +1 -1
  65. package/dist/cjs/review/writeHold.js +102 -26
  66. package/dist/cjs/review/writeHold.js.map +1 -1
  67. package/dist/cjs/review/writeRecovery.d.ts +42 -7
  68. package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
  69. package/dist/cjs/review/writeRecovery.js +183 -21
  70. package/dist/cjs/review/writeRecovery.js.map +1 -1
  71. package/dist/cjs/testing.d.ts +13 -0
  72. package/dist/cjs/testing.d.ts.map +1 -1
  73. package/dist/cjs/testing.js +21 -0
  74. package/dist/cjs/testing.js.map +1 -1
  75. package/dist/esm/review/confirming.d.ts +8 -0
  76. package/dist/esm/review/confirming.d.ts.map +1 -0
  77. package/dist/esm/review/confirming.js +8 -0
  78. package/dist/esm/review/confirming.js.map +1 -0
  79. package/dist/esm/review/heldWrite.d.ts +6 -1
  80. package/dist/esm/review/heldWrite.d.ts.map +1 -1
  81. package/dist/esm/review/heldWrite.js +13 -6
  82. package/dist/esm/review/heldWrite.js.map +1 -1
  83. package/dist/esm/review/locks.d.ts +141 -2
  84. package/dist/esm/review/locks.d.ts.map +1 -1
  85. package/dist/esm/review/locks.js +396 -58
  86. package/dist/esm/review/locks.js.map +1 -1
  87. package/dist/esm/review/messages.d.ts +16 -0
  88. package/dist/esm/review/messages.d.ts.map +1 -1
  89. package/dist/esm/review/messages.js +16 -0
  90. package/dist/esm/review/messages.js.map +1 -1
  91. package/dist/esm/review/react/ownership.d.ts +30 -0
  92. package/dist/esm/review/react/ownership.d.ts.map +1 -0
  93. package/dist/esm/review/react/ownership.js +24 -0
  94. package/dist/esm/review/react/ownership.js.map +1 -0
  95. package/dist/esm/review/react/useReviewedRun.d.ts +17 -3
  96. package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -1
  97. package/dist/esm/review/react/useReviewedRun.js +529 -69
  98. package/dist/esm/review/react/useReviewedRun.js.map +1 -1
  99. package/dist/esm/review/react/useSavedAttempt.d.ts.map +1 -1
  100. package/dist/esm/review/react/useSavedAttempt.js +12 -0
  101. package/dist/esm/review/react/useSavedAttempt.js.map +1 -1
  102. package/dist/esm/review/relayrSend.d.ts +20 -0
  103. package/dist/esm/review/relayrSend.d.ts.map +1 -1
  104. package/dist/esm/review/relayrSend.js +154 -109
  105. package/dist/esm/review/relayrSend.js.map +1 -1
  106. package/dist/esm/review/runStatus.d.ts +6 -2
  107. package/dist/esm/review/runStatus.d.ts.map +1 -1
  108. package/dist/esm/review/runStatus.js +3 -1
  109. package/dist/esm/review/runStatus.js.map +1 -1
  110. package/dist/esm/review/safeRelayr.d.ts +12 -2
  111. package/dist/esm/review/safeRelayr.d.ts.map +1 -1
  112. package/dist/esm/review/safeRelayr.js +226 -156
  113. package/dist/esm/review/safeRelayr.js.map +1 -1
  114. package/dist/esm/review/savedAttempt.d.ts.map +1 -1
  115. package/dist/esm/review/savedAttempt.js +7 -2
  116. package/dist/esm/review/savedAttempt.js.map +1 -1
  117. package/dist/esm/review/send.d.ts +46 -5
  118. package/dist/esm/review/send.d.ts.map +1 -1
  119. package/dist/esm/review/send.js +252 -59
  120. package/dist/esm/review/send.js.map +1 -1
  121. package/dist/esm/review/sequence.d.ts +25 -0
  122. package/dist/esm/review/sequence.d.ts.map +1 -1
  123. package/dist/esm/review/sequence.js +43 -7
  124. package/dist/esm/review/sequence.js.map +1 -1
  125. package/dist/esm/review/sign.d.ts +6 -1
  126. package/dist/esm/review/sign.d.ts.map +1 -1
  127. package/dist/esm/review/sign.js +10 -4
  128. package/dist/esm/review/sign.js.map +1 -1
  129. package/dist/esm/review/tabState.d.ts +4 -0
  130. package/dist/esm/review/tabState.d.ts.map +1 -1
  131. package/dist/esm/review/tabState.js +4 -0
  132. package/dist/esm/review/tabState.js.map +1 -1
  133. package/dist/esm/review/wallet.d.ts +16 -4
  134. package/dist/esm/review/wallet.d.ts.map +1 -1
  135. package/dist/esm/review/wallet.js +62 -17
  136. package/dist/esm/review/wallet.js.map +1 -1
  137. package/dist/esm/review/writeHold.d.ts +92 -14
  138. package/dist/esm/review/writeHold.d.ts.map +1 -1
  139. package/dist/esm/review/writeHold.js +102 -26
  140. package/dist/esm/review/writeHold.js.map +1 -1
  141. package/dist/esm/review/writeRecovery.d.ts +42 -7
  142. package/dist/esm/review/writeRecovery.d.ts.map +1 -1
  143. package/dist/esm/review/writeRecovery.js +180 -22
  144. package/dist/esm/review/writeRecovery.js.map +1 -1
  145. package/dist/esm/testing.d.ts +13 -0
  146. package/dist/esm/testing.d.ts.map +1 -1
  147. package/dist/esm/testing.js +20 -0
  148. package/dist/esm/testing.js.map +1 -1
  149. package/package.json +1 -1
@@ -1,122 +1,460 @@
1
+ import { ReviewFixedLineError } from "./lineError.js";
2
+ import { CONFIRMATION_QUEUED_LINE, LOCK_LOST_LINE } from "./messages.js";
1
3
  import { TAB } from "./tabState.js";
2
- const TAB_QUEUES = TAB.queues;
3
- // Without Web Locks, writes in this tab still run one at a time per action,
4
- // across every copy of this module loaded in the tab.
5
- const tabQueues = (globalThis[TAB_QUEUES] ??= new Map());
6
- let tabLocksNoted = false;
7
- const tabLocks = {
8
- async request(name, options, work) {
9
- const held = tabQueues.get(name);
10
- if (held && options.ifAvailable)
4
+ /**
5
+ * Thrown by {@link LockHandle.assertHeld} once this tab no longer holds the
6
+ * lock. Its message is for logs; `errorLine` shows {@link LOCK_LOST_LINE}.
7
+ */
8
+ export class LockLostError extends ReviewFixedLineError {
9
+ get line() {
10
+ return LOCK_LOST_LINE;
11
+ }
12
+ constructor(lock) {
13
+ super(`The "${lock}" lock was lost. Its work must stop before writing.`);
14
+ this.lock = lock;
15
+ this.name = "LockLostError";
16
+ this.code = "LOCK_LOST";
17
+ }
18
+ }
19
+ /**
20
+ * How a receipt's `ended()` ends while its step's `onConfirmed` is queued
21
+ * behind the run's own locks (kept for one it lost, or another
22
+ * completion's claim waiting for one): it is told once that work ends,
23
+ * and only then acknowledged, so the wait never holds it up. Retry later;
24
+ * nothing is sent again. `errorLine` shows {@link CONFIRMATION_QUEUED_LINE}.
25
+ */
26
+ export class ConfirmationQueuedError extends ReviewFixedLineError {
27
+ get line() {
28
+ return CONFIRMATION_QUEUED_LINE;
29
+ }
30
+ constructor(step) {
31
+ super(`Step ${step}'s confirmation waits for the run's locks to be released.`);
32
+ this.step = step;
33
+ this.name = "ConfirmationQueuedError";
34
+ this.code = "CONFIRMATION_QUEUED";
35
+ }
36
+ }
37
+ /**
38
+ * Throws {@link LockLostError} unless every given lock is still this tab's,
39
+ * on a fresh read; `null` and `undefined` are skipped. One line before a
40
+ * write under several locks: `await assertLocksHeld([a, b]); save()`.
41
+ */
42
+ export async function assertLocksHeld(locks) {
43
+ await Promise.all((locks ?? []).map((lock) => lock?.assertHeld()));
44
+ }
45
+ /** Whether `error` is a lock's {@link LockLostError} (by `code`, so any copy's counts). */
46
+ const isLockLost = (error) => error?.code === "LOCK_LOST";
47
+ const keeperOf = (lock) => lock[TAB.keeper];
48
+ /**
49
+ * Whether the work `lock` was handed may still be running: anything kept
50
+ * for its name (an outcome refused for it, or another's queued behind it)
51
+ * waits until it ends. Only a fenced handle can say it ended.
52
+ */
53
+ export const lockWorkRunning = (lock) => !keeperOf(lock)?.ended;
54
+ /**
55
+ * Who took each lock last, origin-wide: every fenced acquisition stamps it
56
+ * under the lock, so a kept outcome can tell nobody took it since.
57
+ */
58
+ const stamps = (() => {
59
+ const memory = (globalThis[TAB.stamps] ??= new Map());
60
+ const key = (name) => `nana-sdk:lock-holder:${name}`;
61
+ return {
62
+ get(name) {
63
+ try {
64
+ const saved = globalThis.localStorage?.getItem(key(name));
65
+ if (saved != null)
66
+ return saved;
67
+ }
68
+ catch {
69
+ /* Unreadable: this tab's own memory. */
70
+ }
71
+ return memory.get(name);
72
+ },
73
+ set(name, owner) {
74
+ memory.set(name, owner);
75
+ try {
76
+ globalThis.localStorage?.setItem(key(name), owner);
77
+ }
78
+ catch {
79
+ // ponytail: in-tab memory only where storage is refused; another
80
+ // tab's take then goes unseen, so a whole-record replay may land.
81
+ }
82
+ },
83
+ };
84
+ })();
85
+ /**
86
+ * `later()` under every lock requested afresh, one acquisition each, so
87
+ * the backend serializes it with any other work or outcome under the same
88
+ * name; any failure leaves things as they were. `settled` is told which.
89
+ */
90
+ async function reconcile(entry) {
91
+ for (const keeper of entry.keepers)
92
+ keeper.kept.delete(entry);
93
+ const under = async (at) => {
94
+ if (at === entry.keepers.length) {
95
+ await assertLocksHeld(entry.locks);
96
+ await entry.later();
97
+ return true;
98
+ }
99
+ const keeper = entry.keepers[at];
100
+ return keeper.request(async (fresh) => {
101
+ if (!fresh)
102
+ return false;
103
+ if (entry.untouched && stamps.get(keeper.name) !== keeper.owner)
104
+ return false;
105
+ keeper.revived = fresh;
106
+ try {
107
+ return await under(at + 1);
108
+ }
109
+ finally {
110
+ keeper.revived = null;
111
+ }
112
+ });
113
+ };
114
+ // Unreconciled, the record stays as the lost lock left it.
115
+ const applied = await under(0).catch(() => false);
116
+ await Promise.resolve(entry.settled?.(applied)).catch(() => { });
117
+ }
118
+ /**
119
+ * Saves an outcome the work already has from outside (a wallet's hash, a
120
+ * definite rejection) under `locks`: `write()` runs now, and resolves true
121
+ * (once any lock's work ended, it is kept straight away, so it never runs
122
+ * ahead of an outcome kept before it).
123
+ * Its own writes check the locks right before writing. Refused for a lost
124
+ * lock (`LockLostError`), it resolves false and the outcome is kept: once
125
+ * the work under every one of `locks` has ended, each lock is taken again
126
+ * (the same handles read as held again) and, after a fresh check:
127
+ *
128
+ * - with `later`, it runs whenever the locks are free. `later` re-reads the
129
+ * saved record, matches this attempt by its identity (its attempt or
130
+ * reservation id, never the whole record) and merges the outcome into the
131
+ * latest record, so another tab's unrelated update meanwhile stays;
132
+ * - without, `write()` runs again only if no other tab took the locks since,
133
+ * so it can't touch a newer attempt's record.
134
+ *
135
+ * If any lock can't be taken back, or the write fails, the record stays as
136
+ * the lost lock left it and its recovery shows. `settled` is told once
137
+ * whether a kept outcome was applied in the end (a claim it consumed is
138
+ * then made for good, or given back so it stays retryable); one written
139
+ * at once resolves true without it.
140
+ *
141
+ * Any lock {@link fencedLocks} or {@link browserLocks} handed out is kept
142
+ * this way: a native one once its work ended, a lease also once it lapsed.
143
+ * Any other failure of `write` throws, as does a lost lock that isn't one.
144
+ */
145
+ export async function keepOutcome(locks, write, later, settled) {
146
+ const keepers = (locks ?? []).map(keeperOf);
147
+ const keepable = keepers.length > 0 && keepers.every((keeper) => keeper);
148
+ const keep = async () => {
149
+ const entry = {
150
+ locks: locks,
151
+ later: later ?? write,
152
+ untouched: !later,
153
+ keepers: keepers,
154
+ ...(settled ? { settled } : {}),
155
+ };
156
+ for (const keeper of entry.keepers)
157
+ keeper.kept.add(entry);
158
+ // Kept after its work already ended: reconciled now.
159
+ if (entry.keepers.every((keeper) => keeper.ended))
160
+ await reconcile(entry);
161
+ return false;
162
+ };
163
+ // A lock whose work ended is written only in its queue, behind any
164
+ // outcome kept before (its handle may read as held while one runs).
165
+ if (keepable && keepers.some((keeper) => keeper.ended))
166
+ return keep();
167
+ try {
168
+ await write();
169
+ return true;
170
+ }
171
+ catch (error) {
172
+ if (!isLockLost(error) || !keepable)
173
+ throw error;
174
+ return keep();
175
+ }
176
+ }
177
+ const NEVER = new AbortController().signal;
178
+ function handle(name, mode, held, signal = NEVER) {
179
+ return {
180
+ name,
181
+ mode,
182
+ signal,
183
+ held,
184
+ async assertHeld() {
185
+ if (!(await held()))
186
+ throw new LockLostError(name);
187
+ },
188
+ };
189
+ }
190
+ function isHandle(lock) {
191
+ return typeof lock.assertHeld === "function";
192
+ }
193
+ /** `request`'s two shapes, as `navigator.locks` takes them. */
194
+ function shaped(options, work) {
195
+ return typeof options === "function" ? [{}, options] : [options, work];
196
+ }
197
+ /**
198
+ * Any Web Locks manager (`navigator.locks`, a test's, the SDK's own) handing
199
+ * a {@link LockHandle}: one it hands already is read through; any other
200
+ * lock is never lost while its work runs. Each handle keeps the outcomes
201
+ * {@link keepOutcome} refused for it, the same for every backend, and
202
+ * stamps who took the lock last.
203
+ */
204
+ export function fencedLocks(locks) {
205
+ /** `locks.request`, its lock as a handle. */
206
+ const acquire = (name, options, work) => locks.request(name, options, async (lock) => {
207
+ if (!lock)
11
208
  return work(null);
12
- let release;
13
- const mine = new Promise((resolve) => (release = resolve));
14
- const queue = (held ?? Promise.resolve()).then(() => mine);
15
- tabQueues.set(name, queue);
16
- await held;
209
+ if (isHandle(lock))
210
+ return work(lock);
211
+ let running = true;
17
212
  try {
18
- return await work({ name, mode: "exclusive" });
213
+ return await work(handle(lock.name, lock.mode, async () => running));
19
214
  }
20
215
  finally {
21
- release();
22
- if (tabQueues.get(name) === queue)
23
- tabQueues.delete(name);
216
+ running = false;
24
217
  }
25
- },
26
- };
218
+ });
219
+ return {
220
+ request(name, options, work) {
221
+ const [opts, run] = shaped(options, work);
222
+ let keeper;
223
+ return acquire(name, opts, async (inner) => {
224
+ // Already fenced (a BrowserLocks passed in): its own keeper keeps.
225
+ if (!inner || keeperOf(inner))
226
+ return run(inner);
227
+ keeper = {
228
+ name,
229
+ owner: globalThis.crypto.randomUUID(),
230
+ ended: false,
231
+ kept: new Set(),
232
+ revived: null,
233
+ request: (again) => acquire(name, {}, again),
234
+ };
235
+ stamps.set(name, keeper.owner);
236
+ const own = keeper;
237
+ const lock = handle(name, inner.mode, () => (own.revived ? own.revived.held() : inner.held()), inner.signal);
238
+ Object.defineProperty(lock, TAB.keeper, { value: keeper });
239
+ return run(lock);
240
+ }).finally(async () => {
241
+ if (!keeper)
242
+ return;
243
+ // Released: each kept outcome whose locks all ended queues for the
244
+ // lock now, as any request would, and lands before this one resolves.
245
+ keeper.ended = true;
246
+ // All queued for the lock in the order they were kept, before any
247
+ // runs: one kept later always goes behind them.
248
+ await Promise.all([...keeper.kept]
249
+ .filter((entry) => entry.keepers.every((other) => other.ended))
250
+ .map(reconcile));
251
+ });
252
+ },
253
+ };
254
+ }
255
+ const TAB_QUEUES = TAB.queues;
256
+ /** Writes one at a time per name within one tab, queued in `queues`. */
257
+ function tabLocksOn(queues) {
258
+ return {
259
+ async request(name, options, work) {
260
+ const held = queues.get(name);
261
+ if (held && options.ifAvailable)
262
+ return work(null);
263
+ let release;
264
+ const mine = new Promise((resolve) => (release = resolve));
265
+ const queue = (held ?? Promise.resolve()).then(() => mine);
266
+ queues.set(name, queue);
267
+ await held;
268
+ let running = true;
269
+ try {
270
+ return await work(handle(name, "exclusive", async () => running));
271
+ }
272
+ finally {
273
+ running = false;
274
+ release();
275
+ if (queues.get(name) === queue)
276
+ queues.delete(name);
277
+ }
278
+ },
279
+ };
280
+ }
281
+ // Without Web Locks, writes in this tab still run one at a time per action,
282
+ // across every copy of this module loaded in the tab.
283
+ const tabLocks = tabLocksOn((globalThis[TAB_QUEUES] ??=
284
+ new Map()));
285
+ let tabLocksNoted = false;
27
286
  // Without Web Locks, tabs share an IndexedDB lease per action. A readwrite
28
287
  // transaction is atomic across the origin's tabs, so claiming a lease is a
29
- // compare-and-set. The holder renews it while it works; a tab that closed or
30
- // froze loses it once it lapses.
288
+ // compare-and-set. Each acquisition has its own owner token. The holder
289
+ // renews it while it works, only while it is still its own and unexpired; a
290
+ // tab that closed or froze loses it once it lapses, and its handle then
291
+ // reads as lost.
31
292
  const LEASE_DB = "nana-sdk-write-locks";
32
293
  const LEASE_STORE = "leases";
33
- const LEASE_MS = 15_000;
294
+ export const LEASE_MS = 15_000;
34
295
  const LEASE_RENEW_MS = 5_000;
35
296
  const LEASE_POLL_MS = 50;
36
- function leaseTransaction(db, run) {
297
+ /**
298
+ * The lease `owner` gets by `claim` over `lease`, or undefined while it
299
+ * can't: `take` while nobody holds it; `renew` only while still `owner`'s
300
+ * and unexpired.
301
+ */
302
+ function claimed(lease, owner, claim, now) {
303
+ const refused = claim === "renew"
304
+ ? !(lease?.owner === owner && lease.expires > now)
305
+ : lease && lease.expires > now;
306
+ return refused ? undefined : { owner, expires: now + LEASE_MS };
307
+ }
308
+ /**
309
+ * Letting go of `lease` for `owner`: expired; another owner's stays.
310
+ */
311
+ const dropped = (lease, owner) => lease?.owner === owner ? { owner, expires: 0 } : undefined;
312
+ function leaseTransaction(db, mode, run) {
37
313
  return new Promise((resolve, reject) => {
38
- const transaction = db.transaction(LEASE_STORE, "readwrite");
314
+ const transaction = db.transaction(LEASE_STORE, mode);
39
315
  let result;
40
316
  run(transaction.objectStore(LEASE_STORE), (value) => (result = value));
41
317
  transaction.oncomplete = () => resolve(result);
42
318
  transaction.onerror = transaction.onabort = () => reject(transaction.error);
43
319
  });
44
320
  }
45
- /** Take or renew `name`'s lease for `owner`; false while another tab holds it. */
46
- function claimLease(db, name, owner) {
47
- return leaseTransaction(db, (store, done) => {
48
- done(false);
49
- const read = store.get(name);
50
- read.onsuccess = () => {
51
- const lease = read.result;
52
- const now = Date.now();
53
- if (lease && lease.owner !== owner && lease.expires > now)
54
- return;
55
- store.put({ owner, expires: now + LEASE_MS }, name);
56
- done(true);
57
- };
58
- });
59
- }
60
- function dropLease(db, name, owner) {
61
- return leaseTransaction(db, (store) => {
321
+ /** One read-and-write of `name`'s lease in a readwrite transaction. */
322
+ function changeLease(db, name, change) {
323
+ return leaseTransaction(db, "readwrite", (store, done) => {
62
324
  const read = store.get(name);
63
325
  read.onsuccess = () => {
64
- if (read.result?.owner === owner)
65
- store.delete(name);
326
+ const { next, value } = change(read.result);
327
+ if (next)
328
+ store.put(next, name);
329
+ done(value);
66
330
  };
67
331
  });
68
332
  }
69
- function leaseLocks(factory) {
333
+ export function idbLeases(factory, now) {
70
334
  let opened;
71
- const database = () => (opened ??= new Promise((resolve, reject) => {
335
+ return () => (opened ??= new Promise((resolve, reject) => {
72
336
  const request = factory.open(LEASE_DB, 1);
73
337
  request.onupgradeneeded = () => request.result.createObjectStore(LEASE_STORE);
74
338
  request.onsuccess = () => resolve(request.result);
75
339
  request.onerror = () => reject(request.error);
76
- }).catch((error) => {
340
+ })
341
+ .then((db) => ({
342
+ claim: (name, owner, claim) => changeLease(db, name, (lease) => {
343
+ const next = claimed(lease, owner, claim, now());
344
+ return { next, value: !!next };
345
+ }),
346
+ read: (name) => leaseTransaction(db, "readonly", (store, done) => {
347
+ const read = store.get(name);
348
+ read.onsuccess = () => done(read.result);
349
+ }),
350
+ drop: (name, owner) => changeLease(db, name, (lease) => ({
351
+ next: dropped(lease, owner),
352
+ value: undefined,
353
+ })),
354
+ }))
355
+ .catch((error) => {
77
356
  opened = undefined;
78
357
  throw error;
79
358
  }));
359
+ }
360
+ /**
361
+ * The origin's leases in memory, for tests: each call answers a task later,
362
+ * as IndexedDB's transactions do.
363
+ */
364
+ export function memoryLeases(now) {
365
+ const leases = new Map();
366
+ const later = () => new Promise((resolve) => setTimeout(resolve, 0));
367
+ return {
368
+ async claim(name, owner, claim) {
369
+ await later();
370
+ const next = claimed(leases.get(name), owner, claim, now());
371
+ if (next)
372
+ leases.set(name, next);
373
+ return !!next;
374
+ },
375
+ async read(name) {
376
+ await later();
377
+ return leases.get(name);
378
+ },
379
+ async drop(name, owner) {
380
+ await later();
381
+ const next = dropped(leases.get(name), owner);
382
+ if (next)
383
+ leases.set(name, next);
384
+ },
385
+ };
386
+ }
387
+ /**
388
+ * Locks over the origin's `leases`, one at a time per name within the tab
389
+ * (`tab`), its clock `now`.
390
+ */
391
+ export function leaseLocks(leases, tab = tabLocks, now = () => Date.now()) {
392
+ /** Whether `lease` is `owner`'s and unexpired. */
393
+ const owns = (lease, owner) => lease?.owner === owner && lease.expires > now();
80
394
  return {
81
- request: (name, options, work) => tabLocks.request(name, options, async (tabLock) => {
395
+ request: (name, options, work) => tab.request(name, options, async (tabLock) => {
82
396
  if (!tabLock)
83
397
  return work(null);
84
- let db;
398
+ let store;
85
399
  try {
86
- db = await database();
400
+ store = await leases();
87
401
  }
88
402
  catch {
89
403
  // IndexedDB refused (as in some private windows): this tab only.
90
404
  return work(tabLock);
91
405
  }
92
406
  const owner = globalThis.crypto.randomUUID();
93
- while (!(await claimLease(db, name, owner))) {
407
+ while (!(await store.claim(name, owner, "take"))) {
94
408
  if (options.ifAvailable)
95
409
  return work(null);
96
410
  await new Promise((resolve) => setTimeout(resolve, LEASE_POLL_MS));
97
411
  }
98
- const renew = setInterval(() => void claimLease(db, name, owner).catch(() => { }), LEASE_RENEW_MS);
412
+ const lost = new AbortController();
413
+ let running = true;
414
+ const held = async () => {
415
+ if (!running || lost.signal.aborted)
416
+ return false;
417
+ // Never cached: a tab back from suspension reads what is there now.
418
+ const mine = owns(await store.read(name).catch(() => undefined), owner);
419
+ if (!mine && running)
420
+ lost.abort(new LockLostError(name));
421
+ return mine && running;
422
+ };
423
+ const renew = setInterval(() => void store
424
+ .claim(name, owner, "renew")
425
+ .then((kept) => kept || lost.abort(new LockLostError(name)))
426
+ .catch(() => { }), LEASE_RENEW_MS);
99
427
  try {
100
- return await work(tabLock);
428
+ return await work(handle(name, "exclusive", held, lost.signal));
101
429
  }
102
430
  finally {
431
+ running = false;
103
432
  clearInterval(renew);
104
- await dropLease(db, name, owner).catch(() => { });
433
+ await store.drop(name, owner).catch(() => { });
105
434
  }
106
435
  }),
107
436
  };
108
437
  }
109
- let fallbackLocks;
438
+ export { tabLocksOn };
439
+ const inTabLocks = fencedLocks(tabLocks);
440
+ let leasedLocks;
110
441
  /**
111
442
  * The browser's Web Locks. Where a browser or wallet webview has none, an
112
443
  * IndexedDB lease shared by the origin's tabs (one transaction, no visible
113
444
  * delay; it waits only while another tab holds the action), with a one-time
114
445
  * console note. With neither, a lock within this tab. Never refuses.
446
+ *
447
+ * `request(name, work)` or `request(name, options, work)`, as on
448
+ * `navigator.locks`; `work` gets a {@link LockHandle}. Call its
449
+ * `assertHeld()` immediately before every journal write and every wallet
450
+ * submission inside the lock: a lease can lapse while the tab is suspended
451
+ * (as while the user is in a wallet app) and pass to another tab. The check
452
+ * narrows that window to the time between the check and the write.
115
453
  */
116
454
  export function browserLocks() {
117
455
  const native = globalThis.navigator?.locks;
118
456
  if (native)
119
- return native;
457
+ return fencedLocks(native);
120
458
  if (!tabLocksNoted) {
121
459
  tabLocksNoted = true;
122
460
  console.info(globalThis.indexedDB
@@ -124,7 +462,7 @@ export function browserLocks() {
124
462
  : "Web Locks are unavailable, so wallet writes are coordinated within this tab only.");
125
463
  }
126
464
  if (!globalThis.indexedDB)
127
- return tabLocks;
128
- return (fallbackLocks ??= leaseLocks(globalThis.indexedDB));
465
+ return inTabLocks;
466
+ return (leasedLocks ??= fencedLocks(leaseLocks(idbLeases(globalThis.indexedDB, () => Date.now()))));
129
467
  }
130
468
  //# sourceMappingURL=locks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../src/review/locks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../src/review/locks.ts"],"names":[],"mappings":"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"}
@@ -67,8 +67,24 @@ export declare const WRITE_HOLD_MINED_LINE = "Your transaction is onchain, but i
67
67
  export declare const WRITE_HOLD_STALE_REVIEW_LINE = "This was just sent from another window. Review it again to send another.";
68
68
  /** The one line while a sent write, direct or through a Safe, is being confirmed. */
69
69
  export declare const HELD_CONFIRMING_LINE = "Confirming your transaction.";
70
+ /** A run closed after an earlier step was sent (`stopped`): the rest can be reviewed again. */
71
+ export declare const REVIEW_STOPPED_LINE = "The rest was not sent. Review it again when you are ready.";
72
+ /**
73
+ * Another window took over this action's lock (a lease that lapsed while the
74
+ * tab slept, as in a wallet app): `errorLine` of a `LockLostError`.
75
+ */
76
+ export declare const LOCK_LOST_LINE = "This action moved to another window. Nothing more was sent.";
77
+ /**
78
+ * A sent step's confirmation is recorded only once the site's current work
79
+ * ends: `errorLine` of a `ConfirmationQueuedError`. Nothing is sent again.
80
+ */
81
+ export declare const CONFIRMATION_QUEUED_LINE = "Confirmed. It is recorded here once this step finishes. Nothing more was sent.";
70
82
  /** A held write the user released with their exit: they can send it again. */
71
83
  export declare const HELD_RELEASED_LINE = "Released. You can send it again.";
84
+ /** A hash the user gave for a held write is another transaction. */
85
+ export declare const HELD_HASH_MISMATCH_LINE = "This hash is not that transaction. Check it in your wallet.";
86
+ /** A hash the user gave for a held write could not be read yet: retryable. */
87
+ export declare const HELD_HASH_UNVERIFIED_LINE = "Couldn't verify this transaction yet. Try again shortly.";
72
88
  /** A held write another window released: neutral, never a result. */
73
89
  export declare const HELD_RELEASED_ELSEWHERE_LINE = "This was released in another window.";
74
90
  /** The exit button where the review follows on its own. */
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/review/messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4FAA4F;AAC5F,KAAK,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,EACE,MAAiB,EACjB,KAAkB,EAClB,UAA0D,GAC3D,GAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;CAChC,GACL,MAAM,CAIR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,EACE,MAAiB,EACjB,OAAmB,EACnB,gBAAwB,GACzB,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GACxE,MAAM,CAOR;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,MAAM,SAAgB,GAAG,MAAM,CAE/D;AAED,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,oCAAoC,CAAC;AAElE,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EACjC,MAAM,SAAgB,GACrB,MAAM,CAIR;AAED,iEAAiE;AACjE,eAAO,MAAM,2BAA2B,0EACiC,CAAC;AAE1E,gDAAgD;AAChD,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAE7E,yEAAyE;AACzE,eAAO,MAAM,4BAA4B,2EACiC,CAAC;AAE3E,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,8FAC0D,CAAC;AAE9F,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,kEAC6B,CAAC;AAElE,uIAAuI;AACvI,eAAO,MAAM,wBAAwB,yEACmC,CAAC;AAEzE,+FAA+F;AAC/F,eAAO,MAAM,gCAAgC,iHACmE,CAAC;AAEjH,qGAAqG;AACrG,eAAO,MAAM,2BAA2B,qGAC4D,CAAC;AAErG,gGAAgG;AAChG,eAAO,MAAM,yBAAyB,uFACgD,CAAC;AAEvF,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,6FAC0D,CAAC;AAE7F,+DAA+D;AAC/D,eAAO,MAAM,2BAA2B,iFACwC,CAAC;AAEjF,wFAAwF;AACxF,eAAO,MAAM,6BAA6B,gFACqC,CAAC;AAEhF,6GAA6G;AAC7G,eAAO,MAAM,0BAA0B,uDACe,CAAC;AAEvD,iFAAiF;AACjF,eAAO,MAAM,6BAA6B,wFAC6C,CAAC;AAExF,+FAA+F;AAC/F,eAAO,MAAM,qBAAqB,2GACwE,CAAC;AAE3G,yGAAyG;AACzG,eAAO,MAAM,4BAA4B,6EACmC,CAAC;AAE7E,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AAEnE,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAErE,qEAAqE;AACrE,eAAO,MAAM,4BAA4B,yCACD,CAAC;AAEzC,2DAA2D;AAC3D,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AAEpE,sGAAsG;AACtG,eAAO,MAAM,gBAAgB,8DACgC,CAAC;AAE9D,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,mCAAmC,CAAC;AAElE,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,gEACiC,CAAC;AAEhE,8FAA8F;AAC9F,eAAO,MAAM,sBAAsB,2CAA2C,CAAC;AAE/E,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,iGAAiG;AACjG,eAAO,MAAM,wBAAwB,4FACsD,CAAC;AAE5F,4BAA4B;AAC5B,eAAO,MAAM,2BAA2B,4EACmC,CAAC;AAE5E,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,IAAI,SAAoB,GAAG,MAAM,CAE/D;AAED,0EAA0E;AAC1E,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAE5E,8EAA8E;AAC9E,eAAO,MAAM,6BAA6B,4FACiD,CAAC;AAE5F,2FAA2F;AAC3F,eAAO,MAAM,mCAAmC,yCACR,CAAC;AAEzC,qFAAqF;AACrF,eAAO,MAAM,6BAA6B,iDACM,CAAC;AAEjD,4GAA4G;AAC5G,eAAO,MAAM,yBAAyB,0FACmD,CAAC;AAE1F,wGAAwG;AACxG,eAAO,MAAM,+BAA+B,iFACoC,CAAC;AAEjF,mEAAmE;AACnE,eAAO,MAAM,oCAAoC,4FAC0C,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/review/messages.ts"],"names":[],"mappings":"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"}
@@ -73,8 +73,24 @@ export const WRITE_HOLD_MINED_LINE = "Your transaction is onchain, but its resul
73
73
  export const WRITE_HOLD_STALE_REVIEW_LINE = "This was just sent from another window. Review it again to send another.";
74
74
  /** The one line while a sent write, direct or through a Safe, is being confirmed. */
75
75
  export const HELD_CONFIRMING_LINE = "Confirming your transaction.";
76
+ /** A run closed after an earlier step was sent (`stopped`): the rest can be reviewed again. */
77
+ export const REVIEW_STOPPED_LINE = "The rest was not sent. Review it again when you are ready.";
78
+ /**
79
+ * Another window took over this action's lock (a lease that lapsed while the
80
+ * tab slept, as in a wallet app): `errorLine` of a `LockLostError`.
81
+ */
82
+ export const LOCK_LOST_LINE = "This action moved to another window. Nothing more was sent.";
83
+ /**
84
+ * A sent step's confirmation is recorded only once the site's current work
85
+ * ends: `errorLine` of a `ConfirmationQueuedError`. Nothing is sent again.
86
+ */
87
+ export const CONFIRMATION_QUEUED_LINE = "Confirmed. It is recorded here once this step finishes. Nothing more was sent.";
76
88
  /** A held write the user released with their exit: they can send it again. */
77
89
  export const HELD_RELEASED_LINE = "Released. You can send it again.";
90
+ /** A hash the user gave for a held write is another transaction. */
91
+ export const HELD_HASH_MISMATCH_LINE = "This hash is not that transaction. Check it in your wallet.";
92
+ /** A hash the user gave for a held write could not be read yet: retryable. */
93
+ export const HELD_HASH_UNVERIFIED_LINE = "Couldn't verify this transaction yet. Try again shortly.";
78
94
  /** A held write another window released: neutral, never a result. */
79
95
  export const HELD_RELEASED_ELSEWHERE_LINE = "This was released in another window.";
80
96
  /** The exit button where the review follows on its own. */
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/review/messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,EACE,MAAM,GAAG,QAAQ,EACjB,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,EAClB,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,MAKxD,EAAE;IAEN,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK;QAC1B,CAAC,CAAC,QAAQ,MAAM,4CAA4C,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,yBAAyB;QAC9G,CAAC,CAAC,QAAQ,MAAM,iEAAiE,CAAC;AACtF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAqB,EACrB,EACE,MAAM,GAAG,QAAQ,EACjB,OAAO,GAAG,SAAS,EACnB,gBAAgB,GAAG,KAAK,MAC6C,EAAE;IAEzE,IAAI,MAAM,KAAK,KAAK;QAClB,OAAO,QAAQ,MAAM,wDAAwD,OAAO,uCAAuC,CAAC;IAC9H,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,OAAO,6BAA6B,CAAC;IAC7E,OAAO,gBAAgB;QACrB,CAAC,CAAC,iDAAiD,MAAM,qDAAqD;QAC9G,CAAC,CAAC,QAAQ,MAAM,gDAAgD,CAAC;AACrE,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,MAAM,GAAG,aAAa;IACrD,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AAC3E,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAElE,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAC9B,IAAiC,EACjC,MAAM,GAAG,aAAa;IAEtB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE;QACjC,CAAC,CAAC,mBAAmB,MAAM,0CAA0C;QACrE,CAAC,CAAC,mBAAmB,MAAM,6CAA6C,CAAC;AAC7E,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,2BAA2B,GACtC,uEAAuE,CAAC;AAE1E,gDAAgD;AAChD,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAE7E,yEAAyE;AACzE,MAAM,CAAC,MAAM,4BAA4B,GACvC,wEAAwE,CAAC;AAE3E,sFAAsF;AACtF,MAAM,CAAC,MAAM,sBAAsB,GACjC,2FAA2F,CAAC;AAE9F,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAClC,+DAA+D,CAAC;AAElE,uIAAuI;AACvI,MAAM,CAAC,MAAM,wBAAwB,GACnC,sEAAsE,CAAC;AAEzE,+FAA+F;AAC/F,MAAM,CAAC,MAAM,gCAAgC,GAC3C,8GAA8G,CAAC;AAEjH,qGAAqG;AACrG,MAAM,CAAC,MAAM,2BAA2B,GACtC,kGAAkG,CAAC;AAErG,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GACpC,oFAAoF,CAAC;AAEvF,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAChC,0FAA0F,CAAC;AAE7F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,2BAA2B,GACtC,8EAA8E,CAAC;AAEjF,wFAAwF;AACxF,MAAM,CAAC,MAAM,6BAA6B,GACxC,6EAA6E,CAAC;AAEhF,6GAA6G;AAC7G,MAAM,CAAC,MAAM,0BAA0B,GACrC,oDAAoD,CAAC;AAEvD,iFAAiF;AACjF,MAAM,CAAC,MAAM,6BAA6B,GACxC,qFAAqF,CAAC;AAExF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAChC,wGAAwG,CAAC;AAE3G,yGAAyG;AACzG,MAAM,CAAC,MAAM,4BAA4B,GACvC,0EAA0E,CAAC;AAE7E,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAEnE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,kCAAkC,CAAC;AAErE,qEAAqE;AACrE,MAAM,CAAC,MAAM,4BAA4B,GACvC,sCAAsC,CAAC;AAEzC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAErD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAEpE,sGAAsG;AACtG,MAAM,CAAC,MAAM,gBAAgB,GAC3B,2DAA2D,CAAC;AAE9D,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAElE,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAC5B,6DAA6D,CAAC;AAEhE,8FAA8F;AAC9F,MAAM,CAAC,MAAM,sBAAsB,GAAG,wCAAwC,CAAC;AAE/E,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAErD,iGAAiG;AACjG,MAAM,CAAC,MAAM,wBAAwB,GACnC,yFAAyF,CAAC;AAE5F,4BAA4B;AAC5B,MAAM,CAAC,MAAM,2BAA2B,GACtC,yEAAyE,CAAC;AAE5E,+GAA+G;AAC/G,MAAM,UAAU,cAAc,CAAC,IAAI,GAAG,iBAAiB;IACrD,OAAO,iBAAiB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC;AACtD,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,6BAA6B,GACxC,yFAAyF,CAAC;AAE5F,2FAA2F;AAC3F,MAAM,CAAC,MAAM,mCAAmC,GAC9C,sCAAsC,CAAC;AAEzC,qFAAqF;AACrF,MAAM,CAAC,MAAM,6BAA6B,GACxC,8CAA8C,CAAC;AAEjD,4GAA4G;AAC5G,MAAM,CAAC,MAAM,yBAAyB,GACpC,uFAAuF,CAAC;AAE1F,wGAAwG;AACxG,MAAM,CAAC,MAAM,+BAA+B,GAC1C,8EAA8E,CAAC;AAEjF,mEAAmE;AACnE,MAAM,CAAC,MAAM,oCAAoC,GAC/C,yFAAyF,CAAC"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/review/messages.ts"],"names":[],"mappings":"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"}