@welshman/store 0.14.0-pre3 → 0.14.0-pre5

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 (157) hide show
  1. package/dist/store/src/{repository.d.ts → derive.d.ts} +33 -41
  2. package/dist/store/src/derive.d.ts.map +1 -0
  3. package/dist/store/src/derive.js +706 -0
  4. package/dist/store/src/derive.js.map +1 -0
  5. package/dist/store/src/index.d.ts +9 -1
  6. package/dist/store/src/index.d.ts.map +1 -1
  7. package/dist/store/src/index.js +9 -1
  8. package/dist/store/src/index.js.map +1 -1
  9. package/dist/store/src/misc.d.ts +2 -7
  10. package/dist/store/src/misc.d.ts.map +1 -1
  11. package/dist/store/src/misc.js +1 -1
  12. package/dist/store/src/misc.js.map +1 -1
  13. package/dist/{net/src/repository.d.ts → store/src/repository/adapters/memory.d.ts} +22 -30
  14. package/dist/store/src/repository/adapters/memory.d.ts.map +1 -0
  15. package/dist/{net/src/repository.js → store/src/repository/adapters/memory.js} +96 -106
  16. package/dist/store/src/repository/adapters/memory.js.map +1 -0
  17. package/dist/store/src/repository/adapters/sqlite/engine.d.ts +65 -0
  18. package/dist/store/src/repository/adapters/sqlite/engine.d.ts.map +1 -0
  19. package/dist/store/src/repository/adapters/sqlite/engine.js +420 -0
  20. package/dist/store/src/repository/adapters/sqlite/engine.js.map +1 -0
  21. package/dist/store/src/repository/adapters/sqlite/leader.d.ts +8 -0
  22. package/dist/store/src/repository/adapters/sqlite/leader.d.ts.map +1 -0
  23. package/dist/store/src/repository/adapters/sqlite/leader.js +222 -0
  24. package/dist/store/src/repository/adapters/sqlite/leader.js.map +1 -0
  25. package/dist/store/src/repository/adapters/sqlite/protocol.d.ts +52 -0
  26. package/dist/store/src/repository/adapters/sqlite/protocol.d.ts.map +1 -0
  27. package/dist/store/src/repository/adapters/sqlite/protocol.js +52 -0
  28. package/dist/store/src/repository/adapters/sqlite/protocol.js.map +1 -0
  29. package/dist/store/src/repository/adapters/sqlite/repository.d.ts +54 -0
  30. package/dist/store/src/repository/adapters/sqlite/repository.d.ts.map +1 -0
  31. package/dist/store/src/repository/adapters/sqlite/repository.js +238 -0
  32. package/dist/store/src/repository/adapters/sqlite/repository.js.map +1 -0
  33. package/dist/store/src/repository/adapters/sqlite/serve.d.ts +4 -0
  34. package/dist/store/src/repository/adapters/sqlite/serve.d.ts.map +1 -0
  35. package/dist/store/src/repository/adapters/sqlite/serve.js +39 -0
  36. package/dist/store/src/repository/adapters/sqlite/serve.js.map +1 -0
  37. package/dist/store/src/repository/adapters/sqlite/wasm.d.ts +7 -0
  38. package/dist/store/src/repository/adapters/sqlite/wasm.d.ts.map +1 -0
  39. package/dist/store/src/repository/adapters/sqlite/wasm.js +61 -0
  40. package/dist/store/src/repository/adapters/sqlite/wasm.js.map +1 -0
  41. package/dist/store/src/repository/adapters/sqlite/worker.d.ts +2 -0
  42. package/dist/store/src/repository/adapters/sqlite/worker.d.ts.map +1 -0
  43. package/dist/store/src/repository/adapters/sqlite/worker.js +4 -0
  44. package/dist/store/src/repository/adapters/sqlite/worker.js.map +1 -0
  45. package/dist/store/src/repository/core.d.ts +68 -0
  46. package/dist/store/src/repository/core.d.ts.map +1 -0
  47. package/dist/store/src/repository/core.js +123 -0
  48. package/dist/store/src/repository/core.js.map +1 -0
  49. package/dist/store/src/svelte.d.ts +22 -0
  50. package/dist/store/src/svelte.d.ts.map +1 -0
  51. package/dist/store/src/svelte.js +100 -0
  52. package/dist/store/src/svelte.js.map +1 -0
  53. package/dist/store/src/synced.d.ts +1 -1
  54. package/dist/store/src/synced.d.ts.map +1 -1
  55. package/dist/store/src/synced.js +1 -1
  56. package/dist/store/src/synced.js.map +1 -1
  57. package/dist/store/src/throttle.d.ts +1 -1
  58. package/dist/store/src/throttle.d.ts.map +1 -1
  59. package/dist/{net → store}/src/tracker.d.ts +2 -0
  60. package/dist/store/src/tracker.d.ts.map +1 -0
  61. package/dist/{net → store}/src/tracker.js +8 -4
  62. package/dist/store/src/tracker.js.map +1 -0
  63. package/dist/tsconfig.build.tsbuildinfo +1 -1
  64. package/dist/util/src/Command.d.ts +1 -1
  65. package/dist/util/src/Command.d.ts.map +1 -1
  66. package/dist/util/src/Command.js +12 -5
  67. package/dist/util/src/Command.js.map +1 -1
  68. package/dist/util/src/Events.d.ts +3 -2
  69. package/dist/util/src/Events.d.ts.map +1 -1
  70. package/dist/util/src/Events.js.map +1 -1
  71. package/dist/util/src/Kinds.d.ts +1 -0
  72. package/dist/util/src/Kinds.d.ts.map +1 -1
  73. package/dist/util/src/Kinds.js +1 -0
  74. package/dist/util/src/Kinds.js.map +1 -1
  75. package/dist/util/src/RelaySelection.d.ts +5 -0
  76. package/dist/util/src/RelaySelection.d.ts.map +1 -1
  77. package/dist/util/src/RelaySelection.js.map +1 -1
  78. package/dist/util/src/Tags.d.ts +5 -0
  79. package/dist/util/src/Tags.d.ts.map +1 -1
  80. package/dist/util/src/Tags.js +3 -0
  81. package/dist/util/src/Tags.js.map +1 -1
  82. package/dist/util/src/index.d.ts +1 -0
  83. package/dist/util/src/index.d.ts.map +1 -1
  84. package/dist/util/src/index.js +1 -0
  85. package/dist/util/src/index.js.map +1 -1
  86. package/package.json +31 -12
  87. package/dist/net/src/adapter.d.ts +0 -47
  88. package/dist/net/src/adapter.d.ts.map +0 -1
  89. package/dist/net/src/adapter.js +0 -139
  90. package/dist/net/src/adapter.js.map +0 -1
  91. package/dist/net/src/auth.d.ts +0 -40
  92. package/dist/net/src/auth.d.ts.map +0 -1
  93. package/dist/net/src/auth.js +0 -131
  94. package/dist/net/src/auth.js.map +0 -1
  95. package/dist/net/src/context.d.ts +0 -10
  96. package/dist/net/src/context.d.ts.map +0 -1
  97. package/dist/net/src/context.js +0 -2
  98. package/dist/net/src/context.js.map +0 -1
  99. package/dist/net/src/count.d.ts +0 -30
  100. package/dist/net/src/count.d.ts.map +0 -1
  101. package/dist/net/src/count.js +0 -97
  102. package/dist/net/src/count.js.map +0 -1
  103. package/dist/net/src/diff.d.ts +0 -57
  104. package/dist/net/src/diff.d.ts.map +0 -1
  105. package/dist/net/src/diff.js +0 -169
  106. package/dist/net/src/diff.js.map +0 -1
  107. package/dist/net/src/index.d.ts +0 -17
  108. package/dist/net/src/index.d.ts.map +0 -1
  109. package/dist/net/src/index.js +0 -17
  110. package/dist/net/src/index.js.map +0 -1
  111. package/dist/net/src/message.d.ts +0 -96
  112. package/dist/net/src/message.d.ts.map +0 -1
  113. package/dist/net/src/message.js +0 -76
  114. package/dist/net/src/message.js.map +0 -1
  115. package/dist/net/src/multiplex.d.ts +0 -13
  116. package/dist/net/src/multiplex.d.ts.map +0 -1
  117. package/dist/net/src/multiplex.js +0 -210
  118. package/dist/net/src/multiplex.js.map +0 -1
  119. package/dist/net/src/negentropy.d.ts +0 -48
  120. package/dist/net/src/negentropy.d.ts.map +0 -1
  121. package/dist/net/src/negentropy.js +0 -528
  122. package/dist/net/src/negentropy.js.map +0 -1
  123. package/dist/net/src/policy.d.ts +0 -63
  124. package/dist/net/src/policy.d.ts.map +0 -1
  125. package/dist/net/src/policy.js +0 -388
  126. package/dist/net/src/policy.js.map +0 -1
  127. package/dist/net/src/pool.d.ts +0 -15
  128. package/dist/net/src/pool.d.ts.map +0 -1
  129. package/dist/net/src/pool.js +0 -51
  130. package/dist/net/src/pool.js.map +0 -1
  131. package/dist/net/src/publish.d.ts +0 -47
  132. package/dist/net/src/publish.d.ts.map +0 -1
  133. package/dist/net/src/publish.js +0 -112
  134. package/dist/net/src/publish.js.map +0 -1
  135. package/dist/net/src/repository.d.ts.map +0 -1
  136. package/dist/net/src/repository.js.map +0 -1
  137. package/dist/net/src/request.d.ts +0 -37
  138. package/dist/net/src/request.d.ts.map +0 -1
  139. package/dist/net/src/request.js +0 -206
  140. package/dist/net/src/request.js.map +0 -1
  141. package/dist/net/src/socket.d.ts +0 -52
  142. package/dist/net/src/socket.d.ts.map +0 -1
  143. package/dist/net/src/socket.js +0 -134
  144. package/dist/net/src/socket.js.map +0 -1
  145. package/dist/net/src/tracker.d.ts.map +0 -1
  146. package/dist/net/src/tracker.js.map +0 -1
  147. package/dist/net/src/util.d.ts +0 -18
  148. package/dist/net/src/util.d.ts.map +0 -1
  149. package/dist/net/src/util.js +0 -25
  150. package/dist/net/src/util.js.map +0 -1
  151. package/dist/net/src/wrapManager.d.ts +0 -34
  152. package/dist/net/src/wrapManager.d.ts.map +0 -1
  153. package/dist/net/src/wrapManager.js +0 -79
  154. package/dist/net/src/wrapManager.js.map +0 -1
  155. package/dist/store/src/repository.d.ts.map +0 -1
  156. package/dist/store/src/repository.js +0 -580
  157. package/dist/store/src/repository.js.map +0 -1
