peerbit 1.1.6 → 1.1.7

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/lib/esm/libp2p.js CHANGED
@@ -3,7 +3,7 @@ import { DirectSub } from "@peerbit/pubsub";
3
3
  import { DirectBlock } from "@peerbit/blocks";
4
4
  import { noise } from "@dao-xyz/libp2p-noise";
5
5
  import { mplex } from "@libp2p/mplex";
6
- import { transports, relay } from "./transports.js";
6
+ import { transports, relay, listen } from "./transports.js";
7
7
  import { identifyService } from "libp2p/identify";
8
8
  export const createLibp2pExtended = (opts = {
9
9
  services: {
@@ -26,7 +26,7 @@ export const createLibp2pExtended = (opts = {
26
26
  minConnections: 0,
27
27
  },
28
28
  addresses: {
29
- listen: ["/ip4/127.0.0.1/tcp/0", "/ip4/127.0.0.1/tcp/0/ws"],
29
+ listen: listen(),
30
30
  },
31
31
  transports: transports(),
32
32
  connectionEncryption: [noise()],
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../src/libp2p.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA4C,MAAM,QAAQ,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAmBlD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CACnC,OAA4B;IAC3B,QAAQ,EAAE;QACT,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;KAC/B;CACD,EACyB,EAAE;IAC5B,MAAM,aAAa,GAAG;QACrB,KAAK,EAAE,KAAK,EAAE;QACd,QAAQ,EAAE,eAAe,EAAE;KAC3B,CAAC;IAEF,kDAAkD;IAClD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YACrC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;SAC1B;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;QACnB,iBAAiB,EAAE;YAClB,cAAc,EAAE,CAAC;SACjB;QACD,SAAS,EAAE;YACV,MAAM,EAAE,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;SAC3D;QACD,UAAU,EAAE,UAAU,EAAE;QACxB,oBAAoB,EAAE,CAAC,KAAK,EAAE,CAAC;QAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,GAAG,IAAI;QACP,QAAQ,EAAE;YACT,GAAG,aAAa;YAChB,MAAM,EACL,IAAI,CAAC,QAAQ,EAAE,MAAM;gBACrB,CAAC,CAAC,CAAC,EAAE,EAAE,CACN,IAAI,SAAS,CAAC,CAAC,EAAE;oBAChB,eAAe,EAAE,IAAI;oBACrB,eAAe,EAAE,cAAc;oBAC/B,iBAAiB,EAAE;wBAClB,QAAQ,EAAE,IAAI;qBACd;iBACD,CAAC,CAAC;YACL,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5D,GAAG,IAAI,CAAC,QAAQ;SAChB;KACD,CAAC,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../src/libp2p.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA4C,MAAM,QAAQ,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAmBlD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CACnC,OAA4B;IAC3B,QAAQ,EAAE;QACT,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;KAC/B;CACD,EACyB,EAAE;IAC5B,MAAM,aAAa,GAAG;QACrB,KAAK,EAAE,KAAK,EAAE;QACd,QAAQ,EAAE,eAAe,EAAE;KAC3B,CAAC;IAEF,kDAAkD;IAClD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YACrC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;SAC1B;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;QACnB,iBAAiB,EAAE;YAClB,cAAc,EAAE,CAAC;SACjB;QACD,SAAS,EAAE;YACV,MAAM,EAAE,MAAM,EAAE;SAChB;QACD,UAAU,EAAE,UAAU,EAAE;QACxB,oBAAoB,EAAE,CAAC,KAAK,EAAE,CAAC;QAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,GAAG,IAAI;QACP,QAAQ,EAAE;YACT,GAAG,aAAa;YAChB,MAAM,EACL,IAAI,CAAC,QAAQ,EAAE,MAAM;gBACrB,CAAC,CAAC,CAAC,EAAE,EAAE,CACN,IAAI,SAAS,CAAC,CAAC,EAAE;oBAChB,eAAe,EAAE,IAAI;oBACrB,eAAe,EAAE,cAAc;oBAC/B,iBAAiB,EAAE;wBAClB,QAAQ,EAAE,IAAI;qBACd;iBACD,CAAC,CAAC;YACL,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5D,GAAG,IAAI,CAAC,QAAQ;SAChB;KACD,CAAC,CAAC;AACJ,CAAC,CAAC"}
package/lib/esm/peer.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import LazyLevel from "@peerbit/lazy-level";
2
2
  import { Multiaddr } from "@multiformats/multiaddr";
3
3
  import { Ed25519Keypair, Libp2pKeychain } from "@peerbit/crypto";
4
- import { Program, Address, ProgramInitializationOptions, ProgramClient } from "@peerbit/program";
4
+ import { Program, Address, ProgramClient } from "@peerbit/program";
5
5
  import "@libp2p/peer-id";
6
6
  import { Libp2pExtended, Libp2pCreateOptions as ClientCreateOptions } from "./libp2p.js";
7
+ import { OpenOptions } from "@peerbit/program";
7
8
  export declare const logger: import("pino").Logger<import("pino").LoggerOptions | import("pino").DestinationStream>;
8
9
  export type OptionalCreateOptions = {
9
10
  limitSigning?: boolean;
@@ -22,21 +23,15 @@ export type CreateInstanceOptions = {
22
23
  directory?: string;
23
24
  cache?: LazyLevel;
24
25
  } & OptionalCreateOptions;
25
- type ProgramMergeStrategy = "replace" | "reject" | "reuse";
26
- export type OpenOptions<Args> = {
27
- timeout?: number;
28
- existing?: ProgramMergeStrategy;
29
- } & ProgramInitializationOptions<Args>;
30
26
  export declare class Peerbit implements ProgramClient {
31
27
  _libp2p: Libp2pExtended;
32
28
  directory?: string;
33
- programs: Map<string, Program>;
34
29
  limitSigning: boolean;
35
30
  private _cache;
36
31
  private _libp2pExternal?;
37
32
  private _identity;
38
33
  private _keychain;
39
- private _openQueue;
34
+ private _handler;
40
35
  constructor(libp2p: Libp2pExtended, options: CreateOptions);
41
36
  static create(options?: CreateInstanceOptions): Promise<Peerbit>;
42
37
  get libp2p(): Libp2pExtended;
@@ -54,9 +49,6 @@ export declare class Peerbit implements ProgramClient {
54
49
  dial(address: string | Multiaddr | Multiaddr[] | ProgramClient): Promise<boolean>;
55
50
  start(): Promise<void>;
56
51
  stop(): Promise<void>;
57
- private _onProgamClose;
58
- private _onProgramOpen;
59
- private checkProcessExisting;
60
52
  /**
61
53
  * Default behaviour of a store is only to accept heads that are forks (new roots) with some probability
62
54
  * and to replicate heads (and updates) which is requested by another peer
@@ -64,7 +56,6 @@ export declare class Peerbit implements ProgramClient {
64
56
  * @param options
65
57
  * @returns
66
58
  */
67
- open<S extends Program<Args>, Args = any>(storeOrAddress: S | Address | string, options?: OpenOptions<Args>): Promise<S>;
59
+ open<S extends Program<Args>, Args = any>(storeOrAddress: S | Address | string, options?: OpenOptions<Args, S>): Promise<S>;
68
60
  get memory(): LazyLevel;
69
61
  }
70
- export {};
package/lib/esm/peer.js CHANGED
@@ -3,8 +3,7 @@ import { Level } from "level";
3
3
  import { MemoryLevel } from "memory-level";
4
4
  import { multiaddr, isMultiaddr } from "@multiformats/multiaddr";
5
5
  import { Ed25519Keypair, Ed25519PublicKey, Libp2pKeychain, } from "@peerbit/crypto";
6
- import { Program, } from "@peerbit/program";
7
- import { logger as loggerFn } from "@peerbit/logger";
6
+ import { ProgramHandler, } from "@peerbit/program";
8
7
  import { DirectSub } from "@peerbit/pubsub";
9
8
  import sodium from "libsodium-wrappers";
10
9
  import path from "path-browserify";
@@ -15,7 +14,7 @@ import { createLibp2pExtended, } from "./libp2p.js";
15
14
  import { DirectBlock } from "@peerbit/blocks";
16
15
  import { LevelDatastore } from "datastore-level";
17
16
  import { BinaryWriter } from "@dao-xyz/borsh";
18
- import PQueue from "p-queue";
17
+ import { logger as loggerFn } from "@peerbit/logger";
19
18
  export const logger = loggerFn({ module: "client" });
20
19
  const isLibp2pInstance = (libp2p) => !!libp2p.getMultiaddrs;
21
20
  const createLevel = (path) => {
@@ -36,15 +35,13 @@ const createCache = async (directory, options) => {
36
35
  export class Peerbit {
37
36
  _libp2p;
38
37
  directory;
39
- /// program address => Program metadata
40
- programs;
41
38
  limitSigning;
42
39
  _cache;
43
40
  _libp2pExternal = false;
44
41
  // Libp2p peerid in Identity form
45
42
  _identity;
46
43
  _keychain; // Keychain + Caching + X25519 keys
47
- _openQueue;
44
+ _handler;
48
45
  constructor(libp2p, options) {
49
46
  if (libp2p == null) {
50
47
  throw new Error("Libp2p required");
@@ -60,11 +57,9 @@ export class Peerbit {
60
57
  this._identity = options.identity;
61
58
  this._keychain = options.keychain;
62
59
  this.directory = options.directory;
63
- this.programs = new Map();
64
60
  this.limitSigning = options.limitSigning || false;
65
61
  this._cache = options.cache;
66
62
  this._libp2pExternal = options.libp2pExternal;
67
- this._openQueue = new PQueue({ concurrency: 1 });
68
63
  }
69
64
  static async create(options = {}) {
70
65
  await sodium.ready; // Some of the modules depends on sodium to be readyy
@@ -192,54 +187,13 @@ export class Peerbit {
192
187
  }
193
188
  }
194
189
  async stop() {
195
- this._openQueue.clear();
196
- await this._openQueue.onIdle();
197
- // Close all open databases
198
- await Promise.all([...this.programs.values()].map((program) => program.close()));
190
+ await this._handler?.stop();
199
191
  await this._cache.close();
200
192
  // Close libp2p (after above)
201
193
  if (!this._libp2pExternal) {
202
194
  // only close it if we created it
203
195
  await this.libp2p.stop();
204
196
  }
205
- // Remove all databases from the state
206
- this.programs = new Map();
207
- }
208
- _onProgamClose(program) {
209
- this.programs.delete(program.address.toString());
210
- }
211
- async _onProgramOpen(program, mergeSrategy) {
212
- const programAddress = program.address?.toString();
213
- if (!programAddress) {
214
- throw new Error("Missing program address");
215
- }
216
- if (this.programs.has(programAddress)) {
217
- // second condition only makes this throw error if we are to add a new instance with the same address
218
- const existing = await this.checkProcessExisting(programAddress, program, mergeSrategy);
219
- if (!existing) {
220
- throw new Error("Unexpected");
221
- }
222
- this.programs.set(programAddress, program);
223
- }
224
- else {
225
- this.programs.set(programAddress, program);
226
- }
227
- }
228
- async checkProcessExisting(address, toOpen, mergeSrategy = "reject") {
229
- const prev = this.programs.get(address);
230
- if (mergeSrategy === "reject") {
231
- if (prev) {
232
- throw new Error(`Program at ${address} is already open`);
233
- }
234
- }
235
- else if (mergeSrategy === "replace") {
236
- if (prev && prev !== toOpen) {
237
- await prev.close(); // clouse previous
238
- }
239
- }
240
- else if (mergeSrategy === "reuse") {
241
- return prev;
242
- }
243
197
  }
244
198
  /**
245
199
  * Default behaviour of a store is only to accept heads that are forks (new roots) with some probability
@@ -249,80 +203,7 @@ export class Peerbit {
249
203
  * @returns
250
204
  */
251
205
  async open(storeOrAddress, options = {}) {
252
- const fn = async () => {
253
- if (!this.libp2p.isStarted()) {
254
- throw new Error("Can not open a store while disconnected");
255
- }
256
- // TODO add locks for store lifecycle, e.g. what happens if we try to open and close a store at the same time?
257
- let program = storeOrAddress;
258
- if (typeof storeOrAddress === "string") {
259
- try {
260
- if (this.programs?.has(storeOrAddress.toString())) {
261
- const existing = await this.checkProcessExisting(storeOrAddress.toString(), program, options?.existing);
262
- if (existing) {
263
- return existing;
264
- }
265
- }
266
- else {
267
- program = (await Program.load(storeOrAddress, this._libp2p.services.blocks, options)); // TODO fix typings
268
- if (program instanceof Program === false) {
269
- throw new Error(`Failed to open program because program is of type ${program?.constructor.name} and not ${Program.name}`);
270
- }
271
- }
272
- }
273
- catch (error) {
274
- logger.error("Failed to load store with address: " + storeOrAddress.toString());
275
- throw error;
276
- }
277
- }
278
- else if (!program.closed) {
279
- const existing = this.programs.get(program.address);
280
- if (existing === program) {
281
- return program;
282
- }
283
- else if (existing) {
284
- const existing = await this.checkProcessExisting(program.address, program, options?.existing);
285
- if (existing) {
286
- return existing;
287
- }
288
- }
289
- }
290
- logger.debug(`Open database '${program.constructor.name}`);
291
- const address = await program.save(this.services.blocks);
292
- const existing = await this.checkProcessExisting(address, program, options?.existing);
293
- if (existing) {
294
- return existing;
295
- }
296
- await program.beforeOpen(this, {
297
- onBeforeOpen: (p) => {
298
- if (p instanceof Program && p.parents.length === 1 && !p.parents[0]) {
299
- return this._onProgramOpen(p, options?.existing);
300
- }
301
- },
302
- onClose: (p) => {
303
- if (p instanceof Program) {
304
- return this._onProgamClose(p);
305
- }
306
- },
307
- onDrop: (p) => {
308
- if (p instanceof Program) {
309
- return this._onProgamClose(p);
310
- }
311
- },
312
- ...options,
313
- // If the program opens more programs
314
- // reset: options.reset,
315
- });
316
- await program.open(options.args);
317
- await program.afterOpen();
318
- return program;
319
- };
320
- // Prevent deadlocks when a program is opened by another program
321
- // TODO make proper deduplciation behaviour
322
- if (options?.parent) {
323
- return fn();
324
- }
325
- return this._openQueue.add(fn); // TODO p-queue seem to return void type ;
206
+ return (this._handler || (this._handler = new ProgramHandler({ client: this }))).open(storeOrAddress, options);
326
207
  }
327
208
  get memory() {
328
209
  return this._cache;
@@ -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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"}
@@ -1,2 +1,3 @@
1
1
  export declare const transports: () => ((components: import("libp2p/dist/src/circuit-relay/transport").CircuitRelayTransportComponents) => import("@libp2p/interface-transport").Transport)[];
2
2
  export declare const relay: () => undefined;
3
+ export declare const listen: () => string[] | undefined;
@@ -10,4 +10,5 @@ export const transports = () => [
10
10
  webRTC({}),
11
11
  ];
12
12
  export const relay = () => undefined;
13
+ export const listen = () => undefined;
13
14
  //# sourceMappingURL=transports-browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transports-browser.js","sourceRoot":"","sources":["../../src/transports-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC3B,qBAAqB,CAAC;QACrB,cAAc,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC"}
1
+ {"version":3,"file":"transports-browser.js","sourceRoot":"","sources":["../../src/transports-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC3B,qBAAqB,CAAC;QACrB,cAAc,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;AAErC,MAAM,CAAC,MAAM,MAAM,GAA+B,GAAG,EAAE,CAAC,SAAS,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export declare const transports: () => (((components: import("libp2p/dist/src/circuit-relay/transport").CircuitRelayTransportComponents) => import("@libp2p/interface-transport").Transport) | ((components?: import("@libp2p/tcp").TCPComponents | undefined) => import("@libp2p/interface-transport").Transport))[];
2
2
  export declare const relay: () => (components: import("libp2p/dist/src/circuit-relay/server").CircuitRelayServerComponents) => import("libp2p/circuit-relay").CircuitRelayService;
3
+ export declare const listen: () => string[] | undefined;
@@ -9,4 +9,8 @@ export const transports = () => [
9
9
  tcp(),
10
10
  ];
11
11
  export const relay = () => circuitRelayServer({ reservations: { maxReservations: 1000 } });
12
+ export const listen = () => [
13
+ "/ip4/127.0.0.1/tcp/0",
14
+ "/ip4/127.0.0.1/tcp/0/ws",
15
+ ];
12
16
  //# sourceMappingURL=transports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transports.js","sourceRoot":"","sources":["../../src/transports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC3B,qBAAqB,EAAE;IACvB,GAAG,EAAE;CACL,CAAC;AACF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE,CACzB,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"transports.js","sourceRoot":"","sources":["../../src/transports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC3B,qBAAqB,EAAE;IACvB,GAAG,EAAE;CACL,CAAC;AACF,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,EAAE,CACzB,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,MAAM,GAA+B,GAAG,EAAE,CAAC;IACvD,sBAAsB;IACtB,yBAAyB;CACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peerbit",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "description": "Peerbit client",
5
5
  "author": "dao.xyz",
6
6
  "license": "MIT",
@@ -40,17 +40,16 @@
40
40
  "@libp2p/tcp": "^7.0.3",
41
41
  "@libp2p/webrtc": "^2.0.11",
42
42
  "@libp2p/websockets": "^6.0.3",
43
- "@peerbit/blocks": "^1.0.5",
44
- "@peerbit/crypto": "1.0.3",
45
- "@peerbit/lazy-level": "1.0.1",
43
+ "@peerbit/blocks": "^1.0.6",
44
+ "@peerbit/crypto": "1.0.4",
45
+ "@peerbit/lazy-level": "1.0.2",
46
46
  "@peerbit/logger": "1.0.1",
47
- "@peerbit/program": "1.0.6",
48
- "@peerbit/pubsub": "^1.0.5",
47
+ "@peerbit/program": "2.0.0",
48
+ "@peerbit/pubsub": "^1.0.6",
49
49
  "@peerbit/uint8arrays": "3.0.1",
50
50
  "datastore-level": "^10.1.2",
51
51
  "level": "^8.0.0",
52
52
  "memory-level": "^1.0.0",
53
- "p-queue": "^7.3.4",
54
53
  "path-browserify": "^1.0.1"
55
54
  },
56
55
  "devDependencies": {
@@ -74,5 +73,5 @@
74
73
  "p2p",
75
74
  "peer-to-peer"
76
75
  ],
77
- "gitHead": "99e30817f094e45ffcd60f4babd90a717bd26a22"
76
+ "gitHead": "32f61ad9f3d5906e13d46f2a80f61c1826a3e817"
78
77
  }
package/src/libp2p.ts CHANGED
@@ -3,7 +3,7 @@ import { DirectSub } from "@peerbit/pubsub";
3
3
  import { DirectBlock } from "@peerbit/blocks";
4
4
  import { noise } from "@dao-xyz/libp2p-noise";
5
5
  import { mplex } from "@libp2p/mplex";
6
- import { transports, relay } from "./transports.js";
6
+ import { transports, relay, listen } from "./transports.js";
7
7
  import { identifyService } from "libp2p/identify";
8
8
  import { CircuitRelayService } from "libp2p/dist/src/circuit-relay/index.js";
9
9
 
@@ -48,7 +48,7 @@ export const createLibp2pExtended = (
48
48
  minConnections: 0,
49
49
  },
50
50
  addresses: {
51
- listen: ["/ip4/127.0.0.1/tcp/0", "/ip4/127.0.0.1/tcp/0/ws"],
51
+ listen: listen(),
52
52
  },
53
53
  transports: transports(),
54
54
  connectionEncryption: [noise()],
package/src/peer.ts CHANGED
@@ -12,10 +12,9 @@ import {
12
12
  import {
13
13
  Program,
14
14
  Address,
15
- ProgramInitializationOptions,
16
15
  ProgramClient,
16
+ ProgramHandler,
17
17
  } from "@peerbit/program";
18
- import { logger as loggerFn } from "@peerbit/logger";
19
18
  import { DirectSub } from "@peerbit/pubsub";
20
19
  import sodium from "libsodium-wrappers";
21
20
  import path from "path-browserify";
@@ -31,7 +30,8 @@ import {
31
30
  import { DirectBlock } from "@peerbit/blocks";
32
31
  import { LevelDatastore } from "datastore-level";
33
32
  import { BinaryWriter } from "@dao-xyz/borsh";
34
- import PQueue from "p-queue";
33
+ import { logger as loggerFn } from "@peerbit/logger";
34
+ import { OpenOptions } from "@peerbit/program";
35
35
 
36
36
  export const logger = loggerFn({ module: "client" });
37
37
 
@@ -53,13 +53,6 @@ export type CreateInstanceOptions = {
53
53
  directory?: string;
54
54
  cache?: LazyLevel;
55
55
  } & OptionalCreateOptions;
56
- type ProgramMergeStrategy = "replace" | "reject" | "reuse";
57
- export type OpenOptions<Args> = {
58
- timeout?: number;
59
- existing?: ProgramMergeStrategy;
60
- /*
61
- reset?: boolean; */
62
- } & ProgramInitializationOptions<Args>;
63
56
 
64
57
  const isLibp2pInstance = (libp2p: Libp2pExtended | ClientCreateOptions) =>
65
58
  !!(libp2p as Libp2p).getMultiaddrs;
@@ -90,8 +83,6 @@ export class Peerbit implements ProgramClient {
90
83
 
91
84
  directory?: string;
92
85
 
93
- /// program address => Program metadata
94
- programs: Map<string, Program>;
95
86
  limitSigning: boolean;
96
87
 
97
88
  private _cache: LazyLevel;
@@ -101,8 +92,7 @@ export class Peerbit implements ProgramClient {
101
92
  private _identity: Ed25519Keypair;
102
93
 
103
94
  private _keychain: Libp2pKeychain; // Keychain + Caching + X25519 keys
104
-
105
- private _openQueue: PQueue;
95
+ private _handler: ProgramHandler;
106
96
  constructor(libp2p: Libp2pExtended, options: CreateOptions) {
107
97
  if (libp2p == null) {
108
98
  throw new Error("Libp2p required");
@@ -123,11 +113,9 @@ export class Peerbit implements ProgramClient {
123
113
  this._keychain = options.keychain;
124
114
 
125
115
  this.directory = options.directory;
126
- this.programs = new Map();
127
116
  this.limitSigning = options.limitSigning || false;
128
117
  this._cache = options.cache;
129
118
  this._libp2pExternal = options.libp2pExternal;
130
- this._openQueue = new PQueue({ concurrency: 1 });
131
119
  }
132
120
 
133
121
  static async create(options: CreateInstanceOptions = {}): Promise<Peerbit> {
@@ -283,14 +271,7 @@ export class Peerbit implements ProgramClient {
283
271
  }
284
272
  }
285
273
  async stop() {
286
- this._openQueue.clear();
287
- await this._openQueue.onIdle();
288
-
289
- // Close all open databases
290
- await Promise.all(
291
- [...this.programs.values()].map((program) => program.close())
292
- );
293
-
274
+ await this._handler?.stop();
294
275
  await this._cache.close();
295
276
 
296
277
  // Close libp2p (after above)
@@ -298,57 +279,8 @@ export class Peerbit implements ProgramClient {
298
279
  // only close it if we created it
299
280
  await this.libp2p.stop();
300
281
  }
301
-
302
- // Remove all databases from the state
303
- this.programs = new Map();
304
- }
305
-
306
- private _onProgamClose(program: Program) {
307
- this.programs.delete(program.address!.toString());
308
- }
309
-
310
- private async _onProgramOpen(
311
- program: Program,
312
- mergeSrategy?: ProgramMergeStrategy
313
- ) {
314
- const programAddress = program.address?.toString();
315
- if (!programAddress) {
316
- throw new Error("Missing program address");
317
- }
318
- if (this.programs.has(programAddress)) {
319
- // second condition only makes this throw error if we are to add a new instance with the same address
320
- const existing = await this.checkProcessExisting(
321
- programAddress,
322
- program,
323
- mergeSrategy
324
- );
325
- if (!existing) {
326
- throw new Error("Unexpected");
327
- }
328
- this.programs.set(programAddress, program);
329
- } else {
330
- this.programs.set(programAddress, program);
331
- }
332
282
  }
333
283
 
334
- private async checkProcessExisting<S>(
335
- address: Address,
336
- toOpen: S,
337
- mergeSrategy: ProgramMergeStrategy = "reject"
338
- ): Promise<S | undefined> {
339
- const prev = this.programs.get(address);
340
- if (mergeSrategy === "reject") {
341
- if (prev) {
342
- throw new Error(`Program at ${address} is already open`);
343
- }
344
- } else if (mergeSrategy === "replace") {
345
- if (prev && prev !== toOpen) {
346
- await prev.close(); // clouse previous
347
- }
348
- } else if (mergeSrategy === "reuse") {
349
- return prev as S;
350
- }
351
- }
352
284
  /**
353
285
  * Default behaviour of a store is only to accept heads that are forks (new roots) with some probability
354
286
  * and to replicate heads (and updates) which is requested by another peer
@@ -359,105 +291,11 @@ export class Peerbit implements ProgramClient {
359
291
 
360
292
  async open<S extends Program<Args>, Args = any>(
361
293
  storeOrAddress: S | Address | string,
362
- options: OpenOptions<Args> = {}
294
+ options: OpenOptions<Args, S> = {}
363
295
  ): Promise<S> {
364
- const fn = async (): Promise<S> => {
365
- if (!this.libp2p.isStarted()) {
366
- throw new Error("Can not open a store while disconnected");
367
- }
368
-
369
- // TODO add locks for store lifecycle, e.g. what happens if we try to open and close a store at the same time?
370
-
371
- let program = storeOrAddress as S;
372
- if (typeof storeOrAddress === "string") {
373
- try {
374
- if (this.programs?.has(storeOrAddress.toString())) {
375
- const existing = await this.checkProcessExisting(
376
- storeOrAddress.toString(),
377
- program,
378
- options?.existing
379
- );
380
- if (existing) {
381
- return existing;
382
- }
383
- } else {
384
- program = (await Program.load(
385
- storeOrAddress,
386
- this._libp2p.services.blocks,
387
- options
388
- )) as S; // TODO fix typings
389
- if (program instanceof Program === false) {
390
- throw new Error(
391
- `Failed to open program because program is of type ${program?.constructor.name} and not ${Program.name}`
392
- );
393
- }
394
- }
395
- } catch (error) {
396
- logger.error(
397
- "Failed to load store with address: " + storeOrAddress.toString()
398
- );
399
- throw error;
400
- }
401
- } else if (!program.closed) {
402
- const existing = this.programs.get(program.address);
403
- if (existing === program) {
404
- return program;
405
- } else if (existing) {
406
- const existing = await this.checkProcessExisting(
407
- program.address,
408
- program,
409
- options?.existing
410
- );
411
-
412
- if (existing) {
413
- return existing;
414
- }
415
- }
416
- }
417
-
418
- logger.debug(`Open database '${program.constructor.name}`);
419
- const address = await program.save(this.services.blocks);
420
- const existing = await this.checkProcessExisting(
421
- address,
422
- program,
423
- options?.existing
424
- );
425
- if (existing) {
426
- return existing;
427
- }
428
- await program.beforeOpen(this, {
429
- onBeforeOpen: (p) => {
430
- if (p instanceof Program && p.parents.length === 1 && !p.parents[0]) {
431
- return this._onProgramOpen(p, options?.existing);
432
- }
433
- },
434
- onClose: (p) => {
435
- if (p instanceof Program) {
436
- return this._onProgamClose(p);
437
- }
438
- },
439
- onDrop: (p) => {
440
- if (p instanceof Program) {
441
- return this._onProgamClose(p);
442
- }
443
- },
444
- ...options,
445
- // If the program opens more programs
446
- // reset: options.reset,
447
- });
448
-
449
- await program.open(options.args);
450
- await program.afterOpen();
451
-
452
- return program as S;
453
- };
454
-
455
- // Prevent deadlocks when a program is opened by another program
456
- // TODO make proper deduplciation behaviour
457
- if (options?.parent) {
458
- return fn();
459
- }
460
- return this._openQueue.add(fn) as any as S; // TODO p-queue seem to return void type ;
296
+ return (
297
+ this._handler || (this._handler = new ProgramHandler({ client: this }))
298
+ ).open(storeOrAddress, options);
461
299
  }
462
300
 
463
301
  get memory() {
@@ -12,3 +12,5 @@ export const transports = () => [
12
12
  ];
13
13
 
14
14
  export const relay = () => undefined;
15
+
16
+ export const listen: () => string[] | undefined = () => undefined;
package/src/transports.ts CHANGED
@@ -10,3 +10,8 @@ export const transports = () => [
10
10
  ];
11
11
  export const relay = () =>
12
12
  circuitRelayServer({ reservations: { maxReservations: 1000 } });
13
+
14
+ export const listen: () => string[] | undefined = () => [
15
+ "/ip4/127.0.0.1/tcp/0",
16
+ "/ip4/127.0.0.1/tcp/0/ws",
17
+ ];