peerbit 1.1.0 → 1.1.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.
package/lib/esm/peer.d.ts CHANGED
@@ -22,7 +22,7 @@ export type CreateInstanceOptions = {
22
22
  directory?: string;
23
23
  cache?: LazyLevel;
24
24
  } & OptionalCreateOptions;
25
- type ProgramMergeStrategy = "replace" | "reject";
25
+ type ProgramMergeStrategy = "replace" | "reject" | "reuse";
26
26
  export type OpenOptions<Args> = {
27
27
  timeout?: number;
28
28
  existing?: ProgramMergeStrategy;
@@ -56,6 +56,7 @@ export declare class Peerbit implements ProgramClient {
56
56
  stop(): Promise<void>;
57
57
  private _onProgamClose;
58
58
  private _onProgramOpen;
59
+ private checkProcessExisting;
59
60
  /**
60
61
  * Default behaviour of a store is only to accept heads that are forks (new roots) with some probability
61
62
  * and to replicate heads (and updates) which is requested by another peer
package/lib/esm/peer.js CHANGED
@@ -208,28 +208,39 @@ export class Peerbit {
208
208
  _onProgamClose(program) {
209
209
  this.programs.delete(program.address.toString());
210
210
  }
211
- async _onProgramOpen(program, mergeSrategy = "reject") {
211
+ async _onProgramOpen(program, mergeSrategy) {
212
212
  const programAddress = program.address?.toString();
213
213
  if (!programAddress) {
214
214
  throw new Error("Missing program address");
215
215
  }
216
216
  if (this.programs.has(programAddress)) {
217
217
  // second condition only makes this throw error if we are to add a new instance with the same address
218
- if (mergeSrategy === "reject") {
219
- throw new Error(`Program at ${programAddress} is already open`);
220
- }
221
- else if (mergeSrategy === "replace") {
222
- const prev = this.programs.get(programAddress);
223
- if (prev && prev !== program) {
224
- await prev.close(); // clouse previous
225
- }
226
- this.programs.set(programAddress, program);
218
+ const existing = await this.checkProcessExisting(programAddress, program, mergeSrategy);
219
+ if (!existing) {
220
+ throw new Error("Unexpected");
227
221
  }
222
+ this.programs.set(programAddress, program);
228
223
  }
229
224
  else {
230
225
  this.programs.set(programAddress, program);
231
226
  }
232
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
+ }
233
244
  /**
234
245
  * Default behaviour of a store is only to accept heads that are forks (new roots) with some probability
235
246
  * and to replicate heads (and updates) which is requested by another peer
@@ -247,7 +258,10 @@ export class Peerbit {
247
258
  if (typeof storeOrAddress === "string") {
248
259
  try {
249
260
  if (this.programs?.has(storeOrAddress.toString())) {
250
- throw new Error(`Program at ${storeOrAddress.toString()} is already open`);
261
+ const existing = await this.checkProcessExisting(storeOrAddress.toString(), program, options?.existing);
262
+ if (existing) {
263
+ return existing;
264
+ }
251
265
  }
252
266
  else {
253
267
  program = (await Program.load(storeOrAddress, this._libp2p.services.blocks, options)); // TODO fix typings
@@ -267,14 +281,22 @@ export class Peerbit {
267
281
  return program;
268
282
  }
269
283
  else if (existing) {
270
- throw new Error(`Program at ${program.address} is already open, but is another instance`);
284
+ const existing = await this.checkProcessExisting(program.address, program, options?.existing);
285
+ if (existing) {
286
+ return existing;
287
+ }
271
288
  }
272
289
  }
273
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
+ }
274
296
  await program.beforeOpen(this, {
275
297
  onBeforeOpen: (p) => {
276
298
  if (p instanceof Program && p.parents.length === 1 && !p.parents[0]) {
277
- return this._onProgramOpen(p);
299
+ return this._onProgramOpen(p, options?.existing);
278
300
  }
279
301
  },
280
302
  onClose: (p) => {
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peerbit",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Peerbit client",
5
5
  "author": "dao.xyz",
6
6
  "license": "MIT",
@@ -74,5 +74,5 @@
74
74
  "p2p",
75
75
  "peer-to-peer"
76
76
  ],
77
- "gitHead": "f4c3f07242fa4ee586748d106e64664e3b58e97a"
77
+ "gitHead": "207f1f7ac46f818a443fc97249d9893745a2422c"
78
78
  }
package/src/peer.ts CHANGED
@@ -53,7 +53,7 @@ export type CreateInstanceOptions = {
53
53
  directory?: string;
54
54
  cache?: LazyLevel;
55
55
  } & OptionalCreateOptions;
56
- type ProgramMergeStrategy = "replace" | "reject";
56
+ type ProgramMergeStrategy = "replace" | "reject" | "reuse";
57
57
  export type OpenOptions<Args> = {
58
58
  timeout?: number;
59
59
  existing?: ProgramMergeStrategy;
@@ -309,7 +309,7 @@ export class Peerbit implements ProgramClient {
309
309
 
310
310
  private async _onProgramOpen(
311
311
  program: Program,
312
- mergeSrategy: ProgramMergeStrategy = "reject"
312
+ mergeSrategy?: ProgramMergeStrategy
313
313
  ) {
314
314
  const programAddress = program.address?.toString();
315
315
  if (!programAddress) {
@@ -317,20 +317,38 @@ export class Peerbit implements ProgramClient {
317
317
  }
318
318
  if (this.programs.has(programAddress)) {
319
319
  // second condition only makes this throw error if we are to add a new instance with the same address
320
- if (mergeSrategy === "reject") {
321
- throw new Error(`Program at ${programAddress} is already open`);
322
- } else if (mergeSrategy === "replace") {
323
- const prev = this.programs.get(programAddress);
324
- if (prev && prev !== program) {
325
- await prev.close(); // clouse previous
326
- }
327
- this.programs.set(programAddress, program);
320
+ const existing = await this.checkProcessExisting(
321
+ programAddress,
322
+ program,
323
+ mergeSrategy
324
+ );
325
+ if (!existing) {
326
+ throw new Error("Unexpected");
328
327
  }
328
+ this.programs.set(programAddress, program);
329
329
  } else {
330
330
  this.programs.set(programAddress, program);
331
331
  }
332
332
  }
333
333
 
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
+ }
334
352
  /**
335
353
  * Default behaviour of a store is only to accept heads that are forks (new roots) with some probability
336
354
  * and to replicate heads (and updates) which is requested by another peer
@@ -354,9 +372,14 @@ export class Peerbit implements ProgramClient {
354
372
  if (typeof storeOrAddress === "string") {
355
373
  try {
356
374
  if (this.programs?.has(storeOrAddress.toString())) {
357
- throw new Error(
358
- `Program at ${storeOrAddress.toString()} is already open`
375
+ const existing = await this.checkProcessExisting(
376
+ storeOrAddress.toString(),
377
+ program,
378
+ options?.existing
359
379
  );
380
+ if (existing) {
381
+ return existing;
382
+ }
360
383
  } else {
361
384
  program = (await Program.load(
362
385
  storeOrAddress,
@@ -380,17 +403,32 @@ export class Peerbit implements ProgramClient {
380
403
  if (existing === program) {
381
404
  return program;
382
405
  } else if (existing) {
383
- throw new Error(
384
- `Program at ${program.address} is already open, but is another instance`
406
+ const existing = await this.checkProcessExisting(
407
+ program.address,
408
+ program,
409
+ options?.existing
385
410
  );
411
+
412
+ if (existing) {
413
+ return existing;
414
+ }
386
415
  }
387
416
  }
388
417
 
389
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
+ }
390
428
  await program.beforeOpen(this, {
391
429
  onBeforeOpen: (p) => {
392
430
  if (p instanceof Program && p.parents.length === 1 && !p.parents[0]) {
393
- return this._onProgramOpen(p);
431
+ return this._onProgramOpen(p, options?.existing);
394
432
  }
395
433
  },
396
434
  onClose: (p) => {