@rsdk/nats.kv 5.6.0-next.0 → 5.6.0-next.2

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.
@@ -53,10 +53,14 @@ let NatsKvModule = NatsKvModule_1 = class NatsKvModule {
53
53
  };
54
54
  }
55
55
  async onApplicationBootstrap() {
56
- await this.watchKvService?.runWatches();
56
+ /**
57
+ * NOTE: не используем await, чтобы не блокировать запуск приложения.
58
+ * Если бакета нет, то приложение просто не пройдет readiness пробу.
59
+ */
60
+ this.watchKvService?.runWatches();
57
61
  }
58
62
  async onApplicationShutdown() {
59
- await this.watchKvService?.stopWatches();
63
+ this.watchKvService?.stopWatches();
60
64
  }
61
65
  };
62
66
  exports.NatsKvModule = NatsKvModule;
@@ -1 +1 @@
1
- {"version":3,"file":"nats-kv.module.js","sourceRoot":"","sources":["../src/nats-kv.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAMA,2CAAwC;AACxC,uCAA+C;AAC/C,mDAO2B;AAG3B,uDAAkD;AAClD,2CAAmD;AACnD,yDAAoD;AAM7C,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAGM;IAA7B,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAExD,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,EAAiB;QACxD,MAAM,cAAc,GAAa;YAC/B,OAAO,EAAE,IAAA,gCAAoB,EAAC,cAAc,CAAC;YAC7C,QAAQ,EAAE,+BAAa;SACxB,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qDAAuC;oBAChD,WAAW,EAAE,cAAc;wBACzB,CAAC,CAAC,IAAA,mCAAqB,EAAC,cAAc,CAAC;wBACvC,CAAC,CAAC,yCAA2B;iBAChC;gBACD;oBACE,OAAO,EAAE,qDAAuC;oBAChD,WAAW,EAAE,cAAc;wBACzB,CAAC,CAAC,IAAA,mCAAqB,EAAC,cAAc,CAAC;wBACvC,CAAC,CAAC,yCAA2B;iBAChC;gBACD;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc;iBACjC;gBACD,cAAc;aACf;YACD,OAAO,EAAE,CAAC,cAAc,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,MAAM,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;IAC3C,CAAC;CACF,CAAA;AA5CY,oCAAY;uBAAZ,YAAY;IAJxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAe,CAAC;QAC1B,SAAS,EAAE,CAAC,+BAAa,EAAE,iCAAc,CAAC;KAC3C,CAAC;qCAI6C,iCAAc;GAHhD,YAAY,CA4CxB"}
1
+ {"version":3,"file":"nats-kv.module.js","sourceRoot":"","sources":["../src/nats-kv.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAMA,2CAAwC;AACxC,uCAA+C;AAC/C,mDAO2B;AAG3B,uDAAkD;AAClD,2CAAmD;AACnD,yDAAoD;AAM7C,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAGM;IAA7B,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAExD,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,EAAiB;QACxD,MAAM,cAAc,GAAa;YAC/B,OAAO,EAAE,IAAA,gCAAoB,EAAC,cAAc,CAAC;YAC7C,QAAQ,EAAE,+BAAa;SACxB,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qDAAuC;oBAChD,WAAW,EAAE,cAAc;wBACzB,CAAC,CAAC,IAAA,mCAAqB,EAAC,cAAc,CAAC;wBACvC,CAAC,CAAC,yCAA2B;iBAChC;gBACD;oBACE,OAAO,EAAE,qDAAuC;oBAChD,WAAW,EAAE,cAAc;wBACzB,CAAC,CAAC,IAAA,mCAAqB,EAAC,cAAc,CAAC;wBACvC,CAAC,CAAC,yCAA2B;iBAChC;gBACD;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc;iBACjC;gBACD,cAAc;aACf;YACD,OAAO,EAAE,CAAC,cAAc,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B;;;WAGG;QACH,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;IACrC,CAAC;CACF,CAAA;AAhDY,oCAAY;uBAAZ,YAAY;IAJxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAe,CAAC;QAC1B,SAAS,EAAE,CAAC,+BAAa,EAAE,iCAAc,CAAC;KAC3C,CAAC;qCAI6C,iCAAc;GAHhD,YAAY,CAgDxB"}
@@ -1,8 +1,10 @@
1
- import type { KvEntry } from 'nats';
1
+ import type { KvEntry, KvWatchInclude } from 'nats';
2
2
  export type WatchConfig = {
3
3
  bucket: string;
4
4
  filter?: string;
5
5
  connectionName?: string;
6
+ domain?: string;
7
+ include?: KvWatchInclude;
6
8
  };
7
9
  export interface KvWatcher {
8
10
  onDelete(entry: KvEntry): Promise<void>;
@@ -13,6 +15,7 @@ export interface KvWatcher {
13
15
  * Key used to mark class as a watcher for key-value pairs.
14
16
  */
15
17
  export declare const WATCH_NATS_KV_KEY = "WATCH_NATS_KV";
18
+ export declare const WatchKvMetadata: import("@nestjs/core").ReflectableDecorator<WatchConfig, WatchConfig>;
16
19
  /**
17
20
  * Decorator used to mark class as a watcher for key-value pairs.
18
21
  * Needs to be used in conjunction with the `KvWatcher` interface.
@@ -20,4 +23,4 @@ export declare const WATCH_NATS_KV_KEY = "WATCH_NATS_KV";
20
23
  * @param {WatchConfig} config - The configuration for watching key-value pairs.
21
24
  * @returns {void}
22
25
  */
23
- export declare const WatchKv: import("@nestjs/core").ReflectableDecorator<WatchConfig, WatchConfig>;
26
+ export declare const WatchKv: (config: WatchConfig) => ClassDecorator;
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WatchKv = exports.WATCH_NATS_KV_KEY = void 0;
3
+ exports.WatchKv = exports.WatchKvMetadata = exports.WATCH_NATS_KV_KEY = void 0;
4
4
  const core_1 = require("@nestjs/core");
5
+ const metadata_1 = require("@rsdk/metadata");
6
+ const nats_common_1 = require("@rsdk/nats.common");
5
7
  /**
6
8
  * Key used to mark class as a watcher for key-value pairs.
7
9
  */
8
10
  exports.WATCH_NATS_KV_KEY = 'WATCH_NATS_KV';
11
+ exports.WatchKvMetadata = core_1.Reflector.createDecorator({
12
+ key: exports.WATCH_NATS_KV_KEY,
13
+ });
9
14
  /**
10
15
  * Decorator used to mark class as a watcher for key-value pairs.
11
16
  * Needs to be used in conjunction with the `KvWatcher` interface.
@@ -13,7 +18,17 @@ exports.WATCH_NATS_KV_KEY = 'WATCH_NATS_KV';
13
18
  * @param {WatchConfig} config - The configuration for watching key-value pairs.
14
19
  * @returns {void}
15
20
  */
16
- exports.WatchKv = core_1.Reflector.createDecorator({
17
- key: exports.WATCH_NATS_KV_KEY,
18
- });
21
+ const WatchKv = (config) => {
22
+ return (target) => {
23
+ (0, exports.WatchKvMetadata)(config)(target);
24
+ const streamName = `KV_${config.bucket}`;
25
+ const moduleDefinition = nats_common_1.NatsStreamIndicatorModuleGenerator.createClientModuleDefinition(target, {
26
+ streamName,
27
+ connectionName: config.connectionName,
28
+ domain: config.domain,
29
+ });
30
+ metadata_1.RsdkMetadata.setWithScope(target, metadata_1.PLATFORM_RAW_GLOBAL_METADATA_SCOPE, (0, nats_common_1.getStreamIndicatorKey)(streamName, config.connectionName, config.domain), moduleDefinition, true);
31
+ };
32
+ };
33
+ exports.WatchKv = WatchKv;
19
34
  //# sourceMappingURL=watch-kv.decorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watch-kv.decorator.js","sourceRoot":"","sources":["../src/watch-kv.decorator.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AAezC;;GAEG;AACU,QAAA,iBAAiB,GAAG,eAAe,CAAC;AAEjD;;;;;;GAMG;AACU,QAAA,OAAO,GAAG,gBAAS,CAAC,eAAe,CAAc;IAC5D,GAAG,EAAE,yBAAiB;CACvB,CAAC,CAAC"}
1
+ {"version":3,"file":"watch-kv.decorator.js","sourceRoot":"","sources":["../src/watch-kv.decorator.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AACzC,6CAGwB;AACxB,mDAG2B;AAiB3B;;GAEG;AACU,QAAA,iBAAiB,GAAG,eAAe,CAAC;AAEpC,QAAA,eAAe,GAAG,gBAAS,CAAC,eAAe,CAAc;IACpE,GAAG,EAAE,yBAAiB;CACvB,CAAC,CAAC;AAEH;;;;;;GAMG;AACI,MAAM,OAAO,GAAG,CAAC,MAAmB,EAAkB,EAAE;IAC7D,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAA,uBAAe,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QAEhC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,gBAAgB,GACpB,gDAAkC,CAAC,4BAA4B,CAAC,MAAM,EAAE;YACtE,UAAU;YACV,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEL,uBAAY,CAAC,YAAY,CACvB,MAAM,EACN,6CAAkC,EAClC,IAAA,mCAAqB,EAAC,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,EACvE,gBAAgB,EAChB,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,OAAO,WAoBlB"}
@@ -37,7 +37,8 @@ let WatchKvService = class WatchKvService {
37
37
  async runWatches() {
38
38
  const watchers = await this.discoverWatchers();
39
39
  await Promise.all(watchers.map(async ({ instance, metadata }) => {
40
- await this.nats.waitForBucketExists(metadata.bucket, 5000);
40
+ this.logger.info('NatsKV watcher starting...', { metadata });
41
+ await this.nats.waitForBucketExists(metadata.bucket);
41
42
  await this.runWatch(metadata, instance);
42
43
  this.logger.info('NatsKV watcher started', { metadata });
43
44
  }));
@@ -68,7 +69,7 @@ let WatchKvService = class WatchKvService {
68
69
  const kv = await this.nats.bind({
69
70
  bucketName: config.bucket,
70
71
  });
71
- this.watch(kv.getRawStorage(), { include: nats_1.KvWatchInclude.LastValue }, async (event) => {
72
+ this.watch(kv.getRawStorage(), { include: config.include ?? nats_1.KvWatchInclude.LastValue }, async (event) => {
72
73
  switch (event.operation) {
73
74
  case 'PUT':
74
75
  await watcher.onPut(event);
@@ -97,7 +98,7 @@ let WatchKvService = class WatchKvService {
97
98
  if (!clsRef) {
98
99
  return acc;
99
100
  }
100
- const metadata = this.discovery.getMetadataByDecorator(watch_kv_decorator_1.WatchKv, watcher);
101
+ const metadata = this.discovery.getMetadataByDecorator(watch_kv_decorator_1.WatchKvMetadata, watcher);
101
102
  if (metadata && metadata.connectionName === this.connectionName) {
102
103
  acc.push({ instance: watcher.instance, metadata });
103
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"watch-kv.service.js","sourceRoot":"","sources":["../src/watch-kv.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch-kv.service.js","sourceRoot":"","sources":["../src/watch-kv.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/nats.kv",
3
- "version": "5.6.0-next.0",
3
+ "version": "5.6.0-next.2",
4
4
  "description": "Nats NestJS key-Value storage",
5
5
  "main": "dist/index.js",
6
6
  "license": "Apache License 2.0",
@@ -38,5 +38,5 @@
38
38
  "rxjs": "^7.8.1"
39
39
  },
40
40
  "nx": {},
41
- "gitHead": "cecf86b3768fdf74e8d02434379258126410bea5"
41
+ "gitHead": "0b92c4eb882f52e929f25062c16f8a0936db402f"
42
42
  }
@@ -62,10 +62,14 @@ export class NatsKvModule
62
62
  }
63
63
 
64
64
  async onApplicationBootstrap(): Promise<void> {
65
- await this.watchKvService?.runWatches();
65
+ /**
66
+ * NOTE: не используем await, чтобы не блокировать запуск приложения.
67
+ * Если бакета нет, то приложение просто не пройдет readiness пробу.
68
+ */
69
+ this.watchKvService?.runWatches();
66
70
  }
67
71
 
68
72
  async onApplicationShutdown(): Promise<void> {
69
- await this.watchKvService?.stopWatches();
73
+ this.watchKvService?.stopWatches();
70
74
  }
71
75
  }
@@ -1,10 +1,20 @@
1
1
  import { Reflector } from '@nestjs/core';
2
- import type { KvEntry } from 'nats';
2
+ import {
3
+ PLATFORM_RAW_GLOBAL_METADATA_SCOPE,
4
+ RsdkMetadata,
5
+ } from '@rsdk/metadata';
6
+ import {
7
+ getStreamIndicatorKey,
8
+ NatsStreamIndicatorModuleGenerator,
9
+ } from '@rsdk/nats.common';
10
+ import type { KvEntry, KvWatchInclude } from 'nats';
3
11
 
4
12
  export type WatchConfig = {
5
13
  bucket: string;
6
14
  filter?: string;
7
15
  connectionName?: string;
16
+ domain?: string;
17
+ include?: KvWatchInclude;
8
18
  };
9
19
 
10
20
  export interface KvWatcher {
@@ -18,6 +28,10 @@ export interface KvWatcher {
18
28
  */
19
29
  export const WATCH_NATS_KV_KEY = 'WATCH_NATS_KV';
20
30
 
31
+ export const WatchKvMetadata = Reflector.createDecorator<WatchConfig>({
32
+ key: WATCH_NATS_KV_KEY,
33
+ });
34
+
21
35
  /**
22
36
  * Decorator used to mark class as a watcher for key-value pairs.
23
37
  * Needs to be used in conjunction with the `KvWatcher` interface.
@@ -25,6 +39,24 @@ export const WATCH_NATS_KV_KEY = 'WATCH_NATS_KV';
25
39
  * @param {WatchConfig} config - The configuration for watching key-value pairs.
26
40
  * @returns {void}
27
41
  */
28
- export const WatchKv = Reflector.createDecorator<WatchConfig>({
29
- key: WATCH_NATS_KV_KEY,
30
- });
42
+ export const WatchKv = (config: WatchConfig): ClassDecorator => {
43
+ return (target) => {
44
+ WatchKvMetadata(config)(target);
45
+
46
+ const streamName = `KV_${config.bucket}`;
47
+ const moduleDefinition =
48
+ NatsStreamIndicatorModuleGenerator.createClientModuleDefinition(target, {
49
+ streamName,
50
+ connectionName: config.connectionName,
51
+ domain: config.domain,
52
+ });
53
+
54
+ RsdkMetadata.setWithScope(
55
+ target,
56
+ PLATFORM_RAW_GLOBAL_METADATA_SCOPE,
57
+ getStreamIndicatorKey(streamName, config.connectionName, config.domain),
58
+ moduleDefinition,
59
+ true,
60
+ );
61
+ };
62
+ };
@@ -7,7 +7,7 @@ import { KvWatchInclude } from 'nats';
7
7
 
8
8
  import { NatsKvService } from './nats-kv.service';
9
9
  import type { KvWatcher, WatchConfig } from './watch-kv.decorator';
10
- import { WatchKv } from './watch-kv.decorator';
10
+ import { WatchKvMetadata } from './watch-kv.decorator';
11
11
 
12
12
  export class WatchKvService {
13
13
  constructor(
@@ -28,7 +28,8 @@ export class WatchKvService {
28
28
 
29
29
  await Promise.all(
30
30
  watchers.map(async ({ instance, metadata }) => {
31
- await this.nats.waitForBucketExists(metadata.bucket, 5000);
31
+ this.logger.info('NatsKV watcher starting...', { metadata });
32
+ await this.nats.waitForBucketExists(metadata.bucket);
32
33
  await this.runWatch(metadata, instance);
33
34
  this.logger.info('NatsKV watcher started', { metadata });
34
35
  }),
@@ -73,7 +74,7 @@ export class WatchKvService {
73
74
 
74
75
  this.watch(
75
76
  kv.getRawStorage(),
76
- { include: KvWatchInclude.LastValue },
77
+ { include: config.include ?? KvWatchInclude.LastValue },
77
78
  async (event) => {
78
79
  switch (event.operation) {
79
80
  case 'PUT':
@@ -108,7 +109,7 @@ export class WatchKvService {
108
109
  }
109
110
 
110
111
  const metadata = this.discovery.getMetadataByDecorator(
111
- WatchKv,
112
+ WatchKvMetadata,
112
113
  watcher,
113
114
  );
114
115