@peerbit/program 2.4.1 → 3.0.1

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,12 +1,14 @@
1
1
  import type { PeerId as Libp2pPeerId } from "@libp2p/interface/peer-id";
2
2
  import { Blocks } from "@peerbit/blocks-interface";
3
3
  import { PubSub } from "@peerbit/pubsub-interface";
4
- import { Ed25519PublicKey, Identity, Keychain } from "@peerbit/crypto";
5
- import type { SimpleLevel } from "@peerbit/lazy-level";
4
+ import { Ed25519PublicKey, Identity } from "@peerbit/crypto";
5
+ import { Keychain } from "@peerbit/keychain";
6
+ import type { AnyStore } from "@peerbit/any-store";
6
7
  import { Multiaddr } from "@multiformats/multiaddr";
7
8
  import { Address } from "./address.js";
8
9
  import { CanOpen, Manageable, OpenOptions } from "./handler.js";
9
- export interface Client<T extends Manageable<any>> {
10
+ type ExtractArgs<T> = T extends CanOpen<infer Args> ? Args : never;
11
+ export interface Client<T extends Manageable<ExtractArgs<T>>> {
10
12
  peerId: Libp2pPeerId;
11
13
  identity: Identity<Ed25519PublicKey>;
12
14
  getMultiaddrs: () => Multiaddr[];
@@ -14,10 +16,11 @@ export interface Client<T extends Manageable<any>> {
14
16
  services: {
15
17
  pubsub: PubSub;
16
18
  blocks: Blocks;
19
+ keychain: Keychain;
17
20
  };
18
- memory: SimpleLevel;
19
- keychain: Keychain;
21
+ memory: AnyStore;
20
22
  start(): Promise<void>;
21
23
  stop(): Promise<void>;
22
- open<S extends T & CanOpen<Args>, Args = any>(program: S | Address, options?: OpenOptions<Args, S>): Promise<S>;
24
+ open<S extends T & CanOpen<ExtractArgs<S>>>(program: S | Address, options?: OpenOptions<ExtractArgs<S>, S>): Promise<S>;
23
25
  }
26
+ export {};
@@ -1,6 +1,6 @@
1
1
  import { Blocks } from "@peerbit/blocks-interface";
2
2
  import { Address } from "./address.js";
3
- export declare const logger: import("pino").Logger<import("pino").LoggerOptions | import("pino").DestinationStream>;
3
+ export declare const logger: import("pino").Logger<never>;
4
4
  type ProgramMergeStrategy = "replace" | "reject" | "reuse";
5
5
  export type EventOptions = {
6
6
  onBeforeOpen?: (program: Manageable<any>) => Promise<void> | void;
@@ -45,6 +45,7 @@ export type Manageable<Args> = Closeable & Addressable & CanOpen<Args> & Saveabl
45
45
  parents: (Manageable<any> | undefined)[];
46
46
  };
47
47
  export type ProgramInitializationOptions<Args, T extends Manageable<Args>> = {} & WithArgs<Args> & WithParent<T> & EventOptions;
48
+ export declare const addParent: (child: Manageable<any>, parent?: Manageable<any>) => void;
48
49
  export declare class Handler<T extends Manageable<any>> {
49
50
  readonly properties: {
50
51
  client: {
@@ -74,7 +75,6 @@ export declare class Handler<T extends Manageable<any>> {
74
75
  });
75
76
  stop(): Promise<void>;
76
77
  private _onProgamClose;
77
- private _onProgramOpen;
78
78
  private checkProcessExisting;
79
79
  open<S extends T, Args = any>(storeOrAddress: S | Address | string, options?: OpenOptions<Args, S>): Promise<S>;
80
80
  }
@@ -1,6 +1,12 @@
1
1
  import PQueue from "p-queue";
2
2
  import { logger as loggerFn } from "@peerbit/logger";
3
3
  export const logger = loggerFn({ module: "program-handler" });
4
+ export const addParent = (child, parent) => {
5
+ (child.parents || (child.parents = [])).push(parent);
6
+ if (parent) {
7
+ (parent.children || (parent.children = [])).push(child);
8
+ }
9
+ };
4
10
  export class Handler {
5
11
  properties;
6
12
  items;
@@ -25,23 +31,6 @@ export class Handler {
25
31
  this.items.delete(program.address.toString());
26
32
  // TODO remove item from this._openQueue?
27
33
  }
28
- async _onProgramOpen(program, mergeSrategy) {
29
- const programAddress = program.address?.toString();
30
- if (!programAddress) {
31
- throw new Error("Missing program address");
32
- }
33
- if (this.items.has(programAddress)) {
34
- // second condition only makes this throw error if we are to add a new instance with the same address
35
- const existing = await this.checkProcessExisting(programAddress, program, mergeSrategy);
36
- if (!existing) {
37
- throw new Error("Unexpected");
38
- }
39
- this.items.set(programAddress, program);
40
- }
41
- else {
42
- this.items.set(programAddress, program);
43
- }
44
- }
45
34
  async checkProcessExisting(address, toOpen, mergeSrategy = "reject") {
46
35
  const prev = this.items.get(address);
47
36
  if (mergeSrategy === "reject") {
@@ -92,6 +81,7 @@ export class Handler {
92
81
  if (!program.closed) {
93
82
  const existing = this.items.get(program.address);
94
83
  if (existing === program) {
84
+ addParent(existing, options.parent);
95
85
  return program;
96
86
  }
97
87
  else if (existing) {
@@ -105,6 +95,7 @@ export class Handler {
105
95
  // assume new instance was not added to monitored items, just add it
106
96
  // and return it as we would opened it normally
107
97
  this.items.set(program.address, program);
98
+ addParent(program, options.parent);
108
99
  return program;
109
100
  }
110
101
  }
@@ -117,11 +108,9 @@ export class Handler {
117
108
  return existing;
118
109
  }
119
110
  await program.beforeOpen(this.properties.client, {
120
- onBeforeOpen: async (p) => {
121
- if (this.properties.shouldMonitor(p) &&
122
- p.parents.length === 1 &&
123
- !p.parents[0]) {
124
- return this._onProgramOpen(p, options?.existing); // TODO types
111
+ onBeforeOpen: (p) => {
112
+ if (this.properties.shouldMonitor(program) && !options.parent) {
113
+ this.items.set(address, program);
125
114
  }
126
115
  },
127
116
  onClose: (p) => {
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { PublicSignKey } from "@peerbit/crypto";
2
2
  import { Constructor } from "@dao-xyz/borsh";
3
- import { EventEmitter } from "@libp2p/interface/events";
3
+ import { TypedEventTarget } from "@libp2p/interface";
4
4
  import { Client } from "./client.js";
5
5
  import { Blocks } from "@peerbit/blocks-interface";
6
6
  import { PeerId as Libp2pPeerId } from "@libp2p/interface/peer-id";
@@ -25,6 +25,7 @@ declare class ProgramHandler extends Handler<Program> {
25
25
  });
26
26
  }
27
27
  export { ProgramHandler };
28
+ type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
28
29
  export declare abstract class Program<Args = any, Events extends ProgramEvents = ProgramEvents> implements Manageable<Args> {
29
30
  private _node;
30
31
  private _allPrograms;
@@ -35,8 +36,7 @@ export declare abstract class Program<Args = any, Events extends ProgramEvents =
35
36
  private _address?;
36
37
  get address(): Address;
37
38
  set address(address: Address);
38
- addParent(program: Program<any> | undefined): void;
39
- get events(): EventEmitter<Events>;
39
+ get events(): TypedEventTarget<Events>;
40
40
  get closed(): boolean;
41
41
  set closed(closed: boolean);
42
42
  get node(): ProgramClient;
@@ -59,8 +59,11 @@ export declare abstract class Program<Args = any, Events extends ProgramEvents =
59
59
  * Wait for another peer to be 'ready' to talk with you for this particular program
60
60
  * @param other
61
61
  */
62
- waitFor(...other: (PublicSignKey | Libp2pPeerId)[]): Promise<void>;
63
- getReady(): Promise<Set<string>>;
62
+ waitFor(other: PublicSignKey | Libp2pPeerId | (PublicSignKey | Libp2pPeerId)[], options?: {
63
+ signal?: AbortSignal;
64
+ timeout?: number;
65
+ }): Promise<void>;
66
+ getReady(): Promise<Map<string, PublicSignKey>>;
64
67
  get allPrograms(): Program[];
65
68
  get programs(): Program[];
66
69
  clone(): this;
@@ -70,7 +73,7 @@ export declare abstract class Program<Args = any, Events extends ProgramEvents =
70
73
  static load<P extends Program<any>>(address: Address, store: Blocks, options?: {
71
74
  timeout?: number;
72
75
  }): Promise<P | undefined>;
73
- static open<T extends Program<Args>, Args = any>(this: Constructor<T>, address: Address, node: ProgramClient, options?: ProgramInitializationOptions<Args, T>): Promise<T>;
76
+ static open<T extends Program<ExtractArgs<T>>>(this: Constructor<T>, address: string, node: ProgramClient, options?: ProgramInitializationOptions<ExtractArgs<T>, T>): Promise<T>;
74
77
  }
75
78
  export declare const getProgramFromVariants: <T extends Program<any, ProgramEvents>>() => Constructor<T>[];
76
79
  export declare const getProgramFromVariant: <T extends Program<any, ProgramEvents>>(variant: string) => Constructor<T> | undefined;
@@ -9,14 +9,22 @@ import { PublicSignKey, getPublicKeyFromPeerId } from "@peerbit/crypto";
9
9
  import { getSchema, variant } from "@dao-xyz/borsh";
10
10
  import { getValuesWithType } from "./utils.js";
11
11
  import { serialize, deserialize } from "@dao-xyz/borsh";
12
- import { CustomEvent, EventEmitter } from "@libp2p/interface/events";
13
- import { waitForAsync } from "@peerbit/time";
14
- import { Handler } from "./handler.js";
12
+ import { CustomEvent, TypedEventEmitter } from "@libp2p/interface";
13
+ import { Handler, addParent } from "./handler.js";
15
14
  const intersection = (a, b) => {
16
- const newSet = new Set();
17
- for (const el of b) {
18
- if (!a || a.has(el)) {
19
- newSet.add(el);
15
+ const newSet = new Map();
16
+ if (Array.isArray(b)) {
17
+ for (const el of b) {
18
+ if (!a || a.has(el.hashcode())) {
19
+ newSet.set(el.hashcode(), el);
20
+ }
21
+ }
22
+ }
23
+ else {
24
+ for (const [key, el] of b) {
25
+ if (!a || a.has(key)) {
26
+ newSet.set(key, el);
27
+ }
20
28
  }
21
29
  }
22
30
  return newSet;
@@ -64,14 +72,8 @@ let Program = Program_1 = class Program {
64
72
  set address(address) {
65
73
  this._address = address;
66
74
  }
67
- addParent(program) {
68
- (this.parents || (this.parents = [])).push(program);
69
- if (program) {
70
- (program.children || (program.children = [])).push(this);
71
- }
72
- }
73
75
  get events() {
74
- return this._events || (this._events = new EventEmitter());
76
+ return this._events || (this._events = new TypedEventEmitter());
75
77
  }
76
78
  get closed() {
77
79
  if (this._closed == null) {
@@ -100,11 +102,11 @@ let Program = Program_1 = class Program {
100
102
  throw new Error("Subprogram has same address as some parent program. This is not currently supported");
101
103
  }
102
104
  if (!this.closed) {
103
- this.addParent(options?.parent);
105
+ addParent(this, options?.parent);
104
106
  return;
105
107
  }
106
108
  else {
107
- this.addParent(options?.parent);
109
+ addParent(this, options?.parent);
108
110
  }
109
111
  this._eventOptions = options;
110
112
  this.node = node;
@@ -137,7 +139,7 @@ let Program = Program_1 = class Program {
137
139
  .flat();
138
140
  // if subscribing to all topics, emit "join" event
139
141
  for (const topic of allTopics) {
140
- if (!(await this.node.services.pubsub.getSubscribers(topic))?.has(s.from.hashcode())) {
142
+ if (!(await this.node.services.pubsub.getSubscribers(topic))?.find((x) => s.from.equals(x))) {
141
143
  return;
142
144
  }
143
145
  }
@@ -150,7 +152,7 @@ let Program = Program_1 = class Program {
150
152
  .flat();
151
153
  // if subscribing not subscribing to any topics, emit "leave" event
152
154
  for (const topic of allTopics) {
153
- if ((await this.node.services.pubsub.getSubscribers(topic))?.has(s.from.hashcode())) {
155
+ if ((await this.node.services.pubsub.getSubscribers(topic))?.find((x) => s.from.equals(x))) {
154
156
  return;
155
157
  }
156
158
  }
@@ -243,14 +245,48 @@ let Program = Program_1 = class Program {
243
245
  * Wait for another peer to be 'ready' to talk with you for this particular program
244
246
  * @param other
245
247
  */
246
- async waitFor(...other) {
247
- const expectedHashes = new Set(other.map((x) => x instanceof PublicSignKey
248
+ async waitFor(other, options) {
249
+ const ids = Array.isArray(other) ? other : [other];
250
+ const expectedHashes = new Set(ids.map((x) => x instanceof PublicSignKey
248
251
  ? x.hashcode()
249
252
  : getPublicKeyFromPeerId(x).hashcode()));
250
- await waitForAsync(async () => {
251
- return (intersection(expectedHashes, await this.getReady()).size ===
252
- expectedHashes.size);
253
- }, { delayInterval: 200, timeout: 10 * 1000 }); // 200 ms delay since this is an expensive op. TODO, make event based instead
253
+ // make sure nodes are reachable
254
+ await Promise.all(ids.map((x) => this.node.services.pubsub.waitFor(x, { signal: options?.signal })));
255
+ // wait for subscribing to topics
256
+ return new Promise((resolve, reject) => {
257
+ const timeout = setTimeout(() => {
258
+ this.node.services.pubsub.removeEventListener("subscribe", listener);
259
+ options?.signal?.removeEventListener("abort", abortListener);
260
+ reject(new Error("Timeout"));
261
+ }, options?.timeout || 10 * 1000);
262
+ const abortListener = (e) => {
263
+ this.node.services.pubsub.removeEventListener("subscribe", listener);
264
+ clearTimeout(timeout);
265
+ reject(e);
266
+ };
267
+ options?.signal?.addEventListener("abort", abortListener);
268
+ const checkReady = async () => {
269
+ let ready = true;
270
+ const allReadyHashes = await this.getReady();
271
+ for (const hash of expectedHashes) {
272
+ if (!allReadyHashes.has(hash)) {
273
+ ready = false;
274
+ break;
275
+ }
276
+ }
277
+ if (ready) {
278
+ this.node.services.pubsub.removeEventListener("subscribe", listener);
279
+ clearTimeout(timeout);
280
+ options?.signal?.removeEventListener("abort", abortListener);
281
+ resolve();
282
+ }
283
+ };
284
+ const listener = () => {
285
+ return checkReady();
286
+ };
287
+ this.node.services.pubsub.addEventListener("subscribe", listener);
288
+ checkReady();
289
+ });
254
290
  }
255
291
  async getReady() {
256
292
  // all peers that subscribe to all topics
@@ -261,14 +297,14 @@ let Program = Program_1 = class Program {
261
297
  for (const topic of topics) {
262
298
  const subscribers = await this.node.services.pubsub.getSubscribers(topic);
263
299
  if (!subscribers) {
264
- throw new Error("client is not subscriber to topic data, do not have any info about peer readiness");
300
+ continue;
265
301
  }
266
- ready = intersection(ready, subscribers.keys());
302
+ ready = intersection(ready, subscribers);
267
303
  }
268
304
  }
269
305
  }
270
306
  if (ready == null) {
271
- throw new Error("Do not have any info about peer readiness");
307
+ return new Map();
272
308
  }
273
309
  return ready;
274
310
  }
@@ -322,7 +358,7 @@ let Program = Program_1 = class Program {
322
358
  if (!p) {
323
359
  throw new Error("Failed to load program");
324
360
  }
325
- await node.open(p, options);
361
+ await node.open(p, options); // TODO fix types
326
362
  return p;
327
363
  }
328
364
  };
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,SAAS,EAET,MAAM,gBAAgB,CAAC;AAExB,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,wCAAwC,GAAG,GAAG,CAAC;AACrD,MAAM,mCAAmC,GACxC,wCAAwC,GAAG,oBAAoB,CAAC;AACjE,MAAM,eAAe,GAAG,CACvB,IAAsC,EACtC,MAAc,EACiC,EAAE,CACjD,IAAI,CAAC,SAAS,CAAC,mCAAmC,GAAG,MAAM,CAAC,CAAC;AAE9D,MAAM,kBAAkB,GAAG,CAC1B,IAAsC,EACvB,EAAE;IACjB,IAAI,IAAI,GAA2B,SAAS,CAAC;IAC7C,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE;YACV,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE;gBAC9C,OAAO,GAAG,CAAC;aACX;SACD;aAAM;YACN,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,GAAG,IAAI,CAAC;SACZ;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,IAAS,EACT,IAAsC,EACtC,UAAiD,EAC3C,EAAE;IACR,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE;gBACX,SAAS;aACT;YACD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE;gBACrB,IAAI,OAAO,IAAI,OAAO,YAAY,IAAI,EAAE;oBACvC,MAAM,CAAC,IAAI,CAAC,OAAY,CAAC,CAAC;iBAC1B;qBAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;oBACvC,IAAI,UAAU,IAAI,OAAO,YAAY,UAAU,EAAE;wBAChD,OAAO;qBACP;oBACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;oBAClE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,CAAC,CAAC,CAAC;iBACH;YACF,CAAC,CAAC;YACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACzB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;oBAC5B,CAAC,CAAC,OAAO,CAAC,CAAC;iBACX;aACD;iBAAM;gBACN,CAAC,CAAC,KAAK,CAAC,CAAC;aACT;SACD;KACD;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,SAAS,EAET,MAAM,gBAAgB,CAAC;AAExB,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,wCAAwC,GAAG,GAAG,CAAC;AACrD,MAAM,mCAAmC,GACxC,wCAAwC,GAAG,oBAAoB,CAAC;AACjE,MAAM,eAAe,GAAG,CACvB,IAAsC,EACtC,MAAc,EACiC,EAAE,CACjD,IAAI,CAAC,SAAS,CAAC,mCAAmC,GAAG,MAAM,CAAC,CAAC;AAE9D,MAAM,kBAAkB,GAAG,CAC1B,IAAsC,EACvB,EAAE;IACjB,IAAI,IAAI,GAA2B,SAAS,CAAC;IAC7C,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC/C,OAAO,GAAG,CAAC;YACZ,CAAC;QACF,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,IAAS,EACT,IAAsC,EACtC,UAAiD,EAC3C,EAAE;IACR,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,SAAS;YACV,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE;gBACrB,IAAI,OAAO,IAAI,OAAO,YAAY,IAAI,EAAE,CAAC;oBACxC,MAAM,CAAC,IAAI,CAAC,OAAY,CAAC,CAAC;gBAC3B,CAAC;qBAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACxC,IAAI,UAAU,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;wBACjD,OAAO;oBACR,CAAC;oBACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;oBAClE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC,CAAC;YACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;oBAC7B,CAAC,CAAC,OAAO,CAAC,CAAC;gBACZ,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,CAAC,CAAC,KAAK,CAAC,CAAC;YACV,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/program",
3
- "version": "2.4.1",
3
+ "version": "3.0.1",
4
4
  "description": "Program interface",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -30,10 +30,11 @@
30
30
  "license": "MIT",
31
31
  "dependencies": {
32
32
  "@dao-xyz/borsh": "^5.1.8",
33
- "@peerbit/blocks-interface": "^1.1.3",
34
- "@peerbit/crypto": "1.0.10",
35
- "@peerbit/lazy-level": "^1.2.1",
36
- "@peerbit/pubsub-interface": "^1.1.5"
33
+ "@peerbit/any-store": "^1.0.1",
34
+ "@peerbit/blocks-interface": "^1.2.0",
35
+ "@peerbit/crypto": "2.0.0",
36
+ "@peerbit/keychain": "^1.0.0",
37
+ "@peerbit/pubsub-interface": "^2.0.0"
37
38
  },
38
- "gitHead": "1a57e60b02b5ea1c0c743871a92404a0115ed683"
39
+ "gitHead": "c48cb37d237a25b0bcc849482b43f6941d53e3d5"
39
40
  }
package/src/client.ts CHANGED
@@ -1,13 +1,16 @@
1
1
  import type { PeerId as Libp2pPeerId } from "@libp2p/interface/peer-id";
2
2
  import { Blocks } from "@peerbit/blocks-interface";
3
3
  import { PubSub } from "@peerbit/pubsub-interface";
4
- import { Ed25519PublicKey, Identity, Keychain } from "@peerbit/crypto";
5
- import type { SimpleLevel } from "@peerbit/lazy-level";
4
+ import { Ed25519PublicKey, Identity } from "@peerbit/crypto";
5
+ import { Keychain } from "@peerbit/keychain";
6
+ import type { AnyStore } from "@peerbit/any-store";
6
7
  import { Multiaddr } from "@multiformats/multiaddr";
7
8
  import { Address } from "./address.js";
8
9
  import { CanOpen, Manageable, OpenOptions } from "./handler.js";
9
10
 
10
- export interface Client<T extends Manageable<any>> {
11
+ type ExtractArgs<T> = T extends CanOpen<infer Args> ? Args : never;
12
+
13
+ export interface Client<T extends Manageable<ExtractArgs<T>>> {
11
14
  peerId: Libp2pPeerId;
12
15
  identity: Identity<Ed25519PublicKey>;
13
16
  getMultiaddrs: () => Multiaddr[];
@@ -15,13 +18,13 @@ export interface Client<T extends Manageable<any>> {
15
18
  services: {
16
19
  pubsub: PubSub;
17
20
  blocks: Blocks;
21
+ keychain: Keychain;
18
22
  };
19
- memory: SimpleLevel;
20
- keychain: Keychain;
23
+ memory: AnyStore;
21
24
  start(): Promise<void>;
22
25
  stop(): Promise<void>;
23
- open<S extends T & CanOpen<Args>, Args = any>(
26
+ open<S extends T & CanOpen<ExtractArgs<S>>>(
24
27
  program: S | Address,
25
- options?: OpenOptions<Args, S>
28
+ options?: OpenOptions<ExtractArgs<S>, S>
26
29
  ): Promise<S>;
27
30
  }
package/src/handler.ts CHANGED
@@ -17,8 +17,6 @@ export type EventOptions = {
17
17
  export type OpenOptions<Args, T extends Manageable<Args>> = {
18
18
  timeout?: number;
19
19
  existing?: ProgramMergeStrategy;
20
- /*
21
- reset?: boolean; */
22
20
  } & ProgramInitializationOptions<Args, T>;
23
21
 
24
22
  export type WithArgs<Args> = { args?: Args };
@@ -60,6 +58,13 @@ export type ProgramInitializationOptions<Args, T extends Manageable<Args>> = {
60
58
  WithParent<T> &
61
59
  EventOptions;
62
60
 
61
+ export const addParent = (child: Manageable<any>, parent?: Manageable<any>) => {
62
+ (child.parents || (child.parents = [])).push(parent);
63
+ if (parent) {
64
+ (parent.children || (parent.children = [])).push(child);
65
+ }
66
+ };
67
+
63
68
  export class Handler<T extends Manageable<any>> {
64
69
  items: Map<string, T>;
65
70
  private _openQueue: Map<string, PQueue>;
@@ -103,30 +108,6 @@ export class Handler<T extends Manageable<any>> {
103
108
  // TODO remove item from this._openQueue?
104
109
  }
105
110
 
106
- private async _onProgramOpen(
107
- program: T,
108
- mergeSrategy?: ProgramMergeStrategy
109
- ) {
110
- const programAddress = program.address?.toString();
111
- if (!programAddress) {
112
- throw new Error("Missing program address");
113
- }
114
- if (this.items.has(programAddress)) {
115
- // second condition only makes this throw error if we are to add a new instance with the same address
116
- const existing = await this.checkProcessExisting(
117
- programAddress,
118
- program,
119
- mergeSrategy
120
- );
121
- if (!existing) {
122
- throw new Error("Unexpected");
123
- }
124
- this.items.set(programAddress, program);
125
- } else {
126
- this.items.set(programAddress, program);
127
- }
128
- }
129
-
130
111
  private async checkProcessExisting<S extends T>(
131
112
  address: Address,
132
113
  toOpen: Manageable<any>,
@@ -196,6 +177,7 @@ export class Handler<T extends Manageable<any>> {
196
177
  if (!program.closed) {
197
178
  const existing = this.items.get(program.address);
198
179
  if (existing === program) {
180
+ addParent(existing, options.parent);
199
181
  return program;
200
182
  } else if (existing) {
201
183
  // we got existing, but it is not the same instance
@@ -212,6 +194,7 @@ export class Handler<T extends Manageable<any>> {
212
194
  // assume new instance was not added to monitored items, just add it
213
195
  // and return it as we would opened it normally
214
196
  this.items.set(program.address, program);
197
+ addParent(program, options.parent);
215
198
  return program;
216
199
  }
217
200
  }
@@ -234,13 +217,9 @@ export class Handler<T extends Manageable<any>> {
234
217
  }
235
218
 
236
219
  await program.beforeOpen(this.properties.client, {
237
- onBeforeOpen: async (p) => {
238
- if (
239
- this.properties.shouldMonitor(p) &&
240
- p.parents.length === 1 &&
241
- !p.parents[0]
242
- ) {
243
- return this._onProgramOpen(p as T, options?.existing); // TODO types
220
+ onBeforeOpen: (p) => {
221
+ if (this.properties.shouldMonitor(program) && !options.parent) {
222
+ this.items.set(address, program);
244
223
  }
245
224
  },
246
225
  onClose: (p) => {
@@ -257,7 +236,6 @@ export class Handler<T extends Manageable<any>> {
257
236
  // If the program opens more programs
258
237
  // reset: options.reset,
259
238
  });
260
-
261
239
  await program.open(options.args);
262
240
  await program.afterOpen();
263
241
  return program as S;
package/src/program.ts CHANGED
@@ -2,9 +2,12 @@ import { PublicSignKey, getPublicKeyFromPeerId } from "@peerbit/crypto";
2
2
  import { Constructor, getSchema, variant } from "@dao-xyz/borsh";
3
3
  import { getValuesWithType } from "./utils.js";
4
4
  import { serialize, deserialize } from "@dao-xyz/borsh";
5
- import { CustomEvent, EventEmitter } from "@libp2p/interface/events";
5
+ import {
6
+ TypedEventTarget,
7
+ CustomEvent,
8
+ TypedEventEmitter
9
+ } from "@libp2p/interface";
6
10
  import { Client } from "./client.js";
7
- import { waitForAsync } from "@peerbit/time";
8
11
  import { Blocks } from "@peerbit/blocks-interface";
9
12
  import { PeerId as Libp2pPeerId } from "@libp2p/interface/peer-id";
10
13
  import {
@@ -16,17 +19,27 @@ import {
16
19
  EventOptions,
17
20
  Handler,
18
21
  Manageable,
19
- ProgramInitializationOptions
22
+ ProgramInitializationOptions,
23
+ addParent
20
24
  } from "./handler.js";
21
25
 
22
26
  const intersection = (
23
- a: Set<string> | undefined,
24
- b: Set<string> | IterableIterator<string>
27
+ a: Map<string, PublicSignKey> | undefined,
28
+ b: Map<string, PublicSignKey> | PublicSignKey[]
25
29
  ) => {
26
- const newSet = new Set<string>();
27
- for (const el of b) {
28
- if (!a || a.has(el)) {
29
- newSet.add(el);
30
+ const newSet = new Map<string, PublicSignKey>();
31
+
32
+ if (Array.isArray(b)) {
33
+ for (const el of b) {
34
+ if (!a || a.has(el.hashcode())) {
35
+ newSet.set(el.hashcode(), el);
36
+ }
37
+ }
38
+ } else {
39
+ for (const [key, el] of b) {
40
+ if (!a || a.has(key)) {
41
+ newSet.set(key, el);
42
+ }
30
43
  }
31
44
  }
32
45
  return newSet;
@@ -77,6 +90,8 @@ class ProgramHandler extends Handler<Program> {
77
90
  }
78
91
  export { ProgramHandler };
79
92
 
93
+ type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
94
+
80
95
  @variant(0)
81
96
  export abstract class Program<
82
97
  Args = any,
@@ -86,7 +101,7 @@ export abstract class Program<
86
101
  private _node: ProgramClient;
87
102
  private _allPrograms: Program[] | undefined;
88
103
 
89
- private _events: EventEmitter<ProgramEvents>;
104
+ private _events: TypedEventTarget<ProgramEvents>;
90
105
  private _closed: boolean;
91
106
 
92
107
  parents: (Program<any> | undefined)[];
@@ -107,15 +122,8 @@ export abstract class Program<
107
122
  this._address = address;
108
123
  }
109
124
 
110
- addParent(program: Program<any> | undefined) {
111
- (this.parents || (this.parents = [])).push(program);
112
- if (program) {
113
- (program.children || (program.children = [])).push(this);
114
- }
115
- }
116
-
117
- get events(): EventEmitter<Events> {
118
- return this._events || (this._events = new EventEmitter());
125
+ get events(): TypedEventTarget<Events> {
126
+ return this._events || (this._events = new TypedEventEmitter());
119
127
  }
120
128
 
121
129
  get closed(): boolean {
@@ -158,11 +166,12 @@ export abstract class Program<
158
166
  }
159
167
 
160
168
  if (!this.closed) {
161
- this.addParent(options?.parent);
169
+ addParent(this, options?.parent);
162
170
  return;
163
171
  } else {
164
- this.addParent(options?.parent);
172
+ addParent(this, options?.parent);
165
173
  }
174
+
166
175
  this._eventOptions = options;
167
176
  this.node = node;
168
177
  const nexts = this.programs;
@@ -211,8 +220,8 @@ export abstract class Program<
211
220
  // if subscribing to all topics, emit "join" event
212
221
  for (const topic of allTopics) {
213
222
  if (
214
- !(await this.node.services.pubsub.getSubscribers(topic))?.has(
215
- s.from.hashcode()
223
+ !(await this.node.services.pubsub.getSubscribers(topic))?.find((x) =>
224
+ s.from.equals(x)
216
225
  )
217
226
  ) {
218
227
  return;
@@ -230,8 +239,8 @@ export abstract class Program<
230
239
  // if subscribing not subscribing to any topics, emit "leave" event
231
240
  for (const topic of allTopics) {
232
241
  if (
233
- (await this.node.services.pubsub.getSubscribers(topic))?.has(
234
- s.from.hashcode()
242
+ (await this.node.services.pubsub.getSubscribers(topic))?.find((x) =>
243
+ s.from.equals(x)
235
244
  )
236
245
  ) {
237
246
  return;
@@ -345,28 +354,72 @@ export abstract class Program<
345
354
  * Wait for another peer to be 'ready' to talk with you for this particular program
346
355
  * @param other
347
356
  */
348
- async waitFor(...other: (PublicSignKey | Libp2pPeerId)[]): Promise<void> {
357
+ async waitFor(
358
+ other: PublicSignKey | Libp2pPeerId | (PublicSignKey | Libp2pPeerId)[],
359
+ options?: { signal?: AbortSignal; timeout?: number }
360
+ ): Promise<void> {
361
+ const ids = Array.isArray(other) ? other : [other];
349
362
  const expectedHashes = new Set(
350
- other.map((x) =>
363
+ ids.map((x) =>
351
364
  x instanceof PublicSignKey
352
365
  ? x.hashcode()
353
366
  : getPublicKeyFromPeerId(x).hashcode()
354
367
  )
355
368
  );
356
- await waitForAsync(
357
- async () => {
358
- return (
359
- intersection(expectedHashes, await this.getReady()).size ===
360
- expectedHashes.size
361
- );
362
- },
363
- { delayInterval: 200, timeout: 10 * 1000 }
364
- ); // 200 ms delay since this is an expensive op. TODO, make event based instead
369
+
370
+ // make sure nodes are reachable
371
+ await Promise.all(
372
+ ids.map((x) =>
373
+ this.node.services.pubsub.waitFor(x, { signal: options?.signal })
374
+ )
375
+ );
376
+
377
+ // wait for subscribing to topics
378
+ return new Promise<void>((resolve, reject) => {
379
+ const timeout = setTimeout(
380
+ () => {
381
+ this.node.services.pubsub.removeEventListener("subscribe", listener);
382
+ options?.signal?.removeEventListener("abort", abortListener);
383
+ reject(new Error("Timeout"));
384
+ },
385
+ options?.timeout || 10 * 1000
386
+ );
387
+
388
+ const abortListener = (e) => {
389
+ this.node.services.pubsub.removeEventListener("subscribe", listener);
390
+ clearTimeout(timeout);
391
+ reject(e);
392
+ };
393
+
394
+ options?.signal?.addEventListener("abort", abortListener);
395
+
396
+ const checkReady = async () => {
397
+ let ready = true;
398
+ const allReadyHashes = await this.getReady();
399
+ for (const hash of expectedHashes) {
400
+ if (!allReadyHashes.has(hash)) {
401
+ ready = false;
402
+ break;
403
+ }
404
+ }
405
+ if (ready) {
406
+ this.node.services.pubsub.removeEventListener("subscribe", listener);
407
+ clearTimeout(timeout);
408
+ options?.signal?.removeEventListener("abort", abortListener);
409
+ resolve();
410
+ }
411
+ };
412
+ const listener = () => {
413
+ return checkReady();
414
+ };
415
+ this.node.services.pubsub.addEventListener("subscribe", listener);
416
+ checkReady();
417
+ });
365
418
  }
366
419
 
367
- async getReady(): Promise<Set<string>> {
420
+ async getReady(): Promise<Map<string, PublicSignKey>> {
368
421
  // all peers that subscribe to all topics
369
- let ready: Set<string> | undefined = undefined; // the interesection of all ready
422
+ let ready: Map<string, PublicSignKey> | undefined = undefined; // the interesection of all ready
370
423
  for (const program of this.allPrograms) {
371
424
  if (program.getTopics) {
372
425
  const topics = program.getTopics();
@@ -374,16 +427,14 @@ export abstract class Program<
374
427
  const subscribers =
375
428
  await this.node.services.pubsub.getSubscribers(topic);
376
429
  if (!subscribers) {
377
- throw new Error(
378
- "client is not subscriber to topic data, do not have any info about peer readiness"
379
- );
430
+ continue;
380
431
  }
381
- ready = intersection(ready, subscribers.keys());
432
+ ready = intersection(ready, subscribers);
382
433
  }
383
434
  }
384
435
  }
385
436
  if (ready == null) {
386
- throw new Error("Do not have any info about peer readiness");
437
+ return new Map();
387
438
  }
388
439
  return ready;
389
440
  }
@@ -452,18 +503,18 @@ export abstract class Program<
452
503
  return der as P;
453
504
  }
454
505
 
455
- static async open<T extends Program<Args>, Args = any>(
506
+ static async open<T extends Program<ExtractArgs<T>>>(
456
507
  this: Constructor<T>,
457
- address: Address,
508
+ address: string,
458
509
  node: ProgramClient,
459
- options?: ProgramInitializationOptions<Args, T>
510
+ options?: ProgramInitializationOptions<ExtractArgs<T>, T>
460
511
  ): Promise<T> {
461
512
  const p = await Program.load<T>(address, node.services.blocks);
462
513
 
463
514
  if (!p) {
464
515
  throw new Error("Failed to load program");
465
516
  }
466
- await node.open(p, options);
517
+ await node.open<T>(p, options as any); // TODO fix types
467
518
  return p as T;
468
519
  }
469
520
  }