peerbit 2.0.15 → 3.0.2

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.
@@ -1,10 +1,12 @@
1
1
  import { Libp2p, Libp2pOptions, ServiceFactoryMap } from "libp2p";
2
2
  import { DirectSub } from "@peerbit/pubsub";
3
3
  import { DirectBlock } from "@peerbit/blocks";
4
- import { CircuitRelayService } from "libp2p/dist/src/circuit-relay/index.js";
4
+ import { CircuitRelayService } from "@libp2p/circuit-relay-v2";
5
+ import { Keychain } from "@peerbit/keychain";
5
6
  export type Libp2pExtendServices = {
6
7
  pubsub: DirectSub;
7
8
  blocks: DirectBlock;
9
+ keychain: Keychain;
8
10
  };
9
11
  export type Libp2pExtended = Libp2p<{
10
12
  relay: CircuitRelayService;
package/lib/esm/libp2p.js CHANGED
@@ -4,17 +4,19 @@ import { DirectBlock } from "@peerbit/blocks";
4
4
  import { noise } from "@dao-xyz/libp2p-noise";
5
5
  import { mplex } from "@libp2p/mplex";
6
6
  import { transports, relay, listen } from "./transports.js";
7
- import { identifyService } from "libp2p/identify";
7
+ import { identify } from "@libp2p/identify";
8
8
  import { yamux } from "@chainsafe/libp2p-yamux";
9
+ import { DefaultKeychain } from "@peerbit/keychain";
9
10
  export const createLibp2pExtended = (opts = {
10
11
  services: {
11
12
  blocks: (c) => new DirectBlock(c),
12
- pubsub: (c) => new DirectSub(c)
13
+ pubsub: (c) => new DirectSub(c),
14
+ keychain: (c) => new DefaultKeychain()
13
15
  }
14
16
  }) => {
15
17
  const relayIdentify = {
16
18
  relay: relay(),
17
- identify: identifyService()
19
+ identify: identify()
18
20
  };
19
21
  // https://github.com/libp2p/js-libp2p/issues/1757
20
22
  Object.keys(relayIdentify).forEach((key) => {
@@ -40,12 +42,12 @@ export const createLibp2pExtended = (opts = {
40
42
  pubsub: opts.services?.pubsub ||
41
43
  ((c) => new DirectSub(c, {
42
44
  canRelayMessage: true,
43
- signaturePolicy: "StrictNoSign",
44
- connectionManager: {
45
- autoDial: true
46
- }
45
+ signaturePolicy: "StrictNoSign"
46
+ // auto dial true
47
+ // auto prune true
47
48
  })),
48
49
  blocks: opts.services?.blocks || ((c) => new DirectBlock(c)),
50
+ keychain: opts.services?.keychain || ((c) => new DefaultKeychain()),
49
51
  ...opts.services
50
52
  }
51
53
  });
@@ -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,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAkBhD,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,GAAG,IAAI;QACP,iBAAiB,EAAE;YAClB,cAAc,EAAE,CAAC;YACjB,GAAG,IAAI,CAAC,iBAAiB;SACzB;QACD,SAAS,EAAE;YACV,MAAM,EAAE,MAAM,EAAE;YAChB,GAAG,IAAI,CAAC,SAAS;SACjB;QACD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE;QAC3C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5D,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;QACrD,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,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAY,MAAM,mBAAmB,CAAC;AAmB9D,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;QAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,eAAe,EAAE;KACtC;CACD,EACyB,EAAE;IAC5B,MAAM,aAAa,GAAG;QACrB,KAAK,EAAE,KAAK,EAAE;QACd,QAAQ,EAAE,QAAQ,EAAE;KACpB,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,CAAC;YACtC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;QACnB,GAAG,IAAI;QACP,iBAAiB,EAAE;YAClB,cAAc,EAAE,CAAC;YACjB,GAAG,IAAI,CAAC,iBAAiB;SACzB;QACD,SAAS,EAAE;YACV,MAAM,EAAE,MAAM,EAAE;YAChB,GAAG,IAAI,CAAC,SAAS;SACjB;QACD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE;QAC3C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5D,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;QACrD,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;oBACjB,kBAAkB;iBAClB,CAAC,CAAC;YACL,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC;YACnE,GAAG,IAAI,CAAC,QAAQ;SAChB;KACD,CAAC,CAAC;AACJ,CAAC,CAAC"}
package/lib/esm/peer.d.ts CHANGED
@@ -1,19 +1,19 @@
1
- import LazyLevel from "@peerbit/lazy-level";
1
+ import { AnyStore } from "../../../utils/any-store/lib/esm/index.js";
2
2
  import { Multiaddr } from "@multiformats/multiaddr";
3
- import { Ed25519Keypair, Libp2pKeychain } from "@peerbit/crypto";
3
+ import { Ed25519Keypair } from "@peerbit/crypto";
4
4
  import { Program, Address, ProgramClient, ProgramHandler } from "@peerbit/program";
5
5
  import "@libp2p/peer-id";
6
6
  import { Libp2pExtended, Libp2pCreateOptions as ClientCreateOptions } from "./libp2p.js";
7
7
  import { OpenOptions } from "@peerbit/program";
8
- export declare const logger: import("pino").Logger<import("pino").LoggerOptions | import("pino").DestinationStream>;
8
+ import { ExtractArgs } from "@peerbit/program";
9
+ export declare const logger: import("pino").Logger<never>;
9
10
  export type OptionalCreateOptions = {
10
11
  libp2pExternal?: boolean;
11
12
  };
12
13
  export type CreateOptions = {
13
14
  directory?: string;
14
- cache: LazyLevel;
15
+ memory: AnyStore;
15
16
  identity: Ed25519Keypair;
16
- keychain: Libp2pKeychain;
17
17
  } & OptionalCreateOptions;
18
18
  type Libp2pOptions = {
19
19
  libp2p?: Libp2pExtended | ClientCreateOptions;
@@ -23,26 +23,23 @@ type SimpleLibp2pOptions = {
23
23
  };
24
24
  export type CreateInstanceOptions = (SimpleLibp2pOptions | Libp2pOptions) & {
25
25
  directory?: string;
26
- cache?: LazyLevel;
27
26
  } & OptionalCreateOptions;
28
27
  export declare class Peerbit implements ProgramClient {
29
28
  _libp2p: Libp2pExtended;
30
29
  directory?: string;
31
- private _cache;
30
+ private _memory;
32
31
  private _libp2pExternal?;
33
32
  private _identity;
34
- private _keychain;
35
33
  private _handler;
36
34
  constructor(libp2p: Libp2pExtended, options: CreateOptions);
37
35
  static create(options?: CreateInstanceOptions): Promise<Peerbit>;
38
36
  get libp2p(): Libp2pExtended;
39
37
  get identity(): Ed25519Keypair;
40
- get peerId(): import("@libp2p/interface/dist/src/peer-id/index.js").PeerId;
38
+ get peerId(): import("@libp2p/interface").PeerId;
41
39
  get services(): {
42
- relay: import("libp2p/dist/src/circuit-relay/index.js").CircuitRelayService;
40
+ relay: import("@libp2p/circuit-relay-v2").CircuitRelayService;
43
41
  identify: any;
44
42
  } & import("./libp2p.js").Libp2pExtendServices;
45
- get keychain(): Libp2pKeychain;
46
43
  get handler(): ProgramHandler;
47
44
  getMultiaddrs(): Multiaddr[];
48
45
  /**
@@ -59,7 +56,7 @@ export declare class Peerbit implements ProgramClient {
59
56
  * @param options
60
57
  * @returns
61
58
  */
62
- open<S extends Program<Args>, Args = any>(storeOrAddress: S | Address | string, options?: OpenOptions<Args, S>): Promise<S>;
63
- get memory(): LazyLevel;
59
+ open<S extends Program<ExtractArgs<S>>>(storeOrAddress: S | Address | string, options?: OpenOptions<S>): Promise<S>;
60
+ get memory(): AnyStore;
64
61
  }
65
62
  export {};
package/lib/esm/peer.js CHANGED
@@ -1,46 +1,38 @@
1
- import LazyLevel from "@peerbit/lazy-level";
2
- import { Level } from "level";
3
- import { MemoryLevel } from "memory-level";
4
1
  import { multiaddr, isMultiaddr } from "@multiformats/multiaddr";
5
- import { Ed25519Keypair, Ed25519PublicKey, Libp2pKeychain } from "@peerbit/crypto";
2
+ import { Ed25519Keypair, Ed25519PublicKey } from "@peerbit/crypto";
6
3
  import { ProgramHandler } from "@peerbit/program";
7
4
  import { DirectSub } from "@peerbit/pubsub";
8
5
  import sodium from "libsodium-wrappers";
9
6
  import path from "path-browserify";
10
7
  import { waitFor } from "@peerbit/time";
11
8
  import "@libp2p/peer-id";
12
- import { Cache } from "@peerbit/cache";
13
9
  import { createLibp2pExtended } from "./libp2p.js";
14
10
  import { DirectBlock } from "@peerbit/blocks";
15
11
  import { LevelDatastore } from "datastore-level";
16
- import { BinaryWriter } from "@dao-xyz/borsh";
17
12
  import { logger as loggerFn } from "@peerbit/logger";
18
13
  import { resolveBootstrapAddresses } from "./bootstrap.js";
14
+ import { createStore } from "@peerbit/any-store";
15
+ import { DefaultKeychain } from "@peerbit/keychain";
19
16
  export const logger = loggerFn({ module: "client" });
20
17
  const isLibp2pInstance = (libp2p) => !!libp2p.getMultiaddrs;
21
- const createLevel = (path) => {
22
- return path
23
- ? new Level(path, { valueEncoding: "view" })
24
- : new MemoryLevel({ valueEncoding: "view" });
25
- };
26
18
  const createCache = async (directory, options) => {
27
- const cache = await new LazyLevel(createLevel(directory));
19
+ const cache = createStore(directory);
28
20
  // "Wake up" the caches if they need it
29
21
  if (cache)
30
22
  await cache.open();
31
23
  if (options?.reset) {
32
- await cache["_store"].clear();
24
+ await cache.clear();
33
25
  }
34
26
  return cache;
35
27
  };
28
+ const SELF_IDENTITY_KEY_ID = new TextEncoder().encode("__self__");
36
29
  export class Peerbit {
37
30
  _libp2p;
38
31
  directory;
39
- _cache;
32
+ _memory;
40
33
  _libp2pExternal = false;
41
34
  // Libp2p peerid in Identity form
42
35
  _identity;
43
- _keychain; // Keychain + Caching + X25519 keys
44
36
  _handler;
45
37
  constructor(libp2p, options) {
46
38
  if (libp2p == null) {
@@ -55,9 +47,8 @@ export class Peerbit {
55
47
  throw new Error("Only Ed25519 peerIds are supported");
56
48
  }
57
49
  this._identity = options.identity;
58
- this._keychain = options.keychain;
59
50
  this.directory = options.directory;
60
- this._cache = options.cache;
51
+ this._memory = options.memory;
61
52
  this._libp2pExternal = options.libp2pExternal;
62
53
  }
63
54
  static async create(options = {}) {
@@ -65,49 +56,44 @@ export class Peerbit {
65
56
  let libp2pExtended = options
66
57
  .libp2p;
67
58
  const asRelay = options.relay;
68
- const blocksDirectory = options.directory != null
69
- ? path.join(options.directory, "/blocks").toString()
59
+ const directory = options.directory;
60
+ const hasDir = directory != null;
61
+ const memory = await createCache(directory != null ? path.join(directory, "/cache") : undefined);
62
+ const blocksDirectory = hasDir
63
+ ? path.join(options["directory"], "/blocks").toString()
64
+ : undefined;
65
+ const keychainDirectory = hasDir
66
+ ? path.join(options["directory"], "/keychain").toString()
70
67
  : undefined;
71
- let libp2pExternal = false;
72
- const datastore = options.directory != null
73
- ? new LevelDatastore(path.join(options.directory, "/libp2p").toString())
68
+ const datastore = hasDir
69
+ ? new LevelDatastore(path.join(options["directory"], "/libp2p").toString())
74
70
  : undefined;
75
71
  if (datastore) {
76
72
  await datastore.open();
77
73
  }
78
- if (!libp2pExtended) {
74
+ const libp2pExternal = libp2pExtended && isLibp2pInstance(libp2pExtended);
75
+ if (!libp2pExternal) {
76
+ const extendedOptions = libp2pExtended;
77
+ const keychain = new DefaultKeychain({
78
+ store: createStore(keychainDirectory)
79
+ });
80
+ const peerId = extendedOptions?.peerId ||
81
+ (await (await keychain.exportById(SELF_IDENTITY_KEY_ID, Ed25519Keypair))?.toPeerId());
79
82
  libp2pExtended = await createLibp2pExtended({
83
+ ...extendedOptions,
84
+ peerId,
80
85
  services: {
86
+ keychain: (c) => keychain,
81
87
  blocks: (c) => new DirectBlock(c, {
82
88
  canRelayMessage: asRelay,
83
89
  directory: blocksDirectory
84
90
  }),
85
- pubsub: (c) => new DirectSub(c, { canRelayMessage: asRelay })
91
+ pubsub: (c) => new DirectSub(c, { canRelayMessage: asRelay }),
92
+ ...extendedOptions?.services
86
93
  },
87
- // If directory is passed, we store keys within that directory, else we will use memory datastore (which is the default behaviour)
88
94
  datastore
89
95
  });
90
96
  }
91
- else {
92
- if (isLibp2pInstance(libp2pExtended)) {
93
- libp2pExternal = true; // libp2p was created outside
94
- }
95
- else {
96
- const extendedOptions = libp2pExtended;
97
- libp2pExtended = await createLibp2pExtended({
98
- ...extendedOptions,
99
- services: {
100
- blocks: (c) => new DirectBlock(c, {
101
- canRelayMessage: asRelay,
102
- directory: blocksDirectory
103
- }),
104
- pubsub: (c) => new DirectSub(c, { canRelayMessage: asRelay }),
105
- ...extendedOptions?.services
106
- },
107
- datastore
108
- });
109
- }
110
- }
111
97
  if (datastore) {
112
98
  const stopFn = libp2pExtended.stop.bind(libp2pExtended);
113
99
  libp2pExtended.stop = async () => {
@@ -115,24 +101,20 @@ export class Peerbit {
115
101
  await datastore?.close();
116
102
  };
117
103
  }
118
- if (!libp2pExtended.isStarted()) {
104
+ if (libp2pExtended.status === "stopped" ||
105
+ libp2pExtended.status === "stopping") {
119
106
  await libp2pExtended.start();
120
107
  }
121
108
  if (libp2pExtended.peerId.type !== "Ed25519") {
122
109
  throw new Error("Unsupported id type, expecting Ed25519 but got " +
123
110
  libp2pExtended.peerId.type);
124
111
  }
125
- const directory = options.directory;
126
- const cache = options.cache ||
127
- (await createCache(directory ? path.join(directory, "/cache") : undefined));
128
112
  const identity = Ed25519Keypair.fromPeerId(libp2pExtended.peerId);
129
- const keychain = new Libp2pKeychain(libp2pExtended.keychain, {
130
- cache: new Cache({ max: 1000 })
131
- });
132
113
  try {
133
- const writer = new BinaryWriter();
134
- writer.string("identity");
135
- await keychain.import(identity, writer.finalize());
114
+ await libp2pExtended.services.keychain.import({
115
+ keypair: identity,
116
+ id: SELF_IDENTITY_KEY_ID
117
+ });
136
118
  }
137
119
  catch (error) {
138
120
  if (error.code == "ERR_KEY_ALREADY_EXISTS") {
@@ -144,10 +126,9 @@ export class Peerbit {
144
126
  }
145
127
  const peer = new Peerbit(libp2pExtended, {
146
128
  directory,
147
- cache,
129
+ memory: memory,
148
130
  libp2pExternal,
149
- identity,
150
- keychain
131
+ identity
151
132
  });
152
133
  return peer;
153
134
  }
@@ -163,9 +144,6 @@ export class Peerbit {
163
144
  get services() {
164
145
  return this.libp2p.services;
165
146
  }
166
- get keychain() {
167
- return this._keychain;
168
- }
169
147
  get handler() {
170
148
  return this._handler;
171
149
  }
@@ -188,15 +166,15 @@ export class Peerbit {
188
166
  this.libp2p.services.blocks.peers.has(publicKey.hashcode()))) || false);
189
167
  }
190
168
  async start() {
191
- await this._cache.open();
192
- if (!this.libp2p.isStarted()) {
169
+ await this._memory.open();
170
+ if (this.libp2p.status === "stopped" || this.libp2p.status === "stopping") {
193
171
  this._libp2pExternal = false; // this means we will also close libp2p client on close
194
172
  return this.libp2p.start();
195
173
  }
196
174
  }
197
175
  async stop() {
198
176
  await this._handler?.stop();
199
- await this._cache.close();
177
+ await this._memory.close();
200
178
  // Close libp2p (after above)
201
179
  if (!this._libp2pExternal) {
202
180
  // only close it if we created it
@@ -221,7 +199,7 @@ export class Peerbit {
221
199
  return (this._handler || (this._handler = new ProgramHandler({ client: this }))).open(storeOrAddress, options);
222
200
  }
223
201
  get memory() {
224
- return this._cache;
202
+ return this._memory;
225
203
  }
226
204
  }
227
205
  //# sourceMappingURL=peer.js.map
@@ -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,3 +1,3 @@
1
- export declare const transports: () => ((components: import("libp2p/dist/src/circuit-relay/transport").CircuitRelayTransportComponents) => import("@libp2p/interface/dist/src/transport").Transport)[];
1
+ export declare const transports: () => (((components: import("@libp2p/circuit-relay-v2/dist/src/transport").CircuitRelayTransportComponents) => import("@libp2p/interface/dist/src").Transport) | ((components: import("@libp2p/webrtc/dist/src/private-to-private/transport").WebRTCTransportComponents) => import("@libp2p/interface/dist/src").Transport))[];
2
2
  export declare const relay: () => undefined;
3
3
  export declare const listen: () => string[] | undefined;
@@ -1,5 +1,5 @@
1
1
  import { webSockets } from "@libp2p/websockets";
2
- import { circuitRelayTransport } from "libp2p/circuit-relay";
2
+ import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
3
3
  import { webRTC } from "@libp2p/webrtc";
4
4
  import { all } from "@libp2p/websockets/filters";
5
5
  export const transports = () => [
@@ -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;AAErC,MAAM,CAAC,MAAM,MAAM,GAA+B,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,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,0BAA0B,CAAC;AACjE,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,CAAC,SAAS,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const transports: () => (((components: import("libp2p/dist/src/circuit-relay/transport").CircuitRelayTransportComponents) => import("@libp2p/interface/dist/src/transport").Transport) | ((components?: import("@libp2p/tcp").TCPComponents | undefined) => import("@libp2p/interface/dist/src/transport").Transport))[];
2
- export declare const relay: () => (components: import("libp2p/dist/src/circuit-relay/server").CircuitRelayServerComponents) => import("libp2p/circuit-relay").CircuitRelayService;
1
+ export declare const transports: () => (((components: import("@libp2p/circuit-relay-v2/dist/src/transport").CircuitRelayTransportComponents) => import("@libp2p/interface/dist/src").Transport) | ((components: import("@libp2p/tcp").TCPComponents) => import("@libp2p/interface/dist/src").Transport))[];
2
+ export declare const relay: () => (components: import("@libp2p/circuit-relay-v2/dist/src/server").CircuitRelayServerComponents) => import("@libp2p/circuit-relay-v2").CircuitRelayService;
3
3
  export declare const listen: () => string[] | undefined;
@@ -1,7 +1,7 @@
1
1
  import { webSockets } from "@libp2p/websockets";
2
- import { circuitRelayTransport } from "libp2p/circuit-relay";
2
+ import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
3
3
  import { tcp } from "@libp2p/tcp";
4
- import { circuitRelayServer } from "libp2p/circuit-relay";
4
+ import { circuitRelayServer } from "@libp2p/circuit-relay-v2";
5
5
  import { all } from "@libp2p/websockets/filters";
6
6
  export const transports = () => [
7
7
  webSockets({ filter: all }),
@@ -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;AAEjE,MAAM,CAAC,MAAM,MAAM,GAA+B,GAAG,EAAE,CAAC;IACvD,sBAAsB;IACtB,yBAAyB;CACzB,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,0BAA0B,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,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": "2.0.15",
3
+ "version": "3.0.2",
4
4
  "description": "Peerbit client",
5
5
  "author": "dao.xyz",
6
6
  "license": "MIT",
@@ -34,21 +34,23 @@
34
34
  "./transports.js": "./lib/esm/transports-browser.js"
35
35
  },
36
36
  "dependencies": {
37
- "@chainsafe/libp2p-yamux": "^5.0.0",
37
+ "@chainsafe/libp2p-yamux": "^6.0.1",
38
38
  "@dao-xyz/borsh": "^5.1.8",
39
- "@dao-xyz/libp2p-noise": "^13.0.1",
40
- "@libp2p/mplex": "^9.0.5",
41
- "@libp2p/tcp": "^8.0.5",
42
- "@libp2p/webrtc": "^3.1.9",
43
- "@libp2p/websockets": "^7.0.5",
44
- "@peerbit/blocks": "^1.1.7",
45
- "@peerbit/crypto": "1.0.10",
46
- "@peerbit/lazy-level": "1.2.1",
47
- "@peerbit/logger": "1.0.1",
48
- "@peerbit/program": "2.4.2",
49
- "@peerbit/pubsub": "^1.1.13",
39
+ "@dao-xyz/libp2p-noise": "^14.1.2",
40
+ "@libp2p/circuit-relay-v2": "^1.0.9",
41
+ "@libp2p/identify": "^1.0.8",
42
+ "@libp2p/mplex": "^10.0.9",
43
+ "@libp2p/tcp": "^9.0.9",
44
+ "@libp2p/webrtc": "^4.0.13",
45
+ "@libp2p/websockets": "^8.0.9",
46
+ "@peerbit/any-store": "^1.0.1",
47
+ "@peerbit/blocks": "^2.0.1",
48
+ "@peerbit/crypto": "2.0.0",
49
+ "@peerbit/logger": "1.0.2",
50
+ "@peerbit/program": "3.0.2",
51
+ "@peerbit/pubsub": "^2.0.1",
50
52
  "@peerbit/uint8arrays": "3.0.1",
51
- "datastore-level": "^10.1.4",
53
+ "datastore-level": "^10.1.5",
52
54
  "level": "^8.0.0",
53
55
  "memory-level": "^1.0.0",
54
56
  "path-browserify": "^1.0.1"
@@ -74,5 +76,5 @@
74
76
  "p2p",
75
77
  "peer-to-peer"
76
78
  ],
77
- "gitHead": "6b3febe03977ab07c14e22ac693e68367fab9a22"
79
+ "gitHead": "9128a3e76fec1a41c248c6ebe28d5a7691fe079e"
78
80
  }
package/src/libp2p.ts CHANGED
@@ -4,13 +4,15 @@ import { DirectBlock } from "@peerbit/blocks";
4
4
  import { noise } from "@dao-xyz/libp2p-noise";
5
5
  import { mplex } from "@libp2p/mplex";
6
6
  import { transports, relay, listen } from "./transports.js";
7
- import { identifyService } from "libp2p/identify";
8
- import { CircuitRelayService } from "libp2p/dist/src/circuit-relay/index.js";
7
+ import { identify } from "@libp2p/identify";
8
+ import { CircuitRelayService } from "@libp2p/circuit-relay-v2";
9
9
  import { yamux } from "@chainsafe/libp2p-yamux";
10
+ import { DefaultKeychain, Keychain } from "@peerbit/keychain";
10
11
 
11
12
  export type Libp2pExtendServices = {
12
13
  pubsub: DirectSub;
13
14
  blocks: DirectBlock;
15
+ keychain: Keychain;
14
16
  };
15
17
  export type Libp2pExtended = Libp2p<
16
18
  { relay: CircuitRelayService; identify: any } & Libp2pExtendServices
@@ -28,13 +30,14 @@ export const createLibp2pExtended = (
28
30
  opts: Libp2pCreateOptions = {
29
31
  services: {
30
32
  blocks: (c) => new DirectBlock(c),
31
- pubsub: (c) => new DirectSub(c)
33
+ pubsub: (c) => new DirectSub(c),
34
+ keychain: (c) => new DefaultKeychain()
32
35
  }
33
36
  }
34
37
  ): Promise<Libp2pExtended> => {
35
38
  const relayIdentify = {
36
39
  relay: relay(),
37
- identify: identifyService()
40
+ identify: identify()
38
41
  };
39
42
 
40
43
  // https://github.com/libp2p/js-libp2p/issues/1757
@@ -64,12 +67,12 @@ export const createLibp2pExtended = (
64
67
  ((c) =>
65
68
  new DirectSub(c, {
66
69
  canRelayMessage: true,
67
- signaturePolicy: "StrictNoSign",
68
- connectionManager: {
69
- autoDial: true
70
- }
70
+ signaturePolicy: "StrictNoSign"
71
+ // auto dial true
72
+ // auto prune true
71
73
  })),
72
74
  blocks: opts.services?.blocks || ((c) => new DirectBlock(c)),
75
+ keychain: opts.services?.keychain || ((c) => new DefaultKeychain()),
73
76
  ...opts.services
74
77
  }
75
78
  });
package/src/peer.ts CHANGED
@@ -1,14 +1,7 @@
1
- import LazyLevel from "@peerbit/lazy-level";
2
- import { AbstractLevel } from "abstract-level";
3
- import { Level } from "level";
4
- import { MemoryLevel } from "memory-level";
1
+ import { AnyStore } from "../../../utils/any-store/lib/esm/index.js";
5
2
  import { multiaddr, Multiaddr, isMultiaddr } from "@multiformats/multiaddr";
6
3
  import type { Libp2p } from "libp2p";
7
- import {
8
- Ed25519Keypair,
9
- Ed25519PublicKey,
10
- Libp2pKeychain
11
- } from "@peerbit/crypto";
4
+ import { Ed25519Keypair, Ed25519PublicKey } from "@peerbit/crypto";
12
5
  import {
13
6
  Program,
14
7
  Address,
@@ -20,7 +13,6 @@ import sodium from "libsodium-wrappers";
20
13
  import path from "path-browserify";
21
14
  import { waitFor } from "@peerbit/time";
22
15
  import "@libp2p/peer-id";
23
- import { Cache } from "@peerbit/cache";
24
16
 
25
17
  import {
26
18
  createLibp2pExtended,
@@ -29,10 +21,12 @@ import {
29
21
  } from "./libp2p.js";
30
22
  import { DirectBlock } from "@peerbit/blocks";
31
23
  import { LevelDatastore } from "datastore-level";
32
- import { BinaryWriter } from "@dao-xyz/borsh";
33
24
  import { logger as loggerFn } from "@peerbit/logger";
34
25
  import { OpenOptions } from "@peerbit/program";
35
26
  import { resolveBootstrapAddresses } from "./bootstrap.js";
27
+ import { createStore } from "@peerbit/any-store";
28
+ import { DefaultKeychain } from "@peerbit/keychain";
29
+ import { ExtractArgs } from "@peerbit/program";
36
30
 
37
31
  export const logger = loggerFn({ module: "client" });
38
32
 
@@ -41,55 +35,46 @@ export type OptionalCreateOptions = {
41
35
  };
42
36
  export type CreateOptions = {
43
37
  directory?: string;
44
- cache: LazyLevel;
38
+ memory: AnyStore;
45
39
  identity: Ed25519Keypair;
46
- keychain: Libp2pKeychain;
47
40
  } & OptionalCreateOptions;
48
-
49
41
  type Libp2pOptions = { libp2p?: Libp2pExtended | ClientCreateOptions };
50
42
  type SimpleLibp2pOptions = { relay?: boolean };
51
43
  export type CreateInstanceOptions = (SimpleLibp2pOptions | Libp2pOptions) & {
52
44
  directory?: string;
53
- cache?: LazyLevel;
54
45
  } & OptionalCreateOptions;
55
46
 
56
47
  const isLibp2pInstance = (libp2p: Libp2pExtended | ClientCreateOptions) =>
57
48
  !!(libp2p as Libp2p).getMultiaddrs;
58
49
 
59
- const createLevel = (path?: string): AbstractLevel<any, string, Uint8Array> => {
60
- return path
61
- ? new Level(path, { valueEncoding: "view" })
62
- : new MemoryLevel({ valueEncoding: "view" });
63
- };
64
-
65
50
  const createCache = async (
66
51
  directory: string | undefined,
67
52
  options?: { reset?: boolean }
68
53
  ) => {
69
- const cache = await new LazyLevel(createLevel(directory));
54
+ const cache = createStore(directory);
70
55
 
71
56
  // "Wake up" the caches if they need it
72
57
  if (cache) await cache.open();
73
58
  if (options?.reset) {
74
- await cache["_store"].clear();
59
+ await cache.clear();
75
60
  }
76
-
77
61
  return cache;
78
62
  };
79
63
 
64
+ const SELF_IDENTITY_KEY_ID = new TextEncoder().encode("__self__");
65
+
80
66
  export class Peerbit implements ProgramClient {
81
67
  _libp2p: Libp2pExtended;
82
68
 
83
69
  directory?: string;
84
70
 
85
- private _cache: LazyLevel;
71
+ private _memory: AnyStore;
86
72
  private _libp2pExternal?: boolean = false;
87
73
 
88
74
  // Libp2p peerid in Identity form
89
75
  private _identity: Ed25519Keypair;
90
-
91
- private _keychain: Libp2pKeychain; // Keychain + Caching + X25519 keys
92
76
  private _handler: ProgramHandler;
77
+
93
78
  constructor(libp2p: Libp2pExtended, options: CreateOptions) {
94
79
  if (libp2p == null) {
95
80
  throw new Error("Libp2p required");
@@ -107,10 +92,8 @@ export class Peerbit implements ProgramClient {
107
92
  }
108
93
 
109
94
  this._identity = options.identity;
110
- this._keychain = options.keychain;
111
-
112
95
  this.directory = options.directory;
113
- this._cache = options.cache;
96
+ this._memory = options.memory;
114
97
  this._libp2pExternal = options.libp2pExternal;
115
98
  }
116
99
 
@@ -121,52 +104,58 @@ export class Peerbit implements ProgramClient {
121
104
  .libp2p as Libp2pExtended;
122
105
  const asRelay = (options as SimpleLibp2pOptions).relay;
123
106
 
124
- const blocksDirectory =
125
- options.directory != null
126
- ? path.join(options.directory, "/blocks").toString()
127
- : undefined;
128
- let libp2pExternal = false;
107
+ const directory = options.directory;
108
+ const hasDir = directory != null;
109
+
110
+ const memory = await createCache(
111
+ directory != null ? path.join(directory, "/cache") : undefined
112
+ );
113
+
114
+ const blocksDirectory = hasDir
115
+ ? path.join(options["directory"], "/blocks").toString()
116
+ : undefined;
117
+
118
+ const keychainDirectory = hasDir
119
+ ? path.join(options["directory"], "/keychain").toString()
120
+ : undefined;
121
+
122
+ const datastore = hasDir
123
+ ? new LevelDatastore(
124
+ path.join(options["directory"], "/libp2p").toString()
125
+ )
126
+ : undefined;
129
127
 
130
- const datastore =
131
- options.directory != null
132
- ? new LevelDatastore(path.join(options.directory, "/libp2p").toString())
133
- : undefined;
134
128
  if (datastore) {
135
129
  await datastore.open();
136
130
  }
137
131
 
138
- if (!libp2pExtended) {
132
+ const libp2pExternal = libp2pExtended && isLibp2pInstance(libp2pExtended);
133
+ if (!libp2pExternal) {
134
+ const extendedOptions: ClientCreateOptions | undefined =
135
+ libp2pExtended as any as ClientCreateOptions;
136
+ const keychain = new DefaultKeychain({
137
+ store: createStore(keychainDirectory)
138
+ });
139
+ const peerId =
140
+ extendedOptions?.peerId ||
141
+ (await (
142
+ await keychain.exportById(SELF_IDENTITY_KEY_ID, Ed25519Keypair)
143
+ )?.toPeerId());
139
144
  libp2pExtended = await createLibp2pExtended({
145
+ ...extendedOptions,
146
+ peerId,
140
147
  services: {
148
+ keychain: (c) => keychain,
141
149
  blocks: (c) =>
142
150
  new DirectBlock(c, {
143
151
  canRelayMessage: asRelay,
144
152
  directory: blocksDirectory
145
153
  }),
146
- pubsub: (c) => new DirectSub(c, { canRelayMessage: asRelay })
154
+ pubsub: (c) => new DirectSub(c, { canRelayMessage: asRelay }),
155
+ ...extendedOptions?.services
147
156
  },
148
- // If directory is passed, we store keys within that directory, else we will use memory datastore (which is the default behaviour)
149
157
  datastore
150
158
  });
151
- } else {
152
- if (isLibp2pInstance(libp2pExtended)) {
153
- libp2pExternal = true; // libp2p was created outside
154
- } else {
155
- const extendedOptions = libp2pExtended as any as ClientCreateOptions;
156
- libp2pExtended = await createLibp2pExtended({
157
- ...extendedOptions,
158
- services: {
159
- blocks: (c) =>
160
- new DirectBlock(c, {
161
- canRelayMessage: asRelay,
162
- directory: blocksDirectory
163
- }),
164
- pubsub: (c) => new DirectSub(c, { canRelayMessage: asRelay }),
165
- ...extendedOptions?.services
166
- },
167
- datastore
168
- });
169
- }
170
159
  }
171
160
  if (datastore) {
172
161
  const stopFn = libp2pExtended.stop.bind(libp2pExtended);
@@ -176,7 +165,10 @@ export class Peerbit implements ProgramClient {
176
165
  };
177
166
  }
178
167
 
179
- if (!libp2pExtended.isStarted()) {
168
+ if (
169
+ libp2pExtended.status === "stopped" ||
170
+ libp2pExtended.status === "stopping"
171
+ ) {
180
172
  await libp2pExtended.start();
181
173
  }
182
174
 
@@ -187,22 +179,12 @@ export class Peerbit implements ProgramClient {
187
179
  );
188
180
  }
189
181
 
190
- const directory = options.directory;
191
- const cache =
192
- options.cache ||
193
- (await createCache(
194
- directory ? path.join(directory, "/cache") : undefined
195
- ));
196
-
197
182
  const identity = Ed25519Keypair.fromPeerId(libp2pExtended.peerId);
198
- const keychain = new Libp2pKeychain(libp2pExtended.keychain, {
199
- cache: new Cache({ max: 1000 })
200
- });
201
-
202
183
  try {
203
- const writer = new BinaryWriter();
204
- writer.string("identity");
205
- await keychain.import(identity, writer.finalize());
184
+ await libp2pExtended.services.keychain.import({
185
+ keypair: identity,
186
+ id: SELF_IDENTITY_KEY_ID
187
+ });
206
188
  } catch (error: any) {
207
189
  if (error.code == "ERR_KEY_ALREADY_EXISTS") {
208
190
  // Do nothing
@@ -213,10 +195,9 @@ export class Peerbit implements ProgramClient {
213
195
 
214
196
  const peer = new Peerbit(libp2pExtended, {
215
197
  directory,
216
- cache,
198
+ memory: memory,
217
199
  libp2pExternal,
218
- identity,
219
- keychain
200
+ identity
220
201
  });
221
202
  return peer;
222
203
  }
@@ -236,10 +217,6 @@ export class Peerbit implements ProgramClient {
236
217
  return this.libp2p.services;
237
218
  }
238
219
 
239
- get keychain(): Libp2pKeychain {
240
- return this._keychain;
241
- }
242
-
243
220
  get handler(): ProgramHandler {
244
221
  return this._handler;
245
222
  }
@@ -257,8 +234,8 @@ export class Peerbit implements ProgramClient {
257
234
  typeof address == "string"
258
235
  ? multiaddr(address)
259
236
  : isMultiaddr(address) || Array.isArray(address)
260
- ? address
261
- : address.getMultiaddrs();
237
+ ? address
238
+ : address.getMultiaddrs();
262
239
  const connection = await this.libp2p.dial(maddress);
263
240
  const publicKey = Ed25519PublicKey.fromPeerId(connection.remotePeer);
264
241
 
@@ -273,16 +250,16 @@ export class Peerbit implements ProgramClient {
273
250
  }
274
251
 
275
252
  async start() {
276
- await this._cache.open();
253
+ await this._memory.open();
277
254
 
278
- if (!this.libp2p.isStarted()) {
255
+ if (this.libp2p.status === "stopped" || this.libp2p.status === "stopping") {
279
256
  this._libp2pExternal = false; // this means we will also close libp2p client on close
280
257
  return this.libp2p.start();
281
258
  }
282
259
  }
283
260
  async stop() {
284
261
  await this._handler?.stop();
285
- await this._cache.close();
262
+ await this._memory.close();
286
263
 
287
264
  // Close libp2p (after above)
288
265
  if (!this._libp2pExternal) {
@@ -307,9 +284,9 @@ export class Peerbit implements ProgramClient {
307
284
  * @returns
308
285
  */
309
286
 
310
- async open<S extends Program<Args>, Args = any>(
287
+ async open<S extends Program<ExtractArgs<S>>>(
311
288
  storeOrAddress: S | Address | string,
312
- options: OpenOptions<Args, S> = {}
289
+ options: OpenOptions<S> = {}
313
290
  ): Promise<S> {
314
291
  return (
315
292
  this._handler || (this._handler = new ProgramHandler({ client: this }))
@@ -317,6 +294,6 @@ export class Peerbit implements ProgramClient {
317
294
  }
318
295
 
319
296
  get memory() {
320
- return this._cache;
297
+ return this._memory;
321
298
  }
322
299
  }
@@ -1,5 +1,5 @@
1
1
  import { webSockets } from "@libp2p/websockets";
2
- import { circuitRelayTransport } from "libp2p/circuit-relay";
2
+ import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
3
3
  import { webRTC } from "@libp2p/webrtc";
4
4
  import { all } from "@libp2p/websockets/filters";
5
5
 
package/src/transports.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { webSockets } from "@libp2p/websockets";
2
- import { circuitRelayTransport } from "libp2p/circuit-relay";
2
+ import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
3
3
  import { tcp } from "@libp2p/tcp";
4
- import { circuitRelayServer } from "libp2p/circuit-relay";
4
+ import { circuitRelayServer } from "@libp2p/circuit-relay-v2";
5
5
  import { all } from "@libp2p/websockets/filters";
6
6
  export const transports = () => [
7
7
  webSockets({ filter: all }),