@welshman/net 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/lib/src/TaskQueue.d.ts +2 -0
  2. package/dist/lib/src/TaskQueue.d.ts.map +1 -1
  3. package/dist/lib/src/TaskQueue.js +10 -0
  4. package/dist/lib/src/TaskQueue.js.map +1 -1
  5. package/dist/lib/src/Tools.d.ts +100 -3
  6. package/dist/lib/src/Tools.d.ts.map +1 -1
  7. package/dist/lib/src/Tools.js +166 -3
  8. package/dist/lib/src/Tools.js.map +1 -1
  9. package/dist/net/src/auth.d.ts +2 -1
  10. package/dist/net/src/auth.d.ts.map +1 -1
  11. package/dist/net/src/auth.js +16 -2
  12. package/dist/net/src/auth.js.map +1 -1
  13. package/dist/net/src/context.d.ts.map +1 -1
  14. package/dist/net/src/context.js +3 -3
  15. package/dist/net/src/context.js.map +1 -1
  16. package/dist/net/src/diff.d.ts.map +1 -1
  17. package/dist/net/src/diff.js +11 -12
  18. package/dist/net/src/diff.js.map +1 -1
  19. package/dist/net/src/policy.js +3 -3
  20. package/dist/net/src/policy.js.map +1 -1
  21. package/dist/net/src/pool.d.ts +1 -1
  22. package/dist/net/src/pool.d.ts.map +1 -1
  23. package/dist/net/src/pool.js +1 -1
  24. package/dist/net/src/pool.js.map +1 -1
  25. package/dist/net/src/publish.d.ts +29 -30
  26. package/dist/net/src/publish.d.ts.map +1 -1
  27. package/dist/net/src/publish.js +79 -108
  28. package/dist/net/src/publish.js.map +1 -1
  29. package/dist/net/src/request.d.ts +26 -60
  30. package/dist/net/src/request.d.ts.map +1 -1
  31. package/dist/net/src/request.js +170 -158
  32. package/dist/net/src/request.js.map +1 -1
  33. package/dist/relay/src/repository.d.ts +1 -1
  34. package/dist/relay/src/repository.d.ts.map +1 -1
  35. package/dist/relay/src/repository.js +1 -1
  36. package/dist/relay/src/repository.js.map +1 -1
  37. package/dist/util/src/Events.d.ts +1 -1
  38. package/dist/util/src/Events.d.ts.map +1 -1
  39. package/dist/util/src/Events.js +6 -5
  40. package/dist/util/src/Events.js.map +1 -1
  41. package/dist/util/src/List.d.ts +2 -0
  42. package/dist/util/src/List.d.ts.map +1 -1
  43. package/dist/util/src/List.js +10 -3
  44. package/dist/util/src/List.js.map +1 -1
  45. package/dist/util/src/Profile.d.ts +3 -10
  46. package/dist/util/src/Profile.d.ts.map +1 -1
  47. package/dist/util/src/Profile.js +1 -0
  48. package/dist/util/src/Profile.js.map +1 -1
  49. package/dist/util/src/Relay.d.ts +6 -0
  50. package/dist/util/src/Relay.d.ts.map +1 -1
  51. package/dist/util/src/Relay.js +9 -2
  52. package/dist/util/src/Relay.js.map +1 -1
  53. package/package.json +5 -4
@@ -1,125 +1,96 @@
1
- import { EventEmitter } from "events";
2
- import { on, fromPairs, sleep, yieldThread } from "@welshman/lib";
3
1
  import { ClientMessageType, isRelayOk } from "./message.js";
4
2
  import { AdapterEvent, getAdapter } from "./adapter.js";
5
3
  export var PublishStatus;
6
4
  (function (PublishStatus) {
5
+ PublishStatus["Sending"] = "publish:status:sending";
7
6
  PublishStatus["Pending"] = "publish:status:pending";
8
7
  PublishStatus["Success"] = "publish:status:success";
9
8
  PublishStatus["Failure"] = "publish:status:failure";
10
9
  PublishStatus["Timeout"] = "publish:status:timeout";
11
10
  PublishStatus["Aborted"] = "publish:status:aborted";
12
11
  })(PublishStatus || (PublishStatus = {}));
13
- export var PublishEvent;
14
- (function (PublishEvent) {
15
- PublishEvent["Success"] = "publish:event:success";
16
- PublishEvent["Failure"] = "publish:event:failure";
17
- PublishEvent["Timeout"] = "publish:event:timeout";
18
- PublishEvent["Aborted"] = "publish:event:aborted";
19
- PublishEvent["Complete"] = "publish:event:complete";
20
- })(PublishEvent || (PublishEvent = {}));
21
- export class SinglePublish extends EventEmitter {
22
- options;
23
- status = PublishStatus.Pending;
24
- _unsubscriber;
25
- _adapter;
26
- constructor(options) {
27
- super();
28
- this.options = options;
29
- // Set up our adapter
30
- this._adapter = getAdapter(this.options.relay, this.options.context);
31
- // Listen for SinglePublish result
32
- this._unsubscriber = on(this._adapter, AdapterEvent.Receive, (message, url) => {
33
- if (isRelayOk(message)) {
34
- const [_, id, ok, detail] = message;
35
- if (id !== this.options.event.id)
36
- return;
37
- if (ok) {
38
- this.status = PublishStatus.Success;
39
- this.emit(PublishEvent.Success, id, detail);
40
- }
41
- else {
42
- this.status = PublishStatus.Failure;
43
- this.emit(PublishEvent.Failure, id, detail);
44
- }
45
- this.cleanup();
12
+ export const publishOne = (options) => new Promise(resolve => {
13
+ const adapter = getAdapter(options.relay, options.context);
14
+ let status = PublishStatus.Pending;
15
+ options.onPending?.();
16
+ const cleanup = () => {
17
+ options.onComplete?.();
18
+ adapter.cleanup();
19
+ resolve(status);
20
+ };
21
+ adapter.on(AdapterEvent.Receive, (message, url) => {
22
+ if (isRelayOk(message)) {
23
+ const [_, id, ok, detail] = message;
24
+ if (id !== options.event.id)
25
+ return;
26
+ if (ok) {
27
+ status = PublishStatus.Success;
28
+ options.onSuccess?.(detail);
46
29
  }
47
- });
48
- // Set timeout
49
- sleep(this.options.timeout || 10_000).then(() => {
50
- if (this.status === PublishStatus.Pending) {
51
- this.status = PublishStatus.Timeout;
52
- this.emit(PublishEvent.Timeout);
30
+ else {
31
+ status = PublishStatus.Failure;
32
+ options.onFailure?.(detail);
53
33
  }
54
- this.cleanup();
55
- });
56
- // Start asynchronously so the caller can set up listeners
57
- yieldThread().then(() => {
58
- this._adapter.send([ClientMessageType.Event, this.options.event]);
59
- });
60
- }
61
- abort = () => {
62
- if (this.status === PublishStatus.Pending) {
63
- this.status = PublishStatus.Aborted;
64
- this.emit(PublishEvent.Aborted);
65
- this.cleanup();
66
- }
67
- };
68
- cleanup = () => {
69
- this.emit(PublishEvent.Complete);
70
- this.removeAllListeners();
71
- this._adapter.cleanup();
72
- this._unsubscriber();
73
- };
74
- }
75
- export class MultiPublish extends EventEmitter {
76
- status;
77
- _children = [];
78
- _completed = new Set();
79
- constructor(options) {
80
- super();
81
- const relays = new Set(options.relays);
82
- if (relays.size !== options.relays.length) {
83
- console.warn("Non-unique relays passed to MultiPublish");
34
+ cleanup();
84
35
  }
85
- this.status = fromPairs(Array.from(relays).map(relay => [relay, PublishStatus.Pending]));
86
- for (const relay of relays) {
87
- const unicast = new SinglePublish({ relay, ...options });
88
- unicast.on(PublishEvent.Success, (id, detail) => {
89
- this.status[relay] = unicast.status;
90
- this.emit(PublishEvent.Success, id, detail, relay);
91
- });
92
- unicast.on(PublishEvent.Failure, (id, detail) => {
93
- this.status[relay] = unicast.status;
94
- this.emit(PublishEvent.Failure, id, detail, relay);
95
- });
96
- unicast.on(PublishEvent.Timeout, () => {
97
- this.status[relay] = unicast.status;
98
- this.emit(PublishEvent.Timeout, relay);
99
- });
100
- unicast.on(PublishEvent.Aborted, () => {
101
- this.status[relay] = unicast.status;
102
- this.emit(PublishEvent.Aborted, relay);
103
- });
104
- unicast.on(PublishEvent.Complete, () => {
105
- this._completed.add(relay);
106
- this.status[relay] = unicast.status;
107
- if (this._completed.size === relays.size) {
108
- this.emit(PublishEvent.Complete);
109
- this.cleanup();
110
- }
111
- });
112
- this._children.push(unicast);
36
+ });
37
+ options.signal?.addEventListener("abort", () => {
38
+ if (status === PublishStatus.Pending) {
39
+ status = PublishStatus.Aborted;
40
+ options.onAborted?.();
113
41
  }
114
- }
115
- abort() {
116
- for (const child of this._children) {
117
- child.abort();
42
+ cleanup();
43
+ });
44
+ setTimeout(() => {
45
+ if (status === PublishStatus.Pending) {
46
+ status = PublishStatus.Timeout;
47
+ options.onTimeout?.();
118
48
  }
49
+ cleanup();
50
+ }, options.timeout || 10_000);
51
+ adapter.send([ClientMessageType.Event, options.event]);
52
+ });
53
+ export const publish = async (options) => {
54
+ const { event, timeout, signal, context } = options;
55
+ const status = {};
56
+ const completed = new Set();
57
+ const relays = new Set(options.relays);
58
+ if (relays.size !== options.relays.length) {
59
+ console.warn("Non-unique relays passed to publish");
119
60
  }
120
- cleanup() {
121
- this.removeAllListeners();
122
- }
123
- }
124
- export const publish = (options) => new MultiPublish(options);
61
+ await Promise.all(options.relays.map(relay => publishOne({
62
+ event,
63
+ relay,
64
+ signal,
65
+ timeout,
66
+ context,
67
+ onSuccess: (detail) => {
68
+ status[relay] = PublishStatus.Success;
69
+ options.onSuccess?.(detail, relay);
70
+ },
71
+ onFailure: (detail) => {
72
+ status[relay] = PublishStatus.Failure;
73
+ options.onFailure?.(detail, relay);
74
+ },
75
+ onPending: () => {
76
+ status[relay] = PublishStatus.Pending;
77
+ options.onPending?.(relay);
78
+ },
79
+ onTimeout: () => {
80
+ status[relay] = PublishStatus.Timeout;
81
+ options.onTimeout?.(relay);
82
+ },
83
+ onAborted: () => {
84
+ status[relay] = PublishStatus.Aborted;
85
+ options.onAborted?.(relay);
86
+ },
87
+ onComplete: () => {
88
+ completed.add(relay);
89
+ if (completed.size === relays.size) {
90
+ options.onComplete?.();
91
+ }
92
+ },
93
+ })));
94
+ return status;
95
+ };
125
96
  //# sourceMappingURL=publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/publish.ts"],"names":[],"mappings":"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"}
@@ -1,70 +1,31 @@
1
- import { EventEmitter } from "events";
1
+ import { Deferred } from "@welshman/lib";
2
2
  import { Filter, TrustedEvent } from "@welshman/util";
3
- import { AdapterContext, AbstractAdapter } from "./adapter.js";
4
- import { Unsubscriber } from "./util.js";
3
+ import { AdapterContext } from "./adapter.js";
5
4
  import { Tracker } from "./tracker.js";
6
- export declare enum RequestEvent {
7
- Close = "request:event:close",
8
- Disconnect = "request:event:disconnect",
9
- Duplicate = "request:event:duplicate",
10
- Eose = "request:event:eose",
11
- Event = "request:event:event",
12
- Filtered = "request:event:filtered",
13
- Deleted = "request:event:deleted",
14
- Invalid = "request:event:invalid"
15
- }
16
- export type SingleRequestEvents = {
17
- [RequestEvent.Event]: (event: TrustedEvent) => void;
18
- [RequestEvent.Deleted]: (event: any) => void;
19
- [RequestEvent.Invalid]: (event: any) => void;
20
- [RequestEvent.Filtered]: (event: TrustedEvent) => void;
21
- [RequestEvent.Duplicate]: (event: TrustedEvent) => void;
22
- [RequestEvent.Disconnect]: () => void;
23
- [RequestEvent.Close]: () => void;
24
- [RequestEvent.Eose]: () => void;
25
- };
26
- export type SingleRequestOptions = {
5
+ export type RequestOneOptions = {
27
6
  relay: string;
28
7
  filters: Filter[];
29
8
  signal?: AbortSignal;
30
- context?: AdapterContext;
31
- timeout?: number;
32
9
  tracker?: Tracker;
10
+ context?: AdapterContext;
33
11
  autoClose?: boolean;
34
12
  isEventValid?: (event: TrustedEvent, url: string) => boolean;
35
13
  isEventDeleted?: (event: TrustedEvent, url: string) => boolean;
14
+ onEvent?: (event: TrustedEvent, url: string) => void;
15
+ onDeleted?: (event: unknown, url: string) => void;
16
+ onInvalid?: (event: unknown, url: string) => void;
17
+ onFiltered?: (event: TrustedEvent, url: string) => void;
18
+ onDuplicate?: (event: TrustedEvent, url: string) => void;
19
+ onDisconnect?: (url: string) => void;
20
+ onEose?: (url: string) => void;
21
+ onClose?: () => void;
36
22
  };
37
- export declare class SingleRequest extends EventEmitter {
38
- readonly options: SingleRequestOptions;
39
- _ids: Set<string>;
40
- _eose: Set<string>;
41
- _unsubscribers: Unsubscriber[];
42
- _adapter: AbstractAdapter;
43
- _closed: boolean;
44
- constructor(options: SingleRequestOptions);
45
- close(): void;
46
- }
47
- export type MultiRequestEvents = {
48
- [RequestEvent.Event]: (event: TrustedEvent, url: string) => void;
49
- [RequestEvent.Deleted]: (event: TrustedEvent, url: string) => void;
50
- [RequestEvent.Invalid]: (event: TrustedEvent, url: string) => void;
51
- [RequestEvent.Filtered]: (event: TrustedEvent, url: string) => void;
52
- [RequestEvent.Duplicate]: (event: TrustedEvent, url: string) => void;
53
- [RequestEvent.Disconnect]: (url: string) => void;
54
- [RequestEvent.Eose]: (url: string) => void;
55
- [RequestEvent.Close]: () => void;
56
- };
57
- export type MultiRequestOptions = Omit<SingleRequestOptions, "relay"> & {
23
+ export declare const requestOne: (options: RequestOneOptions) => Deferred<TrustedEvent[], TrustedEvent[]>;
24
+ export type RequestOptions = Omit<RequestOneOptions, "relay"> & {
58
25
  relays: string[];
59
26
  threshold?: number;
60
27
  };
61
- export declare class MultiRequest extends EventEmitter {
62
- _children: SingleRequest[];
63
- _closed: Set<string>;
64
- constructor(options: MultiRequestOptions);
65
- close(): void;
66
- }
67
- export declare const request: (options: MultiRequestOptions) => MultiRequest;
28
+ export declare const request: (options: RequestOptions) => Promise<TrustedEvent[]>;
68
29
  export type LoaderOptions = {
69
30
  delay: number;
70
31
  timeout?: number;
@@ -76,14 +37,19 @@ export type LoaderOptions = {
76
37
  export type LoadOptions = {
77
38
  relays: string[];
78
39
  filters: Filter[];
40
+ signal?: AbortSignal;
41
+ onEvent?: (event: TrustedEvent, url: string) => void;
42
+ onDisconnect?: (url: string) => void;
43
+ onEose?: (url: string) => void;
44
+ onClose?: () => void;
79
45
  };
80
46
  /**
81
47
  * Creates a convenience function which returns a promise of events from a request.
82
- * It may return early if filter cardinality is known, and it delays requests by
83
- * 200 in order to implement batching
84
- * @param options - MultiRequestOptions
85
- * @returns - a promise containing an array of TrustedEvents
48
+ * It may return early if filter cardinality is known, and it delays requests in order
49
+ * to implement batching
50
+ * @param options - LoaderOptions
51
+ * @returns - a load function
86
52
  */
87
- export declare const makeLoader: (options: LoaderOptions) => (request: LoadOptions) => Promise<TrustedEvent[]>;
88
- export declare const load: (request: LoadOptions) => Promise<TrustedEvent[]>;
53
+ export declare const makeLoader: (options: LoaderOptions) => (request: LoadOptions) => Promise<Deferred<TrustedEvent[]>>;
54
+ export declare const load: (request: LoadOptions) => Promise<Deferred<TrustedEvent[]>>;
89
55
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/request.ts"],"names":[],"mappings":"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"}