@plane31/blind-relay 0.3.0 → 0.5.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.
- package/README.md +29 -1
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/client.d.ts +33 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +76 -13
- package/dist/client.js.map +1 -1
- package/dist/crypto/sodium.d.ts.map +1 -1
- package/dist/crypto/sodium.js +3 -33
- package/dist/crypto/sodium.js.map +1 -1
- package/dist/crypto/sodiumLike.d.ts +39 -0
- package/dist/crypto/sodiumLike.d.ts.map +1 -0
- package/dist/crypto/sodiumLike.js +142 -0
- package/dist/crypto/sodiumLike.js.map +1 -0
- package/dist/errors.d.ts +6 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -1
- package/dist/errors.js.map +1 -1
- package/dist/inbox.d.ts +4 -0
- package/dist/inbox.d.ts.map +1 -1
- package/dist/inbox.js +22 -14
- package/dist/inbox.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/outbox.d.ts +5 -0
- package/dist/outbox.d.ts.map +1 -1
- package/dist/outbox.js +6 -3
- package/dist/outbox.js.map +1 -1
- package/dist/testing/faults.d.ts +5 -0
- package/dist/testing/faults.d.ts.map +1 -1
- package/dist/testing/faults.js +13 -0
- package/dist/testing/faults.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/index.ts +6 -0
- package/src/client.ts +107 -13
- package/src/crypto/sodium.ts +4 -33
- package/src/crypto/sodiumLike.ts +169 -0
- package/src/errors.ts +6 -1
- package/src/inbox.ts +24 -13
- package/src/index.ts +2 -1
- package/src/outbox.ts +9 -3
- package/src/testing/faults.ts +17 -0
package/README.md
CHANGED
|
@@ -13,10 +13,38 @@ pnpm add @plane31/blind-relay
|
|
|
13
13
|
- `@plane31/blind-relay`: `open` and the `Client` with `enqueue`, `newest`, `historyPage`, `sync`, the circles API, `subscribe` and `inspect`; the `KindDeclaration` and `RetentionPolicy` a product passes to `open`; `KavachError` and `ErrorCode`; the `RecoveryProvider` contract; `toHex`, `fromHex` and `equalBytes`.
|
|
14
14
|
- `@plane31/blind-relay/adapters`: the `Store`, `Tx`, `SecretStore`, `Transport`, `Directory` and `Relay` contracts an adapter or host implements, with the table and row types; `MemoryStore` and `MemorySecretStore` as the behavioural reference; the signed-document codec a host verifies with; `buildResetKeyList` and `buildResetReceipt` for a host's key tooling.
|
|
15
15
|
- `@plane31/blind-relay/testing`: the fault harness (a fake host, a crashing store, a malicious transport, the crash and lost-response sweeps) and the fixtures a test builds protocol state with.
|
|
16
|
-
- `@plane31/blind-relay/sodium`: the optional libsodium backend for Node
|
|
16
|
+
- `@plane31/blind-relay/sodium`: the optional libsodium backend for Node (wasm). The default backend is portable JavaScript; `sodiumBackend(sodium)` from the adapters entry builds the libsodium backend over any object with libsodium's API, which is how a phone runs the cipher suite natively (`@plane31/blind-relay-expo` wires `react-native-libsodium` through `openKavach`'s `crypto` option).
|
|
17
17
|
|
|
18
18
|
Randomness comes from the Web Crypto global. A runtime without one (Hermes) installs it first; `@plane31/blind-relay-expo` does that from `expo-crypto`.
|
|
19
19
|
|
|
20
|
+
## Using it well
|
|
21
|
+
|
|
22
|
+
**A heartbeat is an empty record of a slot kind.** To say "still here" without publishing anything, declare a kind with `queue: "latestWins"`, `history: false`, `newest: true` and `headerClass: 2` (silent: no notification, no wake-up), and enqueue it with an empty payload. It is still end-to-end encrypted and peer-authenticated, costs about 160 bytes on the wire, collapses in the outbox when several are queued, is kept as one slot row per author on the reader with no history, and is deleted by the relay once every reader has it. There is no separate presence primitive, on purpose: anything peers could not authenticate would be the first such thing in the protocol.
|
|
23
|
+
|
|
24
|
+
**High-frequency transient signals are slot kinds too.** Live position, speed, heading, battery: declare the kind `latestWins` with `history: false`, and only the newest frame per author is stored; the relay keeps a frame only until every reader has it. Nothing in the host needs to overwrite records in place, and nothing could, since the relay cannot open them or know who already holds one. The record counter stays monotonic because replay protection depends on it; it costs nothing.
|
|
25
|
+
|
|
26
|
+
**Short background windows.** `sync({ catchUp: { maxRecords, maxMs }, skipMaintenance: true })` reads within a budget and leaves the retention purge, the periodic reset-key-list re-check and the recovery-key re-save to the next foreground sync (`report.maintenance` says which). `syncUntilDrained({ maxRounds, maxMs, skipMaintenance })` runs rounds within a soft time bound and says why it stopped. `report.timings` gives wall-clock milliseconds per phase and the bytes moved, so a budget overrun can be attributed. Opening the encrypted store in a fresh background context is the platform's cost, not the SDK's; measure it separately.
|
|
27
|
+
|
|
28
|
+
**What to do on each error.** `KavachError.code` is a closed union and `retryable` says whether the same call may succeed later unchanged; `stage` is for logs, never for branching.
|
|
29
|
+
|
|
30
|
+
| Code | Meaning | What the app does |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| `NETWORK` | The host could not be reached or did not answer in time | Nothing now; retry on the next wake |
|
|
33
|
+
| `RATE_LIMITED` | The host asked for a pause; `retryAfterMs` says how long when it said | Back off at least that long |
|
|
34
|
+
| `LOCKED` | Another context holds the store, or a background task found no storage key yet | Retry later; the foreground provisions the key |
|
|
35
|
+
| `CLOSED` | The client was closed | Open a new one |
|
|
36
|
+
| `SUPERSEDED_DEVICE` | Another phone is the account's device now; the state is `retired` | Sign the user out of this phone; offer to set it up again |
|
|
37
|
+
| `ACCOUNT_RECOVERY_REQUIRED` | No account on this device, or recovery found nothing | Enroll, restore (continuity) or replace (recovery) |
|
|
38
|
+
| `AUTHORIZATION_REQUIRED` | The host refused the replacement authorization | Obtain a fresh one for the same proposal (`replaceDevice` does this) |
|
|
39
|
+
| `REPLACEMENT_CONFLICT` | The account moved under the proposal | Fresh sign-in, then `replaceDevice` again |
|
|
40
|
+
| `SUCCESSION_PENDING` | The replacement's outcome is unknown | Call again with the same proposal |
|
|
41
|
+
| `METADATA_REQUIRED`, `KEY_PENDING`, `RESET_KEYS_REQUIRED` | Something the host has not served yet | Nothing; the next sync retries |
|
|
42
|
+
| `ROTATION_REQUIRED`, `QUEUE_FULL` | The outbox cannot take this record now | Sync, then enqueue again |
|
|
43
|
+
| `EQUIVOCATION`, `ROLLBACK`, `BAD_SIGNATURE`, `ACCOUNT_KEY_CHANGED` | The host or a peer served something that does not verify | Show the security notice the profile defines; do not retry blindly |
|
|
44
|
+
| `RECOVERY_REQUIRED` | The local store and the secret store no longer match | Erase the account from the device and set it up again |
|
|
45
|
+
|
|
46
|
+
Waiting on another person is not an error: `ClientState.waitingFor` lists authors whose current epoch has not reached this device yet, and the `waiting` event fires as it happens.
|
|
47
|
+
|
|
20
48
|
## Development
|
|
21
49
|
|
|
22
50
|
```
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export { Reader, Writer, compareBytes, concat, equalBytes, fromHex, toHex, u16, u32, u64 } from "../bytes.js";
|
|
11
11
|
export { bodyHash, identityId, randomBytes, ready, recordId, signingKeypairFromSeed, streamId, type SigningKeypair } from "../crypto.js";
|
|
12
|
+
export { nobleBackend } from "../crypto/noble.js";
|
|
13
|
+
export { backendName } from "../crypto.js";
|
|
14
|
+
export { buildSodiumBackend, sodiumBackend, type SodiumBackendReport, type SodiumLike } from "../crypto/sodiumLike.js";
|
|
15
|
+
export type { CryptoBackend } from "../crypto/backend.js";
|
|
12
16
|
export { KavachError, isKavachError, type ErrorCode } from "../errors.js";
|
|
13
17
|
export { DocumentType, buildResetKeyList, buildResetReceipt, buildSuccession, expectType, parseDocument, parseVaultHeader, verifyDocument, type AccountDevice, type AccountResetReceipt, type AccountSuccession, type CircleSnapshot, type EncryptedRecord, type EpochManifest, type Parsed, type ResetKeyEntry, type ResetKeyList, type SignedDocument, type VaultHeader } from "../codec.js";
|
|
14
18
|
export { MemorySecretStore, MemoryStore, invokeSync, type ActivationRow, type CertificateRow, type CircleRow, type ClockRow, type EpochRow, type EpochStatus, type HistoryRow, type NewestRow, type MemoryStoreOptions, type MetaRow, type OutboxRow, type OutboxStatus, type EnqueueKeyRow, type HistoryIndexRow, type SuccessionRow, type IdentityRow, type KeyChangeRow, type ReplacementRow, type PreferenceRow, type ChainProgressRow, type KeyRange, inKeyRange, type PendingResetRow, type PinRow, type QuarantineRow, type ReaderEpochRow, type ResetListRow, type ResetReceiptRow, type RevisionRow, type SecretName, type SecretStore, type SelfRow, type Store, type StoreState, type StreamRow, type SubscriptionRow, type TableName, type Tables, type Tx, type UnresolvedRow, type VaultRow } from "../store.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAG9G,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAGzI,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,EAAE,EACP,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/I,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAG9G,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAGzI,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACvH,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,EAAE,EACP,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/I,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -11,6 +11,11 @@
|
|
|
11
11
|
export { Reader, Writer, compareBytes, concat, equalBytes, fromHex, toHex, u16, u32, u64 } from "../bytes.js";
|
|
12
12
|
// Cipher suite: readiness, randomness and the identifiers a host derives --------------------------
|
|
13
13
|
export { bodyHash, identityId, randomBytes, ready, recordId, signingKeypairFromSeed, streamId } from "../crypto.js";
|
|
14
|
+
// Cipher-suite backends: the portable one, and a libsodium one over any object with libsodium's API
|
|
15
|
+
// (a native binding on a phone). `setCryptoBackend` is on the main entry.
|
|
16
|
+
export { nobleBackend } from "../crypto/noble.js";
|
|
17
|
+
export { backendName } from "../crypto.js";
|
|
18
|
+
export { buildSodiumBackend, sodiumBackend } from "../crypto/sodiumLike.js";
|
|
14
19
|
// Errors -------------------------------------------------------------------------------------------
|
|
15
20
|
export { KavachError, isKavachError } from "../errors.js";
|
|
16
21
|
// Signed documents, as a host or transport sees them ----------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,qGAAqG;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE9G,oGAAoG;AACpG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,QAAQ,EAAuB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,qGAAqG;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE9G,oGAAoG;AACpG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,QAAQ,EAAuB,MAAM,cAAc,CAAC;AACzI,oGAAoG;AACpG,0EAA0E;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAA6C,MAAM,yBAAyB,CAAC;AAGvH,qGAAqG;AACrG,OAAO,EAAE,WAAW,EAAE,aAAa,EAAkB,MAAM,cAAc,CAAC;AAE1E,oGAAoG;AACpG,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EAYf,MAAM,aAAa,CAAC;AAErB,qGAAqG;AACrG,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,UAAU,EAsBV,UAAU,EAoBX,MAAM,aAAa,CAAC;AAyBrB,oGAAoG;AACpG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAuC,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -268,6 +268,7 @@ export type ReplaceDeviceResult = {
|
|
|
268
268
|
};
|
|
269
269
|
export interface DrainOptions {
|
|
270
270
|
readonly catchUp?: SyncOptions["catchUp"];
|
|
271
|
+
readonly skipMaintenance?: boolean;
|
|
271
272
|
/** Rounds at most. Default 10. */
|
|
272
273
|
readonly maxRounds?: number;
|
|
273
274
|
/** A soft bound in milliseconds across every round: no round starts past it and each round's reading budget is the time left, but a transport call already in flight ends on its own timeout. Default 30,000. */
|
|
@@ -283,7 +284,9 @@ export type DrainStop =
|
|
|
283
284
|
/** Progress needs an authorization or a sign-in (a prepared replacement, an account to recover). */
|
|
284
285
|
| "authentication"
|
|
285
286
|
/** Nothing more is reported, but a round could not read its inbox fully (discovery or a stream failed), so emptiness is not established. */
|
|
286
|
-
| "incomplete"
|
|
287
|
+
| "incomplete"
|
|
288
|
+
/** The host asked for a pause; `remaining.retryAfterMs` says how long, and the product schedules the next attempt. */
|
|
289
|
+
| "rateLimited" | "closed";
|
|
287
290
|
/** The merged report of every round, with why the loop stopped and what remains. */
|
|
288
291
|
export interface DrainReport extends SyncReport {
|
|
289
292
|
readonly rounds: number;
|
|
@@ -297,6 +300,8 @@ export interface DrainReport extends SyncReport {
|
|
|
297
300
|
readonly chainsIncomplete: number;
|
|
298
301
|
/** Authors whose current epoch has not reached this device: nothing to do but wait for them. */
|
|
299
302
|
readonly waitingFor: number;
|
|
303
|
+
/** On `rateLimited`: the longest wait the host asked for in the last round, when it said one. */
|
|
304
|
+
readonly retryAfterMs?: number;
|
|
300
305
|
};
|
|
301
306
|
}
|
|
302
307
|
export interface SyncOptions {
|
|
@@ -310,6 +315,12 @@ export interface SyncOptions {
|
|
|
310
315
|
readonly maxRecords?: number;
|
|
311
316
|
readonly maxMs?: number;
|
|
312
317
|
};
|
|
318
|
+
/**
|
|
319
|
+
* Leave the housekeeping to a later sync: the retention purge, the periodic re-check of the
|
|
320
|
+
* reset-key list (a stale list is still fetched, since verification needs it) and the
|
|
321
|
+
* recovery-key re-save. For a short background window; the report says `maintenance: "skipped"`.
|
|
322
|
+
*/
|
|
323
|
+
readonly skipMaintenance?: boolean;
|
|
313
324
|
}
|
|
314
325
|
export declare const DEFAULT_CATCH_UP: {
|
|
315
326
|
readonly maxRecords: 500;
|
|
@@ -342,14 +353,33 @@ export interface SyncReport {
|
|
|
342
353
|
hasMore: boolean;
|
|
343
354
|
};
|
|
344
355
|
purged: number;
|
|
356
|
+
/** Whether this sync did its housekeeping (purge, list re-check, key re-save) or left it to a later one. */
|
|
357
|
+
maintenance: "done" | "skipped";
|
|
345
358
|
/** Present while account recovery discovers circles through the host: pinned, pending and failed on this sync. */
|
|
346
359
|
bootstrap?: {
|
|
347
360
|
circles: number;
|
|
348
361
|
pending: number;
|
|
349
362
|
failed: number;
|
|
350
363
|
};
|
|
364
|
+
/** Wall-clock milliseconds per phase and record bytes moved, for diagnostics (section 14: counts and durations only). */
|
|
365
|
+
timings: SyncTimings;
|
|
351
366
|
errors: SyncError[];
|
|
352
367
|
}
|
|
368
|
+
export interface SyncTimings {
|
|
369
|
+
resume: number;
|
|
370
|
+
bootstrap: number;
|
|
371
|
+
metadata: number;
|
|
372
|
+
preferences: number;
|
|
373
|
+
epoch: number;
|
|
374
|
+
outbox: number;
|
|
375
|
+
inbox: number;
|
|
376
|
+
maintenance: number;
|
|
377
|
+
total: number;
|
|
378
|
+
/** Record bytes handed to the relay. */
|
|
379
|
+
bytesSent: number;
|
|
380
|
+
/** Record bytes read from the relay. */
|
|
381
|
+
bytesReceived: number;
|
|
382
|
+
}
|
|
353
383
|
/** What `prepareReplacement()` returns: everything the product hands to the host for authorization. All public. */
|
|
354
384
|
export interface ReplacementProposal {
|
|
355
385
|
readonly successionId: Uint8Array;
|
|
@@ -385,6 +415,8 @@ export interface SyncError {
|
|
|
385
415
|
readonly authorIdentityId?: Uint8Array;
|
|
386
416
|
/** On a `bootstrap` entry: the circle that could not be adopted on this sync; it is retried by the next. */
|
|
387
417
|
readonly circleId?: Uint8Array;
|
|
418
|
+
/** On a `RATE_LIMITED` entry: the wait the host asked for, when it said. */
|
|
419
|
+
readonly retryAfterMs?: number;
|
|
388
420
|
}
|
|
389
421
|
export declare function open(options: OpenOptions): Promise<Client>;
|
|
390
422
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0G,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACvJ,OAAO,EAA8I,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAGzL,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAA2I,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/Q,OAAO,EAA0D,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7H,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,2GAA2G;AAC3G,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AACD,OAAO,EAA+D,KAAK,gBAAgB,EAAwB,MAAM,aAAa,CAAC;AACvI,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,KAAK,EAA0E,WAAW,EAAE,KAAK,EAAgB,MAAM,YAAY,CAAC;AAG3I,OAAO,KAAK,EAAmC,eAAe,EAAkB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAClH,OAAO,EAAuG,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAmB,MAAM,YAAY,CAAC;AAEpM,kFAAkF;AAClF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqBjG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,qBAAqB,GAAG,OAAO,GAAG,QAAQ,GAAG,yBAAyB,GAAG,mBAAmB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;AACzK,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAMrE,+GAA+G;AAC/G,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,eAAe,GAAG,UAAU,CAKhE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAC5C,yFAAyF;IACzF,QAAQ,CAAC,aAAa,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,UAAU,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;CAC5C;AAED,4FAA4F;AAC5F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/C,0EAA0E;IAC1E,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,2GAA2G;IAC3G,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IACvL,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;IACpG,QAAQ,CAAC,eAAe,EAAE,UAAU,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;CAC/G;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACvE,uIAAuI;GACrI;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAE;AAC5C,oHAAoH;GAClH;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,gBAAgB,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACvH;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;CAAE,GAChG;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,8MAA8M;IAC9M,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,gHAAgH;IAChH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACzE;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,iBAAiB,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IACzD,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAChD,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/F;;;;OAIG;IACH,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7I,oFAAoF;IACpF,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5F;;;;;;;OAOG;IACH,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3E;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/D,+GAA+G;IAC/G,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjG,gJAAgJ;IAChJ,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClD,kDAAkD;IAClD,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,2FAA2F;IAC3F,WAAW,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxD,gGAAgG;IAChG,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IACxG,oHAAoH;IACpH,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9E,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE;QAChB,MAAM,IAAI,OAAO,CAAC;YAAE,QAAQ,EAAE,UAAU,CAAA;SAAE,CAAC,CAAC;QAC5C,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACvH,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,GAAG,OAAO,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC1F,KAAK,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAClE,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;KAC3C,CAAC;IACF,YAAY,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAC1G;;;;;OAKG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,kIAAkI;IAClI,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;IAC9F,6FAA6F;IAC7F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAChG,gGAAgG;GAC9F;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE;AACxE,wHAAwH;GACtH;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE;AACjF,mGAAmG;GACjG;IAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAElF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,iNAAiN;IACjN,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,SAAS;AACnB,mDAAmD;AACjD,SAAS,GACT,WAAW,GACX,OAAO;AACT,8EAA8E;GAC5E,YAAY;AACd,kGAAkG;GAChG,UAAU;AACZ,oGAAoG;GAClG,gBAAgB;AAClB,4IAA4I;GAC1I,YAAY;AACd,sHAAsH;GACpH,aAAa,GACb,QAAQ,CAAC;AAEb,oFAAoF;AACpF,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE;QAClB,8HAA8H;QAC9H,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3C,kEAAkE;QAClE,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;QACtC,2GAA2G;QAC3G,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,gGAAgG;QAChG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,iGAAiG;QACjG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,eAAO,MAAM,gBAAgB;;;CAA6C,CAAC;AAE3E,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACnI,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9F,iHAAiH;IACjH,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACjH,MAAM,EAAE,MAAM,CAAC;IACf,4GAA4G;IAC5G,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,kHAAkH;IAClH,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,yHAAyH;IACzH,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,mHAAmH;AACnH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,UAAU,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;CAClC;AAED,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wIAAwI;AACxI,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,oBAAoB,GAAG,YAAY,CAAC;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC;IACvC,4GAA4G;IAC5G,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAUD,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
|
package/dist/client.js
CHANGED
|
@@ -50,8 +50,16 @@ export function resolvedAccountId(r) {
|
|
|
50
50
|
return pinFromCertificate(doc).identityId;
|
|
51
51
|
}
|
|
52
52
|
export const DEFAULT_CATCH_UP = { maxRecords: 500, maxMs: 5_000 };
|
|
53
|
+
const emptyTimings = () => ({ resume: 0, bootstrap: 0, metadata: 0, preferences: 0, epoch: 0, outbox: 0, inbox: 0, maintenance: 0, total: 0, bytesSent: 0, bytesReceived: 0 });
|
|
54
|
+
/** A monotonic wall clock for durations; the protocol clock (`now`) is not used, since a test drives it by hand. */
|
|
55
|
+
const wall = () => {
|
|
56
|
+
const g = globalThis;
|
|
57
|
+
return typeof g.performance?.now === "function" ? g.performance.now() : Date.now();
|
|
58
|
+
};
|
|
53
59
|
function syncError(operation, e, extra = {}) {
|
|
54
|
-
return e instanceof KavachError
|
|
60
|
+
return e instanceof KavachError
|
|
61
|
+
? { operation, code: e.code, stage: e.stage, retryable: e.retryable, ...(e.retryAfterMs === undefined ? {} : { retryAfterMs: e.retryAfterMs }), ...extra }
|
|
62
|
+
: { operation, code: "UNEXPECTED", stage: operation, retryable: false, ...extra };
|
|
55
63
|
}
|
|
56
64
|
const RESET_LIST_RECHECK_MS = 86400000n;
|
|
57
65
|
export async function open(options) {
|
|
@@ -718,6 +726,8 @@ class ClientImpl {
|
|
|
718
726
|
outbox: { sent: 0, accepted: 0, cancelled: 0, unknown: 0, retry: 0 },
|
|
719
727
|
inbox: { streams: 0, stored: 0, keyPending: 0, invalid: 0, acked: 0, hasMore: false },
|
|
720
728
|
purged: 0,
|
|
729
|
+
maintenance: options.skipMaintenance ? "skipped" : "done",
|
|
730
|
+
timings: emptyTimings(),
|
|
721
731
|
errors: []
|
|
722
732
|
};
|
|
723
733
|
let rounds = 0;
|
|
@@ -743,7 +753,7 @@ class ClientImpl {
|
|
|
743
753
|
break;
|
|
744
754
|
}
|
|
745
755
|
const roundMs = Math.max(0, Math.min(remainingMs, options.catchUp?.maxMs ?? DEFAULT_CATCH_UP.maxMs));
|
|
746
|
-
const r = await this.sync({ catchUp: { maxMs: roundMs, ...(options.catchUp?.maxRecords !== undefined ? { maxRecords: options.catchUp.maxRecords } : {}) } });
|
|
756
|
+
const r = await this.sync({ catchUp: { maxMs: roundMs, ...(options.catchUp?.maxRecords !== undefined ? { maxRecords: options.catchUp.maxRecords } : {}) }, ...(options.skipMaintenance ? { skipMaintenance: true } : {}) });
|
|
747
757
|
rounds++;
|
|
748
758
|
last = r;
|
|
749
759
|
// The round's work counts whether or not it was the last: what it accepted, stored and failed
|
|
@@ -758,6 +768,8 @@ class ClientImpl {
|
|
|
758
768
|
merged.inbox.invalid += r.inbox.invalid;
|
|
759
769
|
merged.inbox.acked += r.inbox.acked;
|
|
760
770
|
merged.purged += r.purged;
|
|
771
|
+
for (const k of Object.keys(merged.timings))
|
|
772
|
+
merged.timings[k] += r.timings[k];
|
|
761
773
|
merged.epoch = r.epoch;
|
|
762
774
|
merged.errors.push(...r.errors);
|
|
763
775
|
if (r.bootstrap)
|
|
@@ -767,6 +779,11 @@ class ClientImpl {
|
|
|
767
779
|
stop = "closed";
|
|
768
780
|
break;
|
|
769
781
|
}
|
|
782
|
+
if (r.errors.some((e) => e.code === "RATE_LIMITED")) {
|
|
783
|
+
// The host asked for a pause: no further round now; the wait goes back to the product.
|
|
784
|
+
stop = "rateLimited";
|
|
785
|
+
break;
|
|
786
|
+
}
|
|
770
787
|
const bootstrapIncomplete = (await this.inspect()).bootstrap?.complete === false;
|
|
771
788
|
const currentChains = await chains();
|
|
772
789
|
const more = r.inbox.hasMore || bootstrapIncomplete || currentChains.size > 0;
|
|
@@ -801,18 +818,42 @@ class ClientImpl {
|
|
|
801
818
|
const bootstrapIncomplete = this.closed ? false : (await this.inspect()).bootstrap?.complete === false;
|
|
802
819
|
const chainsIncomplete = this.closed ? previousChains.size : (await chains()).size;
|
|
803
820
|
const waitingFor = this.closed ? 0 : (await this.getState()).waitingFor.length;
|
|
804
|
-
const inboxHasMore = !last || inboxUncertain(last) || stop === "closed" ? "unknown" : merged.inbox.hasMore;
|
|
805
|
-
|
|
821
|
+
const inboxHasMore = !last || inboxUncertain(last) || stop === "closed" || stop === "rateLimited" ? "unknown" : merged.inbox.hasMore;
|
|
822
|
+
const waits = (last?.errors ?? []).flatMap((e) => (e.code === "RATE_LIMITED" && e.retryAfterMs !== undefined ? [e.retryAfterMs] : []));
|
|
823
|
+
const retryAfterMs = waits.length ? Math.max(...waits) : undefined;
|
|
824
|
+
return { ...merged, rounds, stoppedBecause: stop, remaining: { inboxHasMore, bootstrapIncomplete, chainsIncomplete, waitingFor, ...(retryAfterMs === undefined ? {} : { retryAfterMs }) } };
|
|
806
825
|
}
|
|
807
826
|
async runSync(options) {
|
|
827
|
+
const started = wall();
|
|
808
828
|
const report = {
|
|
809
829
|
metadata: { certificates: 0, snapshots: 0, rotations: 0, quarantined: 0, resets: 0, successions: 0 },
|
|
810
830
|
epoch: "unchanged",
|
|
811
831
|
outbox: { sent: 0, accepted: 0, cancelled: 0, unknown: 0, retry: 0 },
|
|
812
832
|
inbox: { streams: 0, stored: 0, keyPending: 0, invalid: 0, acked: 0, hasMore: false },
|
|
813
833
|
purged: 0,
|
|
834
|
+
maintenance: options.skipMaintenance ? "skipped" : "done",
|
|
835
|
+
timings: emptyTimings(),
|
|
814
836
|
errors: []
|
|
815
837
|
};
|
|
838
|
+
const maintain = !options.skipMaintenance;
|
|
839
|
+
let mark = started;
|
|
840
|
+
const phase = (name) => {
|
|
841
|
+
const now = wall();
|
|
842
|
+
report.timings[name] += now - mark;
|
|
843
|
+
mark = now;
|
|
844
|
+
};
|
|
845
|
+
const finish = () => {
|
|
846
|
+
report.timings.total = wall() - started;
|
|
847
|
+
return report;
|
|
848
|
+
};
|
|
849
|
+
try {
|
|
850
|
+
return await this.runSyncPhases(options, report, maintain, phase);
|
|
851
|
+
}
|
|
852
|
+
finally {
|
|
853
|
+
finish();
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
async runSyncPhases(options, report, maintain, phase) {
|
|
816
857
|
this.syncBudget = {
|
|
817
858
|
remainingRecords: Math.max(1, Math.floor(options.catchUp?.maxRecords ?? DEFAULT_CATCH_UP.maxRecords)),
|
|
818
859
|
deadline: this.now() + BigInt(Math.max(0, Math.floor(options.catchUp?.maxMs ?? DEFAULT_CATCH_UP.maxMs)))
|
|
@@ -832,6 +873,7 @@ class ClientImpl {
|
|
|
832
873
|
}
|
|
833
874
|
}
|
|
834
875
|
}
|
|
876
|
+
phase("resume");
|
|
835
877
|
if (!this.account || !this.selfPin)
|
|
836
878
|
return report;
|
|
837
879
|
const meta = await this.store.read((tx) => tx.get("meta", META));
|
|
@@ -862,7 +904,10 @@ class ClientImpl {
|
|
|
862
904
|
}
|
|
863
905
|
else if (meta.state !== "ACTIVE")
|
|
864
906
|
return report;
|
|
865
|
-
|
|
907
|
+
phase("resume");
|
|
908
|
+
if (maintain)
|
|
909
|
+
await this.ensureBackup();
|
|
910
|
+
phase("maintenance");
|
|
866
911
|
if (meta.bootstrap && !meta.bootstrap.complete) {
|
|
867
912
|
try {
|
|
868
913
|
report.bootstrap = await this.bootstrap(report, meta.bootstrap);
|
|
@@ -871,18 +916,21 @@ class ClientImpl {
|
|
|
871
916
|
report.errors.push(syncError("bootstrap", e));
|
|
872
917
|
}
|
|
873
918
|
}
|
|
919
|
+
phase("bootstrap");
|
|
874
920
|
try {
|
|
875
|
-
await this.syncMetadata(report);
|
|
921
|
+
await this.syncMetadata(report, maintain);
|
|
876
922
|
}
|
|
877
923
|
catch (e) {
|
|
878
924
|
report.errors.push(syncError("metadata", e));
|
|
879
925
|
}
|
|
926
|
+
phase("metadata");
|
|
880
927
|
try {
|
|
881
928
|
await this.pushPreferences(report);
|
|
882
929
|
}
|
|
883
930
|
catch (e) {
|
|
884
931
|
report.errors.push(syncError("preference", e));
|
|
885
932
|
}
|
|
933
|
+
phase("preferences");
|
|
886
934
|
const after = await this.store.read((tx) => tx.get("meta", META));
|
|
887
935
|
if (after?.state === "RETIRED" || this.closed)
|
|
888
936
|
return report;
|
|
@@ -892,14 +940,20 @@ class ClientImpl {
|
|
|
892
940
|
catch (e) {
|
|
893
941
|
report.errors.push(syncError("epoch", e));
|
|
894
942
|
}
|
|
943
|
+
phase("epoch");
|
|
895
944
|
if (this.closed)
|
|
896
945
|
return report;
|
|
897
946
|
try {
|
|
898
|
-
|
|
947
|
+
const drained = await drain(this.outboxDeps());
|
|
948
|
+
report.outbox = { sent: drained.sent, accepted: drained.accepted, cancelled: drained.cancelled, unknown: drained.unknown, retry: drained.retry };
|
|
949
|
+
report.timings.bytesSent += drained.bytes;
|
|
950
|
+
if (drained.blocked)
|
|
951
|
+
report.errors.push(syncError("outbox", drained.blocked)); // the records stay queued
|
|
899
952
|
}
|
|
900
953
|
catch (e) {
|
|
901
954
|
report.errors.push(syncError("outbox", e));
|
|
902
955
|
}
|
|
956
|
+
phase("outbox");
|
|
903
957
|
if (this.closed)
|
|
904
958
|
return report;
|
|
905
959
|
let subs = [];
|
|
@@ -923,10 +977,16 @@ class ClientImpl {
|
|
|
923
977
|
if (!known)
|
|
924
978
|
continue;
|
|
925
979
|
const r = await syncStream(this.inboxDeps(), s.streamId, s.authorIdentityId, budget);
|
|
926
|
-
|
|
980
|
+
// What landed counts, whether or not the stream then failed; a failed stream is not synced.
|
|
927
981
|
report.inbox.stored += r.stored;
|
|
928
982
|
report.inbox.keyPending += r.keyPending;
|
|
929
983
|
report.inbox.invalid += r.invalid;
|
|
984
|
+
report.timings.bytesReceived += r.bytes;
|
|
985
|
+
if (r.failure !== undefined) {
|
|
986
|
+
report.errors.push({ ...syncError("inbox", r.failure), streamId: s.streamId, authorIdentityId: s.authorIdentityId });
|
|
987
|
+
continue;
|
|
988
|
+
}
|
|
989
|
+
report.inbox.streams++;
|
|
930
990
|
if (r.acked !== undefined)
|
|
931
991
|
report.inbox.acked++;
|
|
932
992
|
if (r.hasMore)
|
|
@@ -936,11 +996,14 @@ class ClientImpl {
|
|
|
936
996
|
report.errors.push({ ...syncError("inbox", e), streamId: s.streamId, authorIdentityId: s.authorIdentityId });
|
|
937
997
|
}
|
|
938
998
|
}
|
|
939
|
-
|
|
999
|
+
phase("inbox");
|
|
1000
|
+
if (maintain)
|
|
1001
|
+
report.purged = (await purgeHistory(this.store, this.policy, this.now())) + (await purgeOutbox(this.store, this.policy, this.now()));
|
|
1002
|
+
phase("maintenance");
|
|
940
1003
|
await this.emitState();
|
|
941
1004
|
return report;
|
|
942
1005
|
}
|
|
943
|
-
async syncMetadata(report) {
|
|
1006
|
+
async syncMetadata(report, maintain = true) {
|
|
944
1007
|
const { pin } = this.requireAccount("sync");
|
|
945
1008
|
// Own account: has this device been superseded?
|
|
946
1009
|
const [me] = await this.transport.directory.resolveAccounts([this.accountName]);
|
|
@@ -963,9 +1026,9 @@ class ClientImpl {
|
|
|
963
1026
|
return;
|
|
964
1027
|
}
|
|
965
1028
|
}
|
|
966
|
-
// Reset-key list when due.
|
|
1029
|
+
// Reset-key list when due: always when stale (verification needs it), periodically unless maintenance is skipped.
|
|
967
1030
|
const now = this.now();
|
|
968
|
-
const due = !this.trust.fresh(now) || now - this.trust.state.timeHighWater >= RESET_LIST_RECHECK_MS;
|
|
1031
|
+
const due = !this.trust.fresh(now) || (maintain && now - this.trust.state.timeHighWater >= RESET_LIST_RECHECK_MS);
|
|
969
1032
|
if (due) {
|
|
970
1033
|
const wire = await this.transport.directory.getResetKeyList();
|
|
971
1034
|
if (wire) {
|
|
@@ -1722,7 +1785,7 @@ class ClientImpl {
|
|
|
1722
1785
|
const [resolved] = await this.transport.directory.resolveAccounts([accountName]);
|
|
1723
1786
|
if (!resolved)
|
|
1724
1787
|
throw new KavachError("METADATA_REQUIRED", "approve", "unknown account");
|
|
1725
|
-
const report = { metadata: { certificates: 0, snapshots: 0, rotations: 0, quarantined: 0, resets: 0, successions: 0 }, epoch: "unchanged", outbox: { sent: 0, accepted: 0, cancelled: 0, unknown: 0, retry: 0 }, inbox: { streams: 0, stored: 0, keyPending: 0, invalid: 0, acked: 0, hasMore: false }, purged: 0, errors: [] };
|
|
1788
|
+
const report = { metadata: { certificates: 0, snapshots: 0, rotations: 0, quarantined: 0, resets: 0, successions: 0 }, epoch: "unchanged", outbox: { sent: 0, accepted: 0, cancelled: 0, unknown: 0, retry: 0 }, inbox: { streams: 0, stored: 0, keyPending: 0, invalid: 0, acked: 0, hasMore: false }, purged: 0, maintenance: "done", timings: emptyTimings(), errors: [] };
|
|
1726
1789
|
await this.acceptMemberCertificate(resolved, report);
|
|
1727
1790
|
const requester = resolvedAccountId(resolved);
|
|
1728
1791
|
const pinned = await this.pinFor(requester);
|