@jr200-labs/xstate-nats 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +251 -0
  3. package/dist/actions/connection.d.ts +28 -0
  4. package/dist/actions/connection.d.ts.map +1 -0
  5. package/dist/actions/connection.js +102 -0
  6. package/dist/actions/connection.js.map +1 -0
  7. package/dist/actions/kv.d.ts +21 -0
  8. package/dist/actions/kv.d.ts.map +1 -0
  9. package/dist/actions/kv.js +66 -0
  10. package/dist/actions/kv.js.map +1 -0
  11. package/dist/actions/subject.d.ts +39 -0
  12. package/dist/actions/subject.d.ts.map +1 -0
  13. package/dist/actions/subject.js +79 -0
  14. package/dist/actions/subject.js.map +1 -0
  15. package/dist/actions/types.d.ts +8 -0
  16. package/dist/actions/types.d.ts.map +1 -0
  17. package/dist/actions/types.js +2 -0
  18. package/dist/actions/types.js.map +1 -0
  19. package/dist/index.d.ts +8 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/machines/kv.d.ts +190 -0
  24. package/dist/machines/kv.d.ts.map +1 -0
  25. package/dist/machines/kv.js +273 -0
  26. package/dist/machines/kv.js.map +1 -0
  27. package/dist/machines/root.d.ts +510 -0
  28. package/dist/machines/root.d.ts.map +1 -0
  29. package/dist/machines/root.js +245 -0
  30. package/dist/machines/root.js.map +1 -0
  31. package/dist/machines/subject.d.ts +95 -0
  32. package/dist/machines/subject.d.ts.map +1 -0
  33. package/dist/machines/subject.js +162 -0
  34. package/dist/machines/subject.js.map +1 -0
  35. package/dist/utils.d.ts +10 -0
  36. package/dist/utils.d.ts.map +1 -0
  37. package/dist/utils.js +27 -0
  38. package/dist/utils.js.map +1 -0
  39. package/package.json +55 -0
  40. package/src/actions/connection.test.ts +324 -0
  41. package/src/actions/connection.ts +135 -0
  42. package/src/actions/kv.test.ts +439 -0
  43. package/src/actions/kv.ts +92 -0
  44. package/src/actions/subject.test.ts +460 -0
  45. package/src/actions/subject.ts +127 -0
  46. package/src/actions/types.ts +7 -0
  47. package/src/index.ts +20 -0
  48. package/src/machines/kv.test.ts +720 -0
  49. package/src/machines/kv.ts +327 -0
  50. package/src/machines/root.test.ts +329 -0
  51. package/src/machines/root.ts +286 -0
  52. package/src/machines/subject.test.ts +272 -0
  53. package/src/machines/subject.ts +205 -0
  54. package/src/utils.test.ts +35 -0
  55. package/src/utils.ts +30 -0
@@ -0,0 +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;AAEjD,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,OAAO,IAAI,WAAW,EAC3B,KAAK,cAAc,IAAI,SAAS,GACjC,MAAM,iBAAiB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { natsMachine } from './machines/root';
2
+ export { subjectManagerLogic, } from './machines/subject';
3
+ export { kvManagerLogic, } from './machines/kv';
4
+ export { KvSubscriptionKey } from './actions/kv';
5
+ export { parseNatsResult } from './actions/connection';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,190 @@
1
+ import { NatsConnection, QueuedIterator } from '@nats-io/nats-core';
2
+ import { KvEntry, Kvm, KvOptions, KvStatus, KvWatchEntry } from '@nats-io/kv';
3
+ import { KvSubscriptionConfig } from '../actions/kv';
4
+ type InternalEvents = {
5
+ type: 'ERROR';
6
+ error: Error;
7
+ };
8
+ export type ExternalEvents = {
9
+ type: 'KV.CONNECT';
10
+ connection: NatsConnection;
11
+ } | {
12
+ type: 'KV.CONNECTED';
13
+ } | {
14
+ type: 'KV.DISCONNECTED';
15
+ } | {
16
+ type: 'KV.BUCKET_LIST';
17
+ bucket?: string;
18
+ onResult: (result: KvStatus[] | string[] | {
19
+ error: Error;
20
+ }) => void;
21
+ } | {
22
+ type: 'KV.BUCKET_CREATE';
23
+ bucket: string;
24
+ onResult: (result: {
25
+ ok: true;
26
+ } | {
27
+ ok: false;
28
+ } | {
29
+ error: Error;
30
+ }) => void;
31
+ } | {
32
+ type: 'KV.BUCKET_DELETE';
33
+ bucket: string;
34
+ onResult: (result: {
35
+ ok: true;
36
+ } | {
37
+ ok: false;
38
+ } | {
39
+ error: Error;
40
+ }) => void;
41
+ } | {
42
+ type: 'KV.GET';
43
+ bucket: string;
44
+ key: string;
45
+ onResult: (result: KvEntry | null | {
46
+ error: Error;
47
+ }) => void;
48
+ } | {
49
+ type: 'KV.PUT';
50
+ bucket: string;
51
+ key: string;
52
+ value: any;
53
+ onResult: (result: {
54
+ ok: true;
55
+ } | {
56
+ error: Error;
57
+ }) => void;
58
+ } | {
59
+ type: 'KV.DELETE';
60
+ bucket: string;
61
+ key: string;
62
+ onResult: (result: {
63
+ ok: true;
64
+ } | {
65
+ error: Error;
66
+ }) => void;
67
+ } | {
68
+ type: 'KV.SUBSCRIBE';
69
+ config: KvSubscriptionConfig;
70
+ } | {
71
+ type: 'KV.UNSUBSCRIBE';
72
+ bucket: string;
73
+ key: string;
74
+ } | {
75
+ type: 'KV.UNSUBSCRIBE_ALL';
76
+ };
77
+ export type Events = InternalEvents | ExternalEvents;
78
+ export interface Context {
79
+ uid: string;
80
+ cachedConnection: NatsConnection | null;
81
+ cachedKvm: Kvm | null;
82
+ kvmOpts?: KvOptions;
83
+ subscriptions: Map<string, QueuedIterator<KvWatchEntry>>;
84
+ subscriptionConfigs: Map<string, KvSubscriptionConfig>;
85
+ syncRequired: number;
86
+ error?: Error;
87
+ }
88
+ export declare const kvManagerLogic: import("xstate").StateMachine<Context, InternalEvents | {
89
+ type: "KV.CONNECT";
90
+ connection: NatsConnection;
91
+ } | {
92
+ type: "KV.CONNECTED";
93
+ } | {
94
+ type: "KV.DISCONNECTED";
95
+ } | {
96
+ type: "KV.BUCKET_LIST";
97
+ bucket?: string;
98
+ onResult: (result: KvStatus[] | string[] | {
99
+ error: Error;
100
+ }) => void;
101
+ } | {
102
+ type: "KV.BUCKET_CREATE";
103
+ bucket: string;
104
+ onResult: (result: {
105
+ ok: true;
106
+ } | {
107
+ ok: false;
108
+ } | {
109
+ error: Error;
110
+ }) => void;
111
+ } | {
112
+ type: "KV.BUCKET_DELETE";
113
+ bucket: string;
114
+ onResult: (result: {
115
+ ok: true;
116
+ } | {
117
+ ok: false;
118
+ } | {
119
+ error: Error;
120
+ }) => void;
121
+ } | {
122
+ type: "KV.GET";
123
+ bucket: string;
124
+ key: string;
125
+ onResult: (result: KvEntry | null | {
126
+ error: Error;
127
+ }) => void;
128
+ } | {
129
+ type: "KV.PUT";
130
+ bucket: string;
131
+ key: string;
132
+ value: any;
133
+ onResult: (result: {
134
+ ok: true;
135
+ } | {
136
+ error: Error;
137
+ }) => void;
138
+ } | {
139
+ type: "KV.DELETE";
140
+ bucket: string;
141
+ key: string;
142
+ onResult: (result: {
143
+ ok: true;
144
+ } | {
145
+ error: Error;
146
+ }) => void;
147
+ } | {
148
+ type: "KV.SUBSCRIBE";
149
+ config: KvSubscriptionConfig;
150
+ } | {
151
+ type: "KV.UNSUBSCRIBE";
152
+ bucket: string;
153
+ key: string;
154
+ } | {
155
+ type: "KV.UNSUBSCRIBE_ALL";
156
+ }, {
157
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<{
158
+ subscriptions: Map<string, QueuedIterator<KvWatchEntry>>;
159
+ }, {
160
+ kvm: Kvm | null;
161
+ connection: NatsConnection | null;
162
+ currentState: Map<string, QueuedIterator<KvWatchEntry>>;
163
+ targetState: Map<string, KvSubscriptionConfig>;
164
+ }, import("xstate").EventObject>> | undefined;
165
+ }, {
166
+ src: "kvConsolidateState";
167
+ logic: import("xstate").PromiseActorLogic<{
168
+ subscriptions: Map<string, QueuedIterator<KvWatchEntry>>;
169
+ }, {
170
+ kvm: Kvm | null;
171
+ connection: NatsConnection | null;
172
+ currentState: Map<string, QueuedIterator<KvWatchEntry>>;
173
+ targetState: Map<string, KvSubscriptionConfig>;
174
+ }, import("xstate").EventObject>;
175
+ id: string | undefined;
176
+ }, never, {
177
+ type: "hasPendingSync";
178
+ params: unknown;
179
+ }, never, "kv_idle" | "kv_check_sync" | "kv_disconnecting" | "kv_connected" | "kv_syncing" | "kv_error", string, import("xstate").NonReducibleUnknown, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
180
+ states: {
181
+ readonly kv_idle: {};
182
+ readonly kv_disconnecting: {};
183
+ readonly kv_connected: {};
184
+ readonly kv_check_sync: {};
185
+ readonly kv_syncing: {};
186
+ readonly kv_error: {};
187
+ };
188
+ }>;
189
+ export {};
190
+ //# sourceMappingURL=kv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/machines/kv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ import { jetstream } from '@nats-io/jetstream';
2
+ import { Kvm } from '@nats-io/kv';
3
+ import { assign, sendParent, setup } from 'xstate';
4
+ import { KvSubscriptionKey, kvConsolidateState } from '../actions/kv';
5
+ export const kvManagerLogic = setup({
6
+ types: {
7
+ context: {},
8
+ events: {},
9
+ },
10
+ actors: {
11
+ kvConsolidateState: kvConsolidateState,
12
+ },
13
+ guards: {
14
+ hasPendingSync: ({ context }) => {
15
+ return context.syncRequired > 0;
16
+ },
17
+ },
18
+ }).createMachine({
19
+ /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlgFcAjAKzEwBcB9XCAGzAGIBlAVQCEAUgFEAwgBVGASQByksZICCAGUlchAbQAMAXUSgADgHtYuerkP49IAB6IATJs0kAnAFYAzAEY7rgDQgAT3tXTxJNAA53KOiYrwBfOP80LDxCUgoaOiYCU1x0VlwTfCgOa1h6dHowEnQAMyqAJ2RXRyIOZJwCYjIqWgZmfFz8woIoLV0kECMTMwsrWwQANk0AFhJPNy8ffyCEHzsSV0jY2M8EpIxOtJ7M-swLQgZIbn5hcUZePi4RACVJPg0Ois01yc0mC08jnCJAA7O4Vu4YX5AvYVjDDnZ4YjXOcQB1Ut0Mn0mPd8I8qhAXoJRBIeNJPt8-gDxsDjKDLODEEiDu5FjDPOEkTtEJ4Yc5cfiuulellGKTyc9Pm8JCIlEIFD8PvxGf9ARMDGzZhzQAs4a4SHY7ItXIttiiEN5oTjcfhDBA4FZJWlWTNzMabIgALSLYUIYMSy4E6W3bJsMA+9nzRArOyhy3QiInU4RlJSm7EgZDApFKAJo1JhArTzmzTV23I3bpsLHLNRM6JPGRvNE2XyrKQMt+iswpEkRaChv2eGHHNXQkyu4WWCGAoQSpgRjldeDsEmkWY0IrFYebyTvZomcdr3zmOMMANBqGBo7-0LFaLC0CoX26KHFuthIEiAA */
20
+ initial: 'kv_idle',
21
+ context: {
22
+ uid: new Date().toISOString(),
23
+ cachedConnection: null,
24
+ cachedKvm: null,
25
+ kvmOpts: undefined,
26
+ subscriptions: new Map(),
27
+ subscriptionConfigs: new Map(),
28
+ syncRequired: 0,
29
+ },
30
+ on: {
31
+ 'KV.SUBSCRIBE': {
32
+ actions: [
33
+ assign({
34
+ subscriptionConfigs: ({ context, event }) => {
35
+ const { config } = event;
36
+ const newConfigs = new Map(context.subscriptionConfigs);
37
+ const newKvKey = KvSubscriptionKey.key(config.bucket, config.key);
38
+ newConfigs.set(newKvKey, config);
39
+ return newConfigs;
40
+ },
41
+ syncRequired: ({ context }) => context.syncRequired + 1,
42
+ }),
43
+ ],
44
+ },
45
+ 'KV.UNSUBSCRIBE': {
46
+ actions: assign(({ context, event }) => {
47
+ const newConfigs = new Map(context.subscriptionConfigs);
48
+ const newKvKey = KvSubscriptionKey.key(event.bucket, event.key);
49
+ newConfigs.delete(newKvKey);
50
+ return {
51
+ subscriptionConfigs: newConfigs,
52
+ syncRequired: context.syncRequired + 1,
53
+ };
54
+ }),
55
+ },
56
+ 'KV.UNSUBSCRIBE_ALL': {
57
+ actions: assign({
58
+ subscriptionConfigs: new Map(),
59
+ syncRequired: ({ context }) => context.syncRequired + 1,
60
+ }),
61
+ },
62
+ },
63
+ states: {
64
+ kv_idle: {
65
+ on: {
66
+ 'KV.CONNECT': {
67
+ target: 'kv_check_sync',
68
+ actions: [
69
+ assign({
70
+ cachedConnection: ({ event }) => event.connection,
71
+ cachedKvm: ({ event }) => new Kvm(event.connection),
72
+ }),
73
+ ],
74
+ },
75
+ },
76
+ },
77
+ kv_disconnecting: {
78
+ target: 'kv_idle',
79
+ entry: [
80
+ // dont close the connection here, it will be closed by the nats connection machine
81
+ assign({
82
+ cachedConnection: null,
83
+ cachedKvm: null,
84
+ subscriptions: new Map(),
85
+ }),
86
+ sendParent({ type: 'KV.DISCONNECTED' }),
87
+ ],
88
+ },
89
+ kv_connected: {
90
+ entry: [sendParent({ type: 'KV.CONNECTED' })],
91
+ always: {
92
+ target: 'kv_syncing',
93
+ guard: 'hasPendingSync',
94
+ },
95
+ on: {
96
+ 'KV.BUCKET_LIST': {
97
+ actions: async ({ context, event }) => {
98
+ try {
99
+ if (!context.cachedKvm) {
100
+ event.onResult({ error: new Error('KVM not initialized') });
101
+ return;
102
+ }
103
+ const results = [];
104
+ if (event.bucket) {
105
+ const bucket = await context.cachedKvm.open(event.bucket);
106
+ for await (const key of await bucket.keys()) {
107
+ results.push(key);
108
+ }
109
+ event.onResult(results);
110
+ }
111
+ else {
112
+ for await (const status of await context.cachedKvm.list()) {
113
+ results.push(status);
114
+ }
115
+ event.onResult(results);
116
+ }
117
+ }
118
+ catch (error) {
119
+ event.onResult({ error: error });
120
+ }
121
+ },
122
+ },
123
+ 'KV.BUCKET_CREATE': {
124
+ actions: async ({ context, event }) => {
125
+ try {
126
+ if (!context.cachedKvm)
127
+ throw new Error('KVM not initialized');
128
+ for await (const status of context.cachedKvm.list()) {
129
+ if (status.bucket === event.bucket) {
130
+ event.onResult?.({ ok: false });
131
+ return;
132
+ }
133
+ }
134
+ await context.cachedKvm.create(event.bucket);
135
+ event.onResult?.({ ok: true });
136
+ }
137
+ catch (error) {
138
+ event.onResult?.({ error: error });
139
+ }
140
+ },
141
+ },
142
+ 'KV.BUCKET_DELETE': {
143
+ actions: async ({ event }) => {
144
+ try {
145
+ try {
146
+ // workaround: theres no delete bucket method on the kvm
147
+ const connection = event.connection;
148
+ const js = jetstream(connection);
149
+ const jsm = await js.jetstreamManager();
150
+ const res = await jsm.streams.delete(`KV_${event.bucket}`);
151
+ event.onResult({ ok: res });
152
+ }
153
+ catch (streamError) {
154
+ // Stream deletion might fail, but that's okay
155
+ event.onResult({ ok: false });
156
+ }
157
+ }
158
+ catch (error) {
159
+ event.onResult({ error: error });
160
+ }
161
+ },
162
+ },
163
+ 'KV.GET': {
164
+ actions: async ({ context, event }) => {
165
+ try {
166
+ const kv = await context.cachedKvm?.open(event.bucket);
167
+ if (!kv) {
168
+ event.onResult({ error: new Error(`Bucket '${event.bucket}' not found`) });
169
+ return;
170
+ }
171
+ const entry = await kv.get(event.key);
172
+ event.onResult(entry);
173
+ }
174
+ catch (error) {
175
+ event.onResult({ error: error });
176
+ }
177
+ },
178
+ },
179
+ 'KV.PUT': {
180
+ actions: async ({ context, event }) => {
181
+ try {
182
+ const kv = await context.cachedKvm?.open(event.bucket);
183
+ if (!kv) {
184
+ event.onResult({ error: new Error(`Bucket '${event.bucket}' not found`) });
185
+ return;
186
+ }
187
+ await kv.put(event.key, event.value);
188
+ event.onResult({ ok: true });
189
+ }
190
+ catch (error) {
191
+ event.onResult({ error: error });
192
+ }
193
+ },
194
+ },
195
+ 'KV.DELETE': {
196
+ actions: async ({ context, event }) => {
197
+ try {
198
+ const kv = await context.cachedKvm?.open(event.bucket);
199
+ if (!kv) {
200
+ event.onResult({ error: new Error(`Bucket '${event.bucket}' not found`) });
201
+ return;
202
+ }
203
+ await kv.delete(event.key);
204
+ event.onResult({ ok: true });
205
+ }
206
+ catch (error) {
207
+ event.onResult({ error: error });
208
+ }
209
+ },
210
+ },
211
+ },
212
+ },
213
+ kv_check_sync: {
214
+ always: [
215
+ {
216
+ target: 'kv_syncing',
217
+ guard: 'hasPendingSync',
218
+ },
219
+ {
220
+ target: 'kv_connected',
221
+ },
222
+ ],
223
+ },
224
+ kv_syncing: {
225
+ entry: [
226
+ ({ context }) => {
227
+ // either going to be 0 or 1 (if there were multiple syncs pending)
228
+ context.syncRequired = Math.min(context.syncRequired - 1, 1);
229
+ },
230
+ ],
231
+ invoke: {
232
+ id: 'single-instance-sync',
233
+ src: 'kvConsolidateState',
234
+ input: ({ context }) => ({
235
+ kvm: context.cachedKvm,
236
+ connection: context.cachedConnection,
237
+ currentState: context.subscriptions,
238
+ targetState: context.subscriptionConfigs,
239
+ }),
240
+ onDone: {
241
+ target: 'kv_connected',
242
+ actions: [
243
+ () => {
244
+ // console.log('kvConsolidateState onDone')
245
+ },
246
+ assign(({ event }) => ({
247
+ subscriptions: event.output.subscriptions,
248
+ })),
249
+ ],
250
+ },
251
+ onError: {
252
+ target: 'kv_error',
253
+ actions: [
254
+ assign({
255
+ error: ({ event }) => {
256
+ console.error('kvConsolidateState onError', event.error);
257
+ return event.error;
258
+ },
259
+ }),
260
+ ],
261
+ },
262
+ },
263
+ },
264
+ kv_error: {
265
+ on: {
266
+ 'KV.CONNECT': {
267
+ target: 'kv_check_sync',
268
+ },
269
+ },
270
+ },
271
+ },
272
+ });
273
+ //# sourceMappingURL=kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/machines/kv.ts"],"names":[],"mappings":"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"}