@welshman/net 0.1.1 → 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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/src/Deferred.d.ts +21 -0
  3. package/dist/lib/src/Deferred.d.ts.map +1 -0
  4. package/dist/lib/src/Deferred.js +21 -0
  5. package/dist/lib/src/Deferred.js.map +1 -0
  6. package/dist/lib/src/Emitter.d.ts +14 -0
  7. package/dist/lib/src/Emitter.d.ts.map +1 -0
  8. package/dist/lib/src/Emitter.js +18 -0
  9. package/dist/lib/src/Emitter.js.map +1 -0
  10. package/dist/lib/src/LRUCache.d.ts +42 -0
  11. package/dist/lib/src/LRUCache.d.ts.map +1 -0
  12. package/dist/lib/src/LRUCache.js +62 -0
  13. package/dist/lib/src/LRUCache.js.map +1 -0
  14. package/dist/lib/src/TaskQueue.d.ts +20 -0
  15. package/dist/lib/src/TaskQueue.d.ts.map +1 -0
  16. package/dist/lib/src/TaskQueue.js +57 -0
  17. package/dist/lib/src/TaskQueue.js.map +1 -0
  18. package/dist/lib/src/Tools.d.ts +727 -0
  19. package/dist/lib/src/Tools.d.ts.map +1 -0
  20. package/dist/lib/src/Tools.js +1224 -0
  21. package/dist/lib/src/Tools.js.map +1 -0
  22. package/dist/lib/src/index.d.ts +7 -0
  23. package/dist/lib/src/index.d.ts.map +1 -0
  24. package/dist/lib/src/index.js +7 -0
  25. package/dist/lib/src/index.js.map +1 -0
  26. package/dist/lib/src/normalize-url/index.d.ts +286 -0
  27. package/dist/lib/src/normalize-url/index.d.ts.map +1 -0
  28. package/dist/lib/src/normalize-url/index.js +252 -0
  29. package/dist/lib/src/normalize-url/index.js.map +1 -0
  30. package/{build → dist/net}/src/adapter.d.ts +5 -7
  31. package/dist/net/src/adapter.d.ts.map +1 -0
  32. package/dist/net/src/adapter.js.map +1 -0
  33. package/{build → dist/net}/src/auth.d.ts +7 -21
  34. package/dist/net/src/auth.d.ts.map +1 -0
  35. package/{build → dist/net}/src/auth.js +35 -58
  36. package/dist/net/src/auth.js.map +1 -0
  37. package/{build → dist/net}/src/context.d.ts +3 -0
  38. package/dist/net/src/context.d.ts.map +1 -0
  39. package/{build → dist/net}/src/context.js +3 -3
  40. package/dist/net/src/context.js.map +1 -0
  41. package/{build → dist/net}/src/diff.d.ts +3 -4
  42. package/dist/net/src/diff.d.ts.map +1 -0
  43. package/{build → dist/net}/src/diff.js +11 -13
  44. package/dist/net/src/diff.js.map +1 -0
  45. package/{build → dist/net}/src/index.d.ts +1 -0
  46. package/dist/net/src/index.d.ts.map +1 -0
  47. package/dist/net/src/index.js.map +1 -0
  48. package/{build → dist/net}/src/message.d.ts +1 -0
  49. package/dist/net/src/message.d.ts.map +1 -0
  50. package/dist/net/src/message.js.map +1 -0
  51. package/{build → dist/net}/src/negentropy.d.ts +2 -1
  52. package/dist/net/src/negentropy.d.ts.map +1 -0
  53. package/{build → dist/net}/src/negentropy.js +42 -18
  54. package/dist/net/src/negentropy.js.map +1 -0
  55. package/{build → dist/net}/src/policy.d.ts +16 -8
  56. package/dist/net/src/policy.d.ts.map +1 -0
  57. package/{build → dist/net}/src/policy.js +61 -83
  58. package/dist/net/src/policy.js.map +1 -0
  59. package/{build → dist/net}/src/pool.d.ts +2 -1
  60. package/dist/net/src/pool.d.ts.map +1 -0
  61. package/{build → dist/net}/src/pool.js +8 -8
  62. package/dist/net/src/pool.js.map +1 -0
  63. package/dist/net/src/publish.d.ts +44 -0
  64. package/dist/net/src/publish.d.ts.map +1 -0
  65. package/dist/net/src/publish.js +96 -0
  66. package/dist/net/src/publish.js.map +1 -0
  67. package/dist/net/src/request.d.ts +55 -0
  68. package/dist/net/src/request.d.ts.map +1 -0
  69. package/dist/net/src/request.js +212 -0
  70. package/dist/net/src/request.js.map +1 -0
  71. package/{build → dist/net}/src/socket.d.ts +11 -9
  72. package/dist/net/src/socket.d.ts.map +1 -0
  73. package/{build → dist/net}/src/socket.js +15 -8
  74. package/dist/net/src/socket.js.map +1 -0
  75. package/{build → dist/net}/src/tracker.d.ts +1 -0
  76. package/dist/net/src/tracker.d.ts.map +1 -0
  77. package/dist/net/src/tracker.js.map +1 -0
  78. package/dist/net/src/util.d.ts +2 -0
  79. package/dist/net/src/util.d.ts.map +1 -0
  80. package/{build → dist/net}/src/util.js.map +1 -1
  81. package/dist/relay/src/index.d.ts +3 -0
  82. package/dist/relay/src/index.d.ts.map +1 -0
  83. package/dist/relay/src/index.js +3 -0
  84. package/dist/relay/src/index.js.map +1 -0
  85. package/dist/relay/src/relay.d.ts +13 -0
  86. package/dist/relay/src/relay.d.ts.map +1 -0
  87. package/dist/relay/src/relay.js +48 -0
  88. package/dist/relay/src/relay.js.map +1 -0
  89. package/dist/relay/src/repository.d.ts +63 -0
  90. package/dist/relay/src/repository.d.ts.map +1 -0
  91. package/dist/relay/src/repository.js +270 -0
  92. package/dist/relay/src/repository.js.map +1 -0
  93. package/dist/tsconfig.build.tsbuildinfo +1 -0
  94. package/dist/util/src/Address.d.ts +21 -0
  95. package/dist/util/src/Address.d.ts.map +1 -0
  96. package/dist/util/src/Address.js +43 -0
  97. package/dist/util/src/Address.js.map +1 -0
  98. package/dist/util/src/Encryptable.d.ts +34 -0
  99. package/dist/util/src/Encryptable.d.ts.map +1 -0
  100. package/dist/util/src/Encryptable.js +52 -0
  101. package/dist/util/src/Encryptable.js.map +1 -0
  102. package/dist/util/src/Events.d.ts +77 -0
  103. package/dist/util/src/Events.d.ts.map +1 -0
  104. package/dist/util/src/Events.js +63 -0
  105. package/dist/util/src/Events.js.map +1 -0
  106. package/dist/util/src/Filters.d.ts +48 -0
  107. package/dist/util/src/Filters.d.ts.map +1 -0
  108. package/dist/util/src/Filters.js +185 -0
  109. package/dist/util/src/Filters.js.map +1 -0
  110. package/dist/util/src/Handler.d.ts +17 -0
  111. package/dist/util/src/Handler.d.ts.map +1 -0
  112. package/dist/util/src/Handler.js +33 -0
  113. package/dist/util/src/Handler.js.map +1 -0
  114. package/dist/util/src/Kinds.d.ts +159 -0
  115. package/dist/util/src/Kinds.d.ts.map +1 -0
  116. package/dist/util/src/Kinds.js +160 -0
  117. package/dist/util/src/Kinds.js.map +1 -0
  118. package/dist/util/src/Links.d.ts +3 -0
  119. package/dist/util/src/Links.d.ts.map +1 -0
  120. package/dist/util/src/Links.js +3 -0
  121. package/dist/util/src/Links.js.map +1 -0
  122. package/dist/util/src/List.d.ts +34 -0
  123. package/dist/util/src/List.d.ts.map +1 -0
  124. package/dist/util/src/List.js +74 -0
  125. package/dist/util/src/List.js.map +1 -0
  126. package/dist/util/src/Profile.d.ts +26 -0
  127. package/dist/util/src/Profile.d.ts.map +1 -0
  128. package/dist/util/src/Profile.js +50 -0
  129. package/dist/util/src/Profile.js.map +1 -0
  130. package/dist/util/src/Relay.d.ts +32 -0
  131. package/dist/util/src/Relay.d.ts.map +1 -0
  132. package/dist/util/src/Relay.js +49 -0
  133. package/dist/util/src/Relay.js.map +1 -0
  134. package/dist/util/src/Tags.d.ts +32 -0
  135. package/dist/util/src/Tags.d.ts.map +1 -0
  136. package/dist/util/src/Tags.js +74 -0
  137. package/dist/util/src/Tags.js.map +1 -0
  138. package/dist/util/src/Zaps.d.ts +20 -0
  139. package/dist/util/src/Zaps.d.ts.map +1 -0
  140. package/dist/util/src/Zaps.js +93 -0
  141. package/dist/util/src/Zaps.js.map +1 -0
  142. package/dist/util/src/index.d.ts +13 -0
  143. package/dist/util/src/index.d.ts.map +1 -0
  144. package/dist/util/src/index.js +13 -0
  145. package/dist/util/src/index.js.map +1 -0
  146. package/package.json +18 -21
  147. package/README.md +0 -61
  148. package/build/src/adapter.js.map +0 -1
  149. package/build/src/auth.js.map +0 -1
  150. package/build/src/context.js.map +0 -1
  151. package/build/src/diff.js.map +0 -1
  152. package/build/src/index.js.map +0 -1
  153. package/build/src/message.js.map +0 -1
  154. package/build/src/negentropy.js.map +0 -1
  155. package/build/src/policy.js.map +0 -1
  156. package/build/src/pool.js.map +0 -1
  157. package/build/src/publish.d.ts +0 -60
  158. package/build/src/publish.js +0 -120
  159. package/build/src/publish.js.map +0 -1
  160. package/build/src/request.d.ts +0 -79
  161. package/build/src/request.js +0 -191
  162. package/build/src/request.js.map +0 -1
  163. package/build/src/socket.js.map +0 -1
  164. package/build/src/tracker.js.map +0 -1
  165. package/build/src/util.d.ts +0 -3
  166. package/build/tsconfig.tsbuildinfo +0 -1
  167. /package/{build → dist/net}/src/adapter.js +0 -0
  168. /package/{build → dist/net}/src/index.js +0 -0
  169. /package/{build → dist/net}/src/message.js +0 -0
  170. /package/{build → dist/net}/src/tracker.js +0 -0
  171. /package/{build → dist/net}/src/util.js +0 -0
@@ -0,0 +1,212 @@
1
+ import { on, uniq, lt, flatten, addToMapKey, defer, call, randomId, pushToMapKey, batcher, } from "@welshman/lib";
2
+ import { getAddress, unionFilters, matchFilters, getFilterResultCardinality, } from "@welshman/util";
3
+ import { ClientMessageType, isRelayEvent, isRelayEose } from "./message.js";
4
+ import { getAdapter, AdapterEvent } from "./adapter.js";
5
+ import { SocketEvent, SocketStatus } from "./socket.js";
6
+ import { netContext } from "./context.js";
7
+ import { Tracker } from "./tracker.js";
8
+ const deduplicateEvents = (events) => {
9
+ const eventsByAddress = new Map();
10
+ for (const event of events) {
11
+ const address = getAddress(event);
12
+ if (lt(eventsByAddress.get(address)?.created_at, event.created_at)) {
13
+ eventsByAddress.set(address, event);
14
+ }
15
+ }
16
+ return Array.from(eventsByAddress.values());
17
+ };
18
+ export const requestOne = (options) => {
19
+ const ids = new Set();
20
+ const eose = new Set();
21
+ const events = [];
22
+ const deferred = defer();
23
+ const tracker = options.tracker || new Tracker();
24
+ const adapter = getAdapter(options.relay, options.context);
25
+ const isEventValid = options.isEventValid || netContext.isEventValid;
26
+ const isEventDeleted = options.isEventDeleted || netContext.isEventDeleted;
27
+ let closed = false;
28
+ const close = () => {
29
+ if (closed)
30
+ return;
31
+ closed = true;
32
+ for (const id of ids) {
33
+ adapter.send(["CLOSE", id]);
34
+ }
35
+ options.onClose?.();
36
+ adapter.cleanup();
37
+ unsubscribers.map(call);
38
+ deferred.resolve(deduplicateEvents(events));
39
+ };
40
+ const unsubscribers = [
41
+ on(adapter, AdapterEvent.Receive, (message, url) => {
42
+ if (isRelayEvent(message)) {
43
+ const [_, id, event] = message;
44
+ if (ids.has(id)) {
45
+ if (tracker.track(event.id, url)) {
46
+ options.onDuplicate?.(event, url);
47
+ }
48
+ else if (isEventDeleted(event, url)) {
49
+ options.onDeleted?.(event, url);
50
+ }
51
+ else if (!isEventValid(event, url)) {
52
+ options.onInvalid?.(event, url);
53
+ }
54
+ else if (!matchFilters(options.filters, event)) {
55
+ options.onFiltered?.(event, url);
56
+ }
57
+ else {
58
+ options.onEvent?.(event, url);
59
+ events.push(event);
60
+ }
61
+ }
62
+ }
63
+ if (isRelayEose(message)) {
64
+ const [_, id] = message;
65
+ if (ids.has(id)) {
66
+ eose.add(id);
67
+ if (eose.size === ids.size) {
68
+ options.onEose?.(url);
69
+ if (options.autoClose) {
70
+ close();
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }),
76
+ ];
77
+ // Listen to disconnects from any sockets
78
+ for (const socket of adapter.sockets) {
79
+ unsubscribers.push(on(socket, SocketEvent.Status, (status) => {
80
+ if (![SocketStatus.Open, SocketStatus.Opening].includes(status)) {
81
+ options.onDisconnect?.(socket.url);
82
+ if (options.autoClose) {
83
+ close();
84
+ }
85
+ }
86
+ }));
87
+ }
88
+ // Handle abort signal
89
+ options.signal?.addEventListener("abort", close);
90
+ // If we're auto-closing, make sure it happens even if the relay doesn't send an eose
91
+ // and the caller doesn't provide a signal, in order to avoid memory leaks
92
+ if (options.autoClose && !options.signal) {
93
+ setTimeout(close, 30_000);
94
+ }
95
+ for (const filter of options.filters) {
96
+ const id = `REQ-${randomId().slice(0, 8)}`;
97
+ ids.add(id);
98
+ adapter.send([ClientMessageType.Req, id, filter]);
99
+ }
100
+ return deferred;
101
+ };
102
+ export const request = async (options) => {
103
+ const closed = new Set();
104
+ const tracker = new Tracker();
105
+ const relays = new Set(options.relays);
106
+ const ctrl = new AbortController();
107
+ const signal = options.signal ? AbortSignal.any([options.signal, ctrl.signal]) : ctrl.signal;
108
+ const threshold = options.threshold || 1;
109
+ if (relays.size !== options.relays.length) {
110
+ console.warn("Non-unique relays passed to request");
111
+ }
112
+ return flatten(await Promise.all(Array.from(relays).map(relay => requestOne({
113
+ ...options,
114
+ tracker,
115
+ signal,
116
+ relay,
117
+ onClose: () => {
118
+ closed.add(relay);
119
+ if (closed.size >= relays.size * threshold) {
120
+ options.onClose?.();
121
+ ctrl.abort();
122
+ }
123
+ },
124
+ }))));
125
+ };
126
+ /**
127
+ * Creates a convenience function which returns a promise of events from a request.
128
+ * It may return early if filter cardinality is known, and it delays requests in order
129
+ * to implement batching
130
+ * @param options - LoaderOptions
131
+ * @returns - a load function
132
+ */
133
+ export const makeLoader = (options) => batcher(options.delay, async (allRequests) => {
134
+ const resultsByRequest = new Map();
135
+ const eventsByRequest = new Map();
136
+ const requestsByRelay = new Map();
137
+ const controllersByRelay = new Map();
138
+ const signalsByRelay = new Map();
139
+ const closedRequestsByRelay = new Map();
140
+ const closedRelaysByRequest = new Map();
141
+ const relays = uniq(allRequests.flatMap(r => r.relays));
142
+ const threshold = options.threshold || 1;
143
+ const tracker = new Tracker();
144
+ const close = (relay, request) => {
145
+ addToMapKey(closedRequestsByRelay, relay, request);
146
+ addToMapKey(closedRelaysByRequest, request, relay);
147
+ const closedRelays = closedRelaysByRequest.get(request)?.size || 0;
148
+ if (closedRelays >= uniq(request.relays).length * threshold) {
149
+ const events = deduplicateEvents(eventsByRequest.get(request) || []);
150
+ request.onClose?.();
151
+ resultsByRequest.get(request)?.resolve(events);
152
+ }
153
+ if (closedRequestsByRelay.get(relay)?.size === requestsByRelay.get(relay)?.length) {
154
+ controllersByRelay.get(relay)?.abort();
155
+ }
156
+ };
157
+ for (const request of allRequests) {
158
+ for (const relay of uniq(request.relays)) {
159
+ pushToMapKey(requestsByRelay, relay, request);
160
+ resultsByRequest.set(request, defer());
161
+ // Propagate abort when all requests have been closed for a given relay
162
+ request.signal?.addEventListener("abort", () => close(relay, request));
163
+ }
164
+ }
165
+ // Create an abort controller for each relay
166
+ for (const relay of relays) {
167
+ const controller = new AbortController();
168
+ const signals = [controller.signal];
169
+ if (options.timeout) {
170
+ signals.push(AbortSignal.timeout(options.timeout));
171
+ }
172
+ controllersByRelay.set(relay, controller);
173
+ signalsByRelay.set(relay, AbortSignal.any(signals));
174
+ }
175
+ Array.from(requestsByRelay).forEach(async ([relay, requests]) => {
176
+ // Union all filters for a given request and send them together
177
+ const filters = unionFilters(requests.flatMap(r => r.filters));
178
+ // Propagate events to caller, but only for requests that have not been aborted
179
+ const getOpenRequests = () => requests.filter(request => !closedRequestsByRelay.get(relay)?.has(request));
180
+ requestOne({
181
+ relay,
182
+ filters,
183
+ tracker,
184
+ autoClose: true,
185
+ signal: signalsByRelay.get(relay),
186
+ context: options.context,
187
+ isEventValid: options.isEventValid,
188
+ isEventDeleted: options.isEventDeleted,
189
+ onEvent: (event, url) => {
190
+ for (const request of getOpenRequests()) {
191
+ if (matchFilters(request.filters, event)) {
192
+ pushToMapKey(eventsByRequest, request, event);
193
+ request.onEvent?.(event, url);
194
+ // Calculate cardinality for unioned filters so that we can return early
195
+ if (request.filters.length === 1) {
196
+ const cardinality = getFilterResultCardinality(request.filters[0]);
197
+ if (eventsByRequest.get(request)?.length === cardinality) {
198
+ close(relay, request);
199
+ }
200
+ }
201
+ }
202
+ }
203
+ },
204
+ onDisconnect: (url) => getOpenRequests().forEach(request => request.onDisconnect?.(url)),
205
+ onEose: (url) => getOpenRequests().forEach(request => request.onEose?.(url)),
206
+ onClose: () => requests.forEach(request => close(relay, request)),
207
+ });
208
+ });
209
+ return allRequests.map(r => resultsByRequest.get(r));
210
+ });
211
+ export const load = makeLoader({ delay: 200, timeout: 3000, threshold: 0.5 });
212
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/request.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,34 @@
1
1
  import WebSocket from "isomorphic-ws";
2
+ import EventEmitter from "events";
2
3
  import { TaskQueue } from "@welshman/lib";
3
4
  import { RelayMessage, ClientMessage } from "./message.js";
4
- import { TypedEmitter } from "./util.js";
5
+ import { AuthState } from "./auth.js";
5
6
  export declare enum SocketStatus {
6
7
  Open = "socket:status:open",
7
8
  Opening = "socket:status:opening",
8
9
  Closing = "socket:status:closing",
9
10
  Closed = "socket:status:closed",
10
- Error = "socket:status:error",
11
- Invalid = "socket:status:invalid"
11
+ Error = "socket:status:error"
12
12
  }
13
13
  export declare enum SocketEvent {
14
14
  Error = "socket:event:error",
15
15
  Status = "socket:event:status",
16
16
  Send = "socket:event:send",
17
- Enqueue = "socket:event:enqueue",
18
- Receive = "socket:event:receive"
17
+ Sending = "socket:event:sending",
18
+ Receive = "socket:event:receive",
19
+ Receiving = "socket:event:receiving"
19
20
  }
20
21
  export type SocketEvents = {
21
22
  [SocketEvent.Error]: (error: string, url: string) => void;
22
23
  [SocketEvent.Status]: (status: SocketStatus, url: string) => void;
23
24
  [SocketEvent.Send]: (message: ClientMessage, url: string) => void;
24
- [SocketEvent.Enqueue]: (message: ClientMessage, url: string) => void;
25
+ [SocketEvent.Sending]: (message: ClientMessage, url: string) => void;
25
26
  [SocketEvent.Receive]: (message: RelayMessage, url: string) => void;
27
+ [SocketEvent.Receiving]: (message: RelayMessage, url: string) => void;
26
28
  };
27
- declare const Socket_base: new () => TypedEmitter<SocketEvents>;
28
- export declare class Socket extends Socket_base {
29
+ export declare class Socket extends EventEmitter {
29
30
  readonly url: string;
31
+ auth: AuthState;
30
32
  status: SocketStatus;
31
33
  _ws?: WebSocket;
32
34
  _sendQueue: TaskQueue<ClientMessage>;
@@ -38,4 +40,4 @@ export declare class Socket extends Socket_base {
38
40
  cleanup: () => void;
39
41
  send: (message: ClientMessage) => void;
40
42
  }
41
- export {};
43
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,YAAY,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAA;AACvC,OAAO,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,cAAc,CAAA;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AAEnC,oBAAY,YAAY;IACtB,IAAI,uBAAuB;IAC3B,OAAO,0BAA0B;IACjC,OAAO,0BAA0B;IACjC,MAAM,yBAAyB;IAC/B,KAAK,wBAAwB;CAC9B;AAED,oBAAY,WAAW;IACrB,KAAK,uBAAuB;IAC5B,MAAM,wBAAwB;IAC9B,IAAI,sBAAsB;IAC1B,OAAO,yBAAyB;IAChC,OAAO,yBAAyB;IAChC,SAAS,2BAA2B;CACrC;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACzD,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACjE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACjE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACpE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACnE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACtE,CAAA;AAED,qBAAa,MAAO,SAAQ,YAAY;IAQ1B,QAAQ,CAAC,GAAG,EAAE,MAAM;IAPhC,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,eAAsB;IAE5B,GAAG,CAAC,EAAE,SAAS,CAAA;IACf,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,CAAA;IACpC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;gBAEd,GAAG,EAAE,MAAM;IA4BhC,IAAI,aA6CH;IAED,aAAa,aAIZ;IAED,KAAK,aAGJ;IAED,OAAO,aAMN;IAED,IAAI,GAAI,SAAS,aAAa,UAG7B;CACF"}
@@ -1,6 +1,7 @@
1
1
  import WebSocket from "isomorphic-ws";
2
2
  import EventEmitter from "events";
3
3
  import { TaskQueue } from "@welshman/lib";
4
+ import { AuthState } from "./auth.js";
4
5
  export var SocketStatus;
5
6
  (function (SocketStatus) {
6
7
  SocketStatus["Open"] = "socket:status:open";
@@ -8,18 +9,19 @@ export var SocketStatus;
8
9
  SocketStatus["Closing"] = "socket:status:closing";
9
10
  SocketStatus["Closed"] = "socket:status:closed";
10
11
  SocketStatus["Error"] = "socket:status:error";
11
- SocketStatus["Invalid"] = "socket:status:invalid";
12
12
  })(SocketStatus || (SocketStatus = {}));
13
13
  export var SocketEvent;
14
14
  (function (SocketEvent) {
15
15
  SocketEvent["Error"] = "socket:event:error";
16
16
  SocketEvent["Status"] = "socket:event:status";
17
17
  SocketEvent["Send"] = "socket:event:send";
18
- SocketEvent["Enqueue"] = "socket:event:enqueue";
18
+ SocketEvent["Sending"] = "socket:event:sending";
19
19
  SocketEvent["Receive"] = "socket:event:receive";
20
+ SocketEvent["Receiving"] = "socket:event:receiving";
20
21
  })(SocketEvent || (SocketEvent = {}));
21
22
  export class Socket extends EventEmitter {
22
23
  url;
24
+ auth;
23
25
  status = SocketStatus.Closed;
24
26
  _ws;
25
27
  _sendQueue;
@@ -27,6 +29,7 @@ export class Socket extends EventEmitter {
27
29
  constructor(url) {
28
30
  super();
29
31
  this.url = url;
32
+ this.auth = new AuthState(this);
30
33
  this._sendQueue = new TaskQueue({
31
34
  batchSize: 50,
32
35
  processItem: (message) => {
@@ -43,6 +46,8 @@ export class Socket extends EventEmitter {
43
46
  this.on(SocketEvent.Status, (status) => {
44
47
  this.status = status;
45
48
  });
49
+ this._sendQueue.stop();
50
+ this.setMaxListeners(1000);
46
51
  }
47
52
  open = () => {
48
53
  if (this._ws) {
@@ -56,14 +61,14 @@ export class Socket extends EventEmitter {
56
61
  this._sendQueue.start();
57
62
  };
58
63
  this._ws.onerror = () => {
59
- this.emit(SocketEvent.Status, SocketStatus.Error, this.url);
60
- this._sendQueue.stop();
61
64
  this._ws = undefined;
65
+ this._sendQueue.stop();
66
+ this.emit(SocketEvent.Status, SocketStatus.Error, this.url);
62
67
  };
63
68
  this._ws.onclose = () => {
64
- this.emit(SocketEvent.Status, SocketStatus.Closed, this.url);
65
- this._sendQueue.stop();
66
69
  this._ws = undefined;
70
+ this._sendQueue.stop();
71
+ this.emit(SocketEvent.Status, SocketStatus.Closed, this.url);
67
72
  };
68
73
  this._ws.onmessage = (event) => {
69
74
  const data = event.data;
@@ -71,6 +76,7 @@ export class Socket extends EventEmitter {
71
76
  const message = JSON.parse(data);
72
77
  if (Array.isArray(message)) {
73
78
  this._recvQueue.push(message);
79
+ this.emit(SocketEvent.Receiving, message, this.url);
74
80
  }
75
81
  else {
76
82
  this.emit(SocketEvent.Error, "Invalid message received", this.url);
@@ -82,7 +88,7 @@ export class Socket extends EventEmitter {
82
88
  };
83
89
  }
84
90
  catch (e) {
85
- this.emit(SocketEvent.Status, SocketStatus.Invalid, this.url);
91
+ this.emit(SocketEvent.Status, SocketStatus.Error, this.url);
86
92
  }
87
93
  };
88
94
  attemptToOpen = () => {
@@ -96,13 +102,14 @@ export class Socket extends EventEmitter {
96
102
  };
97
103
  cleanup = () => {
98
104
  this.close();
105
+ this.auth.cleanup();
99
106
  this._recvQueue.clear();
100
107
  this._sendQueue.clear();
101
108
  this.removeAllListeners();
102
109
  };
103
110
  send = (message) => {
104
111
  this._sendQueue.push(message);
105
- this.emit(SocketEvent.Enqueue, message, this.url);
112
+ this.emit(SocketEvent.Sending, message, this.url);
106
113
  };
107
114
  }
108
115
  //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/socket.ts"],"names":[],"mappings":"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"}
@@ -13,3 +13,4 @@ export declare class Tracker extends Emitter {
13
13
  load: (relaysById: Tracker["relaysById"]) => void;
14
14
  clear: () => void;
15
15
  }
16
+ //# sourceMappingURL=tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAc,MAAM,eAAe,CAAA;AAElD,qBAAa,OAAQ,SAAQ,OAAO;IAClC,UAAU,2BAAiC;IAC3C,UAAU,2BAAiC;;IAQ3C,MAAM,GAAI,OAAO,MAAM,iBAAoD;IAE3E,SAAS,GAAI,SAAS,MAAM,iBAAsD;IAElF,QAAQ,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,yBAA6C;IAEvF,QAAQ,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,UAqBzC;IAED,WAAW,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,UAO5C;IAED,KAAK,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,aAMtC;IAED,IAAI,GAAI,UAAU,MAAM,EAAE,UAAU,MAAM,UAIzC;IAED,IAAI,GAAI,YAAY,OAAO,CAAC,YAAY,CAAC,UAYxC;IAED,KAAK,aAKJ;CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../src/tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type Unsubscriber = () => void;
2
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from "./repository.js";
2
+ export * from "./relay.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../relay/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from "./repository.js";
2
+ export * from "./relay.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../relay/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { Emitter } from "@welshman/lib";
2
+ import { Filter, TrustedEvent, HashedEvent } from "@welshman/util";
3
+ import { Repository } from "./repository.js";
4
+ export declare class LocalRelay<E extends HashedEvent = TrustedEvent> extends Emitter {
5
+ readonly repository: Repository<E>;
6
+ subs: Map<string, Filter[]>;
7
+ constructor(repository: Repository<E>);
8
+ send(type: string, ...message: any[]): void;
9
+ handleEVENT([event]: [E]): void;
10
+ handleCLOSE([subId]: [string]): void;
11
+ handleREQ([subId, ...filters]: [string, ...Filter[]]): void;
12
+ }
13
+ //# sourceMappingURL=relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../../../relay/src/relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAQ,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAe,MAAM,gBAAgB,CAAA;AAC9E,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAA;AAE1C,qBAAa,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,YAAY,CAAE,SAAQ,OAAO;IAG/D,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IAF9C,IAAI,wBAA8B;gBAEb,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IAI9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;IAWpC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAiBxB,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;IAI7B,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;CAYrD"}
@@ -0,0 +1,48 @@
1
+ import { Emitter, sleep } from "@welshman/lib";
2
+ import { matchFilters } from "@welshman/util";
3
+ export class LocalRelay extends Emitter {
4
+ repository;
5
+ subs = new Map();
6
+ constructor(repository) {
7
+ super();
8
+ this.repository = repository;
9
+ }
10
+ send(type, ...message) {
11
+ switch (type) {
12
+ case "EVENT":
13
+ return this.handleEVENT(message);
14
+ case "CLOSE":
15
+ return this.handleCLOSE(message);
16
+ case "REQ":
17
+ return this.handleREQ(message);
18
+ }
19
+ }
20
+ handleEVENT([event]) {
21
+ this.repository.publish(event);
22
+ // Callers generally expect async relays
23
+ void sleep(1).then(() => {
24
+ this.emit("OK", event.id, true, "");
25
+ if (!this.repository.isDeleted(event)) {
26
+ for (const [subId, filters] of this.subs.entries()) {
27
+ if (matchFilters(filters, event)) {
28
+ this.emit("EVENT", subId, event);
29
+ }
30
+ }
31
+ }
32
+ });
33
+ }
34
+ handleCLOSE([subId]) {
35
+ this.subs.delete(subId);
36
+ }
37
+ handleREQ([subId, ...filters]) {
38
+ this.subs.set(subId, filters);
39
+ // Callers generally expect async relays
40
+ void sleep(1).then(() => {
41
+ for (const event of this.repository.query(filters)) {
42
+ this.emit("EVENT", subId, event);
43
+ }
44
+ this.emit("EOSE", subId);
45
+ });
46
+ }
47
+ }
48
+ //# sourceMappingURL=relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.js","sourceRoot":"","sources":["../../../../relay/src/relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAoC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAG9E,MAAM,OAAO,UAAiD,SAAQ,OAAO;IAGtD;IAFrB,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAA;IAElC,YAAqB,UAAyB;QAC5C,KAAK,EAAE,CAAA;QADY,eAAU,GAAV,UAAU,CAAe;IAE9C,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,GAAG,OAAc;QAClC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,WAAW,CAAC,OAAc,CAAC,CAAA;YACzC,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,WAAW,CAAC,OAAmB,CAAC,CAAA;YAC9C,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,SAAS,CAAC,OAAgC,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAED,WAAW,CAAC,CAAC,KAAK,CAAM;QACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAE9B,wCAAwC;QACxC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YAEnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnD,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;wBACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,WAAW,CAAC,CAAC,KAAK,CAAW;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,OAAO,CAAwB;QAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAE7B,wCAAwC;QACxC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;YAClC,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,63 @@
1
+ import { Emitter } from "@welshman/lib";
2
+ import { Filter, TrustedEvent, HashedEvent } from "@welshman/util";
3
+ export declare const LOCAL_RELAY_URL = "local://welshman.relay/";
4
+ export declare let repositorySingleton: Repository<TrustedEvent>;
5
+ export type RepositoryUpdate = {
6
+ added: TrustedEvent[];
7
+ removed: Set<string>;
8
+ };
9
+ export declare class Repository<E extends HashedEvent = TrustedEvent> extends Emitter {
10
+ eventsById: Map<string, E>;
11
+ eventsByWrap: Map<string, E>;
12
+ eventsByAddress: Map<string, E>;
13
+ eventsByTag: Map<string, E[]>;
14
+ eventsByDay: Map<number, E[]>;
15
+ eventsByAuthor: Map<string, E[]>;
16
+ eventsByKind: Map<number, E[]>;
17
+ deletes: Map<string, number>;
18
+ static get(): Repository<TrustedEvent>;
19
+ constructor();
20
+ dump: () => E[];
21
+ load: (events: E[], chunkSize?: number) => void;
22
+ getEvent: (idOrAddress: string) => E | undefined;
23
+ hasEvent: (event: E) => boolean | undefined;
24
+ removeEvent: (idOrAddress: string) => void;
25
+ query: (filters: Filter[], { includeDeleted, shouldSort }?: {
26
+ includeDeleted?: boolean | undefined;
27
+ shouldSort?: boolean | undefined;
28
+ }) => E[];
29
+ publish: (event: E, { shouldNotify }?: {
30
+ shouldNotify?: boolean | undefined;
31
+ }) => boolean;
32
+ isDeletedByAddress: (event: E) => boolean;
33
+ isDeletedById: (event: E) => boolean;
34
+ isDeleted: (event: E) => boolean;
35
+ _sortEvents: (shouldSort: boolean, events: E[]) => E[];
36
+ _updateIndex: <K>(m: Map<K, E[]>, k: K, add?: E, remove?: E) => void;
37
+ _getEvents: (ids: Iterable<string>) => E[];
38
+ _applyIdsFilter: (filter: Filter) => {
39
+ filter: Filter;
40
+ ids: Set<string>;
41
+ } | undefined;
42
+ _applyAuthorsFilter: (filter: Filter) => {
43
+ filter: Filter;
44
+ ids: Set<string>;
45
+ } | undefined;
46
+ _applyTagsFilter: (filter: Filter) => {
47
+ filter: Filter;
48
+ ids: Set<string>;
49
+ } | undefined;
50
+ _applyKindsFilter: (filter: Filter) => {
51
+ filter: Filter;
52
+ ids: Set<string>;
53
+ } | undefined;
54
+ _applyDaysFilter: (filter: Filter) => {
55
+ filter: Filter;
56
+ ids: Set<string>;
57
+ } | undefined;
58
+ _applyAnyFilter: (filter: Filter) => {
59
+ filter: Filter;
60
+ ids: Set<string>;
61
+ } | undefined;
62
+ }
63
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../relay/src/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAUR,MAAM,eAAe,CAAA;AACtB,OAAO,EAOL,MAAM,EACN,YAAY,EACZ,WAAW,EACZ,MAAM,gBAAgB,CAAA;AAEvB,eAAO,MAAM,eAAe,4BAA4B,CAAA;AAIxD,eAAO,IAAI,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;AAExD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACrB,CAAA;AAED,qBAAa,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,YAAY,CAAE,SAAQ,OAAO;IAC3E,UAAU,iBAAuB;IACjC,YAAY,iBAAuB;IACnC,eAAe,iBAAuB;IACtC,WAAW,mBAAyB;IACpC,WAAW,mBAAyB;IACpC,cAAc,mBAAyB;IACvC,YAAY,mBAAyB;IACrC,OAAO,sBAA4B;IAEnC,MAAM,CAAC,GAAG;;IAgBV,IAAI,YAEH;IAED,IAAI,GAAI,QAAQ,CAAC,EAAE,EAAE,kBAAgB,UAwCpC;IAID,QAAQ,GAAI,aAAa,MAAM,mBAI9B;IAED,QAAQ,GAAI,OAAO,CAAC,yBAInB;IAED,WAAW,GAAI,aAAa,MAAM,UAwBjC;IAED,KAAK,GAAI,SAAS,MAAM,EAAE,EAAE;;;KAAgD,SAmC3E;IAED,OAAO,GAAI,OAAO,CAAC,EAAE;;KAA0B,KAAG,OAAO,CAuExD;IAED,kBAAkB,GAAI,OAAO,CAAC,aAAkE;IAEhG,aAAa,GAAI,OAAO,CAAC,aAAyD;IAElF,SAAS,GAAI,OAAO,CAAC,aAAgE;IAIrF,WAAW,GAAI,YAAY,OAAO,EAAE,QAAQ,CAAC,EAAE,SACW;IAE1D,YAAY,GAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,UAY3D;IAED,UAAU,GAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,SAYlC;IAED,eAAe,GAAI,QAAQ,MAAM;;;kBAOhC;IAED,mBAAmB,GAAI,QAAQ,MAAM;;;kBASpC;IAED,gBAAgB,GAAI,QAAQ,MAAM;;;kBAkBjC;IAED,iBAAiB,GAAI,QAAQ,MAAM;;;kBASlC;IAED,gBAAgB,GAAI,QAAQ,MAAM;;;kBAUjC;IAED,eAAe,GAAI,QAAQ,MAAM;;;kBAkBhC;CACF"}