@@ -1,63 +0,0 @@
1
- import { StampedEvent, SignedEvent } from "@welshman/util";
2
- import { Socket, SocketPolicy } from "./socket.js";
3
- import type { Unsubscriber } from "./util.js";
4
- /**
5
- * Handles auth-related message management:
6
- * - Remembers messages sent before auth completes so they can be replayed once it succeeds
7
- * - Withholds the relay's auth-required refusals of those messages from the caller, since the
8
- * replay will be answered instead
9
- * - Hands a withheld answer over if the replay never happens: auth failed, or the message fell
10
- * out of the buffer
11
- * @param socket - a Socket object
12
- * @return a cleanup function
13
- */
14
- export declare const socketPolicyAuthBuffer: (socket: Socket) => () => void;
15
- /**
16
- * Drops subscriptions that are closed before they've been sent, along with the close
17
- * message itself. Besides saving a round trip, this keeps a prioritized close from
18
- * jumping ahead of its own req, which would leave the subscription open on the relay.
19
- * @param socket - a Socket object
20
- * @return a cleanup function
21
- */
22
- export declare const socketPolicyCancelUnsent: (socket: Socket) => () => void;
23
- /**
24
- * Auto-connects a closed socket when a message is sent unless there was a recent error
25
- * @param socket - a Socket object
26
- * @return a cleanup function
27
- */
28
- export declare const socketPolicyConnectOnSend: (socket: Socket) => () => void;
29
- /**
30
- * Owns a socket's lifecycle: closes it once nothing needs it, checks the relay is still there
31
- * when something does, reopens it, and catches up on what it missed.
32
- * @param socket - a Socket object
33
- * @return a cleanup function
34
- */
35
- export declare const socketPolicyLifecycle: (socket: Socket) => () => void;
36
- export type SocketPolicyAuthOptions = {
37
- sign: (event: StampedEvent) => Promise<SignedEvent>;
38
- shouldAuth?: (socket: Socket) => boolean;
39
- recheck?: {
40
- subscribe: (run: () => void) => Unsubscriber;
41
- };
42
- };
43
- /**
44
- * Factory function for a policy which may authenticate the socket
45
- * @param options - SocketPolicyAuthOptions object
46
- * @return a socket policy
47
- */
48
- export declare const makeSocketPolicyAuth: (options: SocketPolicyAuthOptions) => (socket: Socket) => () => void;
49
- export type SocketPolicyRefusalsOptions = {
50
- onAllowed: (socket: Socket) => void;
51
- onRefused: (socket: Socket, reason: string) => void;
52
- };
53
- /**
54
- * Factory function for a policy which reports how the relay answers each request and publish:
55
- * allowed when it serves one, refused when it turns one away as "restricted:" or "blocked:"
56
- * (NIP-01's reasons for lacking access). Other failures report nothing, including an
57
- * auth-required refusal, since the message is sent again once auth completes.
58
- * @param options - SocketPolicyRefusalsOptions object
59
- * @return a socket policy
60
- */
61
- export declare const makeSocketPolicyRefusals: (options: SocketPolicyRefusalsOptions) => (socket: Socket) => () => void;
62
- export declare const defaultSocketPolicies: SocketPolicy[];
63
- //# sourceMappingURL=policy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../net/src/policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,YAAY,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAA;AAuBzF,OAAO,EAAC,MAAM,EAA6B,YAAY,EAAC,MAAM,aAAa,CAAA;AAI3E,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,WAAW,CAAA;AAE3C;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,MAAM,eAqHpD,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,eA0BtD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ,MAAM,eAqBvD,CAAA;AAmBD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,eAuInD,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAExC,OAAO,CAAC,EAAE;QAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,KAAK,YAAY,CAAA;KAAC,CAAA;CACzD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,SAAS,uBAAuB,MAAM,QAAQ,MAAM,eAkBxF,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACpD,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GAClC,SAAS,2BAA2B,MAAM,QAAQ,MAAM,eAyDxD,CAAA;AAGH,eAAO,MAAM,qBAAqB,EAAE,YAAY,EAM/C,CAAA"}
@@ -1,388 +0,0 @@
1
- import { on, ms, always, call, randomId, ago, now } from "@welshman/lib";
2
- import { RELAY_JOIN, neverFilter } from "@welshman/util";
3
- import { isClientAuth, isClientClose, isClientEvent, isClientReq, isClientCount, isClientNegOpen, isClientNegClose, ClientMessageType, copyPriority, isRelayOk, isRelayEose, isRelayEvent, isRelayNegMsg, isRelayClosed, isRelayNegErr, isRelayCount, matchReason, RelayReasonPrefix, } from "./message.js";
4
- import { SocketStatus, SocketEvent } from "./socket.js";
5
- import { AuthStatus, AuthStateEvent } from "./auth.js";
6
- import { socketPolicyMultiplex } from "./multiplex.js";
7
- import { catchUpFilter } from "./util.js";
8
- /**
9
- * Handles auth-related message management:
10
- * - Remembers messages sent before auth completes so they can be replayed once it succeeds
11
- * - Withholds the relay's auth-required refusals of those messages from the caller, since the
12
- * replay will be answered instead
13
- * - Hands a withheld answer over if the replay never happens: auth failed, or the message fell
14
- * out of the buffer
15
- * @param socket - a Socket object
16
- * @return a cleanup function
17
- */
18
- export const socketPolicyAuthBuffer = (socket) => {
19
- const { None, Ok, DeniedSignature, Forbidden } = AuthStatus;
20
- const terminalStatuses = [Ok, DeniedSignature, Forbidden];
21
- // Messages by req/event id, oldest first. Most relays never ask for auth, so this fills
22
- // with everything a socket sends; the relay answering a message is what takes it back out.
23
- const buffer = new Map();
24
- // Relay messages kept from the caller because a replay will answer them again
25
- const withheld = new Map();
26
- const getId = (message) => isClientEvent(message) ? message[1].id : message[1];
27
- const withhold = (id, message) => {
28
- socket._recvQueue.remove(message);
29
- withheld.set(id, [...(withheld.get(id) || []), message]);
30
- };
31
- // Give the caller whatever the relay told us about a message we are no longer going to replay
32
- const release = (id) => {
33
- const messages = withheld.get(id) || [];
34
- buffer.delete(id);
35
- withheld.delete(id);
36
- for (const message of messages) {
37
- socket.receive(message);
38
- }
39
- };
40
- const unsubscribers = [
41
- on(socket, SocketEvent.Sending, (message) => {
42
- // Always allow sending auth
43
- if (isClientAuth(message))
44
- return;
45
- // Always allow sending join requests
46
- if (isClientEvent(message) && message[1].kind === RELAY_JOIN)
47
- return;
48
- // If the auth flow is complete, no need to buffer anymore
49
- if (terminalStatuses.includes(socket.auth.status))
50
- return;
51
- const isClose = isClientClose(message) || isClientNegClose(message);
52
- const isOpen = isClientReq(message) ||
53
- isClientCount(message) ||
54
- isClientEvent(message) ||
55
- isClientNegOpen(message);
56
- // A close ends the subscription, and anything else supersedes an earlier copy of itself,
57
- // as when a subscription is sent again after a reconnect. Anything else (NEG-MSG) belongs
58
- // to a session that replaying its NEG-OPEN starts over.
59
- if (isClose || isOpen) {
60
- const id = getId(message);
61
- buffer.delete(id);
62
- withheld.delete(id);
63
- if (isOpen) {
64
- buffer.set(id, message);
65
- }
66
- }
67
- while (buffer.size > 1000) {
68
- release(buffer.keys().next().value);
69
- }
70
- }),
71
- on(socket, SocketEvent.Receiving, (message) => {
72
- const id = message[1];
73
- // Only a message we can replay or answer later may be kept from the caller
74
- if (buffer.has(id)) {
75
- const isRefusal = ((isRelayClosed(message) || isRelayNegErr(message)) &&
76
- matchReason(RelayReasonPrefix.AuthRequired, message[2])) ||
77
- (isRelayOk(message) &&
78
- !message[2] &&
79
- matchReason(RelayReasonPrefix.AuthRequired, message[3]));
80
- if (isRefusal) {
81
- withhold(id, message);
82
- }
83
- else if (isRelayEose(message) && ![None, Ok].includes(socket.auth.status)) {
84
- // Wait for the replay's eose, since events may be withheld until we authenticate
85
- withhold(id, message);
86
- }
87
- else if (isRelayClosed(message) ||
88
- isRelayNegErr(message) ||
89
- isRelayOk(message) ||
90
- isRelayCount(message)) {
91
- // The relay has answered for good, so there is nothing left to replay
92
- buffer.delete(id);
93
- withheld.delete(id);
94
- }
95
- }
96
- }),
97
- on(socket.auth, AuthStateEvent.Status, (status) => {
98
- // Send buffered messages when we get successful auth. If auth failed, let the caller
99
- // hear the refusals we held back.
100
- if (status === Ok) {
101
- const messages = Array.from(buffer.values());
102
- buffer.clear();
103
- withheld.clear();
104
- for (const message of messages) {
105
- socket.send(message);
106
- }
107
- }
108
- else if (terminalStatuses.includes(status)) {
109
- for (const id of Array.from(buffer.keys())) {
110
- release(id);
111
- }
112
- }
113
- }),
114
- ];
115
- return () => unsubscribers.forEach(call);
116
- };
117
- /**
118
- * Drops subscriptions that are closed before they've been sent, along with the close
119
- * message itself. Besides saving a round trip, this keeps a prioritized close from
120
- * jumping ahead of its own req, which would leave the subscription open on the relay.
121
- * @param socket - a Socket object
122
- * @return a cleanup function
123
- */
124
- export const socketPolicyCancelUnsent = (socket) => {
125
- const unsubscribers = [
126
- on(socket, SocketEvent.Sending, (message) => {
127
- let isSubscription;
128
- if (isClientClose(message)) {
129
- isSubscription = isClientReq;
130
- }
131
- else if (isClientNegClose(message)) {
132
- isSubscription = isClientNegOpen;
133
- }
134
- else {
135
- return;
136
- }
137
- const subscription = socket._sendQueue.items.find(other => isSubscription(other) && other[1] === message[1]);
138
- // The close is already queued at this point, so drop it along with the req
139
- if (subscription) {
140
- socket._sendQueue.remove(subscription);
141
- socket._sendQueue.remove(message);
142
- }
143
- }),
144
- ];
145
- return () => unsubscribers.forEach(call);
146
- };
147
- /**
148
- * Auto-connects a closed socket when a message is sent unless there was a recent error
149
- * @param socket - a Socket object
150
- * @return a cleanup function
151
- */
152
- export const socketPolicyConnectOnSend = (socket) => {
153
- let lastError = 0;
154
- const unsubscribers = [
155
- on(socket, SocketEvent.Status, (newStatus) => {
156
- // Keep track of the most recent error
157
- if (newStatus === SocketStatus.Error) {
158
- lastError = now();
159
- }
160
- }),
161
- on(socket, SocketEvent.Sending, (message) => {
162
- const isClosed = [SocketStatus.Closed, SocketStatus.Error].includes(socket.status);
163
- // When a new message is sent, make sure the socket is open (unless there was a recent error)
164
- if (isClosed && lastError < ago(5)) {
165
- socket.open();
166
- }
167
- }),
168
- ];
169
- return () => unsubscribers.forEach(call);
170
- };
171
- // How long a socket carrying work sits quiet before we check the relay is still there
172
- const PROBE_IDLE = 30;
173
- // How long a socket has to answer after probing
174
- const PROBE_TIMEOUT = 10;
175
- // The longest a socket with work outstanding waits between attempts to reach its relay
176
- const RECONNECT_MAX_DELAY = 300;
177
- // The relay doing work for us, as opposed to greeting us, refusing us or complaining
178
- const isAnswer = (message) => isRelayEvent(message) ||
179
- isRelayEose(message) ||
180
- isRelayOk(message) ||
181
- isRelayCount(message) ||
182
- isRelayNegMsg(message);
183
- /**
184
- * Owns a socket's lifecycle: closes it once nothing needs it, checks the relay is still there
185
- * when something does, reopens it, and catches up on what it missed.
186
- * @param socket - a Socket object
187
- * @return a cleanup function
188
- */
189
- export const socketPolicyLifecycle = (socket) => {
190
- const pending = new Map();
191
- let lastOpen = now();
192
- let lastActivity = now();
193
- let lastReceive = now();
194
- let probeId;
195
- let probedAt = 0;
196
- let attempts = 0;
197
- let reconnecting = false;
198
- let reconnectTimeout;
199
- const unsubscribers = [
200
- on(socket, SocketEvent.Status, (newStatus) => {
201
- const isClosed = [SocketStatus.Closed, SocketStatus.Error].includes(newStatus);
202
- if (newStatus === SocketStatus.Open) {
203
- lastOpen = now();
204
- // Whatever opened the socket, a scheduled reconnect has nothing left to do
205
- clearTimeout(reconnectTimeout);
206
- reconnectTimeout = undefined;
207
- // Replay on open rather than per attempt, or each failed attempt queues another copy
208
- if (reconnecting) {
209
- reconnecting = false;
210
- for (const message of pending.values()) {
211
- if (isClientReq(message)) {
212
- const filters = message.slice(2).map(filter => catchUpFilter(filter, lastReceive));
213
- // Rebuilding the message drops its priority symbol, so carry it over
214
- socket.send(copyPriority([...message.slice(0, 2), ...filters], message));
215
- }
216
- else {
217
- socket.send(message);
218
- }
219
- }
220
- }
221
- }
222
- // A probe belongs to the connection that was carrying it, not to the next one
223
- if (isClosed && probeId) {
224
- pending.delete(probeId);
225
- probeId = undefined;
226
- }
227
- // Reopen with work outstanding, backing off so an unreachable relay isn't retried in a loop
228
- if (isClosed && pending.size && !reconnectTimeout) {
229
- const backoff = Math.min(RECONNECT_MAX_DELAY, 2 ** attempts - 1);
230
- const delay = Math.max(0, 5 - (now() - lastOpen), backoff);
231
- attempts += 1;
232
- reconnecting = true;
233
- reconnectTimeout = setTimeout(() => {
234
- reconnectTimeout = undefined;
235
- socket.attemptToOpen();
236
- }, ms(delay));
237
- }
238
- }),
239
- // Forget a subscription once its close is queued, so a reopen can't replay it after the close
240
- on(socket, SocketEvent.Sending, (message) => {
241
- if (isClientClose(message) || isClientNegClose(message)) {
242
- pending.delete(message[1]);
243
- }
244
- }),
245
- on(socket, SocketEvent.Send, (message) => {
246
- lastActivity = now();
247
- if (isClientEvent(message)) {
248
- pending.set(message[1].id, message);
249
- }
250
- if (isClientReq(message) || isClientNegOpen(message)) {
251
- pending.set(message[1], message);
252
- }
253
- if (isClientClose(message) || isClientNegClose(message)) {
254
- pending.delete(message[1]);
255
- }
256
- }),
257
- on(socket, SocketEvent.Receive, (message) => {
258
- lastActivity = now();
259
- lastReceive = now();
260
- // A relay that only greets us and drops us is not reachable, whatever it said
261
- if (isAnswer(message)) {
262
- attempts = 0;
263
- }
264
- // Any traffic at all proves the relay is there, so retire the probe
265
- if (probeId) {
266
- socket.send([ClientMessageType.Close, probeId]);
267
- probeId = undefined;
268
- }
269
- if (isRelayClosed(message) || isRelayOk(message)) {
270
- pending.delete(message[1]);
271
- }
272
- }),
273
- ];
274
- const interval = setInterval(() => {
275
- if (socket.status !== SocketStatus.Open)
276
- return;
277
- // Nothing is waiting on this socket, so let it go
278
- if (pending.size === 0) {
279
- if (lastActivity < ago(30)) {
280
- socket.close();
281
- }
282
- return;
283
- }
284
- // Something is waiting, but a device coming back from a suspend can find a socket that only
285
- // looks open: the relay went away without a close ever firing, so nothing reconnects and
286
- // every subscription on it is quietly dead. Send a probe request and close if no response.
287
- if (probeId) {
288
- if (probedAt < ago(PROBE_TIMEOUT)) {
289
- socket.close();
290
- }
291
- }
292
- else if (lastReceive < ago(PROBE_IDLE)) {
293
- probeId = `PING-${randomId()}`;
294
- probedAt = now();
295
- socket.send([ClientMessageType.Req, probeId, neverFilter]);
296
- }
297
- }, 3000);
298
- return () => {
299
- unsubscribers.forEach(call);
300
- clearInterval(interval);
301
- clearTimeout(reconnectTimeout);
302
- };
303
- };
304
- /**
305
- * Factory function for a policy which may authenticate the socket
306
- * @param options - SocketPolicyAuthOptions object
307
- * @return a socket policy
308
- */
309
- export const makeSocketPolicyAuth = (options) => (socket) => {
310
- const shouldAuth = options.shouldAuth || always(true);
311
- const attemptAuth = () => {
312
- if (socket.auth.status === AuthStatus.Requested && shouldAuth(socket)) {
313
- socket.auth.doAuth(options.sign);
314
- }
315
- };
316
- const unsubscribers = [on(socket.auth, AuthStateEvent.Status, attemptAuth)];
317
- if (options.recheck) {
318
- unsubscribers.push(options.recheck.subscribe(attemptAuth));
319
- }
320
- return () => {
321
- unsubscribers.forEach(call);
322
- };
323
- };
324
- /**
325
- * Factory function for a policy which reports how the relay answers each request and publish:
326
- * allowed when it serves one, refused when it turns one away as "restricted:" or "blocked:"
327
- * (NIP-01's reasons for lacking access). Other failures report nothing, including an
328
- * auth-required refusal, since the message is sent again once auth completes.
329
- * @param options - SocketPolicyRefusalsOptions object
330
- * @return a socket policy
331
- */
332
- export const makeSocketPolicyRefusals = (options) => (socket) => {
333
- const pending = new Set();
334
- const allow = (id) => {
335
- if (pending.delete(id)) {
336
- options.onAllowed(socket);
337
- }
338
- };
339
- const fail = (id, reason = "") => {
340
- const refused = matchReason(RelayReasonPrefix.Restricted, reason) ||
341
- matchReason(RelayReasonPrefix.Blocked, reason);
342
- if (pending.delete(id) && refused) {
343
- options.onRefused(socket, reason);
344
- }
345
- };
346
- const unsubscribers = [
347
- on(socket, SocketEvent.Send, (message) => {
348
- if (isClientReq(message) || isClientNegOpen(message)) {
349
- pending.add(message[1]);
350
- }
351
- if (isClientEvent(message)) {
352
- pending.add(message[1].id);
353
- }
354
- if (isClientClose(message) || isClientNegClose(message)) {
355
- pending.delete(message[1]);
356
- }
357
- }),
358
- on(socket, SocketEvent.Receive, (message) => {
359
- if (isRelayEose(message) || isRelayNegMsg(message)) {
360
- allow(message[1]);
361
- }
362
- if (isRelayOk(message)) {
363
- const [, id, ok, reason] = message;
364
- if (ok) {
365
- allow(id);
366
- }
367
- else {
368
- fail(id, reason);
369
- }
370
- }
371
- if (isRelayClosed(message) || isRelayNegErr(message)) {
372
- fail(message[1], message[2]);
373
- }
374
- }),
375
- ];
376
- return () => {
377
- unsubscribers.forEach(call);
378
- };
379
- };
380
- // Multiplex runs after the policies that take messages back out of the queues
381
- export const defaultSocketPolicies = [
382
- socketPolicyAuthBuffer,
383
- socketPolicyCancelUnsent,
384
- socketPolicyMultiplex,
385
- socketPolicyConnectOnSend,
386
- socketPolicyLifecycle,
387
- ];
388
- //# sourceMappingURL=policy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../net/src/policy.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { Socket } from "./socket.js";
2
- import type { SocketPolicy } from "./socket.js";
3
- export type PoolSubscription = (socket: Socket) => void;
4
- export declare class Pool {
5
- socketPolicies: SocketPolicy[];
6
- _data: Map<string, Socket>;
7
- _subs: PoolSubscription[];
8
- has(url: string): boolean;
9
- get(_url: string): Socket;
10
- addSocketPolicy(policy: SocketPolicy): () => void;
11
- subscribe(cb: PoolSubscription): () => void;
12
- remove(url: string): void;
13
- clear(): void;
14
- }
15
- //# sourceMappingURL=pool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../../net/src/pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAA;AAG7C,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;AAEvD,qBAAa,IAAI;IACf,cAAc,iBAA6B;IAC3C,KAAK,sBAA4B;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAK;IAE9B,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAoBzB,eAAe,CAAC,MAAM,EAAE,YAAY;IAQpC,SAAS,CAAC,EAAE,EAAE,gBAAgB;IAQ9B,MAAM,CAAC,GAAG,EAAE,MAAM;IAUlB,KAAK;CAKN"}
@@ -1,51 +0,0 @@
1
- import { remove } from "@welshman/lib";
2
- import { normalizeRelayUrl } from "@welshman/util";
3
- import { Socket } from "./socket.js";
4
- import { defaultSocketPolicies } from "./policy.js";
5
- export class Pool {
6
- socketPolicies = [...defaultSocketPolicies];
7
- _data = new Map();
8
- _subs = [];
9
- has(url) {
10
- return this._data.has(normalizeRelayUrl(url));
11
- }
12
- get(_url) {
13
- const url = normalizeRelayUrl(_url);
14
- const socket = this._data.get(url);
15
- if (socket) {
16
- return socket;
17
- }
18
- const newSocket = new Socket(url, this.socketPolicies);
19
- this._data.set(url, newSocket);
20
- for (const cb of this._subs) {
21
- cb(newSocket);
22
- }
23
- return newSocket;
24
- }
25
- // Applies to sockets created from now on, until the returned function takes it back out
26
- addSocketPolicy(policy) {
27
- this.socketPolicies.push(policy);
28
- return () => {
29
- this.socketPolicies = remove(policy, this.socketPolicies);
30
- };
31
- }
32
- subscribe(cb) {
33
- this._subs.push(cb);
34
- return () => {
35
- this._subs = remove(cb, this._subs);
36
- };
37
- }
38
- remove(url) {
39
- const socket = this._data.get(normalizeRelayUrl(url));
40
- if (socket) {
41
- socket.cleanup();
42
- this._data.delete(normalizeRelayUrl(url));
43
- }
44
- }
45
- clear() {
46
- for (const url of this._data.keys()) {
47
- this.remove(url);
48
- }
49
- }
50
- }
51
- //# sourceMappingURL=pool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../net/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;AAElC,OAAO,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAA;AAIjD,MAAM,OAAO,IAAI;IACf,cAAc,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAA;IAC3C,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACjC,KAAK,GAAuB,EAAE,CAAA;IAE9B,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,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,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAEtD,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,wFAAwF;IACxF,eAAe,CAAC,MAAoB;QAClC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEhC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC3D,CAAC,CAAA;IACH,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,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;QAErD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,EAAE,CAAA;YAEhB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3C,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,47 +0,0 @@
1
- import { SignedEvent } from "@welshman/util";
2
- import { AdapterContext } from "./adapter.js";
3
- export declare enum PublishStatus {
4
- Sending = "sending",
5
- Pending = "pending",
6
- Success = "success",
7
- Failure = "failure",
8
- Timeout = "timeout",
9
- Aborted = "aborted"
10
- }
11
- export type PublishResult = {
12
- status: PublishStatus;
13
- detail: string;
14
- relay: string;
15
- };
16
- export type PublishOneOptions = {
17
- event: SignedEvent;
18
- relay: string;
19
- signal?: AbortSignal;
20
- priority?: number;
21
- timeout?: number;
22
- context?: AdapterContext;
23
- onSuccess?: (result: PublishResult) => void;
24
- onFailure?: (result: PublishResult) => void;
25
- onPending?: (result: PublishResult) => void;
26
- onTimeout?: (result: PublishResult) => void;
27
- onAborted?: (result: PublishResult) => void;
28
- onComplete?: (result: PublishResult) => void;
29
- };
30
- export declare const publishOne: (options: PublishOneOptions) => Promise<PublishResult>;
31
- export type PublishResultsByRelay = Record<string, PublishResult>;
32
- export type PublishOptions = {
33
- event: SignedEvent;
34
- relays: string[];
35
- signal?: AbortSignal;
36
- priority?: number;
37
- timeout?: number;
38
- context?: AdapterContext;
39
- onSuccess?: (result: PublishResult) => void;
40
- onFailure?: (result: PublishResult) => void;
41
- onPending?: (result: PublishResult) => void;
42
- onTimeout?: (result: PublishResult) => void;
43
- onAborted?: (result: PublishResult) => void;
44
- onComplete?: (result: PublishResult) => void;
45
- };
46
- export declare const publish: (options: PublishOptions) => Promise<PublishResultsByRelay>;
47
- //# sourceMappingURL=publish.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../../net/src/publish.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAe,cAAc,EAAa,MAAM,cAAc,CAAA;AAErE,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;CAC7C,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,iBAAiB,2BAuFjD,CAAA;AAEJ,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;CAC7C,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,SAAS,cAAc,KAAG,OAAO,CAAC,qBAAqB,CAqCpF,CAAA"}