@bananapus/nana-sdk-core 6.2.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 (109) 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/locks.d.ts +87 -7
  6. package/dist/cjs/review/locks.d.ts.map +1 -1
  7. package/dist/cjs/review/locks.js +328 -79
  8. package/dist/cjs/review/locks.js.map +1 -1
  9. package/dist/cjs/review/messages.d.ts +16 -0
  10. package/dist/cjs/review/messages.d.ts.map +1 -1
  11. package/dist/cjs/review/messages.js +17 -1
  12. package/dist/cjs/review/messages.js.map +1 -1
  13. package/dist/cjs/review/react/ownership.d.ts +30 -0
  14. package/dist/cjs/review/react/ownership.d.ts.map +1 -0
  15. package/dist/cjs/review/react/ownership.js +27 -0
  16. package/dist/cjs/review/react/ownership.js.map +1 -0
  17. package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -1
  18. package/dist/cjs/review/react/useReviewedRun.js +394 -45
  19. package/dist/cjs/review/react/useReviewedRun.js.map +1 -1
  20. package/dist/cjs/review/relayrSend.d.ts +16 -1
  21. package/dist/cjs/review/relayrSend.d.ts.map +1 -1
  22. package/dist/cjs/review/relayrSend.js +25 -2
  23. package/dist/cjs/review/relayrSend.js.map +1 -1
  24. package/dist/cjs/review/safeRelayr.d.ts +2 -1
  25. package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
  26. package/dist/cjs/review/safeRelayr.js +23 -29
  27. package/dist/cjs/review/safeRelayr.js.map +1 -1
  28. package/dist/cjs/review/send.d.ts +31 -12
  29. package/dist/cjs/review/send.d.ts.map +1 -1
  30. package/dist/cjs/review/send.js +191 -41
  31. package/dist/cjs/review/send.js.map +1 -1
  32. package/dist/cjs/review/sequence.d.ts +25 -0
  33. package/dist/cjs/review/sequence.d.ts.map +1 -1
  34. package/dist/cjs/review/sequence.js +45 -7
  35. package/dist/cjs/review/sequence.js.map +1 -1
  36. package/dist/cjs/review/tabState.d.ts +4 -0
  37. package/dist/cjs/review/tabState.d.ts.map +1 -1
  38. package/dist/cjs/review/tabState.js +4 -0
  39. package/dist/cjs/review/tabState.js.map +1 -1
  40. package/dist/cjs/review/wallet.d.ts.map +1 -1
  41. package/dist/cjs/review/wallet.js +3 -1
  42. package/dist/cjs/review/wallet.js.map +1 -1
  43. package/dist/cjs/review/writeHold.d.ts +74 -11
  44. package/dist/cjs/review/writeHold.d.ts.map +1 -1
  45. package/dist/cjs/review/writeHold.js +65 -16
  46. package/dist/cjs/review/writeHold.js.map +1 -1
  47. package/dist/cjs/review/writeRecovery.d.ts +31 -6
  48. package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
  49. package/dist/cjs/review/writeRecovery.js +120 -7
  50. package/dist/cjs/review/writeRecovery.js.map +1 -1
  51. package/dist/cjs/testing.d.ts +13 -0
  52. package/dist/cjs/testing.d.ts.map +1 -1
  53. package/dist/cjs/testing.js +21 -0
  54. package/dist/cjs/testing.js.map +1 -1
  55. package/dist/esm/review/confirming.d.ts +8 -0
  56. package/dist/esm/review/confirming.d.ts.map +1 -0
  57. package/dist/esm/review/confirming.js +8 -0
  58. package/dist/esm/review/confirming.js.map +1 -0
  59. package/dist/esm/review/locks.d.ts +87 -7
  60. package/dist/esm/review/locks.d.ts.map +1 -1
  61. package/dist/esm/review/locks.js +321 -78
  62. package/dist/esm/review/locks.js.map +1 -1
  63. package/dist/esm/review/messages.d.ts +16 -0
  64. package/dist/esm/review/messages.d.ts.map +1 -1
  65. package/dist/esm/review/messages.js +16 -0
  66. package/dist/esm/review/messages.js.map +1 -1
  67. package/dist/esm/review/react/ownership.d.ts +30 -0
  68. package/dist/esm/review/react/ownership.d.ts.map +1 -0
  69. package/dist/esm/review/react/ownership.js +24 -0
  70. package/dist/esm/review/react/ownership.js.map +1 -0
  71. package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -1
  72. package/dist/esm/review/react/useReviewedRun.js +395 -46
  73. package/dist/esm/review/react/useReviewedRun.js.map +1 -1
  74. package/dist/esm/review/relayrSend.d.ts +16 -1
  75. package/dist/esm/review/relayrSend.d.ts.map +1 -1
  76. package/dist/esm/review/relayrSend.js +28 -5
  77. package/dist/esm/review/relayrSend.js.map +1 -1
  78. package/dist/esm/review/safeRelayr.d.ts +2 -1
  79. package/dist/esm/review/safeRelayr.d.ts.map +1 -1
  80. package/dist/esm/review/safeRelayr.js +24 -30
  81. package/dist/esm/review/safeRelayr.js.map +1 -1
  82. package/dist/esm/review/send.d.ts +31 -12
  83. package/dist/esm/review/send.d.ts.map +1 -1
  84. package/dist/esm/review/send.js +193 -43
  85. package/dist/esm/review/send.js.map +1 -1
  86. package/dist/esm/review/sequence.d.ts +25 -0
  87. package/dist/esm/review/sequence.d.ts.map +1 -1
  88. package/dist/esm/review/sequence.js +43 -7
  89. package/dist/esm/review/sequence.js.map +1 -1
  90. package/dist/esm/review/tabState.d.ts +4 -0
  91. package/dist/esm/review/tabState.d.ts.map +1 -1
  92. package/dist/esm/review/tabState.js +4 -0
  93. package/dist/esm/review/tabState.js.map +1 -1
  94. package/dist/esm/review/wallet.d.ts.map +1 -1
  95. package/dist/esm/review/wallet.js +3 -1
  96. package/dist/esm/review/wallet.js.map +1 -1
  97. package/dist/esm/review/writeHold.d.ts +74 -11
  98. package/dist/esm/review/writeHold.d.ts.map +1 -1
  99. package/dist/esm/review/writeHold.js +65 -16
  100. package/dist/esm/review/writeHold.js.map +1 -1
  101. package/dist/esm/review/writeRecovery.d.ts +31 -6
  102. package/dist/esm/review/writeRecovery.d.ts.map +1 -1
  103. package/dist/esm/review/writeRecovery.js +118 -7
  104. package/dist/esm/review/writeRecovery.js.map +1 -1
  105. package/dist/esm/testing.d.ts +13 -0
  106. package/dist/esm/testing.d.ts.map +1 -1
  107. package/dist/esm/testing.js +20 -0
  108. package/dist/esm/testing.js.map +1 -1
  109. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * How long a claimed `onConfirmed` notice stays pending unless its claimant
3
+ * renews it: only a claim whose tab closed or crashed mid-delivery lapses.
4
+ */
5
+ export declare const CONFIRMING_STALE_MS: number;
6
+ /** How often a claimant still delivering renews its claim. */
7
+ export declare const CONFIRMING_RENEW_MS: number;
8
+ //# sourceMappingURL=confirming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirming.d.ts","sourceRoot":"","sources":["../../../src/review/confirming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAa,CAAC;AAC9C,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,QAA0B,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONFIRMING_RENEW_MS = exports.CONFIRMING_STALE_MS = void 0;
4
+ /**
5
+ * How long a claimed `onConfirmed` notice stays pending unless its claimant
6
+ * renews it: only a claim whose tab closed or crashed mid-delivery lapses.
7
+ */
8
+ exports.CONFIRMING_STALE_MS = 5 * 60_000;
9
+ /** How often a claimant still delivering renews its claim. */
10
+ exports.CONFIRMING_RENEW_MS = exports.CONFIRMING_STALE_MS / 5;
11
+ //# sourceMappingURL=confirming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirming.js","sourceRoot":"","sources":["../../../src/review/confirming.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAC;AAC9C,8DAA8D;AACjD,QAAA,mBAAmB,GAAG,2BAAmB,GAAG,CAAC,CAAC"}
@@ -1,10 +1,29 @@
1
- /** Thrown by {@link LockHandle.assertHeld} once this tab no longer holds the lock. */
2
- export declare class LockLostError extends Error {
1
+ import { ReviewFixedLineError } from "./lineError.js";
2
+ /**
3
+ * Thrown by {@link LockHandle.assertHeld} once this tab no longer holds the
4
+ * lock. Its message is for logs; `errorLine` shows {@link LOCK_LOST_LINE}.
5
+ */
6
+ export declare class LockLostError extends ReviewFixedLineError {
3
7
  readonly lock: string;
4
8
  readonly name = "LockLostError";
5
9
  readonly code = "LOCK_LOST";
10
+ get line(): string;
6
11
  constructor(lock: string);
7
12
  }
13
+ /**
14
+ * How a receipt's `ended()` ends while its step's `onConfirmed` is queued
15
+ * behind the run's own locks (kept for one it lost, or another
16
+ * completion's claim waiting for one): it is told once that work ends,
17
+ * and only then acknowledged, so the wait never holds it up. Retry later;
18
+ * nothing is sent again. `errorLine` shows {@link CONFIRMATION_QUEUED_LINE}.
19
+ */
20
+ export declare class ConfirmationQueuedError extends ReviewFixedLineError {
21
+ readonly step: number;
22
+ readonly name = "ConfirmationQueuedError";
23
+ readonly code = "CONFIRMATION_QUEUED";
24
+ get line(): string;
25
+ constructor(step: number);
26
+ }
8
27
  /**
9
28
  * The lock {@link browserLocks} hands its work. Native Web Locks never lose
10
29
  * it. The IndexedDB lease can: a tab suspended past its lease (as while the
@@ -30,6 +49,40 @@ export type LockHandle = {
30
49
  * write under several locks: `await assertLocksHeld([a, b]); save()`.
31
50
  */
32
51
  export declare function assertLocksHeld(locks?: readonly (Pick<LockHandle, "assertHeld"> | null | undefined)[]): Promise<void>;
52
+ /**
53
+ * Whether the work `lock` was handed may still be running: anything kept
54
+ * for its name (an outcome refused for it, or another's queued behind it)
55
+ * waits until it ends. Only a fenced handle can say it ended.
56
+ */
57
+ export declare const lockWorkRunning: (lock: LockHandle) => boolean;
58
+ /**
59
+ * Saves an outcome the work already has from outside (a wallet's hash, a
60
+ * definite rejection) under `locks`: `write()` runs now, and resolves true
61
+ * (once any lock's work ended, it is kept straight away, so it never runs
62
+ * ahead of an outcome kept before it).
63
+ * Its own writes check the locks right before writing. Refused for a lost
64
+ * lock (`LockLostError`), it resolves false and the outcome is kept: once
65
+ * the work under every one of `locks` has ended, each lock is taken again
66
+ * (the same handles read as held again) and, after a fresh check:
67
+ *
68
+ * - with `later`, it runs whenever the locks are free. `later` re-reads the
69
+ * saved record, matches this attempt by its identity (its attempt or
70
+ * reservation id, never the whole record) and merges the outcome into the
71
+ * latest record, so another tab's unrelated update meanwhile stays;
72
+ * - without, `write()` runs again only if no other tab took the locks since,
73
+ * so it can't touch a newer attempt's record.
74
+ *
75
+ * If any lock can't be taken back, or the write fails, the record stays as
76
+ * the lost lock left it and its recovery shows. `settled` is told once
77
+ * whether a kept outcome was applied in the end (a claim it consumed is
78
+ * then made for good, or given back so it stays retryable); one written
79
+ * at once resolves true without it.
80
+ *
81
+ * Any lock {@link fencedLocks} or {@link browserLocks} handed out is kept
82
+ * this way: a native one once its work ended, a lease also once it lapsed.
83
+ * Any other failure of `write` throws, as does a lost lock that isn't one.
84
+ */
85
+ export declare function keepOutcome(locks: readonly LockHandle[] | undefined, write: () => unknown, later?: () => unknown, settled?: (applied: boolean) => unknown): Promise<boolean>;
33
86
  /** What {@link BrowserLocks} runs under the lock: `null` when `ifAvailable` found it taken. */
34
87
  export type LockWork<T> = (lock: LockHandle | null) => T | PromiseLike<T>;
35
88
  /**
@@ -42,15 +95,43 @@ export type BrowserLocks = {
42
95
  };
43
96
  type AnyLocks = Pick<LockManager, "request">;
44
97
  /**
45
- * Any Web Locks manager (`navigator.locks`, a test's) handing a
46
- * {@link LockHandle}: a handle it hands already passes through; any other
47
- * lock is never lost while its work runs.
98
+ * Any Web Locks manager (`navigator.locks`, a test's, the SDK's own) handing
99
+ * a {@link LockHandle}: one it hands already is read through; any other
100
+ * lock is never lost while its work runs. Each handle keeps the outcomes
101
+ * {@link keepOutcome} refused for it, the same for every backend, and
102
+ * stamps who took the lock last.
48
103
  */
49
104
  export declare function fencedLocks(locks: AnyLocks | BrowserLocks | RawLocks): BrowserLocks;
50
105
  type RawWork<T> = (lock: LockHandle | null) => Promise<T>;
51
- type RawLocks = {
106
+ export type RawLocks = {
52
107
  request<T>(name: string, options: LockOptions, work: RawWork<T>): Promise<T>;
53
108
  };
109
+ /** Writes one at a time per name within one tab, queued in `queues`. */
110
+ declare function tabLocksOn(queues: Map<string, Promise<void>>): RawLocks;
111
+ export declare const LEASE_MS = 15000;
112
+ type Lease = {
113
+ owner: string;
114
+ expires: number;
115
+ };
116
+ type Claim = "take" | "renew";
117
+ /** Where the origin's leases live: each call one atomic compare-and-set. */
118
+ export type LeaseStore = {
119
+ claim(name: string, owner: string, claim: Claim): Promise<boolean>;
120
+ read(name: string): Promise<Lease | undefined>;
121
+ drop(name: string, owner: string): Promise<void>;
122
+ };
123
+ export declare function idbLeases(factory: IDBFactory, now: () => number): () => Promise<LeaseStore>;
124
+ /**
125
+ * The origin's leases in memory, for tests: each call answers a task later,
126
+ * as IndexedDB's transactions do.
127
+ */
128
+ export declare function memoryLeases(now: () => number): LeaseStore;
129
+ /**
130
+ * Locks over the origin's `leases`, one at a time per name within the tab
131
+ * (`tab`), its clock `now`.
132
+ */
133
+ export declare function leaseLocks(leases: () => Promise<LeaseStore>, tab?: RawLocks, now?: () => number): RawLocks;
134
+ export { tabLocksOn };
54
135
  /**
55
136
  * The browser's Web Locks. Where a browser or wallet webview has none, an
56
137
  * IndexedDB lease shared by the origin's tabs (one transaction, no visible
@@ -65,5 +146,4 @@ type RawLocks = {
65
146
  * narrows that window to the time between the check and the write.
66
147
  */
67
148
  export declare function browserLocks(): BrowserLocks;
68
- export {};
69
149
  //# sourceMappingURL=locks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/review/locks.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,qBAAa,aAAc,SAAQ,KAAK;IAG1B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAFjC,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,IAAI,eAAe;gBACP,IAAI,EAAE,MAAM;CAGlC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,2DAA2D;IAC3D,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,oDAAoD;IACpD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GACrE,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,+FAA+F;AAC/F,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CACxB,CAAC;AAEF,KAAK,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAiC7C;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,GACxC,YAAY,CAkBd;AAED,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1D,KAAK,QAAQ,GAAG;IACd,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9E,CAAC;AAwKF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAa3C"}
1
+ {"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/review/locks.ts"],"names":[],"mappings":"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"}