@jr200-labs/xstate-nats 0.9.21 → 0.9.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +75 -10
  2. package/dist/actions/connection.d.ts +2 -0
  3. package/dist/actions/connection.d.ts.map +1 -1
  4. package/dist/actions/connection.js +20 -9
  5. package/dist/actions/connection.js.map +1 -1
  6. package/dist/actions/subject.d.ts +5 -1
  7. package/dist/actions/subject.d.ts.map +1 -1
  8. package/dist/actions/subject.js +60 -16
  9. package/dist/actions/subject.js.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/machines/credentials.d.ts +112 -0
  15. package/dist/machines/credentials.d.ts.map +1 -0
  16. package/dist/machines/credentials.js +252 -0
  17. package/dist/machines/credentials.js.map +1 -0
  18. package/dist/machines/root.d.ts +190 -3
  19. package/dist/machines/root.d.ts.map +1 -1
  20. package/dist/machines/root.js +107 -13
  21. package/dist/machines/root.js.map +1 -1
  22. package/dist/machines/subject.d.ts +7 -2
  23. package/dist/machines/subject.d.ts.map +1 -1
  24. package/dist/machines/subject.js +11 -1
  25. package/dist/machines/subject.js.map +1 -1
  26. package/dist/telemetry.d.ts +2 -0
  27. package/dist/telemetry.d.ts.map +1 -1
  28. package/dist/telemetry.js +18 -1
  29. package/dist/telemetry.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/actions/connection.test.ts +62 -7
  32. package/src/actions/connection.ts +28 -8
  33. package/src/actions/subject.test.ts +120 -0
  34. package/src/actions/subject.ts +79 -19
  35. package/src/index.ts +9 -0
  36. package/src/machines/credentials.telemetry.test.ts +66 -0
  37. package/src/machines/credentials.test.ts +175 -0
  38. package/src/machines/credentials.ts +320 -0
  39. package/src/machines/root.test.ts +88 -1
  40. package/src/machines/root.ts +115 -13
  41. package/src/machines/subject.test.ts +60 -0
  42. package/src/machines/subject.ts +18 -1
  43. package/src/telemetry.ts +35 -1
package/README.md CHANGED
@@ -88,6 +88,49 @@ send({
88
88
  })
89
89
  ```
90
90
 
91
+ For short-lived authentication, configure the built-in credential actor. The adapter is
92
+ product-neutral: an application can obtain credentials from OIDC, a service account, or another
93
+ source without teaching `xstate-nats` about that provider:
94
+
95
+ ```typescript
96
+ credentials: {
97
+ refreshBeforeExpiryMs: 60_000,
98
+ diagnostics: true,
99
+ adapter: {
100
+ load: () => loadSessionCredentials(),
101
+ refresh: (current) => refreshSessionCredentials(current),
102
+ },
103
+ }
104
+ ```
105
+
106
+ Both adapter methods return a `NatsCredentials` value:
107
+
108
+ ```typescript
109
+ const requestHeaders = headers()
110
+ requestHeaders.set('authorization', `Bearer ${accessToken}`)
111
+
112
+ return {
113
+ auth: {
114
+ type: 'decentralised',
115
+ sentinelB64,
116
+ user: userId,
117
+ pass: idToken,
118
+ },
119
+ requestHeaders,
120
+ expiresAt: tokenExpiryEpochMs,
121
+ }
122
+ ```
123
+
124
+ The credential actor loads once, shares concurrent callers, refreshes before expiry, and bounds
125
+ each adapter operation (30 seconds by default). `CONNECT` waits for ready credentials. Every
126
+ `SUBJECT.REQUEST` then obtains current headers immediately before sending; header preparation and
127
+ the NATS round trip share the request's `opts.timeout`. NATS reconnect authentication reads the
128
+ actor's current cached connection credential synchronously, as required by the NATS authenticator.
129
+
130
+ If loading or refresh fails, or unrefreshable credentials expire, requests fail closed and an
131
+ active NATS connection is closed. After the application has repaired its login/session, send
132
+ `CREDENTIALS.RELOAD`, then `CONNECT`. Static non-expiring `auth` configuration remains supported.
133
+
91
134
  ### Key-Value Operations
92
135
 
93
136
  ```typescript
@@ -160,9 +203,11 @@ The NATS machine operates in the following states:
160
203
  ### Main Exports
161
204
 
162
205
  - `natsMachine`: The main XState machine for NATS operations
206
+ - `credentialMachine`: Generic short-lived credential lifecycle machine
163
207
  - `KvSubscriptionKey`: Type for KV subscription keys
164
208
  - `parseNatsResult`: Utility for parsing NATS operation results
165
209
  - `AuthConfig`: Type for authentication configuration
210
+ - `NatsCredentialAdapter`, `NatsCredentialConfig`, `NatsCredentials`: Credential actor contracts
166
211
 
167
212
  ### Authentication
168
213
 
@@ -197,6 +242,7 @@ auth: {
197
242
  - `CONNECT`: Establish connection
198
243
  - `DISCONNECT`: Close connection
199
244
  - `RESET`: Reset to initial state
245
+ - `CREDENTIALS.RELOAD`: Reload credentials after the application repairs its session
200
246
 
201
247
  #### Subject Events
202
248
 
@@ -226,21 +272,36 @@ and request/reply replier.
226
272
 
227
273
  ### Emitted spans
228
274
 
229
- | Span name | Emitted by | Attributes |
230
- | ----------------------- | -------------------- | ---------------------------------------- |
231
- | `xstate.nats.subscribe` | `SUBJECT.SUBSCRIBE` | `subject` |
232
- | `xstate.nats.message` | per received message | `subject`, `payload.bytes` |
233
- | `xstate.nats.publish` | `SUBJECT.PUBLISH` | `subject`, `payload.bytes` |
234
- | `xstate.nats.request` | `SUBJECT.REQUEST` | `subject`, `payload.bytes`, `timeout.ms` |
235
- | `xstate.nats.reconnect` | NATS status loop | `reconnect.type` |
236
- | `xstate.nats.lifecycle` | root machine | `xstate.state`, `xstate.event` |
237
- | `xstate.nats.kv.watch` | `KV.SUBSCRIBE` | `bucket`, `key` |
238
- | `xstate.nats.kv.entry` | per KV watch entry | `bucket`, `key`, `operation` |
275
+ | Span name | Emitted by | Attributes |
276
+ | --------------------------------- | -------------------- | ------------------------------------------------------------------------ |
277
+ | `xstate.nats.subscribe` | `SUBJECT.SUBSCRIBE` | `subject` |
278
+ | `xstate.nats.message` | per received message | `subject`, `payload.bytes` |
279
+ | `xstate.nats.publish` | `SUBJECT.PUBLISH` | `subject`, `payload.bytes` |
280
+ | `xstate.nats.request` | `SUBJECT.REQUEST` | `subject`, `payload.bytes`, `timeout.ms` |
281
+ | `xstate.nats.reconnect` | NATS status loop | `reconnect.type` |
282
+ | `xstate.nats.lifecycle` | root machine | `xstate.state`, `xstate.event` |
283
+ | `xstate.nats.credentials.load` | credential load | `credentials.operation`, `credentials.timeout.ms`, `credentials.outcome` |
284
+ | `xstate.nats.credentials.refresh` | credential refresh | `credentials.operation`, `credentials.timeout.ms`, `credentials.outcome` |
285
+ | `xstate.nats.kv.watch` | `KV.SUBSCRIBE` | `bucket`, `key` |
286
+ | `xstate.nats.kv.entry` | per KV watch entry | `bucket`, `key`, `operation` |
239
287
 
240
288
  All error paths record exceptions on the active span, set span status to
241
289
  `ERROR`, and emit a named event (`xstate.nats.error` / `xstate.nats.kv.error`)
242
290
  with a truncated stack.
243
291
 
292
+ ### Credential metrics
293
+
294
+ | Metric name | Type | Attributes |
295
+ | -------------------------------------------- | --------- | ---------------------- |
296
+ | `xstate.nats.credentials.operations` | Counter | `operation`, `outcome` |
297
+ | `xstate.nats.credentials.operation.duration` | Histogram | `operation`, `outcome` |
298
+ | `xstate.nats.credentials.state.transitions` | Counter | `state` |
299
+
300
+ Operations are `load` or `refresh`; outcomes are `success` or `error`. Durations are recorded in
301
+ milliseconds. These low-cardinality metrics expose authentication rate, refresh frequency,
302
+ latency, failures, expiry, and recovery trends without recording credential contents.
303
+ A registered OpenTelemetry `MeterProvider` is required to export them.
304
+
244
305
  ### Lifecycle diagnostics
245
306
 
246
307
  Root machine lifecycle diagnostics are opt-in and separate from raw NATS
@@ -264,6 +325,10 @@ include state, event type, server URLs, debug/verbose flags, retry count, auth
264
325
  type, and manager readiness flags. They do not include credentials, JWTs, nkeys,
265
326
  signatures, passwords, tokens, or raw protocol frames.
266
327
 
328
+ Set `credentials.diagnostics: true` for sanitized credential state and operation breadcrumbs.
329
+ They contain only operation, outcome, duration, timeout, state, and pending-waiter count. Adapter
330
+ error messages and credential contents are deliberately excluded from logs and traces.
331
+
267
332
  ### Enabling tracing
268
333
 
269
334
  `@opentelemetry/api` is a peer dependency — the consumer controls the installed
@@ -1,6 +1,7 @@
1
1
  import { ConnectionOptions, Msg, NatsConnection, Status } from '@nats-io/nats-core';
2
2
  import { KvEntry } from '@nats-io/kv';
3
3
  import { type AuthConfig } from './types';
4
+ import { CredentialActor } from '../machines/credentials';
4
5
  export type InternalStatusEvents = {
5
6
  type: 'NATS_CONNECTION.DISCONNECTED';
6
7
  status: Status;
@@ -20,6 +21,7 @@ export type InternalStatusEvents = {
20
21
  export declare const connectToNats: import("xstate").PromiseActorLogic<NatsConnection, {
21
22
  opts: ConnectionOptions;
22
23
  auth?: AuthConfig;
24
+ credentialActor?: CredentialActor;
23
25
  onStatus?: (event: InternalStatusEvents) => void;
24
26
  }, import("xstate").EventObject>;
25
27
  export declare const disconnectNats: import("xstate").PromiseActorLogic<void, {
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/actions/connection.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,GAAG,EACH,cAAc,EACd,MAAM,EAEP,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AA6BzC,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,8BAA8B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,8BAA8B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5D,eAAO,MAAM,aAAa;UAKd,iBAAiB;WAChB,UAAU;eACN,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI;gCAmFrD,CAAA;AAED,eAAO,MAAM,cAAc;gBACgB,cAAc,GAAG,IAAI;gCAM/D,CAAA;AAED,eAAO,MAAM,eAAe,QAAS,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,YAiBhE,CAAA"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/actions/connection.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,GAAG,EACH,cAAc,EACd,MAAM,EAIP,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAkB,MAAM,yBAAyB,CAAA;AAkCzE,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,8BAA8B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,8BAA8B,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5D,eAAO,MAAM,aAAa;UAKd,iBAAiB;WAChB,UAAU;sBACC,eAAe;eACtB,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI;gCA6FrD,CAAA;AAED,eAAO,MAAM,cAAc;gBACgB,cAAc,GAAG,IAAI;gCAM/D,CAAA;AAED,eAAO,MAAM,eAAe,QAAS,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,YAiBhE,CAAA"}
@@ -1,35 +1,46 @@
1
1
  import { fromPromise } from 'xstate';
2
- import { credsAuthenticator, wsconnect, } from '@nats-io/nats-core';
2
+ import { credsAuthenticator, tokenAuthenticator, usernamePasswordAuthenticator, wsconnect, } from '@nats-io/nats-core';
3
3
  import { withSpan } from '../telemetry';
4
- const makeAuthConfig = (auth) => {
4
+ import { getCredentials } from '../machines/credentials';
5
+ const makeAuthConfig = (auth, getLatest) => {
5
6
  if (!auth) {
6
7
  return {};
7
8
  }
8
9
  if (auth.type === 'decentralised') {
9
10
  const decodedSentinel = atob(auth.sentinelB64);
10
11
  return {
11
- authenticator: credsAuthenticator(new TextEncoder().encode(decodedSentinel)),
12
- user: auth.user,
13
- pass: auth.pass,
12
+ authenticator: [
13
+ credsAuthenticator(new TextEncoder().encode(decodedSentinel)),
14
+ usernamePasswordAuthenticator(() => getLatest?.()?.user ?? auth.user, () => getLatest?.()?.pass ?? auth.pass),
15
+ ],
14
16
  };
15
17
  }
16
18
  else if (auth.type === 'userpass') {
17
19
  return {
18
- user: auth.user,
19
- pass: auth.pass,
20
+ authenticator: usernamePasswordAuthenticator(() => getLatest?.()?.user ?? auth.user, () => getLatest?.()?.pass ?? auth.pass),
20
21
  };
21
22
  }
22
23
  else if (auth.type === 'token') {
23
24
  return {
24
- token: auth.token,
25
+ authenticator: tokenAuthenticator(() => getLatest?.()?.token ?? auth.token),
25
26
  };
26
27
  }
27
28
  throw new Error(`Unsupported auth config type ${auth.type}`);
28
29
  };
29
30
  export const connectToNats = fromPromise(async ({ input, }) => {
31
+ const credentials = input.credentialActor
32
+ ? await getCredentials(input.credentialActor)
33
+ : undefined;
34
+ const auth = credentials?.auth ?? input.auth;
30
35
  const mergedOpts = {
31
36
  ...input.opts,
32
- ...makeAuthConfig(input.auth),
37
+ ...makeAuthConfig(auth, () => {
38
+ const current = input.credentialActor?.getSnapshot().context.current;
39
+ if (current?.expiresAt !== undefined && current.expiresAt <= Date.now()) {
40
+ throw new Error('NATS credentials expired');
41
+ }
42
+ return current?.auth;
43
+ }),
33
44
  };
34
45
  const debug = Boolean(mergedOpts.debug);
35
46
  const nc = await wsconnect(mergedOpts);
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/actions/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/actions/connection.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { NatsConnection, PublishOptions, RequestOptions, Subscription, SubscriptionOptions } from '@nats-io/nats-core';
1
+ import { MsgHdrs, NatsConnection, PublishOptions, RequestOptions, Subscription, SubscriptionOptions } from '@nats-io/nats-core';
2
2
  export type SubjectSubscriptionConfig = {
3
3
  subject: string;
4
4
  callback: (data: any) => void;
@@ -11,6 +11,9 @@ export type RequestResult = {
11
11
  ok: false;
12
12
  error: Error;
13
13
  };
14
+ export declare function rejectUnavailableRequest(event: {
15
+ onRequestResult?: (result: RequestResult) => void;
16
+ }): void;
14
17
  export declare const subjectConsolidateState: ({ input, }: {
15
18
  input: {
16
19
  connection: NatsConnection | null;
@@ -29,6 +32,7 @@ export declare const subjectRequest: ({ input, }: {
29
32
  callback: (data: any) => void;
30
33
  onRequestResult?: (result: RequestResult) => void;
31
34
  onDownloadBytes?: (bytes: number) => void;
35
+ requestHeaders?: () => Promise<MsgHdrs | undefined>;
32
36
  };
33
37
  }) => void;
34
38
  export declare const subjectPublish: ({ input, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../src/actions/subject.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAU3B,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,mBAAmB,CAAA;IAC1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAEtE,eAAO,MAAM,uBAAuB,eAEjC;IACD,KAAK,EAAE;QACL,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;QACjC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAC/C,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;KAC5D,CAAA;CACF;IA2EG,aAAa;CAEhB,CAAA;AAED,eAAO,MAAM,cAAc,eAExB;IACD,KAAK,EAAE;QACL,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;QACjC,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,GAAG,CAAA;QACZ,IAAI,CAAC,EAAE,cAAc,CAAA;QACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;QAC7B,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;QACjD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAC1C,CAAA;CACF,SA6CA,CAAA;AAED,eAAO,MAAM,cAAc,eAExB;IACD,KAAK,EAAE;QACL,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;QACjC,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,GAAG,CAAA;QACZ,OAAO,CAAC,EAAE,cAAc,CAAA;QACxB,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,GAAG;YAAE,EAAE,EAAE,KAAK,CAAC;YAAC,KAAK,EAAE,KAAK,CAAA;SAAE,KAAK,IAAI,CAAA;KAC/E,CAAA;CACF,SA0BA,CAAA"}
1
+ {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../src/actions/subject.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,OAAO,EACP,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,mBAAmB,EAEpB,MAAM,oBAAoB,CAAA;AAU3B,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,mBAAmB,CAAA;IAC1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAatE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;CAClD,QAIA;AAED,eAAO,MAAM,uBAAuB,eAEjC;IACD,KAAK,EAAE;QACL,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;QACjC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QAC/C,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;KAC5D,CAAA;CACF;IA2EG,aAAa;CAEhB,CAAA;AAED,eAAO,MAAM,cAAc,eAExB;IACD,KAAK,EAAE;QACL,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;QACjC,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,GAAG,CAAA;QACZ,IAAI,CAAC,EAAE,cAAc,CAAA;QACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;QAC7B,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;QACjD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;QACzC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;KACpD,CAAA;CACF,SAkFA,CAAA;AAED,eAAO,MAAM,cAAc,eAExB;IACD,KAAK,EAAE;QACL,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;QACjC,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,GAAG,CAAA;QACZ,OAAO,CAAC,EAAE,cAAc,CAAA;QACxB,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,GAAG;YAAE,EAAE,EAAE,KAAK,CAAC;YAAC,KAAK,EAAE,KAAK,CAAA;SAAE,KAAK,IAAI,CAAA;KAC/E,CAAA;CACF,SA0BA,CAAA"}
@@ -1,6 +1,21 @@
1
+ import { deadline, TimeoutError, } from '@nats-io/nats-core';
1
2
  import { parseNatsResult } from './connection';
2
3
  import { extractContextFromHeaders, injectContextIntoHeaders, recordError, withSpan, } from '../telemetry';
3
4
  import { byteLength } from '../traffic';
5
+ function notifyRequestResult(callback, result) {
6
+ try {
7
+ callback?.(result);
8
+ }
9
+ catch (error) {
10
+ console.error('NATS request result callback failed', error);
11
+ }
12
+ }
13
+ export function rejectUnavailableRequest(event) {
14
+ const error = new Error('NATS connection is not available');
15
+ notifyRequestResult(event.onRequestResult, { ok: false, error });
16
+ if (!event.onRequestResult)
17
+ console.error(error.message);
18
+ }
4
19
  export const subjectConsolidateState = ({ input, }) => {
5
20
  const { connection, currentSubscriptions, targetSubscriptions } = input;
6
21
  if (!connection) {
@@ -65,7 +80,7 @@ export const subjectConsolidateState = ({ input, }) => {
65
80
  };
66
81
  };
67
82
  export const subjectRequest = ({ input, }) => {
68
- const { connection, subject, payload, opts, callback, onRequestResult, onDownloadBytes } = input;
83
+ const { connection, subject, payload, opts, callback, onRequestResult, onDownloadBytes, requestHeaders, } = input;
69
84
  if (!connection) {
70
85
  throw new Error('NATS connection is not available');
71
86
  }
@@ -80,26 +95,55 @@ export const subjectRequest = ({ input, }) => {
80
95
  // declares `timeout` as required but nats-core only enforces it when
81
96
  // opts is provided; cast preserves the "no opts = use conn default"
82
97
  // contract.
83
- const headers = injectContextIntoHeaders(opts?.headers);
84
- const requestOpts = (opts ? { ...opts, headers } : { headers });
85
- return connection
86
- .request(subject, payload, requestOpts)
87
- .then((msg) => {
88
- onDownloadBytes?.(msg.data?.length ?? 0);
89
- callback(parseNatsResult(msg));
90
- onRequestResult?.({ ok: true });
91
- })
92
- .catch((err) => {
93
- // Record on span manually so we can swallow the rejection here —
94
- // the original fire-and-forget API didn't propagate request errors
95
- // to callers and changing that now would be a breaking behaviour.
98
+ const request = (providedHeaders, timeout = opts?.timeout) => {
99
+ const headers = injectContextIntoHeaders(opts?.headers);
100
+ providedHeaders?.keys().forEach((key) => {
101
+ const value = providedHeaders.get(key);
102
+ if (value)
103
+ headers.set(key, value);
104
+ });
105
+ const requestOpts = (opts ? { ...opts, headers } : { headers });
106
+ if (timeout !== undefined)
107
+ requestOpts.timeout = timeout;
108
+ try {
109
+ return connection.request(subject, payload, requestOpts);
110
+ }
111
+ catch (error) {
112
+ return Promise.reject(error);
113
+ }
114
+ };
115
+ const timeout = opts?.timeout;
116
+ const startedAt = performance.now();
117
+ const preparedHeaders = requestHeaders ? Promise.resolve().then(requestHeaders) : undefined;
118
+ const send = preparedHeaders
119
+ ? (timeout === undefined ? preparedHeaders : deadline(preparedHeaders, timeout)).then((headers) => {
120
+ if (timeout === undefined)
121
+ return request(headers);
122
+ const remaining = Math.floor(timeout - (performance.now() - startedAt));
123
+ if (remaining <= 0)
124
+ throw new TimeoutError();
125
+ return request(headers, remaining);
126
+ })
127
+ : request();
128
+ const fail = (err) => {
96
129
  recordError(span, 'xstate.nats.error', err);
97
130
  const error = err instanceof Error ? err : new Error(String(err));
98
- onRequestResult?.({ ok: false, error });
131
+ notifyRequestResult(onRequestResult, { ok: false, error });
99
132
  if (!onRequestResult) {
100
133
  console.error(`RequestReply error for subject "${subject}"`, err);
101
134
  }
102
- });
135
+ };
136
+ return send.then((msg) => {
137
+ try {
138
+ onDownloadBytes?.(msg.data?.length ?? 0);
139
+ callback(parseNatsResult(msg));
140
+ }
141
+ catch (error) {
142
+ fail(error);
143
+ return;
144
+ }
145
+ notifyRequestResult(onRequestResult, { ok: true });
146
+ }, fail);
103
147
  });
104
148
  };
105
149
  export const subjectPublish = ({ input, }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"subject.js","sourceRoot":"","sources":["../../src/actions/subject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subject.js","sourceRoot":"","sources":["../../src/actions/subject.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export { kvManagerLogic, type Context as KvContext, type ExternalEvents as KvEve
4
4
  export { KvSubscriptionKey, type KvSubscriptionConfig } from './actions/kv';
5
5
  export { parseNatsResult } from './actions/connection';
6
6
  export { type AuthConfig } from './actions/types';
7
+ export { credentialMachine, getCredentials, type CredentialActor, type CredentialContext, type NatsCredentialAdapter, type NatsCredentialConfig, type NatsCredentials, } from './machines/credentials';
7
8
  export { byteLength as natsTrafficByteLength, createEmptyTrafficMetrics, recordTrafficMetric, resetTrafficAll, resetTrafficDownload, resetTrafficUpload, type NatsTrafficEvent, type NatsTrafficMetricBucket, type NatsTrafficMetrics, type NatsTrafficMetricSource, type NatsTrafficRecordEvent, type NatsTrafficResetEvent, } from './traffic';
8
9
  export { type NatsConnectionConfig, type Context as NatsContext, type ExternalEvents as NatsEvent, } from './machines/root';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,mBAAmB,EACnB,KAAK,OAAO,IAAI,cAAc,EAC9B,KAAK,cAAc,IAAI,YAAY,GACpC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,cAAc,EACd,KAAK,OAAO,IAAI,SAAS,EACzB,KAAK,cAAc,IAAI,OAAO,GAC/B,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EACL,UAAU,IAAI,qBAAqB,EACnC,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,OAAO,IAAI,WAAW,EAC3B,KAAK,cAAc,IAAI,SAAS,GACjC,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,mBAAmB,EACnB,KAAK,OAAO,IAAI,cAAc,EAC9B,KAAK,cAAc,IAAI,YAAY,GACpC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,cAAc,EACd,KAAK,OAAO,IAAI,SAAS,EACzB,KAAK,cAAc,IAAI,OAAO,GAC/B,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,UAAU,IAAI,qBAAqB,EACnC,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,OAAO,IAAI,WAAW,EAC3B,KAAK,cAAc,IAAI,SAAS,GACjC,MAAM,iBAAiB,CAAA"}
package/dist/index.js CHANGED
@@ -3,5 +3,6 @@ export { subjectManagerLogic, } from './machines/subject';
3
3
  export { kvManagerLogic, } from './machines/kv';
4
4
  export { KvSubscriptionKey } from './actions/kv';
5
5
  export { parseNatsResult } from './actions/connection';
6
+ export { credentialMachine, getCredentials, } from './machines/credentials';
6
7
  export { byteLength as natsTrafficByteLength, createEmptyTrafficMetrics, recordTrafficMetric, resetTrafficAll, resetTrafficDownload, resetTrafficUpload, } from './traffic';
7
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,mBAAmB,GAGpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,cAAc,GAGf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAA6B,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EACL,UAAU,IAAI,qBAAqB,EACnC,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GAOnB,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EACL,mBAAmB,GAGpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,cAAc,GAGf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAA6B,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EACL,iBAAiB,EACjB,cAAc,GAMf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,UAAU,IAAI,qBAAqB,EACnC,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GAOnB,MAAM,WAAW,CAAA"}
@@ -0,0 +1,112 @@
1
+ import { MsgHdrs } from '@nats-io/nats-core';
2
+ import { ActorRefFrom } from 'xstate';
3
+ import { type AuthConfig } from '../actions/types';
4
+ export interface NatsCredentials {
5
+ auth?: AuthConfig;
6
+ requestHeaders?: MsgHdrs;
7
+ /** Epoch milliseconds after which these credentials must not be used. Use the earliest expiry. */
8
+ expiresAt?: number;
9
+ }
10
+ export interface NatsCredentialAdapter {
11
+ load: () => Promise<NatsCredentials>;
12
+ refresh?: (current: NatsCredentials) => Promise<NatsCredentials>;
13
+ }
14
+ export interface NatsCredentialConfig {
15
+ adapter: NatsCredentialAdapter;
16
+ /** Refresh this long before expiry. Defaults to 60 seconds. */
17
+ refreshBeforeExpiryMs?: number;
18
+ /** Maximum duration of one adapter load or refresh. Defaults to 30 seconds. */
19
+ operationTimeoutMs?: number;
20
+ /** Called when credentials expire or cannot be loaded/refreshed. */
21
+ onUnavailable?: (error: Error) => void;
22
+ /** Emit sanitized credential lifecycle debug logs. */
23
+ diagnostics?: boolean;
24
+ }
25
+ type CredentialResult = {
26
+ ok: true;
27
+ credentials: NatsCredentials;
28
+ } | {
29
+ ok: false;
30
+ error: Error;
31
+ };
32
+ type Waiter = (result: CredentialResult) => void;
33
+ export interface CredentialContext {
34
+ config: NatsCredentialConfig;
35
+ current?: NatsCredentials;
36
+ waiters: Waiter[];
37
+ error?: Error;
38
+ }
39
+ export declare const credentialMachine: import("xstate").StateMachine<CredentialContext, {
40
+ type: 'CREDENTIALS.GET';
41
+ reply: Waiter;
42
+ } | {
43
+ type: 'CREDENTIALS.RELOAD';
44
+ }, {
45
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<NatsCredentials, NatsCredentialConfig, import("xstate").EventObject> | import("xstate").PromiseActorLogic<NatsCredentials, {
46
+ config: NatsCredentialConfig;
47
+ current: NatsCredentials;
48
+ }, import("xstate").EventObject>> | undefined;
49
+ }, {
50
+ src: "load";
51
+ logic: import("xstate").PromiseActorLogic<NatsCredentials, NatsCredentialConfig, import("xstate").EventObject>;
52
+ id: string | undefined;
53
+ } | {
54
+ src: "refresh";
55
+ logic: import("xstate").PromiseActorLogic<NatsCredentials, {
56
+ config: NatsCredentialConfig;
57
+ current: NatsCredentials;
58
+ }, import("xstate").EventObject>;
59
+ id: string | undefined;
60
+ }, {
61
+ type: "acceptCredentials";
62
+ params: import("xstate").NonReducibleUnknown;
63
+ } | {
64
+ type: "markExpired";
65
+ params: import("xstate").NonReducibleUnknown;
66
+ } | {
67
+ type: "notifyUnavailable";
68
+ params: unknown;
69
+ } | {
70
+ type: "queue";
71
+ params: import("xstate").NonReducibleUnknown;
72
+ } | {
73
+ type: "rejectWaiters";
74
+ params: import("xstate").NonReducibleUnknown;
75
+ } | {
76
+ type: "replyReady";
77
+ params: unknown;
78
+ } | {
79
+ type: "storeCredentials";
80
+ params: import("xstate").NonReducibleUnknown;
81
+ }, {
82
+ type: "canRefresh";
83
+ params: unknown;
84
+ } | {
85
+ type: "hasExpiry";
86
+ params: unknown;
87
+ } | {
88
+ type: "isExpired";
89
+ params: unknown;
90
+ } | {
91
+ type: "outputExpired";
92
+ params: unknown;
93
+ } | {
94
+ type: "outputShouldRefresh";
95
+ params: unknown;
96
+ } | {
97
+ type: "shouldRefreshNow";
98
+ params: unknown;
99
+ }, "credentialDeadline", "expired" | "failed" | "loading" | "ready" | "refreshing", string, NatsCredentialConfig, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
100
+ id: "credentials";
101
+ states: {
102
+ readonly loading: {};
103
+ readonly ready: {};
104
+ readonly refreshing: {};
105
+ readonly expired: {};
106
+ readonly failed: {};
107
+ };
108
+ }>;
109
+ export type CredentialActor = ActorRefFrom<typeof credentialMachine>;
110
+ export declare function getCredentials(actor: CredentialActor): Promise<NatsCredentials>;
111
+ export {};
112
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/machines/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,YAAY,EAA8B,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;IACpC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;CACjE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,+DAA+D;IAC/D,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,oEAAoE;IACpE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACtC,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,KAAK,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAA;AAEhG,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;AAEhD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AA0FD,eAAO,MAAM,iBAAiB;UAxFR,iBAAiB;WAAS,MAAM;;UAAa,oBAAoB;;;gBAmGlD,oBAAoB;iBAAW,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsKjF,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAU/E"}