@optimystic/db-core 0.22.0 → 0.24.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 +336 -336
- package/dist/src/cluster/structs.d.ts +39 -1
- package/dist/src/cluster/structs.d.ts.map +1 -1
- package/dist/src/cluster/structs.js +24 -0
- package/dist/src/cluster/structs.js.map +1 -1
- package/dist/src/collection/collection.d.ts +17 -0
- package/dist/src/collection/collection.d.ts.map +1 -1
- package/dist/src/collection/collection.js +24 -2
- package/dist/src/collection/collection.js.map +1 -1
- package/dist/src/collections/tree/tree.d.ts +5 -0
- package/dist/src/collections/tree/tree.d.ts.map +1 -1
- package/dist/src/collections/tree/tree.js +7 -0
- package/dist/src/collections/tree/tree.js.map +1 -1
- package/dist/src/network/i-peer-network.d.ts +16 -0
- package/dist/src/network/i-peer-network.d.ts.map +1 -1
- package/dist/src/network/struct.d.ts +39 -2
- package/dist/src/network/struct.d.ts.map +1 -1
- package/dist/src/network/struct.js +18 -0
- package/dist/src/network/struct.js.map +1 -1
- package/dist/src/testing/test-transactor.d.ts +95 -8
- package/dist/src/testing/test-transactor.d.ts.map +1 -1
- package/dist/src/testing/test-transactor.js +121 -8
- package/dist/src/testing/test-transactor.js.map +1 -1
- package/dist/src/transaction/transaction.d.ts +1 -1
- package/dist/src/transaction/transaction.js +1 -1
- package/dist/src/transactor/network-transactor.d.ts.map +1 -1
- package/dist/src/transactor/network-transactor.js +48 -13
- package/dist/src/transactor/network-transactor.js.map +1 -1
- package/dist/src/transactor/transactor-source.d.ts.map +1 -1
- package/dist/src/transactor/transactor-source.js +25 -2
- package/dist/src/transactor/transactor-source.js.map +1 -1
- package/package.json +1 -1
- package/src/cluster/membership.ts +85 -85
- package/src/cluster/structs.ts +43 -4
- package/src/cohort-topic/addressing.ts +120 -120
- package/src/cohort-topic/antidos/bootstrap-evidence-envelope.ts +253 -253
- package/src/cohort-topic/antidos/bootstrap-evidence.ts +106 -106
- package/src/cohort-topic/antidos/index.ts +5 -5
- package/src/cohort-topic/antidos/rate-limiter.ts +210 -210
- package/src/cohort-topic/antidos/replay-guard.ts +146 -146
- package/src/cohort-topic/antidos/topic-budget.ts +160 -160
- package/src/cohort-topic/antiflood/index.ts +2 -2
- package/src/cohort-topic/antiflood/invariants.ts +108 -108
- package/src/cohort-topic/antiflood/jitter.ts +117 -117
- package/src/cohort-topic/coldstart.ts +237 -237
- package/src/cohort-topic/dmax.ts +88 -88
- package/src/cohort-topic/gossip/bus.ts +254 -254
- package/src/cohort-topic/gossip/index.ts +3 -3
- package/src/cohort-topic/gossip/records.ts +45 -45
- package/src/cohort-topic/gossip/view.ts +91 -91
- package/src/cohort-topic/index.ts +20 -20
- package/src/cohort-topic/load/barometer.ts +134 -134
- package/src/cohort-topic/load/index.ts +1 -1
- package/src/cohort-topic/member-engine.ts +430 -430
- package/src/cohort-topic/membership/index.ts +3 -3
- package/src/cohort-topic/membership/publisher.ts +163 -163
- package/src/cohort-topic/membership/source.ts +41 -41
- package/src/cohort-topic/membership/verifier.ts +461 -461
- package/src/cohort-topic/ports.ts +157 -157
- package/src/cohort-topic/promotion.ts +405 -405
- package/src/cohort-topic/registration/bytes.ts +37 -37
- package/src/cohort-topic/registration/handoff.ts +154 -154
- package/src/cohort-topic/registration/index.ts +6 -6
- package/src/cohort-topic/registration/renewal.ts +495 -495
- package/src/cohort-topic/registration/sharding.ts +61 -61
- package/src/cohort-topic/registration/store.ts +81 -81
- package/src/cohort-topic/registration/types.ts +91 -91
- package/src/cohort-topic/ring-hash.ts +50 -50
- package/src/cohort-topic/service.ts +416 -416
- package/src/cohort-topic/sig/index.ts +2 -2
- package/src/cohort-topic/sig/payloads.ts +59 -59
- package/src/cohort-topic/sig/threshold.ts +64 -64
- package/src/cohort-topic/tiers.ts +74 -74
- package/src/cohort-topic/traffic.ts +233 -233
- package/src/cohort-topic/walk.ts +326 -326
- package/src/cohort-topic/willingness.ts +237 -237
- package/src/cohort-topic/wire/codec.ts +216 -216
- package/src/cohort-topic/wire/index.ts +18 -18
- package/src/cohort-topic/wire/payloads.ts +126 -126
- package/src/cohort-topic/wire/primitives.ts +188 -188
- package/src/cohort-topic/wire/types.ts +475 -475
- package/src/cohort-topic/wire/validate.ts +512 -512
- package/src/collection/collection-type-registry.ts +37 -37
- package/src/collection/collection.ts +25 -2
- package/src/collections/diary/diary.ts +68 -68
- package/src/collections/tree/readme.md +4 -0
- package/src/collections/tree/tree.ts +320 -312
- package/src/matchmaking/capability-filter.ts +45 -45
- package/src/matchmaking/config.ts +98 -98
- package/src/matchmaking/index.ts +21 -21
- package/src/matchmaking/multi-cohort-seeker.ts +234 -234
- package/src/matchmaking/provider.ts +123 -123
- package/src/matchmaking/query-eval.ts +105 -105
- package/src/matchmaking/seeker-walk.ts +127 -127
- package/src/matchmaking/seeker.ts +86 -86
- package/src/matchmaking/topic-anchor.ts +90 -90
- package/src/matchmaking/voting-quorum.ts +394 -394
- package/src/matchmaking/wire.ts +603 -603
- package/src/network/i-peer-network.ts +17 -0
- package/src/network/stale-failure.ts +43 -43
- package/src/network/struct.ts +41 -2
- package/src/network/types.ts +37 -37
- package/src/reactivity/backfill.ts +220 -220
- package/src/reactivity/backpressure.ts +191 -191
- package/src/reactivity/checkpoint.ts +308 -308
- package/src/reactivity/config.ts +172 -172
- package/src/reactivity/dedupe.ts +132 -132
- package/src/reactivity/forwarder.ts +87 -87
- package/src/reactivity/index.ts +34 -34
- package/src/reactivity/notification.ts +123 -123
- package/src/reactivity/policy.ts +79 -79
- package/src/reactivity/push-state.ts +310 -310
- package/src/reactivity/recover.ts +153 -153
- package/src/reactivity/replay-buffer.ts +141 -141
- package/src/reactivity/resume.ts +549 -549
- package/src/reactivity/rotation.ts +415 -415
- package/src/reactivity/subscriber.ts +132 -132
- package/src/reactivity/subscription.ts +66 -66
- package/src/reactivity/topic-anchor.ts +71 -71
- package/src/reactivity/verify.ts +73 -73
- package/src/reactivity/wire-validate.ts +13 -13
- package/src/reactivity/wire.ts +224 -224
- package/src/testing/async-wait.ts +65 -65
- package/src/testing/index.ts +2 -2
- package/src/testing/test-transactor.ts +638 -502
- package/src/transaction/errors.ts +91 -91
- package/src/transaction/operations-hash.ts +196 -196
- package/src/transaction/read-dependency-collector.ts +78 -78
- package/src/transaction/transaction.ts +1 -1
- package/src/transactor/change-notifier.ts +80 -80
- package/src/transactor/index.ts +5 -5
- package/src/transactor/network-transactor.ts +49 -14
- package/src/transactor/transactor-source.ts +25 -2
- package/src/transform/atomic-proxy.ts +92 -92
- package/src/transform/helpers.ts +159 -159
- package/src/utility/backoff.ts +95 -95
- package/src/utility/batch-coordinator.ts +191 -191
- package/dist/src/transaction/context.d.ts +0 -60
- package/dist/src/transaction/context.d.ts.map +0 -1
- package/dist/src/transaction/context.js +0 -91
- package/dist/src/transaction/context.js.map +0 -1
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
export interface WaitForOptions {
|
|
2
|
-
// NOTE: default is tuned for in-process settles; integration callers over real libp2p
|
|
3
|
-
// pass explicit 10k–90k bounds. A new caller that omits timeoutMs gets 2s — fine for
|
|
4
|
-
// fast local conditions, but if a slow CI machine flakes on a legitimately-slow wait,
|
|
5
|
-
// give that call site an explicit timeoutMs rather than raising this default.
|
|
6
|
-
/** Upper bound before the poll gives up. Default 2_000. */
|
|
7
|
-
timeoutMs?: number;
|
|
8
|
-
/** Poll cadence. Default 10. */
|
|
9
|
-
intervalMs?: number;
|
|
10
|
-
/** Included in the thrown message so a failure says WHAT never became true. */
|
|
11
|
-
description?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** Real-time sleep. Retain ONLY for residual cases a condition poll cannot cover. */
|
|
15
|
-
export const delay = (ms: number): Promise<void> =>
|
|
16
|
-
new Promise((resolve) => setTimeout(resolve, ms));
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Poll `predicate` until it returns true or `timeoutMs` elapses; throws on timeout.
|
|
20
|
-
* `predicate` may be sync or async; a thrown/rejected predicate propagates immediately.
|
|
21
|
-
* `undefined` is treated as `false` (not ready yet).
|
|
22
|
-
*/
|
|
23
|
-
export async function waitFor(
|
|
24
|
-
predicate: () => boolean | Promise<boolean>,
|
|
25
|
-
opts?: WaitForOptions,
|
|
26
|
-
): Promise<void> {
|
|
27
|
-
const { timeoutMs = 2_000, intervalMs = 10, description } = opts ?? {};
|
|
28
|
-
const deadline = Date.now() + timeoutMs;
|
|
29
|
-
for (;;) {
|
|
30
|
-
if (await predicate()) return;
|
|
31
|
-
if (Date.now() >= deadline) {
|
|
32
|
-
throw new Error(
|
|
33
|
-
description
|
|
34
|
-
? `waitFor timed out after ${timeoutMs}ms: ${description}`
|
|
35
|
-
: `waitFor timed out after ${timeoutMs}ms`,
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
await delay(intervalMs);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Poll `fn` until it returns a non-undefined value or `timeoutMs` elapses; throws on timeout.
|
|
44
|
-
* `undefined` means "not ready yet" — callers needing to wait for an actual `undefined`
|
|
45
|
-
* should use `waitFor` on a separate flag.
|
|
46
|
-
*/
|
|
47
|
-
export async function waitForValue<T>(
|
|
48
|
-
fn: () => T | undefined | Promise<T | undefined>,
|
|
49
|
-
opts?: WaitForOptions,
|
|
50
|
-
): Promise<T> {
|
|
51
|
-
const { timeoutMs = 2_000, intervalMs = 10, description } = opts ?? {};
|
|
52
|
-
const deadline = Date.now() + timeoutMs;
|
|
53
|
-
for (;;) {
|
|
54
|
-
const value = await fn();
|
|
55
|
-
if (value !== undefined) return value;
|
|
56
|
-
if (Date.now() >= deadline) {
|
|
57
|
-
throw new Error(
|
|
58
|
-
description
|
|
59
|
-
? `waitForValue timed out after ${timeoutMs}ms: ${description}`
|
|
60
|
-
: `waitForValue timed out after ${timeoutMs}ms`,
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
await delay(intervalMs);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
1
|
+
export interface WaitForOptions {
|
|
2
|
+
// NOTE: default is tuned for in-process settles; integration callers over real libp2p
|
|
3
|
+
// pass explicit 10k–90k bounds. A new caller that omits timeoutMs gets 2s — fine for
|
|
4
|
+
// fast local conditions, but if a slow CI machine flakes on a legitimately-slow wait,
|
|
5
|
+
// give that call site an explicit timeoutMs rather than raising this default.
|
|
6
|
+
/** Upper bound before the poll gives up. Default 2_000. */
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
/** Poll cadence. Default 10. */
|
|
9
|
+
intervalMs?: number;
|
|
10
|
+
/** Included in the thrown message so a failure says WHAT never became true. */
|
|
11
|
+
description?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Real-time sleep. Retain ONLY for residual cases a condition poll cannot cover. */
|
|
15
|
+
export const delay = (ms: number): Promise<void> =>
|
|
16
|
+
new Promise((resolve) => setTimeout(resolve, ms));
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Poll `predicate` until it returns true or `timeoutMs` elapses; throws on timeout.
|
|
20
|
+
* `predicate` may be sync or async; a thrown/rejected predicate propagates immediately.
|
|
21
|
+
* `undefined` is treated as `false` (not ready yet).
|
|
22
|
+
*/
|
|
23
|
+
export async function waitFor(
|
|
24
|
+
predicate: () => boolean | Promise<boolean>,
|
|
25
|
+
opts?: WaitForOptions,
|
|
26
|
+
): Promise<void> {
|
|
27
|
+
const { timeoutMs = 2_000, intervalMs = 10, description } = opts ?? {};
|
|
28
|
+
const deadline = Date.now() + timeoutMs;
|
|
29
|
+
for (;;) {
|
|
30
|
+
if (await predicate()) return;
|
|
31
|
+
if (Date.now() >= deadline) {
|
|
32
|
+
throw new Error(
|
|
33
|
+
description
|
|
34
|
+
? `waitFor timed out after ${timeoutMs}ms: ${description}`
|
|
35
|
+
: `waitFor timed out after ${timeoutMs}ms`,
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
await delay(intervalMs);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Poll `fn` until it returns a non-undefined value or `timeoutMs` elapses; throws on timeout.
|
|
44
|
+
* `undefined` means "not ready yet" — callers needing to wait for an actual `undefined`
|
|
45
|
+
* should use `waitFor` on a separate flag.
|
|
46
|
+
*/
|
|
47
|
+
export async function waitForValue<T>(
|
|
48
|
+
fn: () => T | undefined | Promise<T | undefined>,
|
|
49
|
+
opts?: WaitForOptions,
|
|
50
|
+
): Promise<T> {
|
|
51
|
+
const { timeoutMs = 2_000, intervalMs = 10, description } = opts ?? {};
|
|
52
|
+
const deadline = Date.now() + timeoutMs;
|
|
53
|
+
for (;;) {
|
|
54
|
+
const value = await fn();
|
|
55
|
+
if (value !== undefined) return value;
|
|
56
|
+
if (Date.now() >= deadline) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
description
|
|
59
|
+
? `waitForValue timed out after ${timeoutMs}ms: ${description}`
|
|
60
|
+
: `waitForValue timed out after ${timeoutMs}ms`,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
await delay(intervalMs);
|
|
64
|
+
}
|
|
65
|
+
}
|
package/src/testing/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './test-transactor.js';
|
|
2
|
-
export * from './async-wait.js';
|
|
1
|
+
export * from './test-transactor.js';
|
|
2
|
+
export * from './async-wait.js';
|