@jr200-labs/xstate-nats 0.9.24 → 0.9.25

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 (36) hide show
  1. package/README.md +9 -1
  2. package/dist/actions/kv.d.ts +2 -3
  3. package/dist/actions/kv.d.ts.map +1 -1
  4. package/dist/actions/kv.js +53 -75
  5. package/dist/actions/kv.js.map +1 -1
  6. package/dist/actions/subject.d.ts +1 -3
  7. package/dist/actions/subject.d.ts.map +1 -1
  8. package/dist/actions/subject.js +36 -56
  9. package/dist/actions/subject.js.map +1 -1
  10. package/dist/actions/subscriptions.d.ts +13 -0
  11. package/dist/actions/subscriptions.d.ts.map +1 -0
  12. package/dist/actions/subscriptions.js +53 -0
  13. package/dist/actions/subscriptions.js.map +1 -0
  14. package/dist/machines/kv.d.ts +2 -6
  15. package/dist/machines/kv.d.ts.map +1 -1
  16. package/dist/machines/kv.js +23 -48
  17. package/dist/machines/kv.js.map +1 -1
  18. package/dist/machines/root.d.ts +4 -12
  19. package/dist/machines/root.d.ts.map +1 -1
  20. package/dist/machines/subject.d.ts.map +1 -1
  21. package/dist/machines/subject.js +27 -38
  22. package/dist/machines/subject.js.map +1 -1
  23. package/dist/machines/subscriptions.d.ts +36 -0
  24. package/dist/machines/subscriptions.d.ts.map +1 -0
  25. package/dist/machines/subscriptions.js +32 -0
  26. package/dist/machines/subscriptions.js.map +1 -0
  27. package/package.json +9 -2
  28. package/src/actions/kv.ts +64 -89
  29. package/src/actions/subject.ts +48 -69
  30. package/src/actions/subscriptions.test.ts +77 -0
  31. package/src/actions/subscriptions.ts +73 -0
  32. package/src/machines/kv.test.ts +58 -0
  33. package/src/machines/kv.ts +34 -48
  34. package/src/machines/subject.test.ts +30 -3
  35. package/src/machines/subject.ts +34 -38
  36. package/src/machines/subscriptions.ts +52 -0
package/README.md CHANGED
@@ -361,7 +361,15 @@ appear as children of the originating publisher/requester span.
361
361
 
362
362
  ## Examples
363
363
 
