@jr200-labs/xstate-nats 0.9.10 → 0.9.11
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 +24 -0
- package/dist/machines/root.d.ts +5 -1
- package/dist/machines/root.d.ts.map +1 -1
- package/dist/machines/root.js +109 -19
- package/dist/machines/root.js.map +1 -1
- package/package.json +1 -1
- package/src/machines/root.test.ts +170 -0
- package/src/machines/root.ts +123 -19
package/README.md
CHANGED
|
@@ -233,6 +233,7 @@ and request/reply replier.
|
|
|
233
233
|
| `xstate.nats.publish` | `SUBJECT.PUBLISH` | `subject`, `payload.bytes` |
|
|
234
234
|
| `xstate.nats.request` | `SUBJECT.REQUEST` | `subject`, `payload.bytes`, `timeout.ms` |
|
|
235
235
|
| `xstate.nats.reconnect` | NATS status loop | `reconnect.type` |
|
|
236
|
+
| `xstate.nats.lifecycle` | root machine | `xstate.state`, `xstate.event` |
|
|
236
237
|
| `xstate.nats.kv.watch` | `KV.SUBSCRIBE` | `bucket`, `key` |
|
|
237
238
|
| `xstate.nats.kv.entry` | per KV watch entry | `bucket`, `key`, `operation` |
|
|
238
239
|
|
|
@@ -240,6 +241,29 @@ All error paths record exceptions on the active span, set span status to
|
|
|
240
241
|
`ERROR`, and emit a named event (`xstate.nats.error` / `xstate.nats.kv.error`)
|
|
241
242
|
with a truncated stack.
|
|
242
243
|
|
|
244
|
+
### Lifecycle diagnostics
|
|
245
|
+
|
|
246
|
+
Root machine lifecycle diagnostics are opt-in and separate from raw NATS
|
|
247
|
+
protocol frame logging. Enable them on the connection config:
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
send({
|
|
251
|
+
type: 'CONFIGURE',
|
|
252
|
+
config: {
|
|
253
|
+
opts: { servers: ['wss://example-nats'] },
|
|
254
|
+
diagnostics: { lifecycle: true },
|
|
255
|
+
maxRetries: 3,
|
|
256
|
+
},
|
|
257
|
+
})
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
When enabled, the root machine emits sanitized `xstate.nats.lifecycle` spans and
|
|
261
|
+
`console.debug('xstate-nats lifecycle', attributes)` breadcrumbs for configure,
|
|
262
|
+
connect, close, manager initialization, and NATS status events. Diagnostics
|
|
263
|
+
include state, event type, server URLs, debug/verbose flags, retry count, auth
|
|
264
|
+
type, and manager readiness flags. They do not include credentials, JWTs, nkeys,
|
|
265
|
+
signatures, passwords, tokens, or raw protocol frames.
|
|
266
|
+
|
|
243
267
|
### Enabling tracing
|
|
244
268
|
|
|
245
269
|
`@opentelemetry/api` is a peer dependency — the consumer controls the installed
|
package/dist/machines/root.d.ts
CHANGED
|
@@ -2,10 +2,14 @@ import { ConnectionOptions, NatsConnection } from '@nats-io/nats-core';
|
|
|
2
2
|
import { ExternalEvents as KvExternalEvents } from './kv';
|
|
3
3
|
import { ExternalEvents as SubjectExternalEvents } from './subject';
|
|
4
4
|
import { type AuthConfig } from '../actions/types';
|
|
5
|
+
export interface NatsDiagnosticsConfig {
|
|
6
|
+
lifecycle?: boolean;
|
|
7
|
+
}
|
|
5
8
|
export interface NatsConnectionConfig {
|
|
6
9
|
opts: ConnectionOptions;
|
|
7
10
|
auth?: AuthConfig;
|
|
8
11
|
maxRetries: number;
|
|
12
|
+
diagnostics?: NatsDiagnosticsConfig;
|
|
9
13
|
}
|
|
10
14
|
export interface Context {
|
|
11
15
|
connection: NatsConnection | null;
|
|
@@ -518,7 +522,7 @@ export declare const natsMachine: import("xstate").StateMachine<Context, {
|
|
|
518
522
|
} | {
|
|
519
523
|
type: "shouldConfigureAfterClose";
|
|
520
524
|
params: unknown;
|
|
521
|
-
}, never, "error" | "not_configured" | "configured" | "connecting" | "initialise_managers" | "
|
|
525
|
+
}, never, "error" | "not_configured" | "configured" | "connecting" | "initialise_managers" | "closing" | "connected" | "closed", string, import("xstate").NonReducibleUnknown, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
|
|
522
526
|
states: {
|
|
523
527
|
readonly not_configured: {};
|
|
524
528
|
readonly configured: {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/machines/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEtE,OAAO,EAAkB,cAAc,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAA;AACzE,OAAO,EAAuB,cAAc,IAAI,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAExF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/machines/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEtE,OAAO,EAAkB,cAAc,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAA;AACzE,OAAO,EAAuB,cAAc,IAAI,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAExF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAIlD,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,iBAAiB,CAAA;IACvB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,qBAAqB,CAAA;CACpC;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,CAAC,EAAE,oBAAoB,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,mBAAmB,EAAE,OAAO,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;IACvB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAYD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB,qBAAqB,GACrB,gBAAgB,CAAA;AAkDpB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAhEZ,WAAW;gBAAc,cAAc;;UACvC,cAAc;;UACd,MAAM;WAAS,KAAK;;UACpB,WAAW;;UACX,OAAO;;UAKP,WAAW;YAAU,oBAAoB;;UACzC,SAAS;;UACT,YAAY;;UACZ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6bjB,CAAA"}
|
package/dist/machines/root.js
CHANGED
|
@@ -2,6 +2,44 @@ import { assign, sendTo, setup } from 'xstate';
|
|
|
2
2
|
import { kvManagerLogic } from './kv';
|
|
3
3
|
import { subjectManagerLogic } from './subject';
|
|
4
4
|
import { connectToNats, disconnectNats } from '../actions/connection';
|
|
5
|
+
import { withSpan } from '../telemetry';
|
|
6
|
+
function lifecycleDiagnosticsEnabled(context) {
|
|
7
|
+
return Boolean(context.natsConfig?.diagnostics?.lifecycle);
|
|
8
|
+
}
|
|
9
|
+
function serverUrls(config) {
|
|
10
|
+
const servers = config?.opts.servers;
|
|
11
|
+
return Array.isArray(servers) ? servers.join(',') : servers;
|
|
12
|
+
}
|
|
13
|
+
function lifecycleAttributes(context, event, state) {
|
|
14
|
+
return {
|
|
15
|
+
'xstate.state': state,
|
|
16
|
+
'xstate.event': event.type,
|
|
17
|
+
'nats.server.urls': serverUrls(context.natsConfig),
|
|
18
|
+
'nats.debug': Boolean(context.natsConfig?.opts.debug),
|
|
19
|
+
'nats.verbose': Boolean(context.natsConfig?.opts.verbose),
|
|
20
|
+
'nats.max_retries': context.natsConfig?.maxRetries,
|
|
21
|
+
'nats.auth.type': context.natsConfig?.auth?.type,
|
|
22
|
+
'nats.has_connection': context.connection !== null,
|
|
23
|
+
'nats.subject_manager_ready': context.subjectManagerReady,
|
|
24
|
+
'nats.kv_manager_ready': context.kvManagerReady,
|
|
25
|
+
'nats.configure_after_close': context.configureAfterClose,
|
|
26
|
+
'nats.connect_after_close': context.connectAfterClose,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function recordLifecycle(context, event, state) {
|
|
30
|
+
if (!lifecycleDiagnosticsEnabled(context))
|
|
31
|
+
return;
|
|
32
|
+
const attributes = lifecycleAttributes(context, event, state);
|
|
33
|
+
console.debug('xstate-nats lifecycle', attributes);
|
|
34
|
+
withSpan('xstate.nats.lifecycle', 'xstate.nats.error', attributes, (span) => {
|
|
35
|
+
span.addEvent(`xstate.nats.${state}.${event.type}`, attributes);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function lifecycleAction(state) {
|
|
39
|
+
return ({ context, event }) => {
|
|
40
|
+
recordLifecycle(context, event, state);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
5
43
|
export const natsMachine = setup({
|
|
6
44
|
types: {
|
|
7
45
|
context: {},
|
|
@@ -95,6 +133,7 @@ export const natsMachine = setup({
|
|
|
95
133
|
'NATS_CONNECTION.*': {
|
|
96
134
|
actions: [
|
|
97
135
|
({ context, event }) => {
|
|
136
|
+
recordLifecycle(context, event, 'status');
|
|
98
137
|
if (context.natsConfig?.opts.debug) {
|
|
99
138
|
console.log('root received NATS status event', event);
|
|
100
139
|
}
|
|
@@ -122,10 +161,11 @@ export const natsMachine = setup({
|
|
|
122
161
|
entry: ['clearDeferredCloseActions'],
|
|
123
162
|
on: {
|
|
124
163
|
CONFIGURE: {
|
|
125
|
-
actions: ['configureNats'],
|
|
164
|
+
actions: ['configureNats', lifecycleAction('configured')],
|
|
126
165
|
},
|
|
127
166
|
CONNECT: {
|
|
128
167
|
target: 'connecting',
|
|
168
|
+
actions: lifecycleAction('configured'),
|
|
129
169
|
},
|
|
130
170
|
RESET: {
|
|
131
171
|
target: 'not_configured',
|
|
@@ -141,7 +181,17 @@ export const natsMachine = setup({
|
|
|
141
181
|
},
|
|
142
182
|
},
|
|
143
183
|
connecting: {
|
|
144
|
-
entry: ['clearDeferredCloseActions'],
|
|
184
|
+
entry: ['clearDeferredCloseActions', lifecycleAction('connecting')],
|
|
185
|
+
on: {
|
|
186
|
+
CONFIGURE: {
|
|
187
|
+
target: 'connecting',
|
|
188
|
+
reenter: true,
|
|
189
|
+
actions: ['configureNats', lifecycleAction('connecting')],
|
|
190
|
+
},
|
|
191
|
+
CONNECT: {
|
|
192
|
+
actions: lifecycleAction('connecting'),
|
|
193
|
+
},
|
|
194
|
+
},
|
|
145
195
|
invoke: [
|
|
146
196
|
{
|
|
147
197
|
src: 'connectToNats',
|
|
@@ -152,6 +202,7 @@ export const natsMachine = setup({
|
|
|
152
202
|
onDone: {
|
|
153
203
|
target: 'initialise_managers',
|
|
154
204
|
actions: [
|
|
205
|
+
lifecycleAction('connecting'),
|
|
155
206
|
assign({
|
|
156
207
|
connection: ({ event }) => event.output,
|
|
157
208
|
retries: (_) => 0,
|
|
@@ -160,16 +211,20 @@ export const natsMachine = setup({
|
|
|
160
211
|
},
|
|
161
212
|
onError: {
|
|
162
213
|
target: 'error',
|
|
163
|
-
actions:
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
214
|
+
actions: [
|
|
215
|
+
lifecycleAction('connecting'),
|
|
216
|
+
assign({
|
|
217
|
+
error: ({ event }) => event.error,
|
|
218
|
+
retries: ({ context }) => context.retries + 1,
|
|
219
|
+
}),
|
|
220
|
+
],
|
|
167
221
|
},
|
|
168
222
|
},
|
|
169
223
|
],
|
|
170
224
|
},
|
|
171
225
|
initialise_managers: {
|
|
172
226
|
entry: [
|
|
227
|
+
lifecycleAction('initialise_managers'),
|
|
173
228
|
sendTo('subject', ({ context }) => ({
|
|
174
229
|
type: 'SUBJECT.CONNECT',
|
|
175
230
|
connection: context.connection,
|
|
@@ -177,11 +232,36 @@ export const natsMachine = setup({
|
|
|
177
232
|
sendTo('kv', ({ context }) => ({ type: 'KV.CONNECT', connection: context.connection })),
|
|
178
233
|
],
|
|
179
234
|
on: {
|
|
235
|
+
CONFIGURE: {
|
|
236
|
+
target: 'closing',
|
|
237
|
+
actions: [
|
|
238
|
+
'configureNatsAfterClose',
|
|
239
|
+
'reconnectAfterClose',
|
|
240
|
+
lifecycleAction('initialise_managers'),
|
|
241
|
+
],
|
|
242
|
+
},
|
|
243
|
+
CONNECT: {
|
|
244
|
+
actions: lifecycleAction('initialise_managers'),
|
|
245
|
+
},
|
|
246
|
+
DISCONNECT: {
|
|
247
|
+
target: 'closing',
|
|
248
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('initialise_managers')],
|
|
249
|
+
},
|
|
250
|
+
CLOSE: {
|
|
251
|
+
target: 'closing',
|
|
252
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('initialise_managers')],
|
|
253
|
+
},
|
|
180
254
|
'SUBJECT.CONNECTED': {
|
|
181
|
-
actions: [
|
|
255
|
+
actions: [
|
|
256
|
+
assign({ subjectManagerReady: (_) => true }),
|
|
257
|
+
lifecycleAction('initialise_managers'),
|
|
258
|
+
],
|
|
182
259
|
},
|
|
183
260
|
'KV.CONNECTED': {
|
|
184
|
-
actions: [
|
|
261
|
+
actions: [
|
|
262
|
+
assign({ kvManagerReady: (_) => true }),
|
|
263
|
+
lifecycleAction('initialise_managers'),
|
|
264
|
+
],
|
|
185
265
|
},
|
|
186
266
|
},
|
|
187
267
|
always: [
|
|
@@ -194,6 +274,7 @@ export const natsMachine = setup({
|
|
|
194
274
|
connected: {
|
|
195
275
|
entry: [
|
|
196
276
|
'clearDeferredCloseActions',
|
|
277
|
+
lifecycleAction('connected'),
|
|
197
278
|
(event) => {
|
|
198
279
|
if (event.context.natsConfig?.opts.debug) {
|
|
199
280
|
console.log('CONNECTED', event.context.connection?.getServer());
|
|
@@ -203,15 +284,15 @@ export const natsMachine = setup({
|
|
|
203
284
|
on: {
|
|
204
285
|
CONFIGURE: {
|
|
205
286
|
target: 'closing',
|
|
206
|
-
actions: ['configureNatsAfterClose', 'reconnectAfterClose'],
|
|
287
|
+
actions: ['configureNatsAfterClose', 'reconnectAfterClose', lifecycleAction('connected')],
|
|
207
288
|
},
|
|
208
289
|
DISCONNECT: {
|
|
209
290
|
target: 'closing',
|
|
210
|
-
actions: ['clearDeferredCloseActions'],
|
|
291
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('connected')],
|
|
211
292
|
},
|
|
212
293
|
CLOSE: {
|
|
213
294
|
target: 'closing',
|
|
214
|
-
actions: ['clearDeferredCloseActions'],
|
|
295
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('connected')],
|
|
215
296
|
},
|
|
216
297
|
'SUBJECT.*': {
|
|
217
298
|
actions: [
|
|
@@ -253,6 +334,7 @@ export const natsMachine = setup({
|
|
|
253
334
|
console.log('CLOSING', event.context.connection?.getServer());
|
|
254
335
|
}
|
|
255
336
|
},
|
|
337
|
+
lifecycleAction('closing'),
|
|
256
338
|
sendTo('subject', { type: 'SUBJECT.DISCONNECTED' }),
|
|
257
339
|
sendTo('kv', { type: 'KV.DISCONNECTED' }),
|
|
258
340
|
],
|
|
@@ -263,33 +345,40 @@ export const natsMachine = setup({
|
|
|
263
345
|
{
|
|
264
346
|
guard: 'shouldConnectAfterClose',
|
|
265
347
|
target: 'connecting',
|
|
348
|
+
actions: lifecycleAction('closing'),
|
|
266
349
|
},
|
|
267
350
|
{
|
|
268
351
|
guard: 'shouldConfigureAfterClose',
|
|
269
352
|
target: 'configured',
|
|
353
|
+
actions: lifecycleAction('closing'),
|
|
270
354
|
},
|
|
271
355
|
{
|
|
272
356
|
target: 'closed',
|
|
357
|
+
actions: lifecycleAction('closing'),
|
|
273
358
|
},
|
|
274
359
|
],
|
|
275
360
|
onError: {
|
|
276
361
|
target: 'error',
|
|
277
|
-
actions:
|
|
278
|
-
|
|
279
|
-
|
|
362
|
+
actions: [
|
|
363
|
+
lifecycleAction('closing'),
|
|
364
|
+
assign({
|
|
365
|
+
error: ({ event }) => event.error,
|
|
366
|
+
}),
|
|
367
|
+
],
|
|
280
368
|
},
|
|
281
369
|
},
|
|
282
370
|
on: {
|
|
283
371
|
CONFIGURE: {
|
|
284
|
-
actions: ['configureNatsAfterClose'],
|
|
372
|
+
actions: ['configureNatsAfterClose', lifecycleAction('closing')],
|
|
285
373
|
},
|
|
286
374
|
CONNECT: {
|
|
287
|
-
actions: ['reconnectAfterClose'],
|
|
375
|
+
actions: ['reconnectAfterClose', lifecycleAction('closing')],
|
|
288
376
|
},
|
|
289
377
|
},
|
|
290
378
|
},
|
|
291
379
|
closed: {
|
|
292
380
|
entry: [
|
|
381
|
+
lifecycleAction('closed'),
|
|
293
382
|
assign({
|
|
294
383
|
connection: (_) => null,
|
|
295
384
|
subjectManagerReady: (_) => false,
|
|
@@ -301,7 +390,7 @@ export const natsMachine = setup({
|
|
|
301
390
|
on: {
|
|
302
391
|
CONFIGURE: {
|
|
303
392
|
target: 'configured',
|
|
304
|
-
actions: ['configureNats'],
|
|
393
|
+
actions: ['configureNats', lifecycleAction('closed')],
|
|
305
394
|
},
|
|
306
395
|
RESET: {
|
|
307
396
|
target: 'not_configured',
|
|
@@ -309,6 +398,7 @@ export const natsMachine = setup({
|
|
|
309
398
|
},
|
|
310
399
|
CONNECT: {
|
|
311
400
|
target: 'connecting',
|
|
401
|
+
actions: lifecycleAction('closed'),
|
|
312
402
|
},
|
|
313
403
|
},
|
|
314
404
|
'*': {
|
|
@@ -320,11 +410,11 @@ export const natsMachine = setup({
|
|
|
320
410
|
},
|
|
321
411
|
},
|
|
322
412
|
error: {
|
|
323
|
-
entry: ['clearDeferredCloseActions'],
|
|
413
|
+
entry: ['clearDeferredCloseActions', lifecycleAction('error')],
|
|
324
414
|
on: {
|
|
325
415
|
CONFIGURE: {
|
|
326
416
|
target: 'configured',
|
|
327
|
-
actions: ['configureNats'],
|
|
417
|
+
actions: ['configureNats', lifecycleAction('error')],
|
|
328
418
|
},
|
|
329
419
|
RESET: {
|
|
330
420
|
target: 'not_configured',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/machines/root.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/machines/root.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -53,6 +53,40 @@ const mockKvMachine = createMachine({
|
|
|
53
53
|
},
|
|
54
54
|
})
|
|
55
55
|
|
|
56
|
+
const slowSubjectMachine = createMachine({
|
|
57
|
+
initial: 'idle',
|
|
58
|
+
states: {
|
|
59
|
+
idle: {
|
|
60
|
+
on: {
|
|
61
|
+
'SUBJECT.CONNECT': { target: 'connected' },
|
|
62
|
+
'SUBJECT.DISCONNECTED': { target: 'idle' },
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
connected: {
|
|
66
|
+
on: {
|
|
67
|
+
'SUBJECT.DISCONNECTED': { target: 'idle' },
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
const slowKvMachine = createMachine({
|
|
74
|
+
initial: 'idle',
|
|
75
|
+
states: {
|
|
76
|
+
idle: {
|
|
77
|
+
on: {
|
|
78
|
+
'KV.CONNECT': { target: 'connected' },
|
|
79
|
+
'KV.DISCONNECTED': { target: 'idle' },
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
connected: {
|
|
83
|
+
on: {
|
|
84
|
+
'KV.DISCONNECTED': { target: 'idle' },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
})
|
|
89
|
+
|
|
56
90
|
const mockConnection = {
|
|
57
91
|
drain: vi.fn().mockResolvedValue(undefined),
|
|
58
92
|
close: vi.fn().mockResolvedValue(undefined),
|
|
@@ -445,6 +479,142 @@ describe('natsMachine', () => {
|
|
|
445
479
|
actor.stop()
|
|
446
480
|
})
|
|
447
481
|
|
|
482
|
+
it('should emit sanitized lifecycle diagnostics when enabled', async () => {
|
|
483
|
+
const debugSpy = vi.spyOn(console, 'debug').mockImplementation(() => {})
|
|
484
|
+
const actor = createActor(createTestMachine())
|
|
485
|
+
actor.start()
|
|
486
|
+
|
|
487
|
+
actor.send({
|
|
488
|
+
type: 'CONFIGURE',
|
|
489
|
+
config: {
|
|
490
|
+
opts: { debug: false, servers: ['ws://localhost:4222'], verbose: false },
|
|
491
|
+
auth: { type: 'token', token: 'secret-token' },
|
|
492
|
+
diagnostics: { lifecycle: true },
|
|
493
|
+
maxRetries: 3,
|
|
494
|
+
},
|
|
495
|
+
})
|
|
496
|
+
actor.send({ type: 'CONNECT' })
|
|
497
|
+
|
|
498
|
+
await vi.waitFor(() => {
|
|
499
|
+
expect(actor.getSnapshot().value).toBe('connected')
|
|
500
|
+
})
|
|
501
|
+
|
|
502
|
+
expect(debugSpy).toHaveBeenCalled()
|
|
503
|
+
const lifecycleCalls = debugSpy.mock.calls.filter(
|
|
504
|
+
([message]) => message === 'xstate-nats lifecycle',
|
|
505
|
+
)
|
|
506
|
+
expect(lifecycleCalls.length).toBeGreaterThan(0)
|
|
507
|
+
expect(lifecycleCalls[0][1]).toMatchObject({
|
|
508
|
+
'nats.auth.type': 'token',
|
|
509
|
+
'nats.debug': false,
|
|
510
|
+
'nats.verbose': false,
|
|
511
|
+
'nats.max_retries': 3,
|
|
512
|
+
'nats.server.urls': 'ws://localhost:4222',
|
|
513
|
+
})
|
|
514
|
+
expect(JSON.stringify(lifecycleCalls)).not.toContain('secret-token')
|
|
515
|
+
actor.stop()
|
|
516
|
+
debugSpy.mockRestore()
|
|
517
|
+
})
|
|
518
|
+
|
|
519
|
+
it('should restart an in-flight connection when reconfigured while connecting', async () => {
|
|
520
|
+
const firstConnection = createDeferred<any>()
|
|
521
|
+
const secondConnection = createDeferred<any>()
|
|
522
|
+
const connectInputs: any[] = []
|
|
523
|
+
const machine = natsMachine.provide({
|
|
524
|
+
actors: {
|
|
525
|
+
connectToNats: fromPromise(async ({ input }) => {
|
|
526
|
+
connectInputs.push(input)
|
|
527
|
+
return connectInputs.length === 1 ? firstConnection.promise : secondConnection.promise
|
|
528
|
+
}),
|
|
529
|
+
disconnectNats: fromPromise(async () => {}),
|
|
530
|
+
subject: mockSubjectMachine,
|
|
531
|
+
kv: mockKvMachine,
|
|
532
|
+
},
|
|
533
|
+
})
|
|
534
|
+
const actor = createActor(machine)
|
|
535
|
+
actor.start()
|
|
536
|
+
|
|
537
|
+
actor.send({
|
|
538
|
+
type: 'CONFIGURE',
|
|
539
|
+
config: { opts: { debug: false, servers: ['ws://localhost:4222'] }, maxRetries: 3 },
|
|
540
|
+
})
|
|
541
|
+
actor.send({ type: 'CONNECT' })
|
|
542
|
+
await vi.waitFor(() => {
|
|
543
|
+
expect(actor.getSnapshot().value).toBe('connecting')
|
|
544
|
+
})
|
|
545
|
+
|
|
546
|
+
actor.send({
|
|
547
|
+
type: 'CONFIGURE',
|
|
548
|
+
config: { opts: { debug: true, servers: ['ws://localhost:4227'] }, maxRetries: 2 },
|
|
549
|
+
})
|
|
550
|
+
actor.send({ type: 'CONNECT' })
|
|
551
|
+
await vi.waitFor(() => {
|
|
552
|
+
expect(connectInputs).toHaveLength(2)
|
|
553
|
+
})
|
|
554
|
+
|
|
555
|
+
firstConnection.resolve(mockConnection)
|
|
556
|
+
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
557
|
+
expect(actor.getSnapshot().value).toBe('connecting')
|
|
558
|
+
|
|
559
|
+
secondConnection.resolve(mockConnection)
|
|
560
|
+
await vi.waitFor(() => {
|
|
561
|
+
expect(actor.getSnapshot().value).toBe('connected')
|
|
562
|
+
})
|
|
563
|
+
expect(connectInputs[1].opts).toEqual({ debug: true, servers: ['ws://localhost:4227'] })
|
|
564
|
+
expect(actor.getSnapshot().context.natsConfig).toEqual({
|
|
565
|
+
opts: { debug: true, servers: ['ws://localhost:4227'] },
|
|
566
|
+
maxRetries: 2,
|
|
567
|
+
})
|
|
568
|
+
actor.stop()
|
|
569
|
+
})
|
|
570
|
+
|
|
571
|
+
it('should reconnect with the latest config when reconfigured while managers initialise', async () => {
|
|
572
|
+
const connectInputs: any[] = []
|
|
573
|
+
const disconnects: any[] = []
|
|
574
|
+
const machine = natsMachine.provide({
|
|
575
|
+
actors: {
|
|
576
|
+
connectToNats: fromPromise(async ({ input }) => {
|
|
577
|
+
connectInputs.push(input)
|
|
578
|
+
return mockConnection
|
|
579
|
+
}),
|
|
580
|
+
disconnectNats: fromPromise(async ({ input }: { input: any }) => {
|
|
581
|
+
disconnects.push(input.connection)
|
|
582
|
+
}),
|
|
583
|
+
subject: slowSubjectMachine,
|
|
584
|
+
kv: slowKvMachine,
|
|
585
|
+
},
|
|
586
|
+
})
|
|
587
|
+
const actor = createActor(machine)
|
|
588
|
+
actor.start()
|
|
589
|
+
|
|
590
|
+
actor.send({
|
|
591
|
+
type: 'CONFIGURE',
|
|
592
|
+
config: { opts: { debug: false, servers: ['ws://localhost:4222'] }, maxRetries: 3 },
|
|
593
|
+
})
|
|
594
|
+
actor.send({ type: 'CONNECT' })
|
|
595
|
+
await vi.waitFor(() => {
|
|
596
|
+
expect(actor.getSnapshot().value).toBe('initialise_managers')
|
|
597
|
+
})
|
|
598
|
+
|
|
599
|
+
actor.send({
|
|
600
|
+
type: 'CONFIGURE',
|
|
601
|
+
config: { opts: { debug: true, servers: ['ws://localhost:4228'] }, maxRetries: 2 },
|
|
602
|
+
})
|
|
603
|
+
actor.send({ type: 'CONNECT' })
|
|
604
|
+
|
|
605
|
+
await vi.waitFor(() => {
|
|
606
|
+
expect(connectInputs).toHaveLength(2)
|
|
607
|
+
})
|
|
608
|
+
expect(disconnects).toEqual([mockConnection])
|
|
609
|
+
expect(actor.getSnapshot().value).toBe('initialise_managers')
|
|
610
|
+
expect(connectInputs[1].opts).toEqual({ debug: true, servers: ['ws://localhost:4228'] })
|
|
611
|
+
expect(actor.getSnapshot().context.natsConfig).toEqual({
|
|
612
|
+
opts: { debug: true, servers: ['ws://localhost:4228'] },
|
|
613
|
+
maxRetries: 2,
|
|
614
|
+
})
|
|
615
|
+
actor.stop()
|
|
616
|
+
})
|
|
617
|
+
|
|
448
618
|
it('should forward SUBJECT.* events when connected', async () => {
|
|
449
619
|
const actor = createActor(createTestMachine())
|
|
450
620
|
actor.start()
|
package/src/machines/root.ts
CHANGED
|
@@ -5,11 +5,17 @@ import { subjectManagerLogic, ExternalEvents as SubjectExternalEvents } from './
|
|
|
5
5
|
import { connectToNats, disconnectNats } from '../actions/connection'
|
|
6
6
|
import { type AuthConfig } from '../actions/types'
|
|
7
7
|
import { InternalStatusEvents as NatsStatusEvents } from '../actions/connection'
|
|
8
|
+
import { withSpan } from '../telemetry'
|
|
9
|
+
|
|
10
|
+
export interface NatsDiagnosticsConfig {
|
|
11
|
+
lifecycle?: boolean
|
|
12
|
+
}
|
|
8
13
|
|
|
9
14
|
export interface NatsConnectionConfig {
|
|
10
15
|
opts: ConnectionOptions
|
|
11
16
|
auth?: AuthConfig
|
|
12
17
|
maxRetries: number
|
|
18
|
+
diagnostics?: NatsDiagnosticsConfig
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
export interface Context {
|
|
@@ -43,6 +49,52 @@ export type ExternalEvents =
|
|
|
43
49
|
|
|
44
50
|
type Events = InternalEvents | ExternalEvents
|
|
45
51
|
|
|
52
|
+
function lifecycleDiagnosticsEnabled(context: Context): boolean {
|
|
53
|
+
return Boolean(context.natsConfig?.diagnostics?.lifecycle)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function serverUrls(config: NatsConnectionConfig | undefined): string | undefined {
|
|
57
|
+
const servers = config?.opts.servers
|
|
58
|
+
return Array.isArray(servers) ? servers.join(',') : servers
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function lifecycleAttributes(
|
|
62
|
+
context: Context,
|
|
63
|
+
event: { type: string },
|
|
64
|
+
state: string,
|
|
65
|
+
): Record<string, string | number | boolean | undefined> {
|
|
66
|
+
return {
|
|
67
|
+
'xstate.state': state,
|
|
68
|
+
'xstate.event': event.type,
|
|
69
|
+
'nats.server.urls': serverUrls(context.natsConfig),
|
|
70
|
+
'nats.debug': Boolean(context.natsConfig?.opts.debug),
|
|
71
|
+
'nats.verbose': Boolean(context.natsConfig?.opts.verbose),
|
|
72
|
+
'nats.max_retries': context.natsConfig?.maxRetries,
|
|
73
|
+
'nats.auth.type': context.natsConfig?.auth?.type,
|
|
74
|
+
'nats.has_connection': context.connection !== null,
|
|
75
|
+
'nats.subject_manager_ready': context.subjectManagerReady,
|
|
76
|
+
'nats.kv_manager_ready': context.kvManagerReady,
|
|
77
|
+
'nats.configure_after_close': context.configureAfterClose,
|
|
78
|
+
'nats.connect_after_close': context.connectAfterClose,
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function recordLifecycle(context: Context, event: { type: string }, state: string): void {
|
|
83
|
+
if (!lifecycleDiagnosticsEnabled(context)) return
|
|
84
|
+
|
|
85
|
+
const attributes = lifecycleAttributes(context, event, state)
|
|
86
|
+
console.debug('xstate-nats lifecycle', attributes)
|
|
87
|
+
withSpan('xstate.nats.lifecycle', 'xstate.nats.error', attributes, (span) => {
|
|
88
|
+
span.addEvent(`xstate.nats.${state}.${event.type}`, attributes)
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function lifecycleAction(state: string) {
|
|
93
|
+
return ({ context, event }: { context: Context; event: { type: string } }) => {
|
|
94
|
+
recordLifecycle(context, event, state)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
46
98
|
export const natsMachine = setup({
|
|
47
99
|
types: {
|
|
48
100
|
context: {} as Context,
|
|
@@ -136,6 +188,7 @@ export const natsMachine = setup({
|
|
|
136
188
|
'NATS_CONNECTION.*': {
|
|
137
189
|
actions: [
|
|
138
190
|
({ context, event }: { context: Context; event: any }) => {
|
|
191
|
+
recordLifecycle(context, event, 'status')
|
|
139
192
|
if (context.natsConfig?.opts.debug) {
|
|
140
193
|
console.log('root received NATS status event', event)
|
|
141
194
|
}
|
|
@@ -163,10 +216,11 @@ export const natsMachine = setup({
|
|
|
163
216
|
entry: ['clearDeferredCloseActions'],
|
|
164
217
|
on: {
|
|
165
218
|
CONFIGURE: {
|
|
166
|
-
actions: ['configureNats'],
|
|
219
|
+
actions: ['configureNats', lifecycleAction('configured')],
|
|
167
220
|
},
|
|
168
221
|
CONNECT: {
|
|
169
222
|
target: 'connecting',
|
|
223
|
+
actions: lifecycleAction('configured'),
|
|
170
224
|
},
|
|
171
225
|
RESET: {
|
|
172
226
|
target: 'not_configured',
|
|
@@ -182,7 +236,17 @@ export const natsMachine = setup({
|
|
|
182
236
|
},
|
|
183
237
|
},
|
|
184
238
|
connecting: {
|
|
185
|
-
entry: ['clearDeferredCloseActions'],
|
|
239
|
+
entry: ['clearDeferredCloseActions', lifecycleAction('connecting')],
|
|
240
|
+
on: {
|
|
241
|
+
CONFIGURE: {
|
|
242
|
+
target: 'connecting',
|
|
243
|
+
reenter: true,
|
|
244
|
+
actions: ['configureNats', lifecycleAction('connecting')],
|
|
245
|
+
},
|
|
246
|
+
CONNECT: {
|
|
247
|
+
actions: lifecycleAction('connecting'),
|
|
248
|
+
},
|
|
249
|
+
},
|
|
186
250
|
invoke: [
|
|
187
251
|
{
|
|
188
252
|
src: 'connectToNats',
|
|
@@ -193,6 +257,7 @@ export const natsMachine = setup({
|
|
|
193
257
|
onDone: {
|
|
194
258
|
target: 'initialise_managers',
|
|
195
259
|
actions: [
|
|
260
|
+
lifecycleAction('connecting'),
|
|
196
261
|
assign({
|
|
197
262
|
connection: ({ event }) => event.output,
|
|
198
263
|
retries: (_) => 0,
|
|
@@ -201,16 +266,20 @@ export const natsMachine = setup({
|
|
|
201
266
|
},
|
|
202
267
|
onError: {
|
|
203
268
|
target: 'error',
|
|
204
|
-
actions:
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
269
|
+
actions: [
|
|
270
|
+
lifecycleAction('connecting'),
|
|
271
|
+
assign({
|
|
272
|
+
error: ({ event }) => event.error as Error,
|
|
273
|
+
retries: ({ context }) => context.retries + 1,
|
|
274
|
+
}),
|
|
275
|
+
],
|
|
208
276
|
},
|
|
209
277
|
},
|
|
210
278
|
],
|
|
211
279
|
},
|
|
212
280
|
initialise_managers: {
|
|
213
281
|
entry: [
|
|
282
|
+
lifecycleAction('initialise_managers'),
|
|
214
283
|
sendTo('subject', ({ context }) => ({
|
|
215
284
|
type: 'SUBJECT.CONNECT',
|
|
216
285
|
connection: context.connection!,
|
|
@@ -218,11 +287,36 @@ export const natsMachine = setup({
|
|
|
218
287
|
sendTo('kv', ({ context }) => ({ type: 'KV.CONNECT', connection: context.connection! })),
|
|
219
288
|
],
|
|
220
289
|
on: {
|
|
290
|
+
CONFIGURE: {
|
|
291
|
+
target: 'closing',
|
|
292
|
+
actions: [
|
|
293
|
+
'configureNatsAfterClose',
|
|
294
|
+
'reconnectAfterClose',
|
|
295
|
+
lifecycleAction('initialise_managers'),
|
|
296
|
+
],
|
|
297
|
+
},
|
|
298
|
+
CONNECT: {
|
|
299
|
+
actions: lifecycleAction('initialise_managers'),
|
|
300
|
+
},
|
|
301
|
+
DISCONNECT: {
|
|
302
|
+
target: 'closing',
|
|
303
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('initialise_managers')],
|
|
304
|
+
},
|
|
305
|
+
CLOSE: {
|
|
306
|
+
target: 'closing',
|
|
307
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('initialise_managers')],
|
|
308
|
+
},
|
|
221
309
|
'SUBJECT.CONNECTED': {
|
|
222
|
-
actions: [
|
|
310
|
+
actions: [
|
|
311
|
+
assign({ subjectManagerReady: (_) => true }),
|
|
312
|
+
lifecycleAction('initialise_managers'),
|
|
313
|
+
],
|
|
223
314
|
},
|
|
224
315
|
'KV.CONNECTED': {
|
|
225
|
-
actions: [
|
|
316
|
+
actions: [
|
|
317
|
+
assign({ kvManagerReady: (_) => true }),
|
|
318
|
+
lifecycleAction('initialise_managers'),
|
|
319
|
+
],
|
|
226
320
|
},
|
|
227
321
|
},
|
|
228
322
|
always: [
|
|
@@ -235,6 +329,7 @@ export const natsMachine = setup({
|
|
|
235
329
|
connected: {
|
|
236
330
|
entry: [
|
|
237
331
|
'clearDeferredCloseActions',
|
|
332
|
+
lifecycleAction('connected'),
|
|
238
333
|
(event) => {
|
|
239
334
|
if (event.context.natsConfig?.opts.debug) {
|
|
240
335
|
console.log('CONNECTED', event.context.connection?.getServer())
|
|
@@ -244,15 +339,15 @@ export const natsMachine = setup({
|
|
|
244
339
|
on: {
|
|
245
340
|
CONFIGURE: {
|
|
246
341
|
target: 'closing',
|
|
247
|
-
actions: ['configureNatsAfterClose', 'reconnectAfterClose'],
|
|
342
|
+
actions: ['configureNatsAfterClose', 'reconnectAfterClose', lifecycleAction('connected')],
|
|
248
343
|
},
|
|
249
344
|
DISCONNECT: {
|
|
250
345
|
target: 'closing',
|
|
251
|
-
actions: ['clearDeferredCloseActions'],
|
|
346
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('connected')],
|
|
252
347
|
},
|
|
253
348
|
CLOSE: {
|
|
254
349
|
target: 'closing',
|
|
255
|
-
actions: ['clearDeferredCloseActions'],
|
|
350
|
+
actions: ['clearDeferredCloseActions', lifecycleAction('connected')],
|
|
256
351
|
},
|
|
257
352
|
'SUBJECT.*': {
|
|
258
353
|
actions: [
|
|
@@ -297,6 +392,7 @@ export const natsMachine = setup({
|
|
|
297
392
|
console.log('CLOSING', event.context.connection?.getServer())
|
|
298
393
|
}
|
|
299
394
|
},
|
|
395
|
+
lifecycleAction('closing'),
|
|
300
396
|
sendTo('subject', { type: 'SUBJECT.DISCONNECTED' }),
|
|
301
397
|
sendTo('kv', { type: 'KV.DISCONNECTED' }),
|
|
302
398
|
],
|
|
@@ -307,33 +403,40 @@ export const natsMachine = setup({
|
|
|
307
403
|
{
|
|
308
404
|
guard: 'shouldConnectAfterClose',
|
|
309
405
|
target: 'connecting',
|
|
406
|
+
actions: lifecycleAction('closing'),
|
|
310
407
|
},
|
|
311
408
|
{
|
|
312
409
|
guard: 'shouldConfigureAfterClose',
|
|
313
410
|
target: 'configured',
|
|
411
|
+
actions: lifecycleAction('closing'),
|
|
314
412
|
},
|
|
315
413
|
{
|
|
316
414
|
target: 'closed',
|
|
415
|
+
actions: lifecycleAction('closing'),
|
|
317
416
|
},
|
|
318
417
|
],
|
|
319
418
|
onError: {
|
|
320
419
|
target: 'error',
|
|
321
|
-
actions:
|
|
322
|
-
|
|
323
|
-
|
|
420
|
+
actions: [
|
|
421
|
+
lifecycleAction('closing'),
|
|
422
|
+
assign({
|
|
423
|
+
error: ({ event }) => event.error as Error,
|
|
424
|
+
}),
|
|
425
|
+
],
|
|
324
426
|
},
|
|
325
427
|
},
|
|
326
428
|
on: {
|
|
327
429
|
CONFIGURE: {
|
|
328
|
-
actions: ['configureNatsAfterClose'],
|
|
430
|
+
actions: ['configureNatsAfterClose', lifecycleAction('closing')],
|
|
329
431
|
},
|
|
330
432
|
CONNECT: {
|
|
331
|
-
actions: ['reconnectAfterClose'],
|
|
433
|
+
actions: ['reconnectAfterClose', lifecycleAction('closing')],
|
|
332
434
|
},
|
|
333
435
|
},
|
|
334
436
|
},
|
|
335
437
|
closed: {
|
|
336
438
|
entry: [
|
|
439
|
+
lifecycleAction('closed'),
|
|
337
440
|
assign({
|
|
338
441
|
connection: (_) => null,
|
|
339
442
|
subjectManagerReady: (_) => false,
|
|
@@ -345,7 +448,7 @@ export const natsMachine = setup({
|
|
|
345
448
|
on: {
|
|
346
449
|
CONFIGURE: {
|
|
347
450
|
target: 'configured',
|
|
348
|
-
actions: ['configureNats'],
|
|
451
|
+
actions: ['configureNats', lifecycleAction('closed')],
|
|
349
452
|
},
|
|
350
453
|
RESET: {
|
|
351
454
|
target: 'not_configured',
|
|
@@ -353,6 +456,7 @@ export const natsMachine = setup({
|
|
|
353
456
|
},
|
|
354
457
|
CONNECT: {
|
|
355
458
|
target: 'connecting',
|
|
459
|
+
actions: lifecycleAction('closed'),
|
|
356
460
|
},
|
|
357
461
|
},
|
|
358
462
|
'*': {
|
|
@@ -364,11 +468,11 @@ export const natsMachine = setup({
|
|
|
364
468
|
},
|
|
365
469
|
},
|
|
366
470
|
error: {
|
|
367
|
-
entry: ['clearDeferredCloseActions'],
|
|
471
|
+
entry: ['clearDeferredCloseActions', lifecycleAction('error')],
|
|
368
472
|
on: {
|
|
369
473
|
CONFIGURE: {
|
|
370
474
|
target: 'configured',
|
|
371
|
-
actions: ['configureNats'],
|
|
475
|
+
actions: ['configureNats', lifecycleAction('error')],
|
|
372
476
|
},
|
|
373
477
|
RESET: {
|
|
374
478
|
target: 'not_configured',
|