@alpamayo-solutions/colca-client 0.13.1 → 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/README.md +6 -4
- package/dist/live.d.ts +44 -7
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +199 -27
- package/dist/live.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -67,8 +67,10 @@ first. Around that the client does what a page left open all day needs:
|
|
|
67
67
|
- **A second subscriber gets the value at once.** The client keeps the last value
|
|
68
68
|
of every topic, and `latest()` and `values()` read it.
|
|
69
69
|
- **A fresh token before the old one runs out.** The node ends a session when its
|
|
70
|
-
token expires.
|
|
71
|
-
|
|
70
|
+
token expires. Shortly before, the client hands the node a new token on the
|
|
71
|
+
open connection (MQTT 5 re-authentication), so nothing is subscribed again. A
|
|
72
|
+
node that does not offer that gets a new connection with the new token and
|
|
73
|
+
every subscription sent again. Either way the client stays `online`.
|
|
72
74
|
- **Waits that grow after a drop**, jittered, each attempt with a fresh token.
|
|
73
75
|
- **A word when the subscriptions go out again.** `onResubscribe()` fires once
|
|
74
76
|
they have, on every new connection — where the node's retained delivery starts
|
|
@@ -124,8 +126,8 @@ change, and returns the function that ends that watch and no other. An alarm's
|
|
|
124
126
|
name comes from the `_SystemElement` it hangs on, and its path is where a view
|
|
125
127
|
jumps to.
|
|
126
128
|
|
|
127
|
-
When the connection comes back — after a drop, and after
|
|
128
|
-
|
|
129
|
+
When the connection comes back — after a drop, and after a token renewal that
|
|
130
|
+
had to reconnect — the node starts its retained delivery over, and an alarm that went
|
|
129
131
|
while the client was away leaves nothing behind to say so. `Alarms` therefore
|
|
130
132
|
gives the set 750 ms to arrive again (`resyncMs`) and drops what did not come
|
|
131
133
|
back: a view can be that much behind the node, but it never goes on showing an
|
package/dist/live.d.ts
CHANGED
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* - the last value of every topic, so a second subscriber to a topic gets it at
|
|
12
12
|
* once instead of waiting for the next change;
|
|
13
13
|
* - a fresh token before the old one runs out — the node ends a session when
|
|
14
|
-
* its token expires
|
|
14
|
+
* its token expires. A node that renews tokens in place (MQTT 5
|
|
15
|
+
* re-authentication) takes it on the open connection; with any other, the
|
|
16
|
+
* client opens a new connection and sends every subscription again;
|
|
15
17
|
* - growing, jittered waits between attempts after a drop, each with a fresh
|
|
16
18
|
* token;
|
|
17
19
|
* - commands that wait for their acknowledgement.
|
|
@@ -53,12 +55,33 @@ export interface CommandOptions {
|
|
|
53
55
|
/** Where the answer arrives: every `_Ack` under the command's root, unless given. */
|
|
54
56
|
ackFilter?: string;
|
|
55
57
|
}
|
|
56
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* A command that never reached the node's executor: the client was offline, or
|
|
60
|
+
* the node refused the publish. Nothing was carried out.
|
|
61
|
+
*/
|
|
62
|
+
export declare class CommandNotSent extends Error {
|
|
63
|
+
readonly topic: string;
|
|
64
|
+
readonly correlationId: string;
|
|
65
|
+
constructor(topic: string, correlationId: string, options?: {
|
|
66
|
+
cause?: unknown;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Nobody answered a command before it expired. It may still have been carried
|
|
71
|
+
* out: the connection can drop after the command went out and before its answer
|
|
72
|
+
* came back.
|
|
73
|
+
*/
|
|
57
74
|
export declare class CommandTimeout extends Error {
|
|
58
75
|
readonly topic: string;
|
|
59
76
|
readonly correlationId: string;
|
|
60
77
|
constructor(topic: string, correlationId: string);
|
|
61
78
|
}
|
|
79
|
+
/** The part of a CONNACK this module reads. */
|
|
80
|
+
export interface Connack {
|
|
81
|
+
properties?: {
|
|
82
|
+
authenticationMethod?: string;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
62
85
|
/** What is handed to the MQTT client for each connection. */
|
|
63
86
|
export interface MqttConnectOptions {
|
|
64
87
|
clientId: string;
|
|
@@ -70,11 +93,17 @@ export interface MqttConnectOptions {
|
|
|
70
93
|
/** Zero: reconnecting is this module's job, because every attempt needs a fresh token. */
|
|
71
94
|
reconnectPeriod: 0;
|
|
72
95
|
connectTimeout: number;
|
|
96
|
+
/** Asks the node to renew tokens on this connection; the token itself stays the password. */
|
|
97
|
+
properties: {
|
|
98
|
+
authenticationMethod: string;
|
|
99
|
+
[property: string]: unknown;
|
|
100
|
+
};
|
|
73
101
|
[option: string]: unknown;
|
|
74
102
|
}
|
|
75
103
|
/** The part of an MQTT client this module uses; mqtt.js's client fits. */
|
|
76
104
|
export interface MqttLike {
|
|
77
|
-
on(event: "connect"
|
|
105
|
+
on(event: "connect", listener: (connack?: Connack) => void): unknown;
|
|
106
|
+
on(event: "close", listener: () => void): unknown;
|
|
78
107
|
on(event: "error", listener: (error: Error) => void): unknown;
|
|
79
108
|
on(event: "message", listener: (topic: string, payload: Uint8Array, packet: {
|
|
80
109
|
retain: boolean;
|
|
@@ -91,6 +120,12 @@ export interface MqttLike {
|
|
|
91
120
|
retain: false;
|
|
92
121
|
}, callback?: (error?: Error) => void): unknown;
|
|
93
122
|
end(force?: boolean): unknown;
|
|
123
|
+
/**
|
|
124
|
+
* Hand the node a new token on this connection (an MQTT 5 AUTH packet, reason
|
|
125
|
+
* 0x19). Resolves when the node accepted it. A node that refuses ends the
|
|
126
|
+
* connection. Without it, a renewal always reconnects.
|
|
127
|
+
*/
|
|
128
|
+
reauthenticate?(token: string): Promise<void>;
|
|
94
129
|
}
|
|
95
130
|
export interface LiveOptions {
|
|
96
131
|
/** The node's WebSocket door for people and applications, e.g. `wss://node:8885`. */
|
|
@@ -99,7 +134,7 @@ export interface LiveOptions {
|
|
|
99
134
|
token: () => string | Promise<string>;
|
|
100
135
|
/** The node requires the token's `sub` here, which is the default. Set it for a token that is not a JWT. */
|
|
101
136
|
username?: string;
|
|
102
|
-
/**
|
|
137
|
+
/** Renew the token this long before the current one expires. */
|
|
103
138
|
renewBeforeMs?: number;
|
|
104
139
|
/** The first wait after a failed attempt. It doubles up to `maxRetryMs`. */
|
|
105
140
|
retryMs?: number;
|
|
@@ -139,8 +174,10 @@ export declare class Live {
|
|
|
139
174
|
* `body` is the command's own fields — `params` for a `_CmdParam`, say. The
|
|
140
175
|
* correlation id and the expiry are added here, and the answer is matched by
|
|
141
176
|
* the id, wherever in the tree the executor publishes it. The promise settles
|
|
142
|
-
* with the `_Ack`, whatever its `result_code
|
|
143
|
-
*
|
|
177
|
+
* with the `_Ack`, whatever its `result_code`. It rejects with `CommandNotSent`
|
|
178
|
+
* when the command never went out or the node refused it, with `CommandTimeout`
|
|
179
|
+
* when nothing answers in `timeoutMs`, and when the client closes. A connection
|
|
180
|
+
* lost after the command went out is not a refusal: its answer may still come.
|
|
144
181
|
*/
|
|
145
182
|
command(topic: string, body?: Record<string, unknown>, options?: CommandOptions): Promise<CommandAck>;
|
|
146
183
|
/** Called on every change of the connection state; returns the function that stops it. */
|
|
@@ -149,7 +186,7 @@ export declare class Live {
|
|
|
149
186
|
* Called once every subscription has gone out on a new connection, the first
|
|
150
187
|
* one included — where the node's retained delivery starts over. A view that
|
|
151
188
|
* has to notice what disappeared while the client was away reconciles from
|
|
152
|
-
* here; a
|
|
189
|
+
* here; a renewal that reconnects reaches it too, and says nothing about the state.
|
|
153
190
|
*/
|
|
154
191
|
onResubscribe(listener: () => void): () => void;
|
|
155
192
|
close(): void;
|
package/dist/live.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"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"}
|
package/dist/live.js
CHANGED
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* - the last value of every topic, so a second subscriber to a topic gets it at
|
|
12
12
|
* once instead of waiting for the next change;
|
|
13
13
|
* - a fresh token before the old one runs out — the node ends a session when
|
|
14
|
-
* its token expires
|
|
14
|
+
* its token expires. A node that renews tokens in place (MQTT 5
|
|
15
|
+
* re-authentication) takes it on the open connection; with any other, the
|
|
16
|
+
* client opens a new connection and sends every subscription again;
|
|
15
17
|
* - growing, jittered waits between attempts after a drop, each with a fresh
|
|
16
18
|
* token;
|
|
17
19
|
* - commands that wait for their acknowledgement.
|
|
@@ -27,7 +29,25 @@ import { parseTopic, topicMatches } from "./topics.js";
|
|
|
27
29
|
// Standing alarms are retained values read and commanded over this connection,
|
|
28
30
|
// so they come out of this entry point rather than one of their own.
|
|
29
31
|
export { AlarmRefused, Alarms } from "./alarms.js";
|
|
30
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* A command that never reached the node's executor: the client was offline, or
|
|
34
|
+
* the node refused the publish. Nothing was carried out.
|
|
35
|
+
*/
|
|
36
|
+
export class CommandNotSent extends Error {
|
|
37
|
+
topic;
|
|
38
|
+
correlationId;
|
|
39
|
+
constructor(topic, correlationId, options) {
|
|
40
|
+
super(`${topic} (${correlationId}) was not sent`, options);
|
|
41
|
+
this.topic = topic;
|
|
42
|
+
this.correlationId = correlationId;
|
|
43
|
+
this.name = "CommandNotSent";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Nobody answered a command before it expired. It may still have been carried
|
|
48
|
+
* out: the connection can drop after the command went out and before its answer
|
|
49
|
+
* came back.
|
|
50
|
+
*/
|
|
31
51
|
export class CommandTimeout extends Error {
|
|
32
52
|
topic;
|
|
33
53
|
correlationId;
|
|
@@ -38,6 +58,13 @@ export class CommandTimeout extends Error {
|
|
|
38
58
|
this.name = "CommandTimeout";
|
|
39
59
|
}
|
|
40
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* The MQTT 5 authentication method under which a Colca node renews a token on
|
|
63
|
+
* an open connection. The node names it in the CONNACK when it can.
|
|
64
|
+
*/
|
|
65
|
+
const REAUTH_METHOD = "colca-token";
|
|
66
|
+
/** How long a renewal on the open connection may take before the client reconnects instead. */
|
|
67
|
+
const REAUTH_TIMEOUT_MS = 10_000;
|
|
41
68
|
/** A token lifetime shorter than this does not make the client reconnect any faster. */
|
|
42
69
|
const MIN_RENEW_MS = 5_000;
|
|
43
70
|
export class Live {
|
|
@@ -56,10 +83,14 @@ export class Live {
|
|
|
56
83
|
#resubscribeListeners = new Set();
|
|
57
84
|
#state = "connecting";
|
|
58
85
|
#client;
|
|
86
|
+
/** The connection a renewal replaces, kept until the new one has its subscriptions. */
|
|
87
|
+
#retiring;
|
|
59
88
|
#generation = 0;
|
|
60
89
|
#attempt = 0;
|
|
61
90
|
#renewTimer;
|
|
62
91
|
#retryTimer;
|
|
92
|
+
/** The node said, in this connection's CONNACK, that it renews tokens in place. */
|
|
93
|
+
#renewsInPlace = false;
|
|
63
94
|
constructor(options) {
|
|
64
95
|
this.#options = options;
|
|
65
96
|
void this.#open();
|
|
@@ -86,7 +117,7 @@ export class Live {
|
|
|
86
117
|
this.#qos.set(filter, qos);
|
|
87
118
|
// Offline, the filter goes out with the others once the connection is up.
|
|
88
119
|
if (this.#state === "online")
|
|
89
|
-
this.#subscribe([filter]);
|
|
120
|
+
void this.#subscribe([filter]);
|
|
90
121
|
}
|
|
91
122
|
else {
|
|
92
123
|
listeners.add(own);
|
|
@@ -94,7 +125,7 @@ export class Live {
|
|
|
94
125
|
// Subscribing again replaces the node's subscription with the stronger one.
|
|
95
126
|
this.#qos.set(filter, qos);
|
|
96
127
|
if (this.#state === "online")
|
|
97
|
-
this.#subscribe([filter]);
|
|
128
|
+
void this.#subscribe([filter]);
|
|
98
129
|
}
|
|
99
130
|
// The node sends retained values once per subscription, and this filter's
|
|
100
131
|
// went to whoever subscribed first. The newcomer gets them from here.
|
|
@@ -152,8 +183,10 @@ export class Live {
|
|
|
152
183
|
* `body` is the command's own fields — `params` for a `_CmdParam`, say. The
|
|
153
184
|
* correlation id and the expiry are added here, and the answer is matched by
|
|
154
185
|
* the id, wherever in the tree the executor publishes it. The promise settles
|
|
155
|
-
* with the `_Ack`, whatever its `result_code
|
|
156
|
-
*
|
|
186
|
+
* with the `_Ack`, whatever its `result_code`. It rejects with `CommandNotSent`
|
|
187
|
+
* when the command never went out or the node refused it, with `CommandTimeout`
|
|
188
|
+
* when nothing answers in `timeoutMs`, and when the client closes. A connection
|
|
189
|
+
* lost after the command went out is not a refusal: its answer may still come.
|
|
157
190
|
*/
|
|
158
191
|
command(topic, body = {}, options = {}) {
|
|
159
192
|
const parts = parseTopic(topic);
|
|
@@ -164,23 +197,43 @@ export class Live {
|
|
|
164
197
|
const ackFilter = options.ackFilter ?? `${parts.root}/${parts.version}/_Ack/#`;
|
|
165
198
|
const correlationId = typeof body.correlation_id === "string" ? body.correlation_id : newUlid();
|
|
166
199
|
this.#listenForAcks(ackFilter);
|
|
200
|
+
// Expires when the wait ends, however long the subscription below takes: the
|
|
201
|
+
// executor must not carry out a command its sender has given up on.
|
|
202
|
+
const expiresAt = Date.now() + timeoutMs;
|
|
167
203
|
return new Promise((resolve, reject) => {
|
|
204
|
+
let sent = false;
|
|
168
205
|
const timer = setTimeout(() => {
|
|
169
|
-
if (this.#pending.delete(correlationId))
|
|
170
|
-
|
|
206
|
+
if (!this.#pending.delete(correlationId))
|
|
207
|
+
return;
|
|
208
|
+
reject(sent ? new CommandTimeout(topic, correlationId) : new CommandNotSent(topic, correlationId));
|
|
171
209
|
}, timeoutMs);
|
|
172
210
|
this.#pending.set(correlationId, { resolve, reject, timer });
|
|
173
|
-
|
|
174
|
-
// that answers at once must not answer into nothing.
|
|
175
|
-
this.#whenGranted(ackFilter)
|
|
176
|
-
.then(() => this.publish(topic, { ...body, correlation_id: correlationId, expires_at: Date.now() + timeoutMs }))
|
|
177
|
-
.catch((error) => {
|
|
211
|
+
const notSent = (cause) => {
|
|
178
212
|
const pending = this.#pending.get(correlationId);
|
|
179
213
|
if (!pending)
|
|
180
214
|
return;
|
|
181
215
|
this.#pending.delete(correlationId);
|
|
182
216
|
clearTimeout(pending.timer);
|
|
183
|
-
pending.reject(
|
|
217
|
+
pending.reject(new CommandNotSent(topic, correlationId, { cause }));
|
|
218
|
+
};
|
|
219
|
+
// Only once the node confirmed the subscription to the answers: an executor
|
|
220
|
+
// that answers at once must not answer into nothing.
|
|
221
|
+
void this.#whenGranted(ackFilter).then(() => {
|
|
222
|
+
if (!this.#pending.has(correlationId))
|
|
223
|
+
return;
|
|
224
|
+
const client = this.#client;
|
|
225
|
+
if (this.#state !== "online" || client === undefined) {
|
|
226
|
+
notSent();
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const payload = JSON.stringify({ ...body, correlation_id: correlationId, expires_at: expiresAt });
|
|
230
|
+
sent = true;
|
|
231
|
+
client.publish(topic, payload, { qos: 1, retain: false }, (error) => {
|
|
232
|
+
// The node's refusal carries its reason code. Any other error is the
|
|
233
|
+
// connection going, and the command may have reached the node first.
|
|
234
|
+
if (error && typeof error.code === "number")
|
|
235
|
+
notSent(error);
|
|
236
|
+
});
|
|
184
237
|
});
|
|
185
238
|
});
|
|
186
239
|
}
|
|
@@ -193,7 +246,7 @@ export class Live {
|
|
|
193
246
|
* Called once every subscription has gone out on a new connection, the first
|
|
194
247
|
* one included — where the node's retained delivery starts over. A view that
|
|
195
248
|
* has to notice what disappeared while the client was away reconciles from
|
|
196
|
-
* here; a
|
|
249
|
+
* here; a renewal that reconnects reaches it too, and says nothing about the state.
|
|
197
250
|
*/
|
|
198
251
|
onResubscribe(listener) {
|
|
199
252
|
this.#resubscribeListeners.add(listener);
|
|
@@ -207,6 +260,7 @@ export class Live {
|
|
|
207
260
|
clearTimeout(this.#retryTimer);
|
|
208
261
|
this.#client?.end();
|
|
209
262
|
this.#client = undefined;
|
|
263
|
+
this.#retire();
|
|
210
264
|
this.#filters.clear();
|
|
211
265
|
this.#qos.clear();
|
|
212
266
|
this.#values.clear();
|
|
@@ -248,6 +302,10 @@ export class Live {
|
|
|
248
302
|
keepalive: 30,
|
|
249
303
|
reconnectPeriod: 0,
|
|
250
304
|
connectTimeout: 10_000,
|
|
305
|
+
properties: {
|
|
306
|
+
...this.#options.mqttOptions?.properties,
|
|
307
|
+
authenticationMethod: REAUTH_METHOD,
|
|
308
|
+
},
|
|
251
309
|
});
|
|
252
310
|
}
|
|
253
311
|
catch (error) {
|
|
@@ -267,20 +325,26 @@ export class Live {
|
|
|
267
325
|
return;
|
|
268
326
|
}
|
|
269
327
|
this.#client = client;
|
|
270
|
-
client.on("connect", () => {
|
|
328
|
+
client.on("connect", (connack) => {
|
|
271
329
|
if (!current())
|
|
272
330
|
return;
|
|
273
331
|
this.#attempt = 0;
|
|
332
|
+
this.#renewsInPlace =
|
|
333
|
+
connack?.properties?.authenticationMethod === REAUTH_METHOD && client.reauthenticate !== undefined;
|
|
274
334
|
this.#setState("online");
|
|
275
335
|
this.#retainedSent.clear();
|
|
276
336
|
this.#granted.clear();
|
|
277
|
-
this.#subscribe([...this.#filters.keys()])
|
|
337
|
+
void this.#subscribe([...this.#filters.keys()]).then(() => {
|
|
338
|
+
if (current())
|
|
339
|
+
this.#retire();
|
|
340
|
+
});
|
|
278
341
|
for (const listener of this.#resubscribeListeners)
|
|
279
342
|
listener();
|
|
280
343
|
this.#scheduleRenewal(expiresAt);
|
|
281
344
|
});
|
|
282
345
|
client.on("message", (topic, payload, packet) => {
|
|
283
|
-
|
|
346
|
+
// The connection being renewed away from goes on delivering until it is ended.
|
|
347
|
+
if (current() || client === this.#retiring)
|
|
284
348
|
this.#receive(topic, payload, packet.retain);
|
|
285
349
|
});
|
|
286
350
|
client.on("error", (error) => {
|
|
@@ -294,15 +358,27 @@ export class Live {
|
|
|
294
358
|
this.#retry();
|
|
295
359
|
});
|
|
296
360
|
}
|
|
297
|
-
/**
|
|
298
|
-
|
|
361
|
+
/**
|
|
362
|
+
* Open the next connection. A renewal keeps the one in hand until the next one
|
|
363
|
+
* has its subscriptions, so no value falls between them; anything else ends it.
|
|
364
|
+
*/
|
|
365
|
+
#replace(token, renewal = false) {
|
|
299
366
|
clearTimeout(this.#renewTimer);
|
|
300
367
|
this.#renewTimer = undefined;
|
|
301
368
|
this.#generation += 1;
|
|
302
|
-
this.#
|
|
369
|
+
this.#retire();
|
|
370
|
+
if (renewal)
|
|
371
|
+
this.#retiring = this.#client;
|
|
372
|
+
else
|
|
373
|
+
this.#client?.end(true);
|
|
303
374
|
this.#client = undefined;
|
|
304
375
|
void this.#open(token);
|
|
305
376
|
}
|
|
377
|
+
/** End a renewed connection with a DISCONNECT, so the node does not log a dropped one. */
|
|
378
|
+
#retire() {
|
|
379
|
+
this.#retiring?.end(false);
|
|
380
|
+
this.#retiring = undefined;
|
|
381
|
+
}
|
|
306
382
|
#retry() {
|
|
307
383
|
if (this.#retryTimer !== undefined)
|
|
308
384
|
return;
|
|
@@ -326,9 +402,9 @@ export class Live {
|
|
|
326
402
|
}, Math.max(MIN_RENEW_MS, due));
|
|
327
403
|
}
|
|
328
404
|
/**
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
405
|
+
* Renew only with a token that outlives the one in use. An identity proxy can
|
|
406
|
+
* keep handing out the token it holds until its own refresh is due, and
|
|
407
|
+
* renewing with that one gains nothing.
|
|
332
408
|
*/
|
|
333
409
|
async #renew(expiresAt) {
|
|
334
410
|
const generation = this.#generation;
|
|
@@ -344,7 +420,10 @@ export class Live {
|
|
|
344
420
|
return;
|
|
345
421
|
const exp = token === undefined ? undefined : readClaims(token)?.exp;
|
|
346
422
|
if (token !== undefined && (exp === undefined || exp * 1000 > expiresAt)) {
|
|
347
|
-
this.#
|
|
423
|
+
if (this.#renewsInPlace)
|
|
424
|
+
await this.#renewInPlace(token, exp);
|
|
425
|
+
else
|
|
426
|
+
this.#replace(token, true);
|
|
348
427
|
return;
|
|
349
428
|
}
|
|
350
429
|
// Ask again shortly; once the token has run out, the node ends the session and
|
|
@@ -356,13 +435,59 @@ export class Live {
|
|
|
356
435
|
void this.#renew(expiresAt);
|
|
357
436
|
}, MIN_RENEW_MS);
|
|
358
437
|
}
|
|
438
|
+
/**
|
|
439
|
+
* Hand the new token to the node on the open connection, so nothing is
|
|
440
|
+
* subscribed again and no value is missed. When the node does not answer in
|
|
441
|
+
* time the client reconnects with the token instead; when it refuses, it ends
|
|
442
|
+
* the connection and the retry takes over.
|
|
443
|
+
*/
|
|
444
|
+
async #renewInPlace(token, exp) {
|
|
445
|
+
const generation = this.#generation;
|
|
446
|
+
const client = this.#client;
|
|
447
|
+
if (client?.reauthenticate === undefined) {
|
|
448
|
+
this.#replace(token, true);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
let timer;
|
|
452
|
+
try {
|
|
453
|
+
await Promise.race([
|
|
454
|
+
client.reauthenticate(token),
|
|
455
|
+
new Promise((_, reject) => {
|
|
456
|
+
timer = setTimeout(() => {
|
|
457
|
+
reject(new Error("the node did not answer the token renewal"));
|
|
458
|
+
}, REAUTH_TIMEOUT_MS);
|
|
459
|
+
}),
|
|
460
|
+
]);
|
|
461
|
+
}
|
|
462
|
+
catch (error) {
|
|
463
|
+
if (generation !== this.#generation || this.#state !== "online")
|
|
464
|
+
return;
|
|
465
|
+
this.#report(error);
|
|
466
|
+
this.#replace(token, true);
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
finally {
|
|
470
|
+
clearTimeout(timer);
|
|
471
|
+
}
|
|
472
|
+
if (generation !== this.#generation || this.#state === "closed")
|
|
473
|
+
return;
|
|
474
|
+
this.#scheduleRenewal(exp === undefined ? undefined : exp * 1000);
|
|
475
|
+
}
|
|
476
|
+
/** Settles once the node has answered every subscription, granted or not. */
|
|
359
477
|
#subscribe(filters) {
|
|
360
478
|
const generation = this.#generation;
|
|
479
|
+
const answers = [];
|
|
361
480
|
for (const qos of [0, 1]) {
|
|
362
481
|
const group = filters.filter((filter) => (this.#qos.get(filter) ?? 0) === qos);
|
|
363
482
|
if (group.length === 0)
|
|
364
483
|
continue;
|
|
365
|
-
this.#client
|
|
484
|
+
const client = this.#client;
|
|
485
|
+
if (client === undefined)
|
|
486
|
+
continue;
|
|
487
|
+
let answered;
|
|
488
|
+
answers.push(new Promise((resolve) => (answered = resolve)));
|
|
489
|
+
client.subscribe(group, { qos }, (error, granted) => {
|
|
490
|
+
answered();
|
|
366
491
|
if (generation !== this.#generation)
|
|
367
492
|
return;
|
|
368
493
|
if (error) {
|
|
@@ -382,6 +507,7 @@ export class Live {
|
|
|
382
507
|
}
|
|
383
508
|
});
|
|
384
509
|
}
|
|
510
|
+
return Promise.all(answers).then(() => undefined);
|
|
385
511
|
}
|
|
386
512
|
#whenGranted(filter) {
|
|
387
513
|
if (this.#granted.has(filter))
|
|
@@ -493,7 +619,53 @@ async function connectWithMqttJs(url, options) {
|
|
|
493
619
|
const connect = mqtt.connect ?? mqtt.default?.connect;
|
|
494
620
|
if (connect === undefined)
|
|
495
621
|
throw new MissingMqtt("the mqtt package in use has no connect()");
|
|
496
|
-
return connect(url, options);
|
|
622
|
+
return withReauthentication(connect(url, options));
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Give an mqtt.js client `reauthenticate`. mqtt.js reads AUTH packets from the
|
|
626
|
+
* broker but has no call to send one, so this uses its packet writer, and it
|
|
627
|
+
* leaves the client as it is when that writer is missing.
|
|
628
|
+
*/
|
|
629
|
+
function withReauthentication(client) {
|
|
630
|
+
const internals = client;
|
|
631
|
+
const send = internals._sendPacket;
|
|
632
|
+
const handleAuth = internals.handleAuth;
|
|
633
|
+
if (typeof send !== "function" || typeof handleAuth !== "function")
|
|
634
|
+
return client;
|
|
635
|
+
let waiting;
|
|
636
|
+
const settle = (error) => {
|
|
637
|
+
const current = waiting;
|
|
638
|
+
waiting = undefined;
|
|
639
|
+
if (error)
|
|
640
|
+
current?.reject(error);
|
|
641
|
+
else
|
|
642
|
+
current?.resolve();
|
|
643
|
+
};
|
|
644
|
+
internals.handleAuth = (packet, callback) => {
|
|
645
|
+
// Reason 0: the node accepted the token. It never asks to continue.
|
|
646
|
+
if (packet.reasonCode === 0)
|
|
647
|
+
settle();
|
|
648
|
+
handleAuth.call(client, packet, callback);
|
|
649
|
+
};
|
|
650
|
+
client.on("close", () => {
|
|
651
|
+
settle(new Error("the connection closed during the token renewal"));
|
|
652
|
+
});
|
|
653
|
+
internals.reauthenticate = (token) => new Promise((resolve, reject) => {
|
|
654
|
+
if (waiting !== undefined) {
|
|
655
|
+
reject(new Error("a token renewal is already under way"));
|
|
656
|
+
return;
|
|
657
|
+
}
|
|
658
|
+
waiting = { resolve, reject };
|
|
659
|
+
send.call(client, {
|
|
660
|
+
cmd: "auth",
|
|
661
|
+
reasonCode: 0x19,
|
|
662
|
+
properties: { authenticationMethod: REAUTH_METHOD, authenticationData: token },
|
|
663
|
+
}, (error) => {
|
|
664
|
+
if (error)
|
|
665
|
+
settle(error);
|
|
666
|
+
});
|
|
667
|
+
});
|
|
668
|
+
return client;
|
|
497
669
|
}
|
|
498
670
|
/** `sub` and `exp` from a JWT, without checking it — the node does that. */
|
|
499
671
|
function readClaims(token) {
|
package/dist/live.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.js","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"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"}
|