@welshman/store 0.14.0-pre4 → 0.14.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.
- package/dist/store/src/{repository.d.ts → derive.d.ts} +33 -41
- package/dist/store/src/derive.d.ts.map +1 -0
- package/dist/store/src/derive.js +706 -0
- package/dist/store/src/derive.js.map +1 -0
- package/dist/store/src/index.d.ts +9 -1
- package/dist/store/src/index.d.ts.map +1 -1
- package/dist/store/src/index.js +9 -1
- package/dist/store/src/index.js.map +1 -1
- package/dist/store/src/misc.d.ts +2 -7
- package/dist/store/src/misc.d.ts.map +1 -1
- package/dist/store/src/misc.js +1 -1
- package/dist/store/src/misc.js.map +1 -1
- package/dist/{net/src/repository.d.ts → store/src/repository/adapters/memory.d.ts} +22 -30
- package/dist/store/src/repository/adapters/memory.d.ts.map +1 -0
- package/dist/{net/src/repository.js → store/src/repository/adapters/memory.js} +96 -106
- package/dist/store/src/repository/adapters/memory.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/engine.d.ts +65 -0
- package/dist/store/src/repository/adapters/sqlite/engine.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/engine.js +420 -0
- package/dist/store/src/repository/adapters/sqlite/engine.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/leader.d.ts +8 -0
- package/dist/store/src/repository/adapters/sqlite/leader.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/leader.js +222 -0
- package/dist/store/src/repository/adapters/sqlite/leader.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.d.ts +52 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.js +52 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/repository.d.ts +54 -0
- package/dist/store/src/repository/adapters/sqlite/repository.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/repository.js +238 -0
- package/dist/store/src/repository/adapters/sqlite/repository.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/serve.d.ts +4 -0
- package/dist/store/src/repository/adapters/sqlite/serve.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/serve.js +40 -0
- package/dist/store/src/repository/adapters/sqlite/serve.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.d.ts +7 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.js +61 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/worker.d.ts +2 -0
- package/dist/store/src/repository/adapters/sqlite/worker.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/worker.js +4 -0
- package/dist/store/src/repository/adapters/sqlite/worker.js.map +1 -0
- package/dist/store/src/repository/core.d.ts +68 -0
- package/dist/store/src/repository/core.d.ts.map +1 -0
- package/dist/store/src/repository/core.js +123 -0
- package/dist/store/src/repository/core.js.map +1 -0
- package/dist/store/src/svelte.d.ts +22 -0
- package/dist/store/src/svelte.d.ts.map +1 -0
- package/dist/store/src/svelte.js +100 -0
- package/dist/store/src/svelte.js.map +1 -0
- package/dist/store/src/synced.d.ts +1 -1
- package/dist/store/src/synced.d.ts.map +1 -1
- package/dist/store/src/synced.js +1 -1
- package/dist/store/src/synced.js.map +1 -1
- package/dist/store/src/throttle.d.ts +1 -1
- package/dist/store/src/throttle.d.ts.map +1 -1
- package/dist/{net → store}/src/tracker.d.ts +2 -0
- package/dist/store/src/tracker.d.ts.map +1 -0
- package/dist/{net → store}/src/tracker.js +8 -4
- package/dist/store/src/tracker.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/util/src/Command.d.ts +1 -1
- package/dist/util/src/Command.d.ts.map +1 -1
- package/dist/util/src/Command.js +12 -5
- package/dist/util/src/Command.js.map +1 -1
- package/dist/util/src/Events.d.ts +3 -2
- package/dist/util/src/Events.d.ts.map +1 -1
- package/dist/util/src/Events.js.map +1 -1
- package/dist/util/src/Filters.d.ts.map +1 -1
- package/dist/util/src/Filters.js +6 -2
- package/dist/util/src/Filters.js.map +1 -1
- package/dist/util/src/Kinds.d.ts +1 -0
- package/dist/util/src/Kinds.d.ts.map +1 -1
- package/dist/util/src/Kinds.js +1 -0
- package/dist/util/src/Kinds.js.map +1 -1
- package/dist/util/src/RelaySelection.d.ts +5 -0
- package/dist/util/src/RelaySelection.d.ts.map +1 -1
- package/dist/util/src/RelaySelection.js.map +1 -1
- package/dist/util/src/Tags.d.ts +5 -0
- package/dist/util/src/Tags.d.ts.map +1 -1
- package/dist/util/src/Tags.js +3 -0
- package/dist/util/src/Tags.js.map +1 -1
- package/dist/util/src/index.d.ts +1 -0
- package/dist/util/src/index.d.ts.map +1 -1
- package/dist/util/src/index.js +1 -0
- package/dist/util/src/index.js.map +1 -1
- package/package.json +31 -12
- package/dist/net/src/adapter.d.ts +0 -47
- package/dist/net/src/adapter.d.ts.map +0 -1
- package/dist/net/src/adapter.js +0 -139
- package/dist/net/src/adapter.js.map +0 -1
- package/dist/net/src/auth.d.ts +0 -40
- package/dist/net/src/auth.d.ts.map +0 -1
- package/dist/net/src/auth.js +0 -131
- package/dist/net/src/auth.js.map +0 -1
- package/dist/net/src/context.d.ts +0 -10
- package/dist/net/src/context.d.ts.map +0 -1
- package/dist/net/src/context.js +0 -2
- package/dist/net/src/context.js.map +0 -1
- package/dist/net/src/count.d.ts +0 -30
- package/dist/net/src/count.d.ts.map +0 -1
- package/dist/net/src/count.js +0 -97
- package/dist/net/src/count.js.map +0 -1
- package/dist/net/src/diff.d.ts +0 -57
- package/dist/net/src/diff.d.ts.map +0 -1
- package/dist/net/src/diff.js +0 -169
- package/dist/net/src/diff.js.map +0 -1
- package/dist/net/src/index.d.ts +0 -17
- package/dist/net/src/index.d.ts.map +0 -1
- package/dist/net/src/index.js +0 -17
- package/dist/net/src/index.js.map +0 -1
- package/dist/net/src/message.d.ts +0 -106
- package/dist/net/src/message.d.ts.map +0 -1
- package/dist/net/src/message.js +0 -98
- package/dist/net/src/message.js.map +0 -1
- package/dist/net/src/multiplex.d.ts +0 -14
- package/dist/net/src/multiplex.d.ts.map +0 -1
- package/dist/net/src/multiplex.js +0 -219
- package/dist/net/src/multiplex.js.map +0 -1
- package/dist/net/src/negentropy.d.ts +0 -48
- package/dist/net/src/negentropy.d.ts.map +0 -1
- package/dist/net/src/negentropy.js +0 -528
- package/dist/net/src/negentropy.js.map +0 -1
- package/dist/net/src/policy.d.ts +0 -63
- package/dist/net/src/policy.d.ts.map +0 -1
- package/dist/net/src/policy.js +0 -388
- package/dist/net/src/policy.js.map +0 -1
- package/dist/net/src/pool.d.ts +0 -15
- package/dist/net/src/pool.d.ts.map +0 -1
- package/dist/net/src/pool.js +0 -51
- package/dist/net/src/pool.js.map +0 -1
- package/dist/net/src/publish.d.ts +0 -47
- package/dist/net/src/publish.d.ts.map +0 -1
- package/dist/net/src/publish.js +0 -112
- package/dist/net/src/publish.js.map +0 -1
- package/dist/net/src/repository.d.ts.map +0 -1
- package/dist/net/src/repository.js.map +0 -1
- package/dist/net/src/request.d.ts +0 -38
- package/dist/net/src/request.d.ts.map +0 -1
- package/dist/net/src/request.js +0 -220
- package/dist/net/src/request.js.map +0 -1
- package/dist/net/src/socket.d.ts +0 -52
- package/dist/net/src/socket.d.ts.map +0 -1
- package/dist/net/src/socket.js +0 -134
- package/dist/net/src/socket.js.map +0 -1
- package/dist/net/src/tracker.d.ts.map +0 -1
- package/dist/net/src/tracker.js.map +0 -1
- package/dist/net/src/util.d.ts +0 -18
- package/dist/net/src/util.d.ts.map +0 -1
- package/dist/net/src/util.js +0 -25
- package/dist/net/src/util.js.map +0 -1
- package/dist/net/src/wrapManager.d.ts +0 -34
- package/dist/net/src/wrapManager.d.ts.map +0 -1
- package/dist/net/src/wrapManager.js +0 -79
- package/dist/net/src/wrapManager.js.map +0 -1
- package/dist/store/src/repository.d.ts.map +0 -1
- package/dist/store/src/repository.js +0 -580
- package/dist/store/src/repository.js.map +0 -1
package/dist/net/src/policy.js
DELETED
|
@@ -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, copyMultiplex, 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 symbols, so carry them over
|
|
214
|
-
socket.send(copyMultiplex(copyPriority([...message.slice(0, 2), ...filters], message), 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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"}
|
package/dist/net/src/pool.d.ts
DELETED
|
@@ -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"}
|
package/dist/net/src/pool.js
DELETED
|
@@ -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
|
package/dist/net/src/pool.js.map
DELETED
|
@@ -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"}
|
package/dist/net/src/publish.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { fromPairs, once } from "@welshman/lib";
|
|
2
|
-
import { ClientMessageType, setPriority, isRelayOk } from "./message.js";
|
|
3
|
-
import { AdapterEvent, getAdapter } from "./adapter.js";
|
|
4
|
-
export var PublishStatus;
|
|
5
|
-
(function (PublishStatus) {
|
|
6
|
-
PublishStatus["Sending"] = "sending";
|
|
7
|
-
PublishStatus["Pending"] = "pending";
|
|
8
|
-
PublishStatus["Success"] = "success";
|
|
9
|
-
PublishStatus["Failure"] = "failure";
|
|
10
|
-
PublishStatus["Timeout"] = "timeout";
|
|
11
|
-
PublishStatus["Aborted"] = "aborted";
|
|
12
|
-
})(PublishStatus || (PublishStatus = {}));
|
|
13
|
-
export const publishOne = (options) => new Promise(resolve => {
|
|
14
|
-
// An already-aborted signal never fires its listener, so bail before building
|
|
15
|
-
// an adapter — that would pull a socket out of the pool to publish an event
|
|
16
|
-
// that's already been given up on, and nothing would ever close it
|
|
17
|
-
if (options.signal?.aborted) {
|
|
18
|
-
const result = {
|
|
19
|
-
relay: options.relay,
|
|
20
|
-
status: PublishStatus.Aborted,
|
|
21
|
-
detail: "aborted",
|
|
22
|
-
};
|
|
23
|
-
options.onAborted?.(result);
|
|
24
|
-
options.onComplete?.(result);
|
|
25
|
-
return resolve(result);
|
|
26
|
-
}
|
|
27
|
-
const adapter = getAdapter(options.relay, options.context);
|
|
28
|
-
const result = {
|
|
29
|
-
relay: options.relay,
|
|
30
|
-
status: PublishStatus.Pending,
|
|
31
|
-
detail: "",
|
|
32
|
-
};
|
|
33
|
-
options.onPending?.(result);
|
|
34
|
-
let timeoutId = null;
|
|
35
|
-
const abort = () => {
|
|
36
|
-
if (result.status === PublishStatus.Pending) {
|
|
37
|
-
result.status = PublishStatus.Aborted;
|
|
38
|
-
result.detail = "aborted";
|
|
39
|
-
options.onAborted?.(result);
|
|
40
|
-
}
|
|
41
|
-
cleanup();
|
|
42
|
-
};
|
|
43
|
-
const cleanup = once(() => {
|
|
44
|
-
options.signal?.removeEventListener("abort", abort);
|
|
45
|
-
options.onComplete?.(result);
|
|
46
|
-
if (timeoutId)
|
|
47
|
-
clearTimeout(timeoutId);
|
|
48
|
-
adapter.cleanup();
|
|
49
|
-
resolve(result);
|
|
50
|
-
});
|
|
51
|
-
adapter.on(AdapterEvent.Receive, (message, url) => {
|
|
52
|
-
if (isRelayOk(message)) {
|
|
53
|
-
const [_, id, ok, detail] = message;
|
|
54
|
-
if (id !== options.event.id)
|
|
55
|
-
return;
|
|
56
|
-
if (ok) {
|
|
57
|
-
result.status = PublishStatus.Success;
|
|
58
|
-
result.detail = detail;
|
|
59
|
-
options.onSuccess?.(result);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
result.status = PublishStatus.Failure;
|
|
63
|
-
result.detail = detail;
|
|
64
|
-
options.onFailure?.(result);
|
|
65
|
-
}
|
|
66
|
-
cleanup();
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
if (options.signal) {
|
|
70
|
-
options.signal.addEventListener("abort", abort);
|
|
71
|
-
}
|
|
72
|
-
timeoutId = setTimeout(() => {
|
|
73
|
-
if (result.status === PublishStatus.Pending) {
|
|
74
|
-
result.status = PublishStatus.Timeout;
|
|
75
|
-
result.detail = "timed out";
|
|
76
|
-
options.onTimeout?.(result);
|
|
77
|
-
}
|
|
78
|
-
cleanup();
|
|
79
|
-
}, options.timeout || 10_000);
|
|
80
|
-
adapter.send(setPriority([ClientMessageType.Event, options.event], options.priority));
|
|
81
|
-
});
|
|
82
|
-
export const publish = async (options) => {
|
|
83
|
-
const { event, timeout, signal, context, priority } = options;
|
|
84
|
-
const completed = new Set();
|
|
85
|
-
const relays = new Set(options.relays);
|
|
86
|
-
if (relays.size !== options.relays.length) {
|
|
87
|
-
console.warn("Non-unique relays passed to publish");
|
|
88
|
-
}
|
|
89
|
-
return fromPairs(await Promise.all(options.relays.map(async (relay) => {
|
|
90
|
-
const result = await publishOne({
|
|
91
|
-
event,
|
|
92
|
-
relay,
|
|
93
|
-
signal,
|
|
94
|
-
timeout,
|
|
95
|
-
context,
|
|
96
|
-
priority,
|
|
97
|
-
onSuccess: options.onSuccess,
|
|
98
|
-
onFailure: options.onFailure,
|
|
99
|
-
onPending: options.onPending,
|
|
100
|
-
onTimeout: options.onTimeout,
|
|
101
|
-
onAborted: options.onAborted,
|
|
102
|
-
onComplete: (result) => {
|
|
103
|
-
completed.add(relay);
|
|
104
|
-
if (completed.size === relays.size) {
|
|
105
|
-
options.onComplete?.(result);
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
return [relay, result];
|
|
110
|
-
})));
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=publish.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../net/src/publish.ts"],"names":[],"mappings":"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"}
|