364
- Check out the [React example](./examples/react-test/) for a complete working implementation.
364
+ Read the [documentation](https://jr200-labs.github.io/xstate-nats/) and try the
365
+ [interactive browser demo](https://jr200-labs.github.io/xstate-nats/demo.html).
366
+ The default sandbox runs in your browser; live mode uses your own NATS WebSocket broker.
367
+ The canonical demo source lives in [docs/demo](./docs/demo/).
368
+
369
+ ```bash
370
+ pnpm demo:dev # browser playground at localhost:3001
371
+ quarto preview docs # documentation and embedded demo
372
+ ```
365
373
 
366
374
  ## Development
367
375
 
@@ -1,6 +1,7 @@
1
1
  import { NatsConnection, QueuedIterator } from '@nats-io/nats-core';
2
2
  import { Kvm, KvWatchEntry, KvWatchOptions } from '@nats-io/kv';
3
3
  import { Pair } from '../utils';
4
+ import { SubscriptionSyncResult } from './subscriptions';
4
5
  export declare class KvSubscriptionKey extends Pair<string, string> {
5
6
  }
6
7
  export type KvSubscriptionConfig = {
@@ -11,9 +12,7 @@ export type KvSubscriptionConfig = {
11
12
  replayOnReconnect?: boolean;
12
13
  onDownloadBytes?: (bytes: number) => void;
13
14
  };
14
- export declare const kvConsolidateState: import("xstate").PromiseActorLogic<{
15
- subscriptions: Map<string, QueuedIterator<KvWatchEntry>>;
16
- }, {
15
+ export declare const kvConsolidateState: import("xstate").PromiseActorLogic<SubscriptionSyncResult<QueuedIterator<KvWatchEntry>>, {
17
16
  kvm: Kvm | null;
18
17
  connection: NatsConnection | null;
19
18
  currentState: Map<string, QueuedIterator<KvWatchEntry>>;
@@ -1 +1 @@
1
- {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/actions/kv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAK/B,qBAAa,iBAAkB,SAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;CAAG;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,kBAAkB;mBAWZ,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;;SANjD,GAAG,GAAG,IAAI;gBACH,cAAc,GAAG,IAAI;kBACnB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;iBAC1C,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC;gCAqGnD,CAAA"}
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/actions/kv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAI/B,OAAO,EAA+B,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAErF,qBAAa,iBAAkB,SAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;CAAG;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC7B,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,kBAAkB;SAKpB,GAAG,GAAG,IAAI;gBACH,cAAc,GAAG,IAAI;kBACnB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;iBAC1C,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC;gCA2EnD,CAAA"}
@@ -2,88 +2,66 @@ import { Pair } from '../utils';
2
2
  import { fromPromise } from 'xstate';
3
3
  import { recordError, withSpan } from '../telemetry';
4
4
  import { byteLength } from '../traffic';
5
+ import { reconcileSubscriptionsAsync } from './subscriptions';
5
6
  export class KvSubscriptionKey extends Pair {
6
7
  }
7
8
  export const kvConsolidateState = fromPromise(async ({ input, }) => {
8
9
  if (!input.connection || !input.kvm) {
9
10
  throw new Error('NATS connection or KVM is not available');
10
11
  }
11
- const { currentState, targetState } = input;
12
- const syncedState = new Map(currentState);
13
- // Unsubscribe from items that are in currentState but not in targetState
14
- for (const [kvKey, subscription] of currentState) {
15
- if (!targetState.has(kvKey)) {
16
- try {
17
- syncedState.delete(kvKey);
18
- subscription.stop();
19
- }
20
- catch (error) {
21
- console.error(`Error unsubscribing from subject "${kvKey}"`, error);
22
- }
23
- }
24
- }
25
- // Subscribe to new subjects that are in targetState but not in currentState
26
- for (const [kvKey, config] of targetState) {
27
- if (!currentState.has(kvKey)) {
28
- // the problem is kv key is triggered on successive calls to consolidateState
29
- // the match is not working?
30
- try {
31
- const kv = await input.kvm.open(config.bucket);
32
- const watchOptions = config;
33
- // Short span around the synchronous-ish watch() setup — the watcher
34
- // iterator itself is long-lived, so each received entry gets its
35
- // own span below rather than one indefinite parent.
36
- const watcher = (await withSpan('xstate.nats.kv.watch', 'xstate.nats.kv.error', { bucket: config.bucket, key: config.key }, () => kv.watch(watchOptions)));
37
- syncedState.set(kvKey, watcher);
38
- (async () => {
39
- try {
40
- for await (const e of watcher) {
41
- if (e.operation !== 'DEL') {
42
- await withSpan('xstate.nats.kv.entry', 'xstate.nats.kv.error', {
43
- bucket: config.bucket,
44
- key: config.key,
45
- operation: e.operation,
46
- }, (span) => {
47
- let parsedValue;
48
- let rawValue;
49
- try {
50
- rawValue = e.string();
51
- parsedValue = JSON.parse(rawValue);
52
- }
53
- catch {
54
- rawValue = e.string();
55
- parsedValue = rawValue;
56
- }
57
- try {
58
- // KvWatchEntry does not expose the raw wire payload on this path; the
59
- // UTF-8 byte length of string() is the measurable application payload.
60
- config.onDownloadBytes?.(byteLength(rawValue));
61
- config.callback({
62
- bucket: config.bucket,
63
- key: config.key,
64
- value: parsedValue,
65
- });
66
- }
67
- catch (callbackError) {
68
- recordError(span, 'xstate.nats.kv.error', callbackError);
69
- console.error(`KV_SUBSCRIBE (connected): Callback error for ${kvKey}:`, callbackError);
70
- }
71
- });
72
- }
12
+ const { currentState, targetState, kvm } = input;
13
+ return reconcileSubscriptionsAsync(currentState, targetState, {
14
+ dispose: (subscription) => subscription.stop(),
15
+ create: async (kvKey, config) => {
16
+ const kv = await kvm.open(config.bucket);
17
+ const watchOptions = config;
18
+ // Short span around the synchronous-ish watch() setup — the watcher
19
+ // iterator itself is long-lived, so each received entry gets its
20
+ // own span below rather than one indefinite parent.
21
+ const watcher = (await withSpan('xstate.nats.kv.watch', 'xstate.nats.kv.error', { bucket: config.bucket, key: config.key }, () => kv.watch(watchOptions)));
22
+ (async () => {
23
+ try {
24
+ for await (const e of watcher) {
25
+ if (e.operation !== 'DEL') {
26
+ await withSpan('xstate.nats.kv.entry', 'xstate.nats.kv.error', {
27
+ bucket: config.bucket,
28
+ key: config.key,
29
+ operation: e.operation,
30
+ }, (span) => {
31
+ let parsedValue;
32
+ let rawValue;
33
+ try {
34
+ rawValue = e.string();
35
+ parsedValue = JSON.parse(rawValue);
36
+ }
37
+ catch {
38
+ rawValue = e.string();
39
+ parsedValue = rawValue;
40
+ }
41
+ try {
42
+ // KvWatchEntry does not expose the raw wire payload on this path; the
43
+ // UTF-8 byte length of string() is the measurable application payload.
44
+ config.onDownloadBytes?.(byteLength(rawValue));
45
+ config.callback({
46
+ bucket: config.bucket,
47
+ key: config.key,
48
+ value: parsedValue,
49
+ });
50
+ }
51
+ catch (callbackError) {
52
+ recordError(span, 'xstate.nats.kv.error', callbackError);
53
+ console.error(`KV_SUBSCRIBE (connected): Callback error for ${kvKey}:`, callbackError);
54
+ }
55
+ });
73
56
  }
74
57
  }
75
- catch (error) {
76
- console.error(`KV_SUBSCRIBE (connected): Watcher loop error for ${kvKey}:`, error);
77
- }
78
- })();
79
- }
80
- catch (error) {
81
- console.error(`Error subscribing to subject "${kvKey}"`, error);
82
- }
83
- }
84
- }
85
- return {
86
- subscriptions: syncedState,
87
- };
58
+ }
59
+ catch (error) {
60
+ console.error(`KV_SUBSCRIBE (connected): Watcher loop error for ${kvKey}:`, error);
61
+ }
62
+ })();
63
+ return watcher;
64
+ },
65
+ });
88
66
  });
89
67
  //# sourceMappingURL=kv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/actions/kv.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,MAAM,OAAO,iBAAkB,SAAQ,IAAoB;CAAG;AAW9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAC3C,KAAK,EAAE,EACL,KAAK,GAQN,EAEE,EAAE;IACH,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC5D,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAA;IAEzC,yEAAyE;IACzE,KAAK,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACzB,YAAY,CAAC,IAAI,EAAE,CAAA;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,GAAG,EAAE,KAAK,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,6EAA6E;YAC7E,4BAA4B;YAC5B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBAE9C,MAAM,YAAY,GAAG,MAAwB,CAAA;gBAC7C,oEAAoE;gBACpE,iEAAiE;gBACjE,oDAAoD;gBACpD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAC7B,sBAAsB,EACtB,sBAAsB,EACtB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,EAC1C,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAC7B,CAAiC,CAAA;gBAElC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAC9B;gBAAA,CAAC,KAAK,IAAI,EAAE;oBACX,IAAI,CAAC;wBACH,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;4BAC9B,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;gCAC1B,MAAM,QAAQ,CACZ,sBAAsB,EACtB,sBAAsB,EACtB;oCACE,MAAM,EAAE,MAAM,CAAC,MAAM;oCACrB,GAAG,EAAE,MAAM,CAAC,GAAG;oCACf,SAAS,EAAE,CAAC,CAAC,SAAS;iCACvB,EACD,CAAC,IAAI,EAAE,EAAE;oCACP,IAAI,WAAW,CAAA;oCACf,IAAI,QAAgB,CAAA;oCACpB,IAAI,CAAC;wCACH,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;wCACrB,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oCACpC,CAAC;oCAAC,MAAM,CAAC;wCACP,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;wCACrB,WAAW,GAAG,QAAQ,CAAA;oCACxB,CAAC;oCAED,IAAI,CAAC;wCACH,sEAAsE;wCACtE,uEAAuE;wCACvE,MAAM,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;wCAC9C,MAAM,CAAC,QAAQ,CAAC;4CACd,MAAM,EAAE,MAAM,CAAC,MAAM;4CACrB,GAAG,EAAE,MAAM,CAAC,GAAG;4CACf,KAAK,EAAE,WAAW;yCACnB,CAAC,CAAA;oCACJ,CAAC;oCAAC,OAAO,aAAa,EAAE,CAAC;wCACvB,WAAW,CAAC,IAAI,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAA;wCACxD,OAAO,CAAC,KAAK,CACX,gDAAgD,KAAK,GAAG,EACxD,aAAa,CACd,CAAA;oCACH,CAAC;gCACH,CAAC,CACF,CAAA;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,KAAK,GAAG,EAAE,KAAK,CAAC,CAAA;oBACpF,CAAC;gBACH,CAAC,CAAC,EAAE,CAAA;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,KAAK,GAAG,EAAE,KAAK,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,WAAW;KAC3B,CAAA;AACH,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/actions/kv.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,2BAA2B,EAA0B,MAAM,iBAAiB,CAAA;AAErF,MAAM,OAAO,iBAAkB,SAAQ,IAAoB;CAAG;AAW9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAC3C,KAAK,EAAE,EACL,KAAK,GAQN,EAAiE,EAAE;IAClE,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC5D,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IAChD,OAAO,2BAA2B,CAAC,YAAY,EAAE,WAAW,EAAE;QAC5D,OAAO,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE;QAC9C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAExC,MAAM,YAAY,GAAG,MAAwB,CAAA;YAC7C,oEAAoE;YACpE,iEAAiE;YACjE,oDAAoD;YACpD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAC7B,sBAAsB,EACtB,sBAAsB,EACtB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,EAC1C,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAC7B,CAAiC,CAEjC;YAAA,CAAC,KAAK,IAAI,EAAE;gBACX,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;wBAC9B,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;4BAC1B,MAAM,QAAQ,CACZ,sBAAsB,EACtB,sBAAsB,EACtB;gCACE,MAAM,EAAE,MAAM,CAAC,MAAM;gCACrB,GAAG,EAAE,MAAM,CAAC,GAAG;gCACf,SAAS,EAAE,CAAC,CAAC,SAAS;6BACvB,EACD,CAAC,IAAI,EAAE,EAAE;gCACP,IAAI,WAAW,CAAA;gCACf,IAAI,QAAgB,CAAA;gCACpB,IAAI,CAAC;oCACH,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;oCACrB,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gCACpC,CAAC;gCAAC,MAAM,CAAC;oCACP,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;oCACrB,WAAW,GAAG,QAAQ,CAAA;gCACxB,CAAC;gCAED,IAAI,CAAC;oCACH,sEAAsE;oCACtE,uEAAuE;oCACvE,MAAM,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;oCAC9C,MAAM,CAAC,QAAQ,CAAC;wCACd,MAAM,EAAE,MAAM,CAAC,MAAM;wCACrB,GAAG,EAAE,MAAM,CAAC,GAAG;wCACf,KAAK,EAAE,WAAW;qCACnB,CAAC,CAAA;gCACJ,CAAC;gCAAC,OAAO,aAAa,EAAE,CAAC;oCACvB,WAAW,CAAC,IAAI,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAA;oCACxD,OAAO,CAAC,KAAK,CACX,gDAAgD,KAAK,GAAG,EACxD,aAAa,CACd,CAAA;gCACH,CAAC;4BACH,CAAC,CACF,CAAA;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,KAAK,GAAG,EAAE,KAAK,CAAC,CAAA;gBACpF,CAAC;YACH,CAAC,CAAC,EAAE,CAAA;YACJ,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CACF,CAAA"}
@@ -20,9 +20,7 @@ export declare const subjectConsolidateState: ({ input, }: {
20
20
  currentSubscriptions: Map<string, Subscription>;
21
21
  targetSubscriptions: Map<string, SubjectSubscriptionConfig>;
22
22
  };
23
- }) => {
24
- subscriptions: Map<string, Subscription>;
25
- };
23
+ }) => import("./subscriptions").SubscriptionSyncResult<Subscription>;
26
24
  export declare const subjectRequest: ({ input, }: {
27
25
  input: {
28
26
  connection: NatsConnection | null;
@@ -1 +1 @@
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
+ {"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;AAW3B,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,mEAuDA,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"}
@@ -2,6 +2,7 @@ import { deadline, TimeoutError, } from '@nats-io/nats-core';
2
2
  import { parseNatsResult } from './connection';
3
3
  import { extractContextFromHeaders, injectContextIntoHeaders, recordError, withSpan, } from '../telemetry';
4
4
  import { byteLength } from '../traffic';
5
+ import { reconcileSubscriptions } from './subscriptions';
5
6
  function notifyRequestResult(callback, result) {
6
7
  try {
7
8
  callback?.(result);
@@ -21,63 +22,42 @@ export const subjectConsolidateState = ({ input, }) => {
21
22
  if (!connection) {
22
23
  throw new Error('NATS connection is not available');
23
24
  }
24
- const syncedSubscriptions = new Map(currentSubscriptions);
25
- // Unsubscribe from subjects that are in currentSubscriptions but not in targetSubscriptions
26
- for (const [subject, subscription] of currentSubscriptions) {
27
- if (!targetSubscriptions.has(subject)) {
28
- try {
29
- syncedSubscriptions.delete(subject);
30
- subscription.unsubscribe();
31
- }
32
- catch (error) {
33
- console.error(`Error unsubscribing from subject "${subject}"`, error);
34
- }
35
- }
36
- }
37
- // Subscribe to new subjects that are in targetSubscriptions but not in currentSubscriptions
38
- for (const [subject, subscriptionConfig] of targetSubscriptions) {
39
- if (!currentSubscriptions.has(subject)) {
40
- try {
41
- // Short span around the synchronous subscribe() call. The iterator
42
- // below is long-lived; we don't span its whole lifetime (indefinite
43
- // spans are anti-pattern in most tracing backends).
44
- const sub = withSpan('xstate.nats.subscribe', 'xstate.nats.error', { subject }, () => connection.subscribe(subject, subscriptionConfig.opts));
45
- (async () => {
46
- try {
47
- for await (const msg of sub) {
48
- const parentCtx = extractContextFromHeaders(msg.headers);
49
- const payloadBytes = msg.data?.length ?? 0;
50
- await withSpan('xstate.nats.message', 'xstate.nats.error', {
51
- subject,
52
- 'payload.bytes': payloadBytes,
53
- }, (span) => {
54
- try {
55
- subscriptionConfig.onDownloadBytes?.(payloadBytes);
56
- subscriptionConfig?.callback(parseNatsResult(msg));
57
- }
58
- catch (callbackError) {
59
- // Record on span AND preserve the existing console.error
60
- // so consumers without OTel still see the failure.
61
- recordError(span, 'xstate.nats.error', callbackError);
62
- console.error(`Callback error for subject "${subject}"`, callbackError);
63
- }
64
- }, parentCtx);
65
- }
25
+ return reconcileSubscriptions(currentSubscriptions, targetSubscriptions, {
26
+ dispose: (subscription) => subscription.unsubscribe(),
27
+ create: (subject, subscriptionConfig) => {
28
+ // Short span around the synchronous subscribe() call. The iterator
29
+ // below is long-lived; we don't span its whole lifetime (indefinite
30
+ // spans are anti-pattern in most tracing backends).
31
+ const sub = withSpan('xstate.nats.subscribe', 'xstate.nats.error', { subject }, () => connection.subscribe(subject, subscriptionConfig.opts));
32
+ (async () => {
33
+ try {
34
+ for await (const msg of sub) {
35
+ const parentCtx = extractContextFromHeaders(msg.headers);
36
+ const payloadBytes = msg.data?.length ?? 0;
37
+ await withSpan('xstate.nats.message', 'xstate.nats.error', {
38
+ subject,
39
+ 'payload.bytes': payloadBytes,
40
+ }, (span) => {
41
+ try {
42
+ subscriptionConfig.onDownloadBytes?.(payloadBytes);
43
+ subscriptionConfig?.callback(parseNatsResult(msg));
44
+ }
45
+ catch (callbackError) {
46
+ // Record on span AND preserve the existing console.error
47
+ // so consumers without OTel still see the failure.
48
+ recordError(span, 'xstate.nats.error', callbackError);
49
+ console.error(`Callback error for subject "${subject}"`, callbackError);
50
+ }
51
+ }, parentCtx);
66
52
  }
67
- catch (iteratorError) {
68
- console.error(`Iterator error for subject "${subject}"`, iteratorError);
69
- }
70
- })();
71
- syncedSubscriptions.set(subject, sub);
72
- }
73
- catch (error) {
74
- console.error(`Error subscribing to subject "${subject}"`, error);
75
- }
76
- }
77
- }
78
- return {
79
- subscriptions: syncedSubscriptions,
80
- };
53
+ }
54
+ catch (iteratorError) {
55
+ console.error(`Iterator error for subject "${subject}"`, iteratorError);
56
+ }
57
+ })();
58
+ return sub;
59
+ },
60
+ });
81
61
  };
82
62
  export const subjectRequest = ({ input, }) => {
83
63
  const { connection, subject, payload, opts, callback, onRequestResult, onDownloadBytes, requestHeaders, } = 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":"AAAA,OAAO,EACL,QAAQ,EAQR,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,WAAW,EACX,QAAQ,GACT,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAWxD,SAAS,mBAAmB,CAC1B,QAAuD,EACvD,MAAqB;IAErB,IAAI,CAAC;QACH,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAExC;IACC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAC3D,mBAAmB,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAChE,IAAI,CAAC,KAAK,CAAC,eAAe;QAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACtC,KAAK,GAON,EAAE,EAAE;IACH,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAA;IACvE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,sBAAsB,CAAC,oBAAoB,EAAE,mBAAmB,EAAE;QACvE,OAAO,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE;QACrD,MAAM,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE;YACtC,mEAAmE;YACnE,oEAAoE;YACpE,oDAAoD;YACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CACnF,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,CACvC,CAOhB;YAAA,CAAC,KAAK,IAAI,EAAE;gBACX,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;wBAC5B,MAAM,SAAS,GAAG,yBAAyB,CAAE,GAAW,CAAC,OAAO,CAAC,CAAA;wBACjE,MAAM,YAAY,GAAI,GAAW,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAA;wBACnD,MAAM,QAAQ,CACZ,qBAAqB,EACrB,mBAAmB,EACnB;4BACE,OAAO;4BACP,eAAe,EAAE,YAAY;yBAC9B,EACD,CAAC,IAAI,EAAE,EAAE;4BACP,IAAI,CAAC;gCACH,kBAAkB,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,CAAA;gCAClD,kBAAkB,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;4BACpD,CAAC;4BAAC,OAAO,aAAa,EAAE,CAAC;gCACvB,yDAAyD;gCACzD,mDAAmD;gCACnD,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAA;gCACrD,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,GAAG,EAAE,aAAa,CAAC,CAAA;4BACzE,CAAC;wBACH,CAAC,EACD,SAAS,CACV,CAAA;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,aAAa,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,GAAG,EAAE,aAAa,CAAC,CAAA;gBACzE,CAAC;YACH,CAAC,CAAC,EAAE,CAAA;YAEJ,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,KAAK,GAYN,EAAE,EAAE;IACH,MAAM,EACJ,UAAU,EACV,OAAO,EACP,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,eAAe,EACf,eAAe,EACf,cAAc,GACf,GAAG,KAAK,CAAA;IACT,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAExC,KAAK,QAAQ,CACX,qBAAqB,EACrB,mBAAmB,EACnB;QACE,OAAO;QACP,eAAe,EAAE,YAAY;QAC7B,YAAY,EAAE,IAAI,EAAE,OAAO;KAC5B,EACD,CAAC,IAAI,EAAE,EAAE;QACP,qEAAqE;QACrE,wEAAwE;QACxE,qEAAqE;QACrE,oEAAoE;QACpE,YAAY;QACZ,MAAM,OAAO,GAAG,CAAC,eAAyB,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACvD,eAAe,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACtC,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACpC,CAAC,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAmB,CAAA;YACjF,IAAI,OAAO,KAAK,SAAS;gBAAE,WAAW,CAAC,OAAO,GAAG,OAAO,CAAA;YAExD,IAAI,CAAC;gBACH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC,CAAA;QAED,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,CAAA;QAC7B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QACnC,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,MAAM,IAAI,GAAG,eAAe;YAC1B,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CACjF,CAAC,OAAO,EAAE,EAAE;gBACV,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;gBAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAA;gBACvE,IAAI,SAAS,IAAI,CAAC;oBAAE,MAAM,IAAI,YAAY,EAAE,CAAA;gBAC5C,OAAO,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YACpC,CAAC,CACF;YACH,CAAC,CAAC,OAAO,EAAE,CAAA;QAEb,MAAM,IAAI,GAAG,CAAC,GAAY,EAAE,EAAE;YAC5B,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAA;YAC3C,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YACjE,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAA;YACnE,CAAC;QACH,CAAC,CAAA;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE;YAC5B,IAAI,CAAC;gBACH,eAAe,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,CAAA;gBACxC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;YAChC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,CAAA;gBACX,OAAM;YACR,CAAC;YACD,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,CAAC,EAAE,IAAI,CAAC,CAAA;IACV,CAAC,CACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,KAAK,GASN,EAAE,EAAE;IACH,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACxE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAExC,IAAI,CAAC;QACH,QAAQ,CACN,qBAAqB,EACrB,mBAAmB,EACnB,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,EAC1C,GAAG,EAAE;YACH,oEAAoE;YACpE,yDAAyD;YACzD,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC1D,MAAM,WAAW,GAAmB,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAA;YACnE,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;QACnD,CAAC,CACF,CAAA;QACD,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACjC,CAAC;IAAC,OAAO,aAAa,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,uCAAuC,OAAO,GAAG,EAAE,aAAa,CAAC,CAAA;QAC/E,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAsB,EAAE,CAAC,CAAA;IACjE,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ /** Shared reconciliation policy; adapters retain their own setup timing and callbacks. */
2
+ export type SubscriptionSyncResult<Subscription> = {
3
+ subscriptions: Map<string, Subscription>;
4
+ error?: Error;
5
+ };
6
+ type Adapter<Config, Subscription, Created> = {
7
+ create: (key: string, config: Config) => Created;
8
+ dispose: (subscription: Subscription) => void;
9
+ };
10
+ export declare function reconcileSubscriptions<Config, Subscription>(current: Map<string, Subscription>, target: Map<string, Config>, adapter: Adapter<Config, Subscription, Subscription>): SubscriptionSyncResult<Subscription>;
11
+ export declare function reconcileSubscriptionsAsync<Config, Subscription>(current: Map<string, Subscription>, target: Map<string, Config>, adapter: Adapter<Config, Subscription, Promise<Subscription>>): Promise<SubscriptionSyncResult<Subscription>>;
12
+ export {};
13
+ //# sourceMappingURL=subscriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../src/actions/subscriptions.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,MAAM,sBAAsB,CAAC,YAAY,IAAI;IACjD,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,KAAK,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,IAAI;IAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAChD,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAA;CAC9C,CAAA;AAiCD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EACzD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAClC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,GACnD,sBAAsB,CAAC,YAAY,CAAC,CAUtC;AAED,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,YAAY,EACpE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAClC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,GAC5D,OAAO,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAU/C"}
@@ -0,0 +1,53 @@
1
+ function plan(current, target, dispose) {
2
+ const subscriptions = new Map(current);
3
+ const errors = [];
4
+ const fail = (key, cause) => {
5
+ errors.push(new Error(`Subscription sync failed for "${key}"`, { cause }));
6
+ };
7
+ for (const [key, subscription] of current) {
8
+ if (target.has(key))
9
+ continue;
10
+ try {
11
+ dispose(subscription);
12
+ subscriptions.delete(key);
13
+ }
14
+ catch (cause) {
15
+ // Retain the handle so a failed removal can be retried.
16
+ fail(key, cause);
17
+ }
18
+ }
19
+ return {
20
+ subscriptions,
21
+ additions: [...target].filter(([key]) => !current.has(key)),
22
+ fail,
23
+ result: () => ({
24
+ subscriptions,
25
+ error: errors.length ? new AggregateError(errors, 'Subscription sync failed') : undefined,
26
+ }),
27
+ };
28
+ }
29
+ export function reconcileSubscriptions(current, target, adapter) {
30
+ const sync = plan(current, target, adapter.dispose);
31
+ for (const [key, config] of sync.additions) {
32
+ try {
33
+ sync.subscriptions.set(key, adapter.create(key, config));
34
+ }
35
+ catch (cause) {
36
+ sync.fail(key, cause);
37
+ }
38
+ }
39
+ return sync.result();
40
+ }
41
+ export async function reconcileSubscriptionsAsync(current, target, adapter) {
42
+ const sync = plan(current, target, adapter.dispose);
43
+ for (const [key, config] of sync.additions) {
44
+ try {
45
+ sync.subscriptions.set(key, await adapter.create(key, config));
46
+ }
47
+ catch (cause) {
48
+ sync.fail(key, cause);
49
+ }
50
+ }
51
+ return sync.result();
52
+ }
53
+ //# sourceMappingURL=subscriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/actions/subscriptions.ts"],"names":[],"mappings":"AAWA,SAAS,IAAI,CACX,OAAkC,EAClC,MAA2B,EAC3B,OAA6C;IAE7C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;QAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,iCAAiC,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAC5E,CAAC,CAAA;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,YAAY,CAAC,CAAA;YACrB,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wDAAwD;YACxD,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO;QACL,aAAa;QACb,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI;QACJ,MAAM,EAAE,GAAyC,EAAE,CAAC,CAAC;YACnD,aAAa;YACb,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS;SAC1F,CAAC;KACH,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAkC,EAClC,MAA2B,EAC3B,OAAoD;IAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAAkC,EAClC,MAA2B,EAC3B,OAA6D;IAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;AACtB,CAAC"}
@@ -168,9 +168,7 @@ export declare const kvManagerLogic: import("xstate").StateMachine<Context, Nats
168
168
  } | {
169
169
  type: 'KV.UNSUBSCRIBE_ALL';
170
170
  }, {
171
- [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<{
172
- subscriptions: Map<string, QueuedIterator<KvWatchEntry>>;
173
- }, {
171
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("../actions/subscriptions").SubscriptionSyncResult<QueuedIterator<KvWatchEntry>>, {
174
172
  kvm: Kvm | null;
175
173
  connection: NatsConnection | null;
176
174
  currentState: Map<string, QueuedIterator<KvWatchEntry>>;
@@ -178,9 +176,7 @@ export declare const kvManagerLogic: import("xstate").StateMachine<Context, Nats
178
176
  }, import("xstate").EventObject>> | undefined;
179
177
  }, {
180
178
  src: "kvConsolidateState";
181
- logic: import("xstate").PromiseActorLogic<{
182
- subscriptions: Map<string, QueuedIterator<KvWatchEntry>>;
183
- }, {
179
+ logic: import("xstate").PromiseActorLogic<import("../actions/subscriptions").SubscriptionSyncResult<QueuedIterator<KvWatchEntry>>, {
184
180
  kvm: Kvm | null;
185
181
  connection: NatsConnection | null;
186
182
  currentState: Map<string, QueuedIterator<KvWatchEntry>>;
@@ -1 +1 @@
1
- {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/machines/kv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/machines/kv.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { jetstream } from '@nats-io/jetstream';
2
2
  import { Kvm } from '@nats-io/kv';
3
3
  import { assign, sendParent, setup } from 'xstate';
4
+ import { beginSubscriptionSync, detachSubscriptions, finishSubscriptionSync, hasPendingSync, updateSubscriptionTarget, } from './subscriptions';
4
5
  import { KvSubscriptionKey, kvConsolidateState } from '../actions/kv';
5
6
  import { byteLength, createEmptyTrafficMetrics, recordTrafficMetric, resetTrafficAll, resetTrafficDownload, resetTrafficUpload, } from '../traffic';
6
7
  export const kvManagerLogic = setup({
@@ -12,9 +13,7 @@ export const kvManagerLogic = setup({
12
13
  kvConsolidateState: kvConsolidateState,
13
14
  },
14
15
  guards: {
15
- hasPendingSync: ({ context }) => {
16
- return context.syncRequired > 0;
17
- },
16
+ hasPendingSync,
18
17
  },
19
18
  }).createMachine({
20
19
  /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlgFcAjAKzEwBcB9XCAGzAGIBlAVQCEAUgFEAwgBVGASQByksZICCAGUlchAbQAMAXUSgADgHtYuerkP49IAB6IATJs0kAnAFYAzAEY7rgDQgAT3tXTxJNAA53KOiYrwBfOP80LDxCUgoaOiYCU1x0VlwTfCgOa1h6dHowEnQAMyqAJ2RXRyIOZJwCYjIqWgZmfFz8woIoLV0kECMTMwsrWwQANk0AFhJPNy8ffyCEHzsSV0jY2M8EpIxOtJ7M-swLQgZIbn5hcUZePi4RACVJPg0Ois01yc0mC08jnCJAA7O4Vu4YX5AvYVjDDnZ4YjXOcQB1Ut0Mn0mPd8I8qhAXoJRBIeNJPt8-gDxsDjKDLODEEiDu5FjDPOEkTtEJ4Yc5cfiuulellGKTyc9Pm8JCIlEIFD8PvxGf9ARMDGzZhzQAs4a4SHY7ItXIttiiEN5oTjcfhDBA4FZJWlWTNzMabIgALSLYUIYMSy4E6W3bJsMA+9nzRArOyhy3QiInU4RlJSm7EgZDApFKAJo1JhArTzmzTV23I3bpsLHLNRM6JPGRvNE2XyrKQMt+iswpEkRaChv2eGHHNXQkyu4WWCGAoQSpgRjldeDsEmkWY0IrFYebyTvZomcdr3zmOMMANBqGBo7-0LFaLC0CoX26KHFuthIEiAA */
@@ -63,25 +62,13 @@ export const kvManagerLogic = setup({
63
62
  downloadBytes: bytes,
64
63
  }),
65
64
  };
66
- const newConfigs = new Map(context.subscriptionConfigs);
67
- const newKvKey = KvSubscriptionKey.key(config.bucket, config.key);
68
- newConfigs.set(newKvKey, config);
69
- return {
70
- subscriptionConfigs: newConfigs,
71
- syncRequired: context.syncRequired + 1,
72
- };
65
+ return updateSubscriptionTarget(context, KvSubscriptionKey.key(config.bucket, config.key), config);
73
66
  }),
74
67
  ],
75
68
  },
76
69
  'KV.UNSUBSCRIBE': {
77
70
  actions: assign(({ context, event }) => {
78
- const newConfigs = new Map(context.subscriptionConfigs);
79
- const newKvKey = KvSubscriptionKey.key(event.bucket, event.key);
80
- newConfigs.delete(newKvKey);
81
- return {
82
- subscriptionConfigs: newConfigs,
83
- syncRequired: context.syncRequired + 1,
84
- };
71
+ return updateSubscriptionTarget(context, KvSubscriptionKey.key(event.bucket, event.key));
85
72
  }),
86
73
  },
87
74
  'KV.UNSUBSCRIBE_ALL': {
@@ -109,14 +96,11 @@ export const kvManagerLogic = setup({
109
96
  kv_disconnecting: {
110
97
  entry: [
111
98
  // dont close the connection here, it will be closed by the nats connection machine
112
- assign({
99
+ assign(({ context }) => ({
100
+ ...detachSubscriptions(context),
113
101
  cachedConnection: null,
114
102
  cachedKvm: null,
115
- subscriptions: new Map(),
116
- syncRequired: ({ context }) => context.subscriptionConfigs.size > 0
117
- ? Math.max(context.syncRequired, 1)
118
- : context.syncRequired,
119
- }),
103
+ })),
120
104
  sendParent({ type: 'KV.DISCONNECTED' }),
121
105
  ],
122
106
  always: {
@@ -286,12 +270,7 @@ export const kvManagerLogic = setup({
286
270
  target: 'kv_disconnecting',
287
271
  },
288
272
  },
289
- entry: [
290
- ({ context }) => {
291
- // either going to be 0 or 1 (if there were multiple syncs pending)
292
- context.syncRequired = Math.min(context.syncRequired - 1, 1);
293
- },
294
- ],
273
+ entry: [assign(() => beginSubscriptionSync())],
295
274
  invoke: {
296
275
  id: 'single-instance-sync',
297
276
  src: 'kvConsolidateState',
@@ -301,27 +280,23 @@ export const kvManagerLogic = setup({
301
280
  currentState: context.subscriptions,
302
281
  targetState: context.subscriptionConfigs,
303
282
  }),
304
- onDone: {
305
- target: 'kv_connected',
306
- actions: [
307
- () => {
308
- // console.log('kvConsolidateState onDone')
309
- },
310
- assign(({ event }) => ({
311
- subscriptions: event.output.subscriptions,
312
- })),
313
- ],
314
- },
283
+ onDone: [
284
+ {
285
+ target: 'kv_error',
286
+ guard: ({ event }) => !!event.output.error,
287
+ actions: assign(({ context, event }) => finishSubscriptionSync(context, event.output)),
288
+ },
289
+ {
290
+ target: 'kv_connected',
291
+ actions: assign(({ context, event }) => finishSubscriptionSync(context, event.output)),
292
+ },
293
+ ],
315
294
  onError: {
316
295
  target: 'kv_error',
317
- actions: [
318
- assign({
319
- error: ({ event }) => {
320
- console.error('kvConsolidateState onError', event.error);
321
- return event.error;
322
- },
323
- }),
324
- ],
296
+ actions: assign(({ context, event }) => finishSubscriptionSync(context, {
297
+ subscriptions: context.subscriptions,
298
+ error: event.error instanceof Error ? event.error : new Error(String(event.error)),
299
+ })),
325
300
  },
326
301
  },
327
302
  },