@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.
- package/dist/nats-kv.module.js +6 -2
- package/dist/nats-kv.module.js.map +1 -1
- package/dist/watch-kv.decorator.d.ts +5 -2
- package/dist/watch-kv.decorator.js +19 -4
- package/dist/watch-kv.decorator.js.map +1 -1
- package/dist/watch-kv.service.js +4 -3
- package/dist/watch-kv.service.js.map +1 -1
- package/package.json +2 -2
- package/src/nats-kv.module.ts +6 -2
- package/src/watch-kv.decorator.ts +36 -4
- package/src/watch-kv.service.ts +5 -4
package/dist/nats-kv.module.js
CHANGED
|
@@ -53,10 +53,14 @@ let NatsKvModule = NatsKvModule_1 = class NatsKvModule {
|
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
async onApplicationBootstrap() {
|
|
56
|
-
|
|
56
|
+
/**
|
|
57
|
+
* NOTE: не используем await, чтобы не блокировать запуск приложения.
|
|
58
|
+
* Если бакета нет, то приложение просто не пройдет readiness пробу.
|
|
59
|
+
*/
|
|
60
|
+
this.watchKvService?.runWatches();
|
|
57
61
|
}
|
|
58
62
|
async onApplicationShutdown() {
|
|
59
|
-
|
|
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,
|
|
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:
|
|
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
|
-
|
|
17
|
-
|
|
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;
|
|
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"}
|
package/dist/watch-kv.service.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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":";;;;;;;;;;;;;;;AAAA,2CAAwC;AACxC,uCAAgD;AAChD,qCAA0C;AAG1C,+BAAsC;AAEtC,uDAAkD;AAElD,
|
|
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.
|
|
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": "
|
|
41
|
+
"gitHead": "0b92c4eb882f52e929f25062c16f8a0936db402f"
|
|
42
42
|
}
|
package/src/nats-kv.module.ts
CHANGED
|
@@ -62,10 +62,14 @@ export class NatsKvModule
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
async onApplicationBootstrap(): Promise<void> {
|
|
65
|
-
|
|
65
|
+
/**
|
|
66
|
+
* NOTE: не используем await, чтобы не блокировать запуск приложения.
|
|
67
|
+
* Если бакета нет, то приложение просто не пройдет readiness пробу.
|
|
68
|
+
*/
|
|
69
|
+
this.watchKvService?.runWatches();
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
async onApplicationShutdown(): Promise<void> {
|
|
69
|
-
|
|
73
|
+
this.watchKvService?.stopWatches();
|
|
70
74
|
}
|
|
71
75
|
}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { Reflector } from '@nestjs/core';
|
|
2
|
-
import
|
|
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 =
|
|
29
|
-
|
|
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
|
+
};
|
package/src/watch-kv.service.ts
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
112
|
+
WatchKvMetadata,
|
|
112
113
|
watcher,
|
|
113
114
|
);
|
|
114
115
|
|