@optimystic/db-p2p 0.24.2 → 0.25.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 → README.md} +688 -668
- package/dist/src/cluster/block-transfer-service.d.ts +133 -10
- package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer-service.js +155 -9
- package/dist/src/cluster/block-transfer-service.js.map +1 -1
- package/dist/src/cluster/block-transfer.d.ts +67 -7
- package/dist/src/cluster/block-transfer.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer.js +127 -24
- package/dist/src/cluster/block-transfer.js.map +1 -1
- package/dist/src/cluster/certified-claims.d.ts +170 -0
- package/dist/src/cluster/certified-claims.d.ts.map +1 -0
- package/dist/src/cluster/certified-claims.js +200 -0
- package/dist/src/cluster/certified-claims.js.map +1 -0
- package/dist/src/cluster/client-signature-verifier.d.ts +23 -0
- package/dist/src/cluster/client-signature-verifier.d.ts.map +1 -0
- package/dist/src/cluster/client-signature-verifier.js +33 -0
- package/dist/src/cluster/client-signature-verifier.js.map +1 -0
- package/dist/src/cluster/cluster-policy.d.ts +9 -3
- package/dist/src/cluster/cluster-policy.d.ts.map +1 -1
- package/dist/src/cluster/cluster-policy.js +111 -27
- package/dist/src/cluster/cluster-policy.js.map +1 -1
- package/dist/src/cluster/cluster-repo.d.ts +140 -11
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +485 -29
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/commit-proof.d.ts +134 -0
- package/dist/src/cluster/commit-proof.d.ts.map +1 -0
- package/dist/src/cluster/commit-proof.js +263 -0
- package/dist/src/cluster/commit-proof.js.map +1 -0
- package/dist/src/cluster/quorum-restore.d.ts +95 -8
- package/dist/src/cluster/quorum-restore.d.ts.map +1 -1
- package/dist/src/cluster/quorum-restore.js +113 -14
- package/dist/src/cluster/quorum-restore.js.map +1 -1
- package/dist/src/cluster/rebalance-monitor.d.ts +84 -0
- package/dist/src/cluster/rebalance-monitor.d.ts.map +1 -1
- package/dist/src/cluster/rebalance-monitor.js +207 -5
- package/dist/src/cluster/rebalance-monitor.js.map +1 -1
- package/dist/src/cluster/reconcile-block.d.ts +27 -7
- package/dist/src/cluster/reconcile-block.d.ts.map +1 -1
- package/dist/src/cluster/reconcile-block.js +179 -38
- package/dist/src/cluster/reconcile-block.js.map +1 -1
- package/dist/src/cluster/service.d.ts +13 -4
- package/dist/src/cluster/service.d.ts.map +1 -1
- package/dist/src/cluster/service.js +17 -18
- package/dist/src/cluster/service.js.map +1 -1
- package/dist/src/cluster/spread-on-churn.d.ts +8 -2
- package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
- package/dist/src/cluster/spread-on-churn.js +7 -7
- package/dist/src/cluster/spread-on-churn.js.map +1 -1
- package/dist/src/cohort-topic/host.d.ts.map +1 -1
- package/dist/src/cohort-topic/host.js +8 -7
- package/dist/src/cohort-topic/host.js.map +1 -1
- package/dist/src/cohort-topic/stream-util.d.ts +7 -6
- package/dist/src/cohort-topic/stream-util.d.ts.map +1 -1
- package/dist/src/cohort-topic/stream-util.js +14 -41
- package/dist/src/cohort-topic/stream-util.js.map +1 -1
- package/dist/src/dispute/cascade.d.ts +7 -8
- package/dist/src/dispute/cascade.d.ts.map +1 -1
- package/dist/src/dispute/cascade.js +24 -7
- package/dist/src/dispute/cascade.js.map +1 -1
- package/dist/src/dispute/dispute-service.d.ts +5 -0
- package/dist/src/dispute/dispute-service.d.ts.map +1 -1
- package/dist/src/dispute/dispute-service.js +13 -3
- package/dist/src/dispute/dispute-service.js.map +1 -1
- package/dist/src/dispute/invalidation.d.ts +33 -15
- package/dist/src/dispute/invalidation.d.ts.map +1 -1
- package/dist/src/dispute/invalidation.js +127 -34
- package/dist/src/dispute/invalidation.js.map +1 -1
- package/dist/src/dispute/service.d.ts.map +1 -1
- package/dist/src/dispute/service.js +2 -1
- package/dist/src/dispute/service.js.map +1 -1
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p-key-network.d.ts +14 -10
- package/dist/src/libp2p-key-network.d.ts.map +1 -1
- package/dist/src/libp2p-key-network.js +28 -58
- package/dist/src/libp2p-key-network.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +38 -7
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +148 -63
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/network/open-protocol-stream.d.ts +56 -0
- package/dist/src/network/open-protocol-stream.d.ts.map +1 -0
- package/dist/src/network/open-protocol-stream.js +60 -0
- package/dist/src/network/open-protocol-stream.js.map +1 -0
- package/dist/src/network/register-protocol-handler.d.ts +66 -0
- package/dist/src/network/register-protocol-handler.d.ts.map +1 -0
- package/dist/src/network/register-protocol-handler.js +51 -0
- package/dist/src/network/register-protocol-handler.js.map +1 -0
- package/dist/src/peer-address-book.d.ts +60 -2
- package/dist/src/peer-address-book.d.ts.map +1 -1
- package/dist/src/peer-address-book.js +89 -1
- package/dist/src/peer-address-book.js.map +1 -1
- package/dist/src/pend-validation.d.ts +65 -0
- package/dist/src/pend-validation.d.ts.map +1 -0
- package/dist/src/pend-validation.js +69 -0
- package/dist/src/pend-validation.js.map +1 -0
- package/dist/src/reactivity/notify-transport.d.ts.map +1 -1
- package/dist/src/reactivity/notify-transport.js +2 -1
- package/dist/src/reactivity/notify-transport.js.map +1 -1
- package/dist/src/reactivity/push-state-gossip.d.ts.map +1 -1
- package/dist/src/reactivity/push-state-gossip.js +2 -1
- package/dist/src/reactivity/push-state-gossip.js.map +1 -1
- package/dist/src/repo/cluster-coordinator.d.ts +32 -6
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
- package/dist/src/repo/cluster-coordinator.js +44 -10
- package/dist/src/repo/cluster-coordinator.js.map +1 -1
- package/dist/src/repo/coordinator-repo.d.ts +181 -25
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
- package/dist/src/repo/coordinator-repo.js +650 -62
- package/dist/src/repo/coordinator-repo.js.map +1 -1
- package/dist/src/repo/served-repo-proxy.d.ts +30 -0
- package/dist/src/repo/served-repo-proxy.d.ts.map +1 -0
- package/dist/src/repo/served-repo-proxy.js +50 -0
- package/dist/src/repo/served-repo-proxy.js.map +1 -0
- package/dist/src/repo/service.d.ts +16 -1
- package/dist/src/repo/service.d.ts.map +1 -1
- package/dist/src/repo/service.js +18 -16
- package/dist/src/repo/service.js.map +1 -1
- package/dist/src/reputation/types.d.ts +3 -1
- package/dist/src/reputation/types.d.ts.map +1 -1
- package/dist/src/reputation/types.js +3 -1
- package/dist/src/reputation/types.js.map +1 -1
- package/dist/src/rn.d.ts +24 -2
- package/dist/src/rn.d.ts.map +1 -1
- package/dist/src/rn.js +33 -4
- package/dist/src/rn.js.map +1 -1
- package/dist/src/storage/block-archive.d.ts +153 -0
- package/dist/src/storage/block-archive.d.ts.map +1 -0
- package/dist/src/storage/block-archive.js +194 -0
- package/dist/src/storage/block-archive.js.map +1 -0
- package/dist/src/storage/block-latch.d.ts +92 -0
- package/dist/src/storage/block-latch.d.ts.map +1 -0
- package/dist/src/storage/block-latch.js +132 -0
- package/dist/src/storage/block-latch.js.map +1 -0
- package/dist/src/storage/block-storage.d.ts +169 -12
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +415 -152
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/cached-raw-storage.d.ts +5 -1
- package/dist/src/storage/cached-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/cached-raw-storage.js +16 -1
- package/dist/src/storage/cached-raw-storage.js.map +1 -1
- package/dist/src/storage/cached-store-driver.d.ts +14 -4
- package/dist/src/storage/cached-store-driver.d.ts.map +1 -1
- package/dist/src/storage/cached-store-driver.js +39 -5
- package/dist/src/storage/cached-store-driver.js.map +1 -1
- package/dist/src/storage/i-block-storage.d.ts +70 -19
- package/dist/src/storage/i-block-storage.d.ts.map +1 -1
- package/dist/src/storage/i-block-storage.js +21 -1
- package/dist/src/storage/i-block-storage.js.map +1 -1
- package/dist/src/storage/i-raw-storage.d.ts +38 -0
- package/dist/src/storage/i-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/kv-raw-storage.d.ts +14 -8
- package/dist/src/storage/kv-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/kv-raw-storage.js +29 -9
- package/dist/src/storage/kv-raw-storage.js.map +1 -1
- package/dist/src/storage/memory-store-driver.d.ts +4 -1
- package/dist/src/storage/memory-store-driver.d.ts.map +1 -1
- package/dist/src/storage/memory-store-driver.js +22 -2
- package/dist/src/storage/memory-store-driver.js.map +1 -1
- package/dist/src/storage/raw-store-codec.js +2 -2
- package/dist/src/storage/raw-store-driver.d.ts +44 -3
- package/dist/src/storage/raw-store-driver.d.ts.map +1 -1
- package/dist/src/storage/shared-cache-pool.d.ts +60 -3
- package/dist/src/storage/shared-cache-pool.d.ts.map +1 -1
- package/dist/src/storage/shared-cache-pool.js +68 -4
- package/dist/src/storage/shared-cache-pool.js.map +1 -1
- package/dist/src/storage/storage-repo.d.ts +204 -26
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +422 -119
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/storage/store-identity.d.ts +21 -0
- package/dist/src/storage/store-identity.d.ts.map +1 -0
- package/dist/src/storage/store-identity.js +33 -0
- package/dist/src/storage/store-identity.js.map +1 -0
- package/dist/src/storage/struct.d.ts +15 -0
- package/dist/src/storage/struct.d.ts.map +1 -1
- package/dist/src/storage/with-read-cache.d.ts +92 -0
- package/dist/src/storage/with-read-cache.d.ts.map +1 -0
- package/dist/src/storage/with-read-cache.js +132 -0
- package/dist/src/storage/with-read-cache.js.map +1 -0
- package/dist/src/sync/service.d.ts +13 -3
- package/dist/src/sync/service.d.ts.map +1 -1
- package/dist/src/sync/service.js +7 -30
- package/dist/src/sync/service.js.map +1 -1
- package/dist/src/testing/mesh-harness.d.ts +75 -2
- package/dist/src/testing/mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.js +193 -81
- package/dist/src/testing/mesh-harness.js.map +1 -1
- package/dist/src/testing/raw-storage-conformance.d.ts +8 -0
- package/dist/src/testing/raw-storage-conformance.d.ts.map +1 -1
- package/dist/src/testing/raw-storage-conformance.js +97 -2
- package/dist/src/testing/raw-storage-conformance.js.map +1 -1
- package/package.json +5 -6
- package/src/cluster/block-transfer-service.ts +528 -312
- package/src/cluster/block-transfer.ts +547 -424
- package/src/cluster/certified-claims.ts +319 -0
- package/src/cluster/client-signature-verifier.ts +34 -0
- package/src/cluster/cluster-policy.ts +294 -203
- package/src/cluster/cluster-repo.ts +2501 -2034
- package/src/cluster/commit-proof.ts +344 -0
- package/src/cluster/quorum-restore.ts +348 -223
- package/src/cluster/rebalance-monitor.ts +539 -254
- package/src/cluster/reconcile-block.ts +404 -203
- package/src/cluster/service.ts +23 -20
- package/src/cluster/spread-on-churn.ts +352 -346
- package/src/cohort-topic/host.ts +8 -7
- package/src/cohort-topic/stream-util.ts +14 -43
- package/src/dispute/cascade.ts +31 -15
- package/src/dispute/dispute-service.ts +706 -696
- package/src/dispute/invalidation.ts +162 -52
- package/src/dispute/service.ts +126 -125
- package/src/index.ts +7 -0
- package/src/libp2p-key-network.ts +1204 -1235
- package/src/libp2p-node-base.ts +185 -70
- package/src/network/open-protocol-stream.ts +87 -0
- package/src/network/register-protocol-handler.ts +85 -0
- package/src/peer-address-book.ts +96 -2
- package/src/pend-validation.ts +89 -0
- package/src/reactivity/notify-transport.ts +2 -1
- package/src/reactivity/push-state-gossip.ts +2 -1
- package/src/repo/cluster-coordinator.ts +65 -11
- package/src/repo/coordinator-repo.ts +729 -71
- package/src/repo/served-repo-proxy.ts +55 -0
- package/src/repo/service.ts +25 -16
- package/src/reputation/types.ts +3 -1
- package/src/rn.ts +34 -4
- package/src/storage/block-archive.ts +242 -0
- package/src/storage/block-latch.ts +144 -0
- package/src/storage/block-storage.ts +787 -498
- package/src/storage/cached-raw-storage.ts +21 -1
- package/src/storage/cached-store-driver.ts +898 -859
- package/src/storage/i-block-storage.ts +172 -116
- package/src/storage/i-raw-storage.ts +40 -0
- package/src/storage/kv-raw-storage.ts +34 -9
- package/src/storage/memory-store-driver.ts +26 -2
- package/src/storage/raw-store-codec.ts +42 -42
- package/src/storage/raw-store-driver.ts +45 -3
- package/src/storage/shared-cache-pool.ts +516 -452
- package/src/storage/storage-repo.ts +1421 -1014
- package/src/storage/store-identity.ts +41 -0
- package/src/storage/struct.ts +52 -34
- package/src/storage/with-read-cache.ts +182 -0
- package/src/sync/service.ts +178 -198
- package/src/testing/mesh-harness.ts +524 -344
- package/src/testing/raw-storage-conformance.ts +114 -2
package/src/cluster/service.ts
CHANGED
|
@@ -5,11 +5,12 @@ import type { Startable, Logger, Stream, Connection, StreamHandler, PeerId } fro
|
|
|
5
5
|
import type { ICluster, ClusterRecord } from '@optimystic/db-core';
|
|
6
6
|
import { encodePeers, type RedirectPayload } from '../repo/redirect.js';
|
|
7
7
|
import { toClusterErrorEnvelope } from './cluster-error.js';
|
|
8
|
-
import { mergeRecordPeerAddresses,
|
|
8
|
+
import { mergeRecordPeerAddresses, publishableAddrsForPeer, type AddressLog, type DirectionalConnection } from '../peer-address-book.js';
|
|
9
9
|
import { MAX_CONTROL_MESSAGE_BYTES } from '../protocol-limits.js';
|
|
10
10
|
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
11
11
|
import { createLogger } from '../logger.js';
|
|
12
12
|
import { createInboundStreamAuthorization, type InboundStreamAuthorization, type InboundStreamAuthorizationInit } from '../inbound-authorization.js';
|
|
13
|
+
import { registerProtocolHandler } from '../network/register-protocol-handler.js';
|
|
13
14
|
|
|
14
15
|
interface BaseComponents {
|
|
15
16
|
logger: { forComponent: (name: string) => Logger },
|
|
@@ -28,10 +29,13 @@ export interface ClusterServiceComponents extends BaseComponents {
|
|
|
28
29
|
*/
|
|
29
30
|
peerId?: PeerId
|
|
30
31
|
/**
|
|
31
|
-
* Optional resolver for a peer
|
|
32
|
-
* a redirect target has no multiaddrs embedded in `record.peers`.
|
|
32
|
+
* Optional resolver for the addresses this node may publish for a peer, used as a fallback
|
|
33
|
+
* when a redirect target has no multiaddrs embedded in `record.peers`. Async because the
|
|
34
|
+
* answer includes the peer's own advertised addresses, which live in the peerStore — see
|
|
35
|
+
* `publishableAddrsForPeer`. A synchronous `string[]` is still accepted so an embedder's
|
|
36
|
+
* connections-only stub keeps working.
|
|
33
37
|
*/
|
|
34
|
-
getConnectionAddrs?: (peerId: PeerId) => string[]
|
|
38
|
+
getConnectionAddrs?: (peerId: PeerId) => string[] | Promise<string[]>
|
|
35
39
|
/**
|
|
36
40
|
* Optional sink for dialable addresses carried by an inbound cluster record, so this
|
|
37
41
|
* node can later dial a cohort sibling it has never had a connection to. Omitted →
|
|
@@ -120,25 +124,24 @@ export class ClusterService implements Startable {
|
|
|
120
124
|
return this.getLibp2p()?.peerId as PeerId | undefined;
|
|
121
125
|
}
|
|
122
126
|
|
|
123
|
-
|
|
127
|
+
/**
|
|
128
|
+
* The addresses this node may publish for `id` in a redirect payload, when the record carried
|
|
129
|
+
* none. A redirect goes to a THIRD party, so it asks `publishableAddrsForPeer` — the one
|
|
130
|
+
* definition, shared with `RepoService` and `findCluster` — rather than reading connections
|
|
131
|
+
* alone: a cohort sibling that only ever dialed US has its real address in the peerStore only.
|
|
132
|
+
*/
|
|
133
|
+
private async getPeerAddrs(id: string): Promise<string[]> {
|
|
124
134
|
let pid: PeerId;
|
|
125
135
|
try {
|
|
126
136
|
pid = peerIdFromString(id);
|
|
127
137
|
} catch {
|
|
128
138
|
return [];
|
|
129
139
|
}
|
|
130
|
-
if (this.components.getConnectionAddrs) return this.components.getConnectionAddrs(pid);
|
|
140
|
+
if (this.components.getConnectionAddrs) return await this.components.getConnectionAddrs(pid);
|
|
131
141
|
const libp2p = this.getLibp2p();
|
|
132
142
|
if (!libp2p?.getConnections) return [];
|
|
133
|
-
// A redirect payload goes to a THIRD party, so only an outbound connection's remoteAddr
|
|
134
|
-
// qualifies — see `publishableConnectionAddr`.
|
|
135
143
|
const conns: DirectionalConnection[] = libp2p.getConnections(pid) ?? [];
|
|
136
|
-
|
|
137
|
-
for (const c of conns) {
|
|
138
|
-
const addr = publishableConnectionAddr(c, this.addressLog);
|
|
139
|
-
if (addr !== undefined) addrs.push(addr);
|
|
140
|
-
}
|
|
141
|
-
return addrs;
|
|
144
|
+
return await publishableAddrsForPeer(libp2p, conns, pid, this.addressLog);
|
|
142
145
|
}
|
|
143
146
|
|
|
144
147
|
/**
|
|
@@ -156,7 +159,7 @@ export class ClusterService implements Startable {
|
|
|
156
159
|
* when the update should be processed locally (we are a member, the mesh is too
|
|
157
160
|
* small to scope, or we lack the identity/peer set to make a decision).
|
|
158
161
|
*/
|
|
159
|
-
checkRedirect(record: ClusterRecord): RedirectPayload | null {
|
|
162
|
+
async checkRedirect(record: ClusterRecord): Promise<RedirectPayload | null> {
|
|
160
163
|
const selfId = this.getSelfId();
|
|
161
164
|
if (!selfId) return null; // no identity → can't scope, process locally
|
|
162
165
|
|
|
@@ -170,11 +173,11 @@ export class ClusterService implements Startable {
|
|
|
170
173
|
|
|
171
174
|
if (!smallMesh && !isMember) {
|
|
172
175
|
const others = peerIds.filter(id => id !== selfStr);
|
|
173
|
-
return encodePeers(others.map(id => {
|
|
176
|
+
return encodePeers(await Promise.all(others.map(async id => {
|
|
174
177
|
const recAddrs = peers[id]?.multiaddrs ?? [];
|
|
175
|
-
const addrs = recAddrs.length > 0 ? recAddrs : this.getPeerAddrs(id);
|
|
178
|
+
const addrs = recAddrs.length > 0 ? recAddrs : await this.getPeerAddrs(id);
|
|
176
179
|
return { id, addrs };
|
|
177
|
-
}));
|
|
180
|
+
})));
|
|
178
181
|
}
|
|
179
182
|
|
|
180
183
|
return null;
|
|
@@ -185,7 +188,7 @@ export class ClusterService implements Startable {
|
|
|
185
188
|
return;
|
|
186
189
|
}
|
|
187
190
|
|
|
188
|
-
await this.components.registrar
|
|
191
|
+
await registerProtocolHandler(this.components.registrar, this.protocol, this.handleIncomingStream.bind(this), {
|
|
189
192
|
maxInboundStreams: this.maxInboundStreams,
|
|
190
193
|
maxOutboundStreams: this.maxOutboundStreams
|
|
191
194
|
});
|
|
@@ -222,7 +225,7 @@ export class ClusterService implements Startable {
|
|
|
222
225
|
this.learnPeerAddresses(message.record);
|
|
223
226
|
// Scope consensus to responsible peers: redirect when we are not a
|
|
224
227
|
// member of the record's authoritative peer set, otherwise process.
|
|
225
|
-
const redirect = this.checkRedirect(message.record);
|
|
228
|
+
const redirect = await this.checkRedirect(message.record);
|
|
226
229
|
return redirect ?? await this.cluster.update(message.record);
|
|
227
230
|
}
|
|
228
231
|
throw new Error(`Unknown operation: ${message.operation}`);
|