@bananapus/nana-sdk-core 6.2.0 → 6.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/review/confirming.d.ts +8 -0
- package/dist/cjs/review/confirming.d.ts.map +1 -0
- package/dist/cjs/review/confirming.js +11 -0
- package/dist/cjs/review/confirming.js.map +1 -0
- package/dist/cjs/review/locks.d.ts +87 -7
- package/dist/cjs/review/locks.d.ts.map +1 -1
- package/dist/cjs/review/locks.js +328 -79
- package/dist/cjs/review/locks.js.map +1 -1
- package/dist/cjs/review/messages.d.ts +16 -0
- package/dist/cjs/review/messages.d.ts.map +1 -1
- package/dist/cjs/review/messages.js +17 -1
- package/dist/cjs/review/messages.js.map +1 -1
- package/dist/cjs/review/react/ownership.d.ts +30 -0
- package/dist/cjs/review/react/ownership.d.ts.map +1 -0
- package/dist/cjs/review/react/ownership.js +27 -0
- package/dist/cjs/review/react/ownership.js.map +1 -0
- package/dist/cjs/review/react/useReviewedRun.d.ts +3 -1
- package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -1
- package/dist/cjs/review/react/useReviewedRun.js +428 -50
- package/dist/cjs/review/react/useReviewedRun.js.map +1 -1
- package/dist/cjs/review/relayrSend.d.ts +16 -1
- package/dist/cjs/review/relayrSend.d.ts.map +1 -1
- package/dist/cjs/review/relayrSend.js +25 -2
- package/dist/cjs/review/relayrSend.js.map +1 -1
- package/dist/cjs/review/safeRelayr.d.ts +2 -1
- package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
- package/dist/cjs/review/safeRelayr.js +23 -29
- package/dist/cjs/review/safeRelayr.js.map +1 -1
- package/dist/cjs/review/send.d.ts +31 -12
- package/dist/cjs/review/send.d.ts.map +1 -1
- package/dist/cjs/review/send.js +191 -41
- package/dist/cjs/review/send.js.map +1 -1
- package/dist/cjs/review/sequence.d.ts +25 -0
- package/dist/cjs/review/sequence.d.ts.map +1 -1
- package/dist/cjs/review/sequence.js +45 -7
- package/dist/cjs/review/sequence.js.map +1 -1
- package/dist/cjs/review/tabState.d.ts +4 -0
- package/dist/cjs/review/tabState.d.ts.map +1 -1
- package/dist/cjs/review/tabState.js +4 -0
- package/dist/cjs/review/tabState.js.map +1 -1
- package/dist/cjs/review/wallet.d.ts.map +1 -1
- package/dist/cjs/review/wallet.js +3 -1
- package/dist/cjs/review/wallet.js.map +1 -1
- package/dist/cjs/review/writeHold.d.ts +74 -11
- package/dist/cjs/review/writeHold.d.ts.map +1 -1
- package/dist/cjs/review/writeHold.js +65 -16
- package/dist/cjs/review/writeHold.js.map +1 -1
- package/dist/cjs/review/writeRecovery.d.ts +31 -6
- package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
- package/dist/cjs/review/writeRecovery.js +120 -7
- package/dist/cjs/review/writeRecovery.js.map +1 -1
- package/dist/cjs/testing.d.ts +13 -0
- package/dist/cjs/testing.d.ts.map +1 -1
- package/dist/cjs/testing.js +21 -0
- package/dist/cjs/testing.js.map +1 -1
- package/dist/esm/review/confirming.d.ts +8 -0
- package/dist/esm/review/confirming.d.ts.map +1 -0
- package/dist/esm/review/confirming.js +8 -0
- package/dist/esm/review/confirming.js.map +1 -0
- package/dist/esm/review/locks.d.ts +87 -7
- package/dist/esm/review/locks.d.ts.map +1 -1
- package/dist/esm/review/locks.js +321 -78
- package/dist/esm/review/locks.js.map +1 -1
- package/dist/esm/review/messages.d.ts +16 -0
- package/dist/esm/review/messages.d.ts.map +1 -1
- package/dist/esm/review/messages.js +16 -0
- package/dist/esm/review/messages.js.map +1 -1
- package/dist/esm/review/react/ownership.d.ts +30 -0
- package/dist/esm/review/react/ownership.d.ts.map +1 -0
- package/dist/esm/review/react/ownership.js +24 -0
- package/dist/esm/review/react/ownership.js.map +1 -0
- package/dist/esm/review/react/useReviewedRun.d.ts +3 -1
- package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -1
- package/dist/esm/review/react/useReviewedRun.js +429 -51
- package/dist/esm/review/react/useReviewedRun.js.map +1 -1
- package/dist/esm/review/relayrSend.d.ts +16 -1
- package/dist/esm/review/relayrSend.d.ts.map +1 -1
- package/dist/esm/review/relayrSend.js +28 -5
- package/dist/esm/review/relayrSend.js.map +1 -1
- package/dist/esm/review/safeRelayr.d.ts +2 -1
- package/dist/esm/review/safeRelayr.d.ts.map +1 -1
- package/dist/esm/review/safeRelayr.js +24 -30
- package/dist/esm/review/safeRelayr.js.map +1 -1
- package/dist/esm/review/send.d.ts +31 -12
- package/dist/esm/review/send.d.ts.map +1 -1
- package/dist/esm/review/send.js +193 -43
- package/dist/esm/review/send.js.map +1 -1
- package/dist/esm/review/sequence.d.ts +25 -0
- package/dist/esm/review/sequence.d.ts.map +1 -1
- package/dist/esm/review/sequence.js +43 -7
- package/dist/esm/review/sequence.js.map +1 -1
- package/dist/esm/review/tabState.d.ts +4 -0
- package/dist/esm/review/tabState.d.ts.map +1 -1
- package/dist/esm/review/tabState.js +4 -0
- package/dist/esm/review/tabState.js.map +1 -1
- package/dist/esm/review/wallet.d.ts.map +1 -1
- package/dist/esm/review/wallet.js +3 -1
- package/dist/esm/review/wallet.js.map +1 -1
- package/dist/esm/review/writeHold.d.ts +74 -11
- package/dist/esm/review/writeHold.d.ts.map +1 -1
- package/dist/esm/review/writeHold.js +65 -16
- package/dist/esm/review/writeHold.js.map +1 -1
- package/dist/esm/review/writeRecovery.d.ts +31 -6
- package/dist/esm/review/writeRecovery.d.ts.map +1 -1
- package/dist/esm/review/writeRecovery.js +118 -7
- package/dist/esm/review/writeRecovery.js.map +1 -1
- package/dist/esm/testing.d.ts +13 -0
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js +20 -0
- package/dist/esm/testing.js.map +1 -1
- 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
|
-
|
|
2
|
-
|
|
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
|
|
46
|
-
* {@link LockHandle}:
|
|
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":"
|
|
1
|
+
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/review/locks.ts"],"names":[],"mappings":"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"}
|