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.
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/peer.ts"],"names":[],"mappings":"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"}
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 storage = await createCache(directory != null ? path.join(directory, "/cache") : undefined);
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 = createStore(keychainDirectory);
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
  }
@@ -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"}
@@ -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.2.19",
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": "2.2.9",
88
- "@peerbit/blocks": "4.1.9",
89
- "@peerbit/crypto": "3.1.1",
90
- "@peerbit/any-store-opfs": "1.1.7",
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.4",
93
- "@peerbit/keychain": "1.2.9",
94
- "@peerbit/indexer-sqlite3": "3.0.7",
95
- "@peerbit/indexer-simple": "1.2.7",
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.30",
98
- "@peerbit/pubsub": "5.2.11",
99
- "@peerbit/stream-interface": "6.0.10",
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 = createStore(keychainDirectory);
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
- if (hash === blocksService?.publicKeyHash) return;
266
- // Small bounded list; avoid Set allocations on hot paths.
267
- if (out.includes(hash)) return;
268
- out.push(hash);
269
- };
270
-
271
- // Prefer peers we've already negotiated `/peerbit/direct-block` streams with.
272
- for (const h of blocksService?.peers.keys() ?? []) {
273
- push(h);
274
- if (out.length >= 32) return out;
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
- // Fall back to currently connected libp2p peers.
278
- for (const conn of c.connectionManager.getConnections()) {
279
- try {
280
- push(getPublicKeyFromPeerId(conn.remotePeer).hashcode());
281
- } catch {
282
- // ignore unexpected key types
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
- return out;
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
- queryTimeoutMs: 500,
302
- bootstrapMaxPeers: 2,
303
- signal: options?.signal,
304
- },
305
- );
306
- if (providers && providers.length > 0) return providers;
307
- } catch {
308
- // ignore discovery failures
309
- }
310
-
311
- // 2) fallback to currently connected peers (keeps local/small nets working without trackers)
312
- return fallbackConnectedPeers();
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
- // ignore announce failures
328
- }
329
- },
330
- });
331
- return blocksService;
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
+ });