@welshman/net 0.1.1 → 0.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.
Files changed (167) 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 +18 -0
  15. package/dist/lib/src/TaskQueue.d.ts.map +1 -0
  16. package/dist/lib/src/TaskQueue.js +47 -0
  17. package/dist/lib/src/TaskQueue.js.map +1 -0
  18. package/dist/lib/src/Tools.d.ts +630 -0
  19. package/dist/lib/src/Tools.d.ts.map +1 -0
  20. package/dist/lib/src/Tools.js +1061 -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 +6 -21
  34. package/dist/net/src/auth.d.ts.map +1 -0
  35. package/{build → dist/net}/src/auth.js +21 -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/dist/net/src/context.js.map +1 -0
  40. package/{build → dist/net}/src/diff.d.ts +3 -4
  41. package/dist/net/src/diff.d.ts.map +1 -0
  42. package/{build → dist/net}/src/diff.js +0 -1
  43. package/dist/net/src/diff.js.map +1 -0
  44. package/{build → dist/net}/src/index.d.ts +1 -0
  45. package/dist/net/src/index.d.ts.map +1 -0
  46. package/dist/net/src/index.js.map +1 -0
  47. package/{build → dist/net}/src/message.d.ts +1 -0
  48. package/dist/net/src/message.d.ts.map +1 -0
  49. package/dist/net/src/message.js.map +1 -0
  50. package/{build → dist/net}/src/negentropy.d.ts +2 -1
  51. package/dist/net/src/negentropy.d.ts.map +1 -0
  52. package/{build → dist/net}/src/negentropy.js +42 -18
  53. package/dist/net/src/negentropy.js.map +1 -0
  54. package/{build → dist/net}/src/policy.d.ts +16 -8
  55. package/dist/net/src/policy.d.ts.map +1 -0
  56. package/{build → dist/net}/src/policy.js +61 -83
  57. package/dist/net/src/policy.js.map +1 -0
  58. package/{build → dist/net}/src/pool.d.ts +1 -0
  59. package/dist/net/src/pool.d.ts.map +1 -0
  60. package/{build → dist/net}/src/pool.js +7 -7
  61. package/dist/net/src/pool.js.map +1 -0
  62. package/{build → dist/net}/src/publish.d.ts +6 -21
  63. package/dist/net/src/publish.d.ts.map +1 -0
  64. package/{build → dist/net}/src/publish.js +8 -3
  65. package/dist/net/src/publish.js.map +1 -0
  66. package/{build → dist/net}/src/request.d.ts +23 -13
  67. package/dist/net/src/request.d.ts.map +1 -0
  68. package/{build → dist/net}/src/request.js +19 -10
  69. package/dist/net/src/request.js.map +1 -0
  70. package/{build → dist/net}/src/socket.d.ts +11 -9
  71. package/dist/net/src/socket.d.ts.map +1 -0
  72. package/{build → dist/net}/src/socket.js +15 -8
  73. package/dist/net/src/socket.js.map +1 -0
  74. package/{build → dist/net}/src/tracker.d.ts +1 -0
  75. package/dist/net/src/tracker.d.ts.map +1 -0
  76. package/dist/net/src/tracker.js.map +1 -0
  77. package/dist/net/src/util.d.ts +2 -0
  78. package/dist/net/src/util.d.ts.map +1 -0
  79. package/{build → dist/net}/src/util.js.map +1 -1
  80. package/dist/relay/src/index.d.ts +3 -0
  81. package/dist/relay/src/index.d.ts.map +1 -0
  82. package/dist/relay/src/index.js +3 -0
  83. package/dist/relay/src/index.js.map +1 -0
  84. package/dist/relay/src/relay.d.ts +13 -0
  85. package/dist/relay/src/relay.d.ts.map +1 -0
  86. package/dist/relay/src/relay.js +48 -0
  87. package/dist/relay/src/relay.js.map +1 -0
  88. package/dist/relay/src/repository.d.ts +63 -0
  89. package/dist/relay/src/repository.d.ts.map +1 -0
  90. package/dist/relay/src/repository.js +270 -0
  91. package/dist/relay/src/repository.js.map +1 -0
  92. package/dist/tsconfig.build.tsbuildinfo +1 -0
  93. package/dist/util/src/Address.d.ts +21 -0
  94. package/dist/util/src/Address.d.ts.map +1 -0
  95. package/dist/util/src/Address.js +43 -0
  96. package/dist/util/src/Address.js.map +1 -0
  97. package/dist/util/src/Encryptable.d.ts +34 -0
  98. package/dist/util/src/Encryptable.d.ts.map +1 -0
  99. package/dist/util/src/Encryptable.js +52 -0
  100. package/dist/util/src/Encryptable.js.map +1 -0
  101. package/dist/util/src/Events.d.ts +77 -0
  102. package/dist/util/src/Events.d.ts.map +1 -0
  103. package/dist/util/src/Events.js +62 -0
  104. package/dist/util/src/Events.js.map +1 -0
  105. package/dist/util/src/Filters.d.ts +48 -0
  106. package/dist/util/src/Filters.d.ts.map +1 -0
  107. package/dist/util/src/Filters.js +185 -0
  108. package/dist/util/src/Filters.js.map +1 -0
  109. package/dist/util/src/Handler.d.ts +17 -0
  110. package/dist/util/src/Handler.d.ts.map +1 -0
  111. package/dist/util/src/Handler.js +33 -0
  112. package/dist/util/src/Handler.js.map +1 -0
  113. package/dist/util/src/Kinds.d.ts +159 -0
  114. package/dist/util/src/Kinds.d.ts.map +1 -0
  115. package/dist/util/src/Kinds.js +160 -0
  116. package/dist/util/src/Kinds.js.map +1 -0
  117. package/dist/util/src/Links.d.ts +3 -0
  118. package/dist/util/src/Links.d.ts.map +1 -0
  119. package/dist/util/src/Links.js +3 -0
  120. package/dist/util/src/Links.js.map +1 -0
  121. package/dist/util/src/List.d.ts +32 -0
  122. package/dist/util/src/List.d.ts.map +1 -0
  123. package/dist/util/src/List.js +67 -0
  124. package/dist/util/src/List.js.map +1 -0
  125. package/dist/util/src/Profile.d.ts +33 -0
  126. package/dist/util/src/Profile.d.ts.map +1 -0
  127. package/dist/util/src/Profile.js +49 -0
  128. package/dist/util/src/Profile.js.map +1 -0
  129. package/dist/util/src/Relay.d.ts +26 -0
  130. package/dist/util/src/Relay.d.ts.map +1 -0
  131. package/dist/util/src/Relay.js +42 -0
  132. package/dist/util/src/Relay.js.map +1 -0
  133. package/dist/util/src/Tags.d.ts +32 -0
  134. package/dist/util/src/Tags.d.ts.map +1 -0
  135. package/dist/util/src/Tags.js +74 -0
  136. package/dist/util/src/Tags.js.map +1 -0
  137. package/dist/util/src/Zaps.d.ts +20 -0
  138. package/dist/util/src/Zaps.d.ts.map +1 -0
  139. package/dist/util/src/Zaps.js +93 -0
  140. package/dist/util/src/Zaps.js.map +1 -0
  141. package/dist/util/src/index.d.ts +13 -0
  142. package/dist/util/src/index.d.ts.map +1 -0
  143. package/dist/util/src/index.js +13 -0
  144. package/dist/util/src/index.js.map +1 -0
  145. package/package.json +17 -21
  146. package/README.md +0 -61
  147. package/build/src/adapter.js.map +0 -1
  148. package/build/src/auth.js.map +0 -1
  149. package/build/src/context.js.map +0 -1
  150. package/build/src/diff.js.map +0 -1
  151. package/build/src/index.js.map +0 -1
  152. package/build/src/message.js.map +0 -1
  153. package/build/src/negentropy.js.map +0 -1
  154. package/build/src/policy.js.map +0 -1
  155. package/build/src/pool.js.map +0 -1
  156. package/build/src/publish.js.map +0 -1
  157. package/build/src/request.js.map +0 -1
  158. package/build/src/socket.js.map +0 -1
  159. package/build/src/tracker.js.map +0 -1
  160. package/build/src/util.d.ts +0 -3
  161. package/build/tsconfig.tsbuildinfo +0 -1
  162. /package/{build → dist/net}/src/adapter.js +0 -0
  163. /package/{build → dist/net}/src/context.js +0 -0
  164. /package/{build → dist/net}/src/index.js +0 -0
  165. /package/{build → dist/net}/src/message.js +0 -0
  166. /package/{build → dist/net}/src/tracker.js +0 -0
  167. /package/{build → dist/net}/src/util.js +0 -0
@@ -1,99 +1,63 @@
1
- import { on, call, sleep, spec, ago, now } from "@welshman/lib";
1
+ import { on, nthEq, always, call, sleep, ago, now } from "@welshman/lib";
2
2
  import { AUTH_JOIN } from "@welshman/util";
3
- import { isClientAuth, isClientClose, isClientEvent, isClientReq, ClientMessageType, isRelayOk, isRelayClosed, } from "./message.js";
3
+ import { isClientAuth, isClientClose, isClientEvent, isClientReq, isClientNegClose, isRelayOk, isRelayEose, isRelayClosed, } from "./message.js";
4
4
  import { SocketStatus, SocketEvent } from "./socket.js";
5
- import { AuthState, AuthStatus, AuthStateEvent } from "./auth.js";
5
+ import { AuthStatus, AuthStateEvent } from "./auth.js";
6
6
  /**
7
- * Defers sending messages when a challenge has been presented and not answered yet
7
+ * Handles auth-related message management:
8
+ * - Defers sending messages when a challenge is pending
9
+ * - Re-enqueues event/req messages once if rejected due to auth-required
8
10
  * @param socket - a Socket object
9
11
  * @return a cleanup function
10
12
  */
11
- export const socketPolicyDeferOnAuth = (socket) => {
12
- const buffer = [];
13
- const authState = new AuthState(socket);
14
- const okStatuses = [AuthStatus.None, AuthStatus.Ok];
13
+ export const socketPolicyAuthBuffer = (socket) => {
14
+ const { None, Ok, DeniedSignature, Forbidden } = AuthStatus;
15
+ const terminalStatuses = [Ok, DeniedSignature, Forbidden];
16
+ let buffer = [];
15
17
  const unsubscribers = [
16
- // Pause sending certain messages when we're not authenticated
17
- on(socket, SocketEvent.Enqueue, (message) => {
18
- // If we're closing a request, but it never got sent, remove both from the queue
19
- // Otherwise, always send CLOSE
20
- if (isClientClose(message)) {
21
- const req = buffer.find(spec([ClientMessageType.Req, message[1]]));
22
- if (req) {
23
- socket._sendQueue.remove(req);
24
- socket._sendQueue.remove(message);
25
- }
26
- return;
27
- }
18
+ on(socket, SocketEvent.Sending, (message) => {
28
19
  // Always allow sending auth
29
20
  if (isClientAuth(message))
30
21
  return;
31
22
  // Always allow sending join requests
32
23
  if (isClientEvent(message) && message[1].kind === AUTH_JOIN)
33
24
  return;
34
- // If we're not ok, remove the message and save it for later
35
- if (!okStatuses.includes(authState.status)) {
36
- buffer.push(message);
37
- socket._sendQueue.remove(message);
25
+ // If the auth flow is complete, no need to buffer anymore
26
+ if (terminalStatuses.includes(socket.auth.status))
27
+ return;
28
+ // If the client is closing a req, remove both from our buffer
29
+ // Otherwise, if auth isn't done, hang on to recent messages in case we need to replay them
30
+ if (isClientClose(message) || isClientNegClose(message)) {
31
+ buffer = buffer.filter(nthEq(1, message[1]));
38
32
  }
39
- }),
40
- // Send buffered messages when we get successful auth
41
- on(authState, AuthStateEvent.Status, (status) => {
42
- if (okStatuses.includes(status) && buffer.length > 0) {
43
- for (const message of buffer.splice(0)) {
44
- socket.send(message);
45
- }
33
+ else {
34
+ buffer = buffer.slice(-50).concat([message]);
46
35
  }
47
36
  }),
48
- ];
49
- return () => {
50
- unsubscribers.forEach(call);
51
- authState.cleanup();
52
- };
53
- };
54
- /**
55
- * Re-enqueues event/req messages once if rejected due to auth-required
56
- * @param socket - a Socket object
57
- * @return a cleanup function
58
- */
59
- export const socketPolicyRetryAuthRequired = (socket) => {
60
- const retried = new Set();
61
- const pending = new Map();
62
- const unsubscribers = [
63
- // Watch outgoing events and requests and keep a copy
64
- on(socket, SocketEvent.Send, (message) => {
65
- if (isClientEvent(message)) {
66
- const [_, event] = message;
67
- if (!retried.has(event.id) && event.kind !== AUTH_JOIN) {
68
- pending.set(event.id, message);
69
- }
37
+ on(socket, SocketEvent.Receiving, (message) => {
38
+ // If the client is closing a request during auth, don't tell the caller, we'll retry it
39
+ if (isRelayClosed(message) && message[2]?.startsWith("auth-required:")) {
40
+ socket._recvQueue.remove(message);
70
41
  }
71
- if (isClientReq(message)) {
72
- const [_, id] = message;
73
- if (!retried.has(id)) {
74
- pending.set(id, message);
75
- }
42
+ // If we get an eose but we're in the middle of authenticating, wait
43
+ if (isRelayEose(message) && ![None, Ok].includes(socket.auth.status)) {
44
+ socket._recvQueue.remove(message);
45
+ }
46
+ // If the client is rejecting an event during auth, don't tell the caller, we'll retry it
47
+ if (isRelayOk(message) && !message[2] && message[3]?.startsWith("auth-required:")) {
48
+ socket._recvQueue.remove(message);
76
49
  }
77
50
  }),
78
- // If a message is rejected with auth-required, re-enqueue it one time
79
- on(socket, SocketEvent.Receive, (message) => {
80
- if (isRelayOk(message)) {
81
- const [_, id, ok, detail] = message;
82
- const pendingMessage = pending.get(id);
83
- if (pendingMessage && !ok && detail?.startsWith("auth-required:")) {
84
- socket.send(pendingMessage);
85
- retried.add(id);
86
- }
87
- pending.delete(id);
88
- }
89
- if (isRelayClosed(message)) {
90
- const [_, id, detail] = message;
91
- const pendingMessage = pending.get(id);
92
- if (pendingMessage && detail?.startsWith("auth-required:")) {
93
- socket.send(pendingMessage);
94
- retried.add(id);
51
+ on(socket.auth, AuthStateEvent.Status, (status) => {
52
+ // Send buffered messages when we get successful auth. In any case, clear them out
53
+ // if the auth flow is complete
54
+ if (status === Ok) {
55
+ for (const message of buffer.splice(0)) {
56
+ socket.send(message);
95
57
  }
96
- pending.delete(id);
58
+ }
59
+ else if (terminalStatuses.includes(socket.auth.status)) {
60
+ buffer = [];
97
61
  }
98
62
  }),
99
63
  ];
@@ -106,19 +70,16 @@ export const socketPolicyRetryAuthRequired = (socket) => {
106
70
  */
107
71
  export const socketPolicyConnectOnSend = (socket) => {
108
72
  let lastError = 0;
109
- let currentStatus = SocketStatus.Closed;
110
73
  const unsubscribers = [
111
74
  on(socket, SocketEvent.Status, (newStatus) => {
112
75
  // Keep track of the most recent error
113
76
  if (newStatus === SocketStatus.Error) {
114
77
  lastError = now();
115
78
  }
116
- // Keep track of the current status
117
- currentStatus = newStatus;
118
79
  }),
119
- on(socket, SocketEvent.Enqueue, (message) => {
80
+ on(socket, SocketEvent.Sending, (message) => {
120
81
  // When a new message is sent, make sure the socket is open (unless there was a recent error)
121
- if (currentStatus === SocketStatus.Closed && lastError < ago(30)) {
82
+ if (socket.status === SocketStatus.Closed && lastError < ago(30)) {
122
83
  socket.open();
123
84
  }
124
85
  }),
@@ -192,9 +153,26 @@ export const socketPolicyReopenActive = (socket) => {
192
153
  ];
193
154
  return () => unsubscribers.forEach(call);
194
155
  };
156
+ /**
157
+ * Factory function for a policy which may authenticate the socket
158
+ * @param options - SocketPolicyAuthOptions object
159
+ * @return a socket policy
160
+ */
161
+ export const makeSocketPolicyAuth = (options) => (socket) => {
162
+ const shouldAuth = options.shouldAuth || always(true);
163
+ const unsubscribers = [
164
+ on(socket.auth, AuthStateEvent.Status, (status) => {
165
+ if (status === AuthStatus.Requested && shouldAuth(socket)) {
166
+ socket.auth.authenticate(options.sign);
167
+ }
168
+ }),
169
+ ];
170
+ return () => {
171
+ unsubscribers.forEach(call);
172
+ };
173
+ };
195
174
  export const defaultSocketPolicies = [
196
- socketPolicyDeferOnAuth,
197
- socketPolicyRetryAuthRequired,
175
+ socketPolicyAuthBuffer,
198
176
  socketPolicyConnectOnSend,
199
177
  socketPolicyCloseOnTimeout,
200
178
  socketPolicyReopenActive,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/policy.ts"],"names":[],"mappings":"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"}
@@ -18,3 +18,4 @@ export declare class Pool {
18
18
  remove(url: string): void;
19
19
  clear(): void;
20
20
  }
21
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAGlC,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,6CAAgC,WAQvE,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;AAEvD,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;CACrC,CAAA;AAED,eAAO,IAAI,aAAa,EAAE,IAAI,CAAA;AAE9B,qBAAa,IAAI;IAYH,QAAQ,CAAC,OAAO,EAAE,WAAW;IAXzC,KAAK,sBAA4B;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAK;IAE9B,MAAM,CAAC,YAAY;gBAQE,OAAO,GAAE,WAAgB;IAE9C,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,UAAU,CAAC,GAAG,EAAE,MAAM;IAQtB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAmBzB,SAAS,CAAC,EAAE,EAAE,gBAAgB;IAQ9B,MAAM,CAAC,GAAG,EAAE,MAAM;IAUlB,KAAK;CAKN"}
@@ -34,16 +34,16 @@ export class Pool {
34
34
  }
35
35
  get(_url) {
36
36
  const url = normalizeRelayUrl(_url);
37
- const oldSocket = this._data.get(url);
38
- if (oldSocket) {
39
- return oldSocket;
37
+ const socket = this._data.get(url);
38
+ if (socket) {
39
+ return socket;
40
40
  }
41
- const socket = this.makeSocket(url);
42
- this._data.set(url, socket);
41
+ const newSocket = this.makeSocket(url);
42
+ this._data.set(url, newSocket);
43
43
  for (const cb of this._subs) {
44
- cb(socket);
44
+ cb(newSocket);
45
45
  }
46
- return socket;
46
+ return newSocket;
47
47
  }
48
48
  subscribe(cb) {
49
49
  this._subs.push(cb);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAA;AACpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAA;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAQ,GAAG,qBAAqB,EAAE,EAAE;IAC1E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;IAE9B,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,WAAW,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAQD,MAAM,CAAC,IAAI,aAAmB,CAAA;AAE9B,MAAM,OAAO,IAAI;IAYM;IAXrB,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACjC,KAAK,GAAuB,EAAE,CAAA;IAE9B,MAAM,CAAC,YAAY;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5B,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,YAAqB,UAAuB,EAAE;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAElD,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAElC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAA;QACf,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAE9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,CAAA;QACf,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS,CAAC,EAAoB;QAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEnB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAElC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,EAAE,CAAA;YAEhB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,KAAK;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
+ import { EventEmitter } from "events";
1
2
  import { SignedEvent } from "@welshman/util";
2
3
  import { AbstractAdapter, AdapterContext } from "./adapter.js";
3
- import { TypedEmitter } from "./util.js";
4
4
  export declare enum PublishStatus {
5
5
  Pending = "publish:status:pending",
6
6
  Success = "publish:status:success",
@@ -15,21 +15,13 @@ export declare enum PublishEvent {
15
15
  Aborted = "publish:event:aborted",
16
16
  Complete = "publish:event:complete"
17
17
  }
18
- export type SinglePublishEvents = {
19
- [PublishEvent.Success]: (id: string, detail: string) => void;
20
- [PublishEvent.Failure]: (id: string, detail: string) => void;
21
- [PublishEvent.Timeout]: () => void;
22
- [PublishEvent.Aborted]: () => void;
23
- [PublishEvent.Complete]: () => void;
24
- };
25
18
  export type SinglePublishOptions = {
26
19
  event: SignedEvent;
27
20
  relay: string;
28
21
  context?: AdapterContext;
29
22
  timeout?: number;
30
23
  };
31
- declare const SinglePublish_base: new () => TypedEmitter<SinglePublishEvents>;
32
- export declare class SinglePublish extends SinglePublish_base {
24
+ export declare class SinglePublish extends EventEmitter {
33
25
  readonly options: SinglePublishOptions;
34
26
  status: PublishStatus;
35
27
  _unsubscriber: () => void;
@@ -38,23 +30,16 @@ export declare class SinglePublish extends SinglePublish_base {
38
30
  abort: () => void;
39
31
  cleanup: () => void;
40
32
  }
41
- export type MultiPublishEvents = {
42
- [PublishEvent.Success]: (id: string, detail: string, url: string) => void;
43
- [PublishEvent.Failure]: (id: string, detail: string, url: string) => void;
44
- [PublishEvent.Timeout]: (url: string) => void;
45
- [PublishEvent.Aborted]: (url: string) => void;
46
- [PublishEvent.Complete]: () => void;
47
- };
48
33
  export type MultiPublishOptions = Omit<SinglePublishOptions, "relay"> & {
49
34
  relays: string[];
50
35
  };
51
- declare const MultiPublish_base: new () => TypedEmitter<MultiPublishEvents>;
52
- export declare class MultiPublish extends MultiPublish_base {
36
+ export declare class MultiPublish extends EventEmitter {
53
37
  status: Record<string, PublishStatus>;
54
38
  _children: SinglePublish[];
55
39
  _completed: Set<string>;
56
- constructor({ relays, ...options }: MultiPublishOptions);
40
+ constructor(options: MultiPublishOptions);
57
41
  abort(): void;
58
42
  cleanup(): void;
59
43
  }
60
- export {};
44
+ export declare const publish: (options: MultiPublishOptions) => MultiPublish;
45
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AAEnC,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAC,eAAe,EAAgB,cAAc,EAAa,MAAM,cAAc,CAAA;AAEtF,oBAAY,aAAa;IACvB,OAAO,2BAA2B;IAClC,OAAO,2BAA2B;IAClC,OAAO,2BAA2B;IAClC,OAAO,2BAA2B;IAClC,OAAO,2BAA2B;CACnC;AAED,oBAAY,YAAY;IACtB,OAAO,0BAA0B;IACjC,OAAO,0BAA0B;IACjC,OAAO,0BAA0B;IACjC,OAAO,0BAA0B;IACjC,QAAQ,2BAA2B;CACpC;AAID,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,aAAc,SAAQ,YAAY;IAMjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB;IALlD,MAAM,gBAAwB;IAE9B,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,QAAQ,EAAE,eAAe,CAAA;gBAEJ,OAAO,EAAE,oBAAoB;IA6ClD,KAAK,aAMJ;IAED,OAAO,aAKN;CACF;AAID,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAAG;IACtE,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAErC,SAAS,EAAE,aAAa,EAAE,CAAK;IAC/B,UAAU,cAAoB;gBAElB,OAAO,EAAE,mBAAmB;IAgDxC,KAAK;IAML,OAAO;CAGR;AAED,eAAO,MAAM,OAAO,GAAI,SAAS,mBAAmB,iBAA8B,CAAA"}
@@ -76,9 +76,13 @@ export class MultiPublish extends EventEmitter {
76
76
  status;
77
77
  _children = [];
78
78
  _completed = new Set();
79
- constructor({ relays, ...options }) {
79
+ constructor(options) {
80
80
  super();
81
- this.status = fromPairs(relays.map(relay => [relay, PublishStatus.Pending]));
81
+ const relays = new Set(options.relays);
82
+ if (relays.size !== options.relays.length) {
83
+ console.warn("Non-unique relays passed to MultiPublish");
84
+ }
85
+ this.status = fromPairs(Array.from(relays).map(relay => [relay, PublishStatus.Pending]));
82
86
  for (const relay of relays) {
83
87
  const unicast = new SinglePublish({ relay, ...options });
84
88
  unicast.on(PublishEvent.Success, (id, detail) => {
@@ -100,7 +104,7 @@ export class MultiPublish extends EventEmitter {
100
104
  unicast.on(PublishEvent.Complete, () => {
101
105
  this._completed.add(relay);
102
106
  this.status[relay] = unicast.status;
103
- if (this._completed.size === relays.length) {
107
+ if (this._completed.size === relays.size) {
104
108
  this.emit(PublishEvent.Complete);
105
109
  this.cleanup();
106
110
  }
@@ -117,4 +121,5 @@ export class MultiPublish extends EventEmitter {
117
121
  this.removeAllListeners();
118
122
  }
119
123
  }
124
+ export const publish = (options) => new MultiPublish(options);
120
125
  //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/publish.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
+ import { EventEmitter } from "events";
1
2
  import { Filter, TrustedEvent } from "@welshman/util";
2
3
  import { AdapterContext, AbstractAdapter } from "./adapter.js";
3
- import { TypedEmitter, Unsubscriber } from "./util.js";
4
+ import { Unsubscriber } from "./util.js";
4
5
  import { Tracker } from "./tracker.js";
5
6
  export declare enum RequestEvent {
6
7
  Close = "request:event:close",
@@ -25,6 +26,7 @@ export type SingleRequestEvents = {
25
26
  export type SingleRequestOptions = {
26
27
  relay: string;
27
28
  filters: Filter[];
29
+ signal?: AbortSignal;
28
30
  context?: AdapterContext;
29
31
  timeout?: number;
30
32
  tracker?: Tracker;
@@ -32,10 +34,7 @@ export type SingleRequestOptions = {
32
34
  isEventValid?: (event: TrustedEvent, url: string) => boolean;
33
35
  isEventDeleted?: (event: TrustedEvent, url: string) => boolean;
34
36
  };
35
- export interface SingleRequest extends TypedEmitter<SingleRequestEvents> {
36
- }
37
- declare const SingleRequest_base: new () => TypedEmitter<SingleRequestEvents>;
38
- export declare class SingleRequest extends SingleRequest_base {
37
+ export declare class SingleRequest extends EventEmitter {
39
38
  readonly options: SingleRequestOptions;
40
39
  _ids: Set<string>;
41
40
  _eose: Set<string>;
@@ -57,23 +56,34 @@ export type MultiRequestEvents = {
57
56
  };
58
57
  export type MultiRequestOptions = Omit<SingleRequestOptions, "relay"> & {
59
58
  relays: string[];
59
+ threshold?: number;
60
60
  };
61
- export interface MultiRequest extends TypedEmitter<MultiRequestEvents> {
62
- }
63
- declare const MultiRequest_base: new () => TypedEmitter<MultiRequestEvents>;
64
- export declare class MultiRequest extends MultiRequest_base {
61
+ export declare class MultiRequest extends EventEmitter {
65
62
  _children: SingleRequest[];
66
63
  _closed: Set<string>;
67
- constructor({ relays, ...options }: MultiRequestOptions);
64
+ constructor(options: MultiRequestOptions);
68
65
  close(): void;
69
66
  }
70
67
  export declare const request: (options: MultiRequestOptions) => MultiRequest;
68
+ export type LoaderOptions = {
69
+ delay: number;
70
+ timeout?: number;
71
+ threshold?: number;
72
+ context?: AdapterContext;
73
+ isEventValid?: (event: TrustedEvent, url: string) => boolean;
74
+ isEventDeleted?: (event: TrustedEvent, url: string) => boolean;
75
+ };
76
+ export type LoadOptions = {
77
+ relays: string[];
78
+ filters: Filter[];
79
+ };
71
80
  /**
72
- * A convenience function which returns a promise of events from a request.
81
+ * Creates a convenience function which returns a promise of events from a request.
73
82
  * It may return early if filter cardinality is known, and it delays requests by
74
83
  * 200 in order to implement batching
75
84
  * @param options - MultiRequestOptions
76
85
  * @returns - a promise containing an array of TrustedEvents
77
86
  */
78
- export declare const load: (request: MultiRequestOptions) => Promise<TrustedEvent[]>;
79
- export {};
87
+ export declare const makeLoader: (options: LoaderOptions) => (request: LoadOptions) => Promise<TrustedEvent[]>;
88
+ export declare const load: (request: LoadOptions) => Promise<TrustedEvent[]>;
89
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/request.ts"],"names":[],"mappings":"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"}
@@ -79,9 +79,11 @@ export class SingleRequest extends EventEmitter {
79
79
  }));
80
80
  }
81
81
  // Timeout our subscription
82
- if (this.options.timeout) {
83
- setTimeout(() => this.close(), this.options.timeout);
82
+ if (this.options.timeout || this.options.autoClose) {
83
+ setTimeout(() => this.close(), this.options.timeout || 10000);
84
84
  }
85
+ // Handle abort signal
86
+ this.options.signal?.addEventListener("abort", () => this.close());
85
87
  // Start asynchronously so the caller can set up listeners
86
88
  yieldThread().then(() => {
87
89
  for (const filter of this.options.filters) {
@@ -97,19 +99,24 @@ export class SingleRequest extends EventEmitter {
97
99
  for (const id of this._ids) {
98
100
  this._adapter.send(["CLOSE", id]);
99
101
  }
102
+ this._closed = true;
100
103
  this.emit(RequestEvent.Close);
101
- this.removeAllListeners();
102
- this._unsubscribers.map(call);
103
104
  this._adapter.cleanup();
104
- this._closed = true;
105
+ this._unsubscribers.map(call);
106
+ this.removeAllListeners();
105
107
  }
106
108
  }
107
109
  export class MultiRequest extends EventEmitter {
108
110
  _children = [];
109
111
  _closed = new Set();
110
- constructor({ relays, ...options }) {
112
+ constructor(options) {
111
113
  super();
112
114
  const tracker = new Tracker();
115
+ const relays = new Set(options.relays);
116
+ const threshold = options.threshold || 1;
117
+ if (relays.size !== options.relays.length) {
118
+ console.warn("Non-unique relays passed to MultiRequest");
119
+ }
113
120
  for (const relay of relays) {
114
121
  const req = new SingleRequest({ relay, tracker, ...options });
115
122
  req.on(RequestEvent.Event, (event) => {
@@ -135,8 +142,9 @@ export class MultiRequest extends EventEmitter {
135
142
  });
136
143
  req.on(RequestEvent.Close, () => {
137
144
  this._closed.add(relay);
138
- if (this._closed.size === relays.length) {
145
+ if (this._closed.size >= relays.size * threshold) {
139
146
  this.emit(RequestEvent.Close);
147
+ this.close();
140
148
  }
141
149
  });
142
150
  this._children.push(req);
@@ -150,13 +158,13 @@ export class MultiRequest extends EventEmitter {
150
158
  }
151
159
  export const request = (options) => new MultiRequest(options);
152
160
  /**
153
- * A convenience function which returns a promise of events from a request.
161
+ * Creates a convenience function which returns a promise of events from a request.
154
162
  * It may return early if filter cardinality is known, and it delays requests by
155
163
  * 200 in order to implement batching
156
164
  * @param options - MultiRequestOptions
157
165
  * @returns - a promise containing an array of TrustedEvents
158
166
  */
159
- export const load = batcher(200, async (requests) => {
167
+ export const makeLoader = (options) => batcher(options.delay, async (requests) => {
160
168
  const filtersByRelay = new Map();
161
169
  for (const { filters, relays } of requests) {
162
170
  for (const relay of relays) {
@@ -174,8 +182,8 @@ export const load = batcher(200, async (requests) => {
174
182
  filters,
175
183
  tracker,
176
184
  relays: [relay],
177
- timeout: 5000,
178
185
  autoClose: true,
186
+ ...options,
179
187
  });
180
188
  let count = 0;
181
189
  req.on(RequestEvent.Event, (event) => {
@@ -188,4 +196,5 @@ export const load = batcher(200, async (requests) => {
188
196
  })));
189
197
  return requests.map(r => events.filter(event => matchFilters(r.filters, event)));
190
198
  });
199
+ export const load = makeLoader({ delay: 200, timeout: 3000, threshold: 0.5 });
191
200
  //# 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"}