peerbit 5.2.19 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/peer.d.ts +106 -0
- package/dist/src/peer.d.ts.map +1 -1
- package/dist/src/peer.js +81 -4
- package/dist/src/peer.js.map +1 -1
- package/dist/src/rust.d.ts +44 -0
- package/dist/src/rust.d.ts.map +1 -0
- package/dist/src/rust.js +125 -0
- package/dist/src/rust.js.map +1 -0
- package/package.json +24 -12
- package/src/peer.ts +234 -43
- package/src/rust.ts +233 -0
package/dist/src/peer.d.ts
CHANGED
|
@@ -5,16 +5,23 @@ import { Ed25519Keypair, PublicSignKey } from "@peerbit/crypto";
|
|
|
5
5
|
import type { Indices } from "@peerbit/indexer-interface";
|
|
6
6
|
import { type Address, type ExtractArgs, type OpenOptions, type Program, type ProgramClient, ProgramHandler } from "@peerbit/program";
|
|
7
7
|
import { FanoutChannel, type FanoutTreeChannelOptions, type FanoutTreeJoinOptions } from "@peerbit/pubsub";
|
|
8
|
+
import type { RustCoreStream } from "@peerbit/stream";
|
|
8
9
|
import { type Libp2pExtended, type PartialLibp2pCreateOptions } from "./libp2p.js";
|
|
9
10
|
export declare const logger: import("@libp2p/interface").Logger;
|
|
10
11
|
export type OptionalCreateOptions = {
|
|
11
12
|
libp2pExternal?: boolean;
|
|
12
13
|
};
|
|
14
|
+
export type NativeNetworkRuntime = {
|
|
15
|
+
rustCore?: RustCoreStream;
|
|
16
|
+
wireSync?: NativeWireSyncSessionLike;
|
|
17
|
+
};
|
|
13
18
|
export type CreateOptions = {
|
|
14
19
|
directory?: string;
|
|
15
20
|
storage: AnyStore;
|
|
16
21
|
indexer: Indices;
|
|
17
22
|
identity: Ed25519Keypair;
|
|
23
|
+
nativeNetwork?: NativeNetworkRuntime;
|
|
24
|
+
sharedLogNativeDefaults?: SharedLogNativeDefaultsLike;
|
|
18
25
|
} & OptionalCreateOptions;
|
|
19
26
|
type Libp2pOptions = {
|
|
20
27
|
libp2p?: Libp2pExtended | (PartialLibp2pCreateOptions & {
|
|
@@ -24,9 +31,99 @@ type Libp2pOptions = {
|
|
|
24
31
|
type SimpleLibp2pOptions = {
|
|
25
32
|
relay?: boolean;
|
|
26
33
|
};
|
|
34
|
+
export type StoreFactory = (directory?: string) => AnyStore;
|
|
35
|
+
export type StorageCreateOptions = {
|
|
36
|
+
storeFactory?: StoreFactory;
|
|
37
|
+
blocksStoreFactory?: StoreFactory;
|
|
38
|
+
keychainStoreFactory?: StoreFactory;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Per-node wire-sync session surface (implemented by
|
|
42
|
+
* `NativeBackboneWireSyncSession` in `@peerbit/native-backbone`). One object
|
|
43
|
+
* serves two seams: `decodeAndVerifyBatch` is the `nativeWire` inbound
|
|
44
|
+
* decoder of the pubsub DirectStream, and the stash accessors implement the
|
|
45
|
+
* `SharedLogNativeWireSync` receive-fusion surface shared-log consumes.
|
|
46
|
+
*/
|
|
47
|
+
export type NativeWireSyncSessionLike = {
|
|
48
|
+
/** Raw wasm session handle consumed by `prepareStashedRawReceive*`. */
|
|
49
|
+
handle: unknown;
|
|
50
|
+
decodeAndVerifyBatch(frames: Uint8Array[], nowMs: number): Uint32Array;
|
|
51
|
+
registerTopic(topic: string): void;
|
|
52
|
+
unregisterTopic(topic: string): boolean;
|
|
53
|
+
stashedMeta(id: Uint8Array): {
|
|
54
|
+
hashes: string[];
|
|
55
|
+
gidRefrences: string[][];
|
|
56
|
+
byteLengths: Uint32Array;
|
|
57
|
+
reserved: Uint8Array;
|
|
58
|
+
payloadLength: number;
|
|
59
|
+
} | undefined;
|
|
60
|
+
stashedBlocks(id: Uint8Array, indexes?: Uint32Array): Uint8Array[] | undefined;
|
|
61
|
+
release(id: Uint8Array): boolean;
|
|
62
|
+
counters?(): {
|
|
63
|
+
stashed: number;
|
|
64
|
+
evicted: number;
|
|
65
|
+
metaReads: number;
|
|
66
|
+
blockCopyOuts: number;
|
|
67
|
+
released: number;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Native shared-log defaults advertised to programs opened on this client
|
|
72
|
+
* (the `SharedLogNativeDefaults` hook of `@peerbit/shared-log`). Structural
|
|
73
|
+
* copy so the client does not depend on the shared-log package.
|
|
74
|
+
*/
|
|
75
|
+
export type SharedLogNativeDefaultsLike = {
|
|
76
|
+
nativeBackbone?: false | {
|
|
77
|
+
optional?: boolean;
|
|
78
|
+
heads?: boolean;
|
|
79
|
+
documentIndex?: boolean;
|
|
80
|
+
coordinatePersistence?: unknown;
|
|
81
|
+
};
|
|
82
|
+
nativeGraph?: boolean | {
|
|
83
|
+
optional?: boolean;
|
|
84
|
+
heads?: boolean;
|
|
85
|
+
graph?: unknown;
|
|
86
|
+
};
|
|
87
|
+
sync?: {
|
|
88
|
+
rawExchangeHeads?: boolean;
|
|
89
|
+
nativeWireSync?: NativeWireSyncSessionLike;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Native network plane for a client-built libp2p stack (services must be
|
|
94
|
+
* constructed by `Peerbit.create`, so this cannot be combined with an
|
|
95
|
+
* external libp2p instance). All parts are opt-in; `peerbit/rust` provides
|
|
96
|
+
* the preset that fills them in.
|
|
97
|
+
*/
|
|
98
|
+
export type NativeNetworkCreateOptions = {
|
|
99
|
+
/**
|
|
100
|
+
* Native DirectStream core factory (`createRustCoreStream` of
|
|
101
|
+
* `@peerbit/network-rust`). One core is shared by the pubsub, fanout and
|
|
102
|
+
* blocks services: routing/dedup/lane decisions and the protocol codecs
|
|
103
|
+
* run in wasm, including the batched inbound decode+verify.
|
|
104
|
+
*/
|
|
105
|
+
rustCore?: () => Promise<RustCoreStream>;
|
|
106
|
+
/**
|
|
107
|
+
* Per-node receive-fusion session factory
|
|
108
|
+
* (`createNativeWireSyncSession` of `@peerbit/native-backbone`), keyed by
|
|
109
|
+
* the node's public key hash. Installed as the pubsub DirectStream's
|
|
110
|
+
* inbound decoder so shared-log raw exchange-head payloads stay in wasm
|
|
111
|
+
* memory, and advertised to shared-log programs for the stashed receive.
|
|
112
|
+
*/
|
|
113
|
+
wireSync?: (selfHash: string) => Promise<NativeWireSyncSessionLike>;
|
|
114
|
+
/**
|
|
115
|
+
* Advertise native shared-log defaults (native backbone data plane,
|
|
116
|
+
* native graph, raw exchange-heads sync and the wire-sync session) to
|
|
117
|
+
* programs opened on this client. Explicit per-open options still win.
|
|
118
|
+
* Defaults to true when this options object is present.
|
|
119
|
+
*/
|
|
120
|
+
sharedLogDefaults?: boolean;
|
|
121
|
+
};
|
|
27
122
|
export type CreateInstanceOptions = (SimpleLibp2pOptions | Libp2pOptions) & {
|
|
28
123
|
directory?: string;
|
|
29
124
|
indexer?: (directory?: string) => Promise<Indices> | Indices;
|
|
125
|
+
storage?: StorageCreateOptions;
|
|
126
|
+
network?: NativeNetworkCreateOptions;
|
|
30
127
|
} & OptionalCreateOptions;
|
|
31
128
|
export type DialReadiness = "connection" | "services" | "services-and-fanout";
|
|
32
129
|
export type DialOptions = {
|
|
@@ -49,9 +146,18 @@ export declare class Peerbit implements ProgramClient {
|
|
|
49
146
|
private _storage;
|
|
50
147
|
private _indexer;
|
|
51
148
|
private _libp2pExternal?;
|
|
149
|
+
private _nativeNetwork?;
|
|
150
|
+
/**
|
|
151
|
+
* Native shared-log defaults advertised to programs opened on this
|
|
152
|
+
* client; read by `@peerbit/shared-log` (`SharedLogNativeDefaults`).
|
|
153
|
+
* Set by `CreateInstanceOptions.network` (the `peerbit/rust` preset).
|
|
154
|
+
*/
|
|
155
|
+
readonly sharedLogNativeDefaults?: SharedLogNativeDefaultsLike;
|
|
52
156
|
private _identity;
|
|
53
157
|
private _handler;
|
|
54
158
|
constructor(libp2p: Libp2pExtended, options: CreateOptions);
|
|
159
|
+
/** Native network runtime enabled by `CreateInstanceOptions.network`. */
|
|
160
|
+
get nativeNetwork(): NativeNetworkRuntime | undefined;
|
|
55
161
|
static create(options?: CreateInstanceOptions): Promise<Peerbit>;
|
|
56
162
|
get libp2p(): Libp2pExtended;
|
|
57
163
|
get identity(): Ed25519Keypair;
|
package/dist/src/peer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/peer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACN,KAAK,SAAS,EAGd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,QAAQ,EAAe,MAAM,oBAAoB,CAAC;AAEhE,OAAO,EACN,cAAc,EAEd,aAAa,EAIb,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,cAAc,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,aAAa,EAIb,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/peer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/peer.js
CHANGED
|
@@ -16,7 +16,7 @@ import { createLibp2pExtended, } from "./libp2p.js";
|
|
|
16
16
|
export const logger = loggerFn("peerbit:client");
|
|
17
17
|
const isLibp2pInstance = (libp2p) => !!libp2p.getMultiaddrs;
|
|
18
18
|
const createCache = async (directory, options) => {
|
|
19
|
-
const cache = createStore(directory);
|
|
19
|
+
const cache = (options?.storeFactory ?? createStore)(directory);
|
|
20
20
|
// "Wake up" the caches if they need it
|
|
21
21
|
if (cache)
|
|
22
22
|
await cache.open();
|
|
@@ -34,6 +34,13 @@ export class Peerbit {
|
|
|
34
34
|
_storage;
|
|
35
35
|
_indexer;
|
|
36
36
|
_libp2pExternal = false;
|
|
37
|
+
_nativeNetwork;
|
|
38
|
+
/**
|
|
39
|
+
* Native shared-log defaults advertised to programs opened on this
|
|
40
|
+
* client; read by `@peerbit/shared-log` (`SharedLogNativeDefaults`).
|
|
41
|
+
* Set by `CreateInstanceOptions.network` (the `peerbit/rust` preset).
|
|
42
|
+
*/
|
|
43
|
+
sharedLogNativeDefaults;
|
|
37
44
|
// Libp2p peerid in Identity form
|
|
38
45
|
_identity;
|
|
39
46
|
_handler;
|
|
@@ -54,15 +61,35 @@ export class Peerbit {
|
|
|
54
61
|
this._storage = options.storage;
|
|
55
62
|
this._libp2pExternal = options.libp2pExternal;
|
|
56
63
|
this._indexer = options.indexer;
|
|
64
|
+
this._nativeNetwork = options.nativeNetwork;
|
|
65
|
+
this.sharedLogNativeDefaults = options.sharedLogNativeDefaults;
|
|
66
|
+
}
|
|
67
|
+
/** Native network runtime enabled by `CreateInstanceOptions.network`. */
|
|
68
|
+
get nativeNetwork() {
|
|
69
|
+
return this._nativeNetwork;
|
|
57
70
|
}
|
|
58
71
|
static async create(options = {}) {
|
|
59
72
|
await sodium.ready; // Some of the modules depends on sodium to be readyy
|
|
60
73
|
let libp2pExtended = options
|
|
61
74
|
.libp2p;
|
|
62
75
|
const asRelay = options.relay ?? true;
|
|
76
|
+
// Validate incompatible options BEFORE acquiring any resources
|
|
77
|
+
// (cache store, indexer, datastore). Both inputs are known up front,
|
|
78
|
+
// so throwing here avoids leaking open handles / a locked directory
|
|
79
|
+
// that a later throw (after createCache/indexer/datastore.open) would
|
|
80
|
+
// leave behind — those are never cleaned up on the throw path.
|
|
81
|
+
if (options.network &&
|
|
82
|
+
libp2pExtended &&
|
|
83
|
+
isLibp2pInstance(libp2pExtended)) {
|
|
84
|
+
throw new Error("The 'network' option requires Peerbit.create to build the libp2p services; it cannot be combined with an external libp2p instance.");
|
|
85
|
+
}
|
|
63
86
|
const directory = options.directory;
|
|
64
87
|
const hasDir = directory != null;
|
|
65
|
-
const
|
|
88
|
+
const storageOptions = options.storage;
|
|
89
|
+
const storeFactory = storageOptions?.storeFactory ?? createStore;
|
|
90
|
+
const blocksStoreFactory = storageOptions?.blocksStoreFactory ?? storageOptions?.storeFactory;
|
|
91
|
+
const keychainStoreFactory = storageOptions?.keychainStoreFactory ?? storageOptions?.storeFactory;
|
|
92
|
+
const storage = await createCache(directory != null ? path.join(directory, "/cache") : undefined, { storeFactory });
|
|
66
93
|
const indexerFn = options.indexer ||
|
|
67
94
|
(async (directory) => {
|
|
68
95
|
// Lazy-import to avoid loading sqlite-wasm in browser-like runtimes/tests
|
|
@@ -87,12 +114,17 @@ export class Peerbit {
|
|
|
87
114
|
}
|
|
88
115
|
let stopLibp2pOnClose = false;
|
|
89
116
|
const libp2pExternal = libp2pExtended && isLibp2pInstance(libp2pExtended);
|
|
117
|
+
const networkOptions = options.network;
|
|
118
|
+
// The `network` + external-libp2p incompatibility is validated at the
|
|
119
|
+
// top of create() (before any resources are opened).
|
|
120
|
+
let nativeNetwork;
|
|
121
|
+
let sharedLogNativeDefaults;
|
|
90
122
|
if (!libp2pExternal) {
|
|
91
123
|
const extendedOptions = libp2pExtended;
|
|
92
124
|
if (extendedOptions && "peerId" in extendedOptions) {
|
|
93
125
|
throw new Error("Invalid libp2p option 'peerId'. libp2p derives the peer id from 'privateKey', so pass 'privateKey' to control identity.");
|
|
94
126
|
}
|
|
95
|
-
const store =
|
|
127
|
+
const store = (keychainStoreFactory ?? storeFactory)(keychainDirectory);
|
|
96
128
|
await store.open();
|
|
97
129
|
const cryptoKeychain = new DefaultCryptoKeychain({
|
|
98
130
|
store,
|
|
@@ -107,6 +139,41 @@ export class Peerbit {
|
|
|
107
139
|
]))
|
|
108
140
|
: undefined;
|
|
109
141
|
}
|
|
142
|
+
if (networkOptions) {
|
|
143
|
+
// The wire-sync session is keyed by the node's public key
|
|
144
|
+
// hash, so the identity must exist before the services are
|
|
145
|
+
// built (libp2p would otherwise generate it during start).
|
|
146
|
+
if (!privateKey && networkOptions.wireSync) {
|
|
147
|
+
privateKey = await keys.generateKeyPair("Ed25519");
|
|
148
|
+
}
|
|
149
|
+
const rustCore = await networkOptions.rustCore?.();
|
|
150
|
+
let wireSync;
|
|
151
|
+
if (networkOptions.wireSync && privateKey) {
|
|
152
|
+
const selfHash = getKeypairFromPrivateKey(privateKey)
|
|
153
|
+
.publicKey.hashcode();
|
|
154
|
+
wireSync = await networkOptions.wireSync(selfHash);
|
|
155
|
+
}
|
|
156
|
+
if (rustCore || wireSync) {
|
|
157
|
+
nativeNetwork = { rustCore, wireSync };
|
|
158
|
+
}
|
|
159
|
+
if (networkOptions.sharedLogDefaults !== false) {
|
|
160
|
+
sharedLogNativeDefaults = {
|
|
161
|
+
nativeBackbone: {},
|
|
162
|
+
// Optional so a missing/unbuildable @peerbit/log-rust
|
|
163
|
+
// (npm --omit=optional) or a service-worker context
|
|
164
|
+
// degrades gracefully instead of throwing on every
|
|
165
|
+
// program open. When the native backbone loads, its
|
|
166
|
+
// graph is used regardless; this default only applies
|
|
167
|
+
// when the backbone is absent, where a hard `true`
|
|
168
|
+
// would abort Log.open.
|
|
169
|
+
nativeGraph: { optional: true },
|
|
170
|
+
sync: {
|
|
171
|
+
rawExchangeHeads: true,
|
|
172
|
+
nativeWireSync: wireSync,
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
110
177
|
const topicRootControlPlane = new TopicRootControlPlane();
|
|
111
178
|
// Keep a single FanoutTree instance per peer so pubsub sharding + provider
|
|
112
179
|
// discovery share the same overlay.
|
|
@@ -115,6 +182,7 @@ export class Peerbit {
|
|
|
115
182
|
((c) => new FanoutTree(c, {
|
|
116
183
|
connectionManager: false,
|
|
117
184
|
topicRootControlPlane,
|
|
185
|
+
rustCore: nativeNetwork?.rustCore,
|
|
118
186
|
}));
|
|
119
187
|
const getOrCreateFanout = (c) => {
|
|
120
188
|
if (!fanoutInstance) {
|
|
@@ -188,7 +256,9 @@ export class Peerbit {
|
|
|
188
256
|
};
|
|
189
257
|
blocksService = new DirectBlock(c, {
|
|
190
258
|
canRelayMessage: asRelay,
|
|
191
|
-
directory: blocksDirectory,
|
|
259
|
+
directory: blocksStoreFactory ? undefined : blocksDirectory,
|
|
260
|
+
localStore: blocksStoreFactory?.(blocksDirectory),
|
|
261
|
+
rustCore: nativeNetwork?.rustCore,
|
|
192
262
|
resolveProviders,
|
|
193
263
|
onPut: async (cid) => {
|
|
194
264
|
// Best-effort directory announce for "get without remote.from" workflows.
|
|
@@ -209,6 +279,11 @@ export class Peerbit {
|
|
|
209
279
|
canRelayMessage: asRelay,
|
|
210
280
|
topicRootControlPlane,
|
|
211
281
|
fanout: getOrCreateFanout(c),
|
|
282
|
+
rustCore: nativeNetwork?.rustCore,
|
|
283
|
+
// The wire-sync session decodes+verifies inbound
|
|
284
|
+
// frames natively and stashes shared-log raw
|
|
285
|
+
// exchange-head payloads for the fused receive.
|
|
286
|
+
nativeWire: nativeNetwork?.wireSync,
|
|
212
287
|
}),
|
|
213
288
|
...extendedOptions?.services,
|
|
214
289
|
};
|
|
@@ -264,6 +339,8 @@ export class Peerbit {
|
|
|
264
339
|
libp2pExternal: !stopLibp2pOnClose,
|
|
265
340
|
identity,
|
|
266
341
|
indexer,
|
|
342
|
+
nativeNetwork,
|
|
343
|
+
sharedLogNativeDefaults,
|
|
267
344
|
});
|
|
268
345
|
return peer;
|
|
269
346
|
}
|
package/dist/src/peer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../../src/peer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../../src/peer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type RustAnyStoreOptions } from "@peerbit/any-store-rust";
|
|
2
|
+
import { type RustIndexerOptions } from "@peerbit/indexer-rust";
|
|
3
|
+
import type { CreateInstanceOptions, NativeNetworkCreateOptions, StorageCreateOptions } from "./peer.js";
|
|
4
|
+
export type PeerbitRustStorageOptions = {
|
|
5
|
+
default?: RustAnyStoreOptions;
|
|
6
|
+
blocks?: RustAnyStoreOptions;
|
|
7
|
+
nativeLogBlocks?: boolean;
|
|
8
|
+
keychain?: RustAnyStoreOptions;
|
|
9
|
+
};
|
|
10
|
+
export type PeerbitRustNetworkOptions = {
|
|
11
|
+
/**
|
|
12
|
+
* Run the DirectStream engine and the protocol codecs (topic control,
|
|
13
|
+
* fanout tree, block exchange) on the native core of
|
|
14
|
+
* `@peerbit/network-rust`. Default true.
|
|
15
|
+
*/
|
|
16
|
+
rustCore?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Decode+verify inbound pubsub frames in the native-backbone wasm module
|
|
19
|
+
* and stash shared-log raw exchange-head payloads there for the fused
|
|
20
|
+
* receive (no JS entry decode, no JS block-byte copies). Default true.
|
|
21
|
+
*/
|
|
22
|
+
wireSync?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Advertise native shared-log defaults (native backbone data plane,
|
|
25
|
+
* native graph, raw exchange-heads sync + the wire-sync session) to
|
|
26
|
+
* programs opened on this client. Default true.
|
|
27
|
+
*/
|
|
28
|
+
sharedLogDefaults?: boolean;
|
|
29
|
+
};
|
|
30
|
+
export type PeerbitRustOptions = {
|
|
31
|
+
storage?: PeerbitRustStorageOptions;
|
|
32
|
+
indexer?: RustIndexerOptions;
|
|
33
|
+
/** Native network plane; `false` keeps the js-libp2p wire path. */
|
|
34
|
+
network?: boolean | PeerbitRustNetworkOptions;
|
|
35
|
+
};
|
|
36
|
+
export type PeerbitRustCreateOptions = {
|
|
37
|
+
storage: StorageCreateOptions;
|
|
38
|
+
indexer: NonNullable<CreateInstanceOptions["indexer"]>;
|
|
39
|
+
network?: NativeNetworkCreateOptions;
|
|
40
|
+
};
|
|
41
|
+
export declare const createRustStorageOptions: (options?: PeerbitRustStorageOptions) => StorageCreateOptions;
|
|
42
|
+
export declare const createRustNetworkOptions: (options?: PeerbitRustNetworkOptions) => NativeNetworkCreateOptions;
|
|
43
|
+
export declare const createRustPeerbitOptions: (options?: PeerbitRustOptions) => PeerbitRustCreateOptions;
|
|
44
|
+
//# sourceMappingURL=rust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/rust.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,mBAAmB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEN,KAAK,kBAAkB,EACvB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,KAAK,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EAEpB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,yBAAyB,GAAG;IACvC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAChC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;CAC9C,CAAC;AAIF,MAAM,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAmIF,eAAO,MAAM,wBAAwB,GACpC,UAAS,yBAA8B,KACrC,oBASD,CAAC;AAEH,eAAO,MAAM,wBAAwB,GACpC,UAAS,yBAA8B,KACrC,0BAQD,CAAC;AAEH,eAAO,MAAM,wBAAwB,GACpC,UAAS,kBAAuB,KAC9B,wBAUD,CAAC"}
|
package/dist/src/rust.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { createStore as createRustStore, } from "@peerbit/any-store-rust";
|
|
2
|
+
import { create as createRustIndexer, } from "@peerbit/indexer-rust";
|
|
3
|
+
import { createNativeLogBlockStore, } from "@peerbit/log-rust";
|
|
4
|
+
import { logger as loggerFn } from "@peerbit/logger";
|
|
5
|
+
import { createNativeWireSyncSession } from "@peerbit/native-backbone";
|
|
6
|
+
import { createRustCoreStream } from "@peerbit/network-rust";
|
|
7
|
+
const logger = loggerFn("peerbit:client:rust");
|
|
8
|
+
class LazyNativeLogBlockStore {
|
|
9
|
+
store;
|
|
10
|
+
openPromise;
|
|
11
|
+
getNativeLogBlockStoreHandle() {
|
|
12
|
+
return this.store?.getNativeLogBlockStoreHandle();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Forward the native block-serving path so `RemoteBlocks.handleFetchRequest`
|
|
16
|
+
* serves stored blocks straight from wasm (no JS block-byte copy). Without
|
|
17
|
+
* this forwarder the optional call resolves to undefined through
|
|
18
|
+
* AnyBlockStore and every serve falls back to the JS byte-copy path.
|
|
19
|
+
*/
|
|
20
|
+
getBlockResponsePayload(cid) {
|
|
21
|
+
return this.store?.getBlockResponsePayload(cid);
|
|
22
|
+
}
|
|
23
|
+
status() {
|
|
24
|
+
return this.store?.status() ?? "closed";
|
|
25
|
+
}
|
|
26
|
+
async open() {
|
|
27
|
+
if (this.store?.status() === "open") {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.openPromise ??= (async () => {
|
|
31
|
+
this.store ??= await createNativeLogBlockStore();
|
|
32
|
+
await this.store.open();
|
|
33
|
+
})().finally(() => {
|
|
34
|
+
this.openPromise = undefined;
|
|
35
|
+
});
|
|
36
|
+
return this.openPromise;
|
|
37
|
+
}
|
|
38
|
+
async close() {
|
|
39
|
+
await this.openPromise;
|
|
40
|
+
await this.store?.close();
|
|
41
|
+
}
|
|
42
|
+
async ready() {
|
|
43
|
+
await this.open();
|
|
44
|
+
return this.store;
|
|
45
|
+
}
|
|
46
|
+
async get(key) {
|
|
47
|
+
return (await this.ready()).get(key);
|
|
48
|
+
}
|
|
49
|
+
async hasMany(keys) {
|
|
50
|
+
return (await this.ready()).hasMany(keys);
|
|
51
|
+
}
|
|
52
|
+
async put(key, value) {
|
|
53
|
+
await (await this.ready()).put(key, value);
|
|
54
|
+
}
|
|
55
|
+
async putImmutable(key, value) {
|
|
56
|
+
await (await this.ready()).putImmutable(key, value);
|
|
57
|
+
}
|
|
58
|
+
async putMany(entries) {
|
|
59
|
+
await (await this.ready()).putMany(Array.from(entries));
|
|
60
|
+
}
|
|
61
|
+
async putManyImmutable(entries) {
|
|
62
|
+
await (await this.ready()).putManyImmutable(Array.from(entries));
|
|
63
|
+
}
|
|
64
|
+
async del(key) {
|
|
65
|
+
await (await this.ready()).del(key);
|
|
66
|
+
}
|
|
67
|
+
async sublevel() {
|
|
68
|
+
return new LazyNativeLogBlockStore();
|
|
69
|
+
}
|
|
70
|
+
iterator() {
|
|
71
|
+
const self = this;
|
|
72
|
+
return {
|
|
73
|
+
async *[Symbol.asyncIterator]() {
|
|
74
|
+
for await (const entry of await (await self.ready()).iterator()) {
|
|
75
|
+
yield entry;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async clear() {
|
|
81
|
+
await (await this.ready()).clear();
|
|
82
|
+
}
|
|
83
|
+
async size() {
|
|
84
|
+
return (await this.ready()).size();
|
|
85
|
+
}
|
|
86
|
+
persisted() {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const createRustStoreFactory = (options) => (directory) => createRustStore(directory, options);
|
|
91
|
+
const createRustBlocksStoreFactory = (options, nativeLogBlocks) => (directory) => {
|
|
92
|
+
if (nativeLogBlocks) {
|
|
93
|
+
if (directory != null) {
|
|
94
|
+
// The native log block store keeps blocks in wasm memory only
|
|
95
|
+
// (no on-disk persistence), so the client `directory` is
|
|
96
|
+
// ignored for blocks. Blocks — including program manifests
|
|
97
|
+
// written via the client blocks service — are lost on restart.
|
|
98
|
+
logger.error(`storage.nativeLogBlocks is set: blocks are stored in memory only and the directory '${directory}' is not persisted. Program manifests and cached blocks will not survive a restart.`);
|
|
99
|
+
}
|
|
100
|
+
return new LazyNativeLogBlockStore();
|
|
101
|
+
}
|
|
102
|
+
return createRustStore(directory, options);
|
|
103
|
+
};
|
|
104
|
+
export const createRustStorageOptions = (options = {}) => ({
|
|
105
|
+
storeFactory: createRustStoreFactory(options.default),
|
|
106
|
+
blocksStoreFactory: createRustBlocksStoreFactory(options.blocks ?? options.default, options.nativeLogBlocks),
|
|
107
|
+
keychainStoreFactory: createRustStoreFactory(options.keychain ?? options.default),
|
|
108
|
+
});
|
|
109
|
+
export const createRustNetworkOptions = (options = {}) => ({
|
|
110
|
+
rustCore: options.rustCore === false ? undefined : () => createRustCoreStream(),
|
|
111
|
+
wireSync: options.wireSync === false
|
|
112
|
+
? undefined
|
|
113
|
+
: (selfHash) => createNativeWireSyncSession({ selfHash }),
|
|
114
|
+
sharedLogDefaults: options.sharedLogDefaults,
|
|
115
|
+
});
|
|
116
|
+
export const createRustPeerbitOptions = (options = {}) => ({
|
|
117
|
+
storage: createRustStorageOptions(options.storage),
|
|
118
|
+
indexer: (directory) => createRustIndexer(directory, options.indexer),
|
|
119
|
+
...(options.network === false
|
|
120
|
+
? {}
|
|
121
|
+
: {
|
|
122
|
+
network: createRustNetworkOptions(options.network === true ? {} : options.network),
|
|
123
|
+
}),
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=rust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/rust.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "peerbit",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "Peerbit client",
|
|
5
5
|
"author": "dao.xyz",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,6 +34,10 @@
|
|
|
34
34
|
".": {
|
|
35
35
|
"types": "./dist/src/index.d.ts",
|
|
36
36
|
"import": "./dist/src/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./rust": {
|
|
39
|
+
"types": "./dist/src/rust.d.ts",
|
|
40
|
+
"import": "./dist/src/rust.js"
|
|
37
41
|
}
|
|
38
42
|
},
|
|
39
43
|
"eslintConfig": {
|
|
@@ -84,21 +88,29 @@
|
|
|
84
88
|
"p-queue": "^8.0.1",
|
|
85
89
|
"path-browserify": "^1.0.1",
|
|
86
90
|
"uint8arrays": "^5.1.0",
|
|
87
|
-
"@peerbit/any-store": "
|
|
88
|
-
"@peerbit/
|
|
89
|
-
"@peerbit/
|
|
90
|
-
"@peerbit/
|
|
91
|
+
"@peerbit/any-store-opfs": "1.1.8",
|
|
92
|
+
"@peerbit/any-store": "2.2.10",
|
|
93
|
+
"@peerbit/blocks": "4.2.0",
|
|
94
|
+
"@peerbit/crypto": "3.1.2",
|
|
91
95
|
"@peerbit/build-assets": "1.1.0",
|
|
92
|
-
"@peerbit/indexer-interface": "3.0.
|
|
93
|
-
"@peerbit/
|
|
94
|
-
"@peerbit/indexer-sqlite3": "3.0.
|
|
95
|
-
"@peerbit/
|
|
96
|
+
"@peerbit/indexer-interface": "3.0.5",
|
|
97
|
+
"@peerbit/indexer-simple": "1.2.8",
|
|
98
|
+
"@peerbit/indexer-sqlite3": "3.0.8",
|
|
99
|
+
"@peerbit/keychain": "1.2.10",
|
|
96
100
|
"@peerbit/logger": "2.0.1",
|
|
97
|
-
"@peerbit/program": "6.0.
|
|
98
|
-
"@peerbit/pubsub": "5.
|
|
99
|
-
"@peerbit/stream
|
|
101
|
+
"@peerbit/program": "6.0.32",
|
|
102
|
+
"@peerbit/pubsub": "5.3.0",
|
|
103
|
+
"@peerbit/stream": "5.1.0",
|
|
104
|
+
"@peerbit/stream-interface": "6.0.11",
|
|
100
105
|
"@peerbit/time": "3.0.0"
|
|
101
106
|
},
|
|
107
|
+
"optionalDependencies": {
|
|
108
|
+
"@peerbit/any-store-rust": "0.1.0",
|
|
109
|
+
"@peerbit/indexer-rust": "1.0.1",
|
|
110
|
+
"@peerbit/network-rust": "0.1.0",
|
|
111
|
+
"@peerbit/native-backbone": "0.1.0",
|
|
112
|
+
"@peerbit/log-rust": "1.1.0"
|
|
113
|
+
},
|
|
102
114
|
"devDependencies": {
|
|
103
115
|
"@types/libsodium-wrappers": "^0.7.14",
|
|
104
116
|
"@types/path-browserify": "^1.0.2",
|
package/src/peer.ts
CHANGED
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
type FanoutTreeChannelOptions,
|
|
37
37
|
type FanoutTreeJoinOptions,
|
|
38
38
|
} from "@peerbit/pubsub";
|
|
39
|
+
import type { RustCoreStream } from "@peerbit/stream";
|
|
39
40
|
import type { Libp2p } from "libp2p";
|
|
40
41
|
import sodium from "libsodium-wrappers";
|
|
41
42
|
import path from "path-browserify";
|
|
@@ -53,19 +54,121 @@ export const logger = loggerFn("peerbit:client");
|
|
|
53
54
|
export type OptionalCreateOptions = {
|
|
54
55
|
libp2pExternal?: boolean;
|
|
55
56
|
};
|
|
57
|
+
export type NativeNetworkRuntime = {
|
|
58
|
+
rustCore?: RustCoreStream;
|
|
59
|
+
wireSync?: NativeWireSyncSessionLike;
|
|
60
|
+
};
|
|
56
61
|
export type CreateOptions = {
|
|
57
62
|
directory?: string;
|
|
58
63
|
storage: AnyStore;
|
|
59
64
|
indexer: Indices;
|
|
60
65
|
identity: Ed25519Keypair;
|
|
66
|
+
nativeNetwork?: NativeNetworkRuntime;
|
|
67
|
+
sharedLogNativeDefaults?: SharedLogNativeDefaultsLike;
|
|
61
68
|
} & OptionalCreateOptions;
|
|
62
69
|
type Libp2pOptions = {
|
|
63
70
|
libp2p?: Libp2pExtended | (PartialLibp2pCreateOptions & { peerId?: never });
|
|
64
71
|
};
|
|
65
72
|
type SimpleLibp2pOptions = { relay?: boolean };
|
|
73
|
+
export type StoreFactory = (directory?: string) => AnyStore;
|
|
74
|
+
export type StorageCreateOptions = {
|
|
75
|
+
storeFactory?: StoreFactory;
|
|
76
|
+
blocksStoreFactory?: StoreFactory;
|
|
77
|
+
keychainStoreFactory?: StoreFactory;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Per-node wire-sync session surface (implemented by
|
|
81
|
+
* `NativeBackboneWireSyncSession` in `@peerbit/native-backbone`). One object
|
|
82
|
+
* serves two seams: `decodeAndVerifyBatch` is the `nativeWire` inbound
|
|
83
|
+
* decoder of the pubsub DirectStream, and the stash accessors implement the
|
|
84
|
+
* `SharedLogNativeWireSync` receive-fusion surface shared-log consumes.
|
|
85
|
+
*/
|
|
86
|
+
export type NativeWireSyncSessionLike = {
|
|
87
|
+
/** Raw wasm session handle consumed by `prepareStashedRawReceive*`. */
|
|
88
|
+
handle: unknown;
|
|
89
|
+
decodeAndVerifyBatch(frames: Uint8Array[], nowMs: number): Uint32Array;
|
|
90
|
+
registerTopic(topic: string): void;
|
|
91
|
+
unregisterTopic(topic: string): boolean;
|
|
92
|
+
stashedMeta(id: Uint8Array):
|
|
93
|
+
| {
|
|
94
|
+
hashes: string[];
|
|
95
|
+
gidRefrences: string[][];
|
|
96
|
+
byteLengths: Uint32Array;
|
|
97
|
+
reserved: Uint8Array;
|
|
98
|
+
payloadLength: number;
|
|
99
|
+
}
|
|
100
|
+
| undefined;
|
|
101
|
+
stashedBlocks(
|
|
102
|
+
id: Uint8Array,
|
|
103
|
+
indexes?: Uint32Array,
|
|
104
|
+
): Uint8Array[] | undefined;
|
|
105
|
+
release(id: Uint8Array): boolean;
|
|
106
|
+
counters?(): {
|
|
107
|
+
stashed: number;
|
|
108
|
+
evicted: number;
|
|
109
|
+
metaReads: number;
|
|
110
|
+
blockCopyOuts: number;
|
|
111
|
+
released: number;
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Native shared-log defaults advertised to programs opened on this client
|
|
117
|
+
* (the `SharedLogNativeDefaults` hook of `@peerbit/shared-log`). Structural
|
|
118
|
+
* copy so the client does not depend on the shared-log package.
|
|
119
|
+
*/
|
|
120
|
+
export type SharedLogNativeDefaultsLike = {
|
|
121
|
+
nativeBackbone?:
|
|
122
|
+
| false
|
|
123
|
+
| {
|
|
124
|
+
optional?: boolean;
|
|
125
|
+
heads?: boolean;
|
|
126
|
+
documentIndex?: boolean;
|
|
127
|
+
coordinatePersistence?: unknown;
|
|
128
|
+
};
|
|
129
|
+
nativeGraph?: boolean | { optional?: boolean; heads?: boolean; graph?: unknown };
|
|
130
|
+
sync?: {
|
|
131
|
+
rawExchangeHeads?: boolean;
|
|
132
|
+
nativeWireSync?: NativeWireSyncSessionLike;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Native network plane for a client-built libp2p stack (services must be
|
|
138
|
+
* constructed by `Peerbit.create`, so this cannot be combined with an
|
|
139
|
+
* external libp2p instance). All parts are opt-in; `peerbit/rust` provides
|
|
140
|
+
* the preset that fills them in.
|
|
141
|
+
*/
|
|
142
|
+
export type NativeNetworkCreateOptions = {
|
|
143
|
+
/**
|
|
144
|
+
* Native DirectStream core factory (`createRustCoreStream` of
|
|
145
|
+
* `@peerbit/network-rust`). One core is shared by the pubsub, fanout and
|
|
146
|
+
* blocks services: routing/dedup/lane decisions and the protocol codecs
|
|
147
|
+
* run in wasm, including the batched inbound decode+verify.
|
|
148
|
+
*/
|
|
149
|
+
rustCore?: () => Promise<RustCoreStream>;
|
|
150
|
+
/**
|
|
151
|
+
* Per-node receive-fusion session factory
|
|
152
|
+
* (`createNativeWireSyncSession` of `@peerbit/native-backbone`), keyed by
|
|
153
|
+
* the node's public key hash. Installed as the pubsub DirectStream's
|
|
154
|
+
* inbound decoder so shared-log raw exchange-head payloads stay in wasm
|
|
155
|
+
* memory, and advertised to shared-log programs for the stashed receive.
|
|
156
|
+
*/
|
|
157
|
+
wireSync?: (selfHash: string) => Promise<NativeWireSyncSessionLike>;
|
|
158
|
+
/**
|
|
159
|
+
* Advertise native shared-log defaults (native backbone data plane,
|
|
160
|
+
* native graph, raw exchange-heads sync and the wire-sync session) to
|
|
161
|
+
* programs opened on this client. Explicit per-open options still win.
|
|
162
|
+
* Defaults to true when this options object is present.
|
|
163
|
+
*/
|
|
164
|
+
sharedLogDefaults?: boolean;
|
|
165
|
+
};
|
|
166
|
+
|
|
66
167
|
export type CreateInstanceOptions = (SimpleLibp2pOptions | Libp2pOptions) & {
|
|
67
168
|
directory?: string;
|
|
68
169
|
indexer?: (directory?: string) => Promise<Indices> | Indices;
|
|
170
|
+
storage?: StorageCreateOptions;
|
|
171
|
+
network?: NativeNetworkCreateOptions;
|
|
69
172
|
} & OptionalCreateOptions;
|
|
70
173
|
|
|
71
174
|
export type DialReadiness =
|
|
@@ -95,9 +198,9 @@ const isLibp2pInstance = (libp2p: Libp2pExtended | ClientCreateOptions) =>
|
|
|
95
198
|
|
|
96
199
|
const createCache = async (
|
|
97
200
|
directory: string | undefined,
|
|
98
|
-
options?: { reset?: boolean },
|
|
201
|
+
options?: { reset?: boolean; storeFactory?: StoreFactory },
|
|
99
202
|
) => {
|
|
100
|
-
const cache = createStore(directory);
|
|
203
|
+
const cache = (options?.storeFactory ?? createStore)(directory);
|
|
101
204
|
|
|
102
205
|
// "Wake up" the caches if they need it
|
|
103
206
|
if (cache) await cache.open();
|
|
@@ -119,6 +222,14 @@ export class Peerbit implements ProgramClient {
|
|
|
119
222
|
private _storage: AnyStore;
|
|
120
223
|
private _indexer: Indices;
|
|
121
224
|
private _libp2pExternal?: boolean = false;
|
|
225
|
+
private _nativeNetwork?: NativeNetworkRuntime;
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Native shared-log defaults advertised to programs opened on this
|
|
229
|
+
* client; read by `@peerbit/shared-log` (`SharedLogNativeDefaults`).
|
|
230
|
+
* Set by `CreateInstanceOptions.network` (the `peerbit/rust` preset).
|
|
231
|
+
*/
|
|
232
|
+
public readonly sharedLogNativeDefaults?: SharedLogNativeDefaultsLike;
|
|
122
233
|
|
|
123
234
|
// Libp2p peerid in Identity form
|
|
124
235
|
private _identity: Ed25519Keypair;
|
|
@@ -145,6 +256,13 @@ export class Peerbit implements ProgramClient {
|
|
|
145
256
|
this._storage = options.storage;
|
|
146
257
|
this._libp2pExternal = options.libp2pExternal;
|
|
147
258
|
this._indexer = options.indexer;
|
|
259
|
+
this._nativeNetwork = options.nativeNetwork;
|
|
260
|
+
this.sharedLogNativeDefaults = options.sharedLogNativeDefaults;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/** Native network runtime enabled by `CreateInstanceOptions.network`. */
|
|
264
|
+
get nativeNetwork(): NativeNetworkRuntime | undefined {
|
|
265
|
+
return this._nativeNetwork;
|
|
148
266
|
}
|
|
149
267
|
|
|
150
268
|
static async create(options: CreateInstanceOptions = {}): Promise<Peerbit> {
|
|
@@ -155,11 +273,33 @@ export class Peerbit implements ProgramClient {
|
|
|
155
273
|
|
|
156
274
|
const asRelay = (options as SimpleLibp2pOptions).relay ?? true;
|
|
157
275
|
|
|
276
|
+
// Validate incompatible options BEFORE acquiring any resources
|
|
277
|
+
// (cache store, indexer, datastore). Both inputs are known up front,
|
|
278
|
+
// so throwing here avoids leaking open handles / a locked directory
|
|
279
|
+
// that a later throw (after createCache/indexer/datastore.open) would
|
|
280
|
+
// leave behind — those are never cleaned up on the throw path.
|
|
281
|
+
if (
|
|
282
|
+
options.network &&
|
|
283
|
+
libp2pExtended &&
|
|
284
|
+
isLibp2pInstance(libp2pExtended)
|
|
285
|
+
) {
|
|
286
|
+
throw new Error(
|
|
287
|
+
"The 'network' option requires Peerbit.create to build the libp2p services; it cannot be combined with an external libp2p instance.",
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
|
|
158
291
|
const directory = options.directory;
|
|
159
292
|
const hasDir = directory != null;
|
|
293
|
+
const storageOptions = options.storage;
|
|
294
|
+
const storeFactory = storageOptions?.storeFactory ?? createStore;
|
|
295
|
+
const blocksStoreFactory =
|
|
296
|
+
storageOptions?.blocksStoreFactory ?? storageOptions?.storeFactory;
|
|
297
|
+
const keychainStoreFactory =
|
|
298
|
+
storageOptions?.keychainStoreFactory ?? storageOptions?.storeFactory;
|
|
160
299
|
|
|
161
300
|
const storage = await createCache(
|
|
162
301
|
directory != null ? path.join(directory, "/cache") : undefined,
|
|
302
|
+
{ storeFactory },
|
|
163
303
|
);
|
|
164
304
|
const indexerFn =
|
|
165
305
|
options.indexer ||
|
|
@@ -193,6 +333,11 @@ export class Peerbit implements ProgramClient {
|
|
|
193
333
|
|
|
194
334
|
let stopLibp2pOnClose = false;
|
|
195
335
|
const libp2pExternal = libp2pExtended && isLibp2pInstance(libp2pExtended);
|
|
336
|
+
const networkOptions = options.network;
|
|
337
|
+
// The `network` + external-libp2p incompatibility is validated at the
|
|
338
|
+
// top of create() (before any resources are opened).
|
|
339
|
+
let nativeNetwork: NativeNetworkRuntime | undefined;
|
|
340
|
+
let sharedLogNativeDefaults: SharedLogNativeDefaultsLike | undefined;
|
|
196
341
|
if (!libp2pExternal) {
|
|
197
342
|
const extendedOptions: ClientCreateOptions | undefined =
|
|
198
343
|
libp2pExtended as any as ClientCreateOptions;
|
|
@@ -201,7 +346,7 @@ export class Peerbit implements ProgramClient {
|
|
|
201
346
|
"Invalid libp2p option 'peerId'. libp2p derives the peer id from 'privateKey', so pass 'privateKey' to control identity.",
|
|
202
347
|
);
|
|
203
348
|
}
|
|
204
|
-
const store =
|
|
349
|
+
const store = (keychainStoreFactory ?? storeFactory)(keychainDirectory);
|
|
205
350
|
await store.open();
|
|
206
351
|
|
|
207
352
|
const cryptoKeychain = new DefaultCryptoKeychain({
|
|
@@ -223,6 +368,42 @@ export class Peerbit implements ProgramClient {
|
|
|
223
368
|
: undefined;
|
|
224
369
|
}
|
|
225
370
|
|
|
371
|
+
if (networkOptions) {
|
|
372
|
+
// The wire-sync session is keyed by the node's public key
|
|
373
|
+
// hash, so the identity must exist before the services are
|
|
374
|
+
// built (libp2p would otherwise generate it during start).
|
|
375
|
+
if (!privateKey && networkOptions.wireSync) {
|
|
376
|
+
privateKey = await keys.generateKeyPair("Ed25519");
|
|
377
|
+
}
|
|
378
|
+
const rustCore = await networkOptions.rustCore?.();
|
|
379
|
+
let wireSync: NativeWireSyncSessionLike | undefined;
|
|
380
|
+
if (networkOptions.wireSync && privateKey) {
|
|
381
|
+
const selfHash = getKeypairFromPrivateKey(privateKey)
|
|
382
|
+
.publicKey.hashcode();
|
|
383
|
+
wireSync = await networkOptions.wireSync(selfHash);
|
|
384
|
+
}
|
|
385
|
+
if (rustCore || wireSync) {
|
|
386
|
+
nativeNetwork = { rustCore, wireSync };
|
|
387
|
+
}
|
|
388
|
+
if (networkOptions.sharedLogDefaults !== false) {
|
|
389
|
+
sharedLogNativeDefaults = {
|
|
390
|
+
nativeBackbone: {},
|
|
391
|
+
// Optional so a missing/unbuildable @peerbit/log-rust
|
|
392
|
+
// (npm --omit=optional) or a service-worker context
|
|
393
|
+
// degrades gracefully instead of throwing on every
|
|
394
|
+
// program open. When the native backbone loads, its
|
|
395
|
+
// graph is used regardless; this default only applies
|
|
396
|
+
// when the backbone is absent, where a hard `true`
|
|
397
|
+
// would abort Log.open.
|
|
398
|
+
nativeGraph: { optional: true },
|
|
399
|
+
sync: {
|
|
400
|
+
rawExchangeHeads: true,
|
|
401
|
+
nativeWireSync: wireSync,
|
|
402
|
+
},
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
226
407
|
const topicRootControlPlane = new TopicRootControlPlane();
|
|
227
408
|
|
|
228
409
|
// Keep a single FanoutTree instance per peer so pubsub sharding + provider
|
|
@@ -234,6 +415,7 @@ export class Peerbit implements ProgramClient {
|
|
|
234
415
|
new FanoutTree(c, {
|
|
235
416
|
connectionManager: false,
|
|
236
417
|
topicRootControlPlane,
|
|
418
|
+
rustCore: nativeNetwork?.rustCore,
|
|
237
419
|
}));
|
|
238
420
|
const getOrCreateFanout = (c: any) => {
|
|
239
421
|
if (!fanoutInstance) {
|
|
@@ -262,30 +444,30 @@ export class Peerbit implements ProgramClient {
|
|
|
262
444
|
const out: string[] = [];
|
|
263
445
|
const push = (hash?: string) => {
|
|
264
446
|
if (!hash) return;
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
447
|
+
if (hash === blocksService?.publicKeyHash) return;
|
|
448
|
+
// Small bounded list; avoid Set allocations on hot paths.
|
|
449
|
+
if (out.includes(hash)) return;
|
|
450
|
+
out.push(hash);
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
// Prefer peers we've already negotiated `/peerbit/direct-block` streams with.
|
|
454
|
+
for (const h of blocksService?.peers.keys() ?? []) {
|
|
455
|
+
push(h);
|
|
456
|
+
if (out.length >= 32) return out;
|
|
457
|
+
}
|
|
276
458
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
459
|
+
// Fall back to currently connected libp2p peers.
|
|
460
|
+
for (const conn of c.connectionManager.getConnections()) {
|
|
461
|
+
try {
|
|
462
|
+
push(getPublicKeyFromPeerId(conn.remotePeer).hashcode());
|
|
463
|
+
} catch {
|
|
464
|
+
// ignore unexpected key types
|
|
465
|
+
}
|
|
466
|
+
if (out.length >= 32) break;
|
|
283
467
|
}
|
|
284
|
-
if (out.length >= 32) break;
|
|
285
|
-
}
|
|
286
468
|
|
|
287
|
-
|
|
288
|
-
|
|
469
|
+
return out;
|
|
470
|
+
};
|
|
289
471
|
|
|
290
472
|
const resolveProviders = async (
|
|
291
473
|
cid: string,
|
|
@@ -298,23 +480,25 @@ export class Peerbit implements ProgramClient {
|
|
|
298
480
|
{
|
|
299
481
|
want: 8,
|
|
300
482
|
timeoutMs: 2_000,
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
483
|
+
queryTimeoutMs: 500,
|
|
484
|
+
bootstrapMaxPeers: 2,
|
|
485
|
+
signal: options?.signal,
|
|
486
|
+
},
|
|
487
|
+
);
|
|
488
|
+
if (providers && providers.length > 0) return providers;
|
|
489
|
+
} catch {
|
|
490
|
+
// ignore discovery failures
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// 2) fallback to currently connected peers (keeps local/small nets working without trackers)
|
|
494
|
+
return fallbackConnectedPeers();
|
|
495
|
+
};
|
|
314
496
|
|
|
315
497
|
blocksService = new DirectBlock(c, {
|
|
316
498
|
canRelayMessage: asRelay,
|
|
317
|
-
directory: blocksDirectory,
|
|
499
|
+
directory: blocksStoreFactory ? undefined : blocksDirectory,
|
|
500
|
+
localStore: blocksStoreFactory?.(blocksDirectory),
|
|
501
|
+
rustCore: nativeNetwork?.rustCore,
|
|
318
502
|
resolveProviders,
|
|
319
503
|
onPut: async (cid) => {
|
|
320
504
|
// Best-effort directory announce for "get without remote.from" workflows.
|
|
@@ -324,17 +508,22 @@ export class Peerbit implements ProgramClient {
|
|
|
324
508
|
bootstrapMaxPeers: 2,
|
|
325
509
|
});
|
|
326
510
|
} catch {
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
511
|
+
// ignore announce failures
|
|
512
|
+
}
|
|
513
|
+
},
|
|
514
|
+
});
|
|
515
|
+
return blocksService;
|
|
332
516
|
},
|
|
333
517
|
pubsub: (c: any) =>
|
|
334
518
|
new TopicControlPlane(c, {
|
|
335
519
|
canRelayMessage: asRelay,
|
|
336
520
|
topicRootControlPlane,
|
|
337
521
|
fanout: getOrCreateFanout(c),
|
|
522
|
+
rustCore: nativeNetwork?.rustCore,
|
|
523
|
+
// The wire-sync session decodes+verifies inbound
|
|
524
|
+
// frames natively and stashes shared-log raw
|
|
525
|
+
// exchange-head payloads for the fused receive.
|
|
526
|
+
nativeWire: nativeNetwork?.wireSync,
|
|
338
527
|
}),
|
|
339
528
|
...extendedOptions?.services,
|
|
340
529
|
};
|
|
@@ -402,6 +591,8 @@ export class Peerbit implements ProgramClient {
|
|
|
402
591
|
libp2pExternal: !stopLibp2pOnClose,
|
|
403
592
|
identity,
|
|
404
593
|
indexer,
|
|
594
|
+
nativeNetwork,
|
|
595
|
+
sharedLogNativeDefaults,
|
|
405
596
|
});
|
|
406
597
|
return peer;
|
|
407
598
|
}
|
package/src/rust.ts
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import type { AnyStore } from "@peerbit/any-store";
|
|
2
|
+
import {
|
|
3
|
+
createStore as createRustStore,
|
|
4
|
+
type RustAnyStoreOptions,
|
|
5
|
+
} from "@peerbit/any-store-rust";
|
|
6
|
+
import {
|
|
7
|
+
create as createRustIndexer,
|
|
8
|
+
type RustIndexerOptions,
|
|
9
|
+
} from "@peerbit/indexer-rust";
|
|
10
|
+
import {
|
|
11
|
+
createNativeLogBlockStore,
|
|
12
|
+
type NativeLogBlockStore,
|
|
13
|
+
} from "@peerbit/log-rust";
|
|
14
|
+
import { logger as loggerFn } from "@peerbit/logger";
|
|
15
|
+
import { createNativeWireSyncSession } from "@peerbit/native-backbone";
|
|
16
|
+
import { createRustCoreStream } from "@peerbit/network-rust";
|
|
17
|
+
import type {
|
|
18
|
+
CreateInstanceOptions,
|
|
19
|
+
NativeNetworkCreateOptions,
|
|
20
|
+
StorageCreateOptions,
|
|
21
|
+
StoreFactory,
|
|
22
|
+
} from "./peer.js";
|
|
23
|
+
|
|
24
|
+
export type PeerbitRustStorageOptions = {
|
|
25
|
+
default?: RustAnyStoreOptions;
|
|
26
|
+
blocks?: RustAnyStoreOptions;
|
|
27
|
+
nativeLogBlocks?: boolean;
|
|
28
|
+
keychain?: RustAnyStoreOptions;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type PeerbitRustNetworkOptions = {
|
|
32
|
+
/**
|
|
33
|
+
* Run the DirectStream engine and the protocol codecs (topic control,
|
|
34
|
+
* fanout tree, block exchange) on the native core of
|
|
35
|
+
* `@peerbit/network-rust`. Default true.
|
|
36
|
+
*/
|
|
37
|
+
rustCore?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Decode+verify inbound pubsub frames in the native-backbone wasm module
|
|
40
|
+
* and stash shared-log raw exchange-head payloads there for the fused
|
|
41
|
+
* receive (no JS entry decode, no JS block-byte copies). Default true.
|
|
42
|
+
*/
|
|
43
|
+
wireSync?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Advertise native shared-log defaults (native backbone data plane,
|
|
46
|
+
* native graph, raw exchange-heads sync + the wire-sync session) to
|
|
47
|
+
* programs opened on this client. Default true.
|
|
48
|
+
*/
|
|
49
|
+
sharedLogDefaults?: boolean;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export type PeerbitRustOptions = {
|
|
53
|
+
storage?: PeerbitRustStorageOptions;
|
|
54
|
+
indexer?: RustIndexerOptions;
|
|
55
|
+
/** Native network plane; `false` keeps the js-libp2p wire path. */
|
|
56
|
+
network?: boolean | PeerbitRustNetworkOptions;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const logger = loggerFn("peerbit:client:rust");
|
|
60
|
+
|
|
61
|
+
export type PeerbitRustCreateOptions = {
|
|
62
|
+
storage: StorageCreateOptions;
|
|
63
|
+
indexer: NonNullable<CreateInstanceOptions["indexer"]>;
|
|
64
|
+
network?: NativeNetworkCreateOptions;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
class LazyNativeLogBlockStore implements AnyStore {
|
|
68
|
+
private store?: NativeLogBlockStore;
|
|
69
|
+
private openPromise?: Promise<void>;
|
|
70
|
+
|
|
71
|
+
getNativeLogBlockStoreHandle(): unknown {
|
|
72
|
+
return this.store?.getNativeLogBlockStoreHandle();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Forward the native block-serving path so `RemoteBlocks.handleFetchRequest`
|
|
77
|
+
* serves stored blocks straight from wasm (no JS block-byte copy). Without
|
|
78
|
+
* this forwarder the optional call resolves to undefined through
|
|
79
|
+
* AnyBlockStore and every serve falls back to the JS byte-copy path.
|
|
80
|
+
*/
|
|
81
|
+
getBlockResponsePayload(cid: string): Uint8Array | undefined {
|
|
82
|
+
return this.store?.getBlockResponsePayload(cid);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
status(): "opening" | "open" | "closing" | "closed" {
|
|
86
|
+
return this.store?.status() ?? "closed";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async open(): Promise<void> {
|
|
90
|
+
if (this.store?.status() === "open") {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
this.openPromise ??= (async () => {
|
|
94
|
+
this.store ??= await createNativeLogBlockStore();
|
|
95
|
+
await this.store.open();
|
|
96
|
+
})().finally(() => {
|
|
97
|
+
this.openPromise = undefined;
|
|
98
|
+
});
|
|
99
|
+
return this.openPromise;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async close(): Promise<void> {
|
|
103
|
+
await this.openPromise;
|
|
104
|
+
await this.store?.close();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private async ready(): Promise<NativeLogBlockStore> {
|
|
108
|
+
await this.open();
|
|
109
|
+
return this.store!;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async get(key: string): Promise<Uint8Array | undefined> {
|
|
113
|
+
return (await this.ready()).get(key);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async hasMany(keys: string[]): Promise<boolean[]> {
|
|
117
|
+
return (await this.ready()).hasMany(keys);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async put(key: string, value: Uint8Array): Promise<void> {
|
|
121
|
+
await (await this.ready()).put(key, value);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async putImmutable(key: string, value: Uint8Array): Promise<void> {
|
|
125
|
+
await (await this.ready()).putImmutable(key, value);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
async putMany(entries: Iterable<readonly [string, Uint8Array]>): Promise<void> {
|
|
129
|
+
await (await this.ready()).putMany(Array.from(entries));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async putManyImmutable(
|
|
133
|
+
entries: Iterable<readonly [string, Uint8Array]>,
|
|
134
|
+
): Promise<void> {
|
|
135
|
+
await (await this.ready()).putManyImmutable(Array.from(entries));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async del(key: string): Promise<void> {
|
|
139
|
+
await (await this.ready()).del(key);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async sublevel(): Promise<LazyNativeLogBlockStore> {
|
|
143
|
+
return new LazyNativeLogBlockStore();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
iterator() {
|
|
147
|
+
const self = this;
|
|
148
|
+
return {
|
|
149
|
+
async *[Symbol.asyncIterator]() {
|
|
150
|
+
for await (const entry of await (await self.ready()).iterator()) {
|
|
151
|
+
yield entry;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async clear(): Promise<void> {
|
|
158
|
+
await (await this.ready()).clear();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async size(): Promise<number> {
|
|
162
|
+
return (await this.ready()).size();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
persisted(): boolean {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const createRustStoreFactory =
|
|
171
|
+
(options: RustAnyStoreOptions | undefined): StoreFactory =>
|
|
172
|
+
(directory) =>
|
|
173
|
+
createRustStore(directory, options);
|
|
174
|
+
|
|
175
|
+
const createRustBlocksStoreFactory =
|
|
176
|
+
(
|
|
177
|
+
options: RustAnyStoreOptions | undefined,
|
|
178
|
+
nativeLogBlocks: boolean | undefined,
|
|
179
|
+
): StoreFactory =>
|
|
180
|
+
(directory) => {
|
|
181
|
+
if (nativeLogBlocks) {
|
|
182
|
+
if (directory != null) {
|
|
183
|
+
// The native log block store keeps blocks in wasm memory only
|
|
184
|
+
// (no on-disk persistence), so the client `directory` is
|
|
185
|
+
// ignored for blocks. Blocks — including program manifests
|
|
186
|
+
// written via the client blocks service — are lost on restart.
|
|
187
|
+
logger.error(
|
|
188
|
+
`storage.nativeLogBlocks is set: blocks are stored in memory only and the directory '${directory}' is not persisted. Program manifests and cached blocks will not survive a restart.`,
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
return new LazyNativeLogBlockStore();
|
|
192
|
+
}
|
|
193
|
+
return createRustStore(directory, options);
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
export const createRustStorageOptions = (
|
|
197
|
+
options: PeerbitRustStorageOptions = {},
|
|
198
|
+
): StorageCreateOptions => ({
|
|
199
|
+
storeFactory: createRustStoreFactory(options.default),
|
|
200
|
+
blocksStoreFactory: createRustBlocksStoreFactory(
|
|
201
|
+
options.blocks ?? options.default,
|
|
202
|
+
options.nativeLogBlocks,
|
|
203
|
+
),
|
|
204
|
+
keychainStoreFactory: createRustStoreFactory(
|
|
205
|
+
options.keychain ?? options.default,
|
|
206
|
+
),
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
export const createRustNetworkOptions = (
|
|
210
|
+
options: PeerbitRustNetworkOptions = {},
|
|
211
|
+
): NativeNetworkCreateOptions => ({
|
|
212
|
+
rustCore:
|
|
213
|
+
options.rustCore === false ? undefined : () => createRustCoreStream(),
|
|
214
|
+
wireSync:
|
|
215
|
+
options.wireSync === false
|
|
216
|
+
? undefined
|
|
217
|
+
: (selfHash) => createNativeWireSyncSession({ selfHash }),
|
|
218
|
+
sharedLogDefaults: options.sharedLogDefaults,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
export const createRustPeerbitOptions = (
|
|
222
|
+
options: PeerbitRustOptions = {},
|
|
223
|
+
): PeerbitRustCreateOptions => ({
|
|
224
|
+
storage: createRustStorageOptions(options.storage),
|
|
225
|
+
indexer: (directory) => createRustIndexer(directory, options.indexer),
|
|
226
|
+
...(options.network === false
|
|
227
|
+
? {}
|
|
228
|
+
: {
|
|
229
|
+
network: createRustNetworkOptions(
|
|
230
|
+
options.network === true ? {} : options.network,
|
|
231
|
+
),
|
|
232
|
+
}),
|
|
233
|
+
});
|