@rsdk/nats.common 5.4.0-next.1 → 5.4.0-next.3

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 (56) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/client/client.constants.d.ts +5 -1
  3. package/dist/client/client.constants.js +8 -2
  4. package/dist/client/client.constants.js.map +1 -1
  5. package/dist/client/client.decorators.d.ts +2 -2
  6. package/dist/client/client.decorators.js +8 -4
  7. package/dist/client/client.decorators.js.map +1 -1
  8. package/dist/client/client.metadata.d.ts +1 -1
  9. package/dist/client/client.module.d.ts +7 -0
  10. package/dist/client/client.module.js +23 -7
  11. package/dist/client/client.module.js.map +1 -1
  12. package/dist/client/client.provider.d.ts +4 -2
  13. package/dist/client/client.provider.js +8 -13
  14. package/dist/client/client.provider.js.map +1 -1
  15. package/dist/client/jetstream-client.provider.d.ts +2 -0
  16. package/dist/client/jetstream-client.provider.js +12 -0
  17. package/dist/client/jetstream-client.provider.js.map +1 -0
  18. package/dist/index.d.ts +5 -5
  19. package/dist/index.js +25 -15
  20. package/dist/index.js.map +1 -1
  21. package/dist/utils/get-stream-name.fn.d.ts +5 -0
  22. package/dist/utils/get-stream-name.fn.js +11 -0
  23. package/dist/utils/get-stream-name.fn.js.map +1 -0
  24. package/dist/utils/get-subject-name.fn.d.ts +5 -0
  25. package/dist/utils/get-subject-name.fn.js +11 -0
  26. package/dist/utils/get-subject-name.fn.js.map +1 -0
  27. package/package.json +3 -2
  28. package/src/client/client.constants.ts +14 -1
  29. package/src/client/client.decorators.ts +17 -5
  30. package/src/client/client.metadata.ts +1 -1
  31. package/src/client/client.module.ts +48 -7
  32. package/src/client/client.provider.ts +12 -16
  33. package/src/client/jetstream-client.provider.ts +13 -0
  34. package/src/index.ts +7 -17
  35. package/src/utils/get-stream-name.fn.ts +8 -0
  36. package/src/utils/get-subject-name.fn.ts +11 -0
  37. package/dist/client/producer.provider.d.ts +0 -4
  38. package/dist/client/producer.provider.js +0 -12
  39. package/dist/client/producer.provider.js.map +0 -1
  40. package/dist/event.codec.d.ts +0 -22
  41. package/dist/event.codec.js +0 -32
  42. package/dist/event.codec.js.map +0 -1
  43. package/dist/event.type.d.ts +0 -23
  44. package/dist/event.type.js +0 -18
  45. package/dist/event.type.js.map +0 -1
  46. package/dist/exceptions/payload-format.exception.d.ts +0 -5
  47. package/dist/exceptions/payload-format.exception.js +0 -11
  48. package/dist/exceptions/payload-format.exception.js.map +0 -1
  49. package/dist/payload.format.d.ts +0 -31
  50. package/dist/payload.format.js +0 -46
  51. package/dist/payload.format.js.map +0 -1
  52. package/src/client/producer.provider.ts +0 -17
  53. package/src/event.codec.ts +0 -37
  54. package/src/event.type.ts +0 -38
  55. package/src/exceptions/payload-format.exception.ts +0 -10
  56. package/src/payload.format.ts +0 -51
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [5.4.0-next.3](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.2...v5.4.0-next.3) (2024-11-25)
7
+
8
+ **Note:** Version bump only for package @rsdk/nats.common
9
+
10
+ ## [5.4.0-next.2](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.1...v5.4.0-next.2) (2024-11-25)
11
+
12
+ ### Features
13
+
14
+ * **nats:** nats transport/kv/os + examples + docs ([#306](https://github.com/R-Vision/rsdk/issues/306)) ([de67eed](https://github.com/R-Vision/rsdk/commit/de67eed8b4cb17ec9d359067eae1e0c35d6cc736))
15
+
6
16
  ## [5.4.0-next.1](https://github.com/R-Vision/rsdk/compare/v5.4.0-next.0...v5.4.0-next.1) (2024-11-08)
7
17
 
8
18
  **Note:** Version bump only for package @rsdk/nats.common
@@ -1,2 +1,6 @@
1
+ export declare const NATS_CLIENT_INJECTION_TOKEN_FOR_PACKAGE = "NATS_CLIENT_FOR_PACKAGE";
2
+ export declare const NATS_JET_STREAM_INJECTION_TOKEN_FOR_PACKAGE = "NATS_JET_STREAM_FOR_PACKAGE";
1
3
  export declare const NATS_CLIENT_INJECTION_TOKEN: unique symbol;
2
- export declare const NATS_PRODUCER_INJECTION_TOKEN: unique symbol;
4
+ export declare const NATS_JETSTREAM_CLIENT_INJECTION_TOKEN: unique symbol;
5
+ export declare const createNatsClientToken: (name: string) => string;
6
+ export declare const createNatsJetStreamToken: (name: string) => string;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NATS_PRODUCER_INJECTION_TOKEN = exports.NATS_CLIENT_INJECTION_TOKEN = void 0;
3
+ exports.createNatsJetStreamToken = exports.createNatsClientToken = exports.NATS_JETSTREAM_CLIENT_INJECTION_TOKEN = exports.NATS_CLIENT_INJECTION_TOKEN = exports.NATS_JET_STREAM_INJECTION_TOKEN_FOR_PACKAGE = exports.NATS_CLIENT_INJECTION_TOKEN_FOR_PACKAGE = void 0;
4
+ exports.NATS_CLIENT_INJECTION_TOKEN_FOR_PACKAGE = 'NATS_CLIENT_FOR_PACKAGE';
5
+ exports.NATS_JET_STREAM_INJECTION_TOKEN_FOR_PACKAGE = 'NATS_JET_STREAM_FOR_PACKAGE';
4
6
  exports.NATS_CLIENT_INJECTION_TOKEN = Symbol('NatsClient');
5
- exports.NATS_PRODUCER_INJECTION_TOKEN = Symbol('NatsProducer');
7
+ exports.NATS_JETSTREAM_CLIENT_INJECTION_TOKEN = Symbol('NatsJetStreamClient');
8
+ const createNatsClientToken = (name) => `NATS_CLIENT_${name.toUpperCase()}`;
9
+ exports.createNatsClientToken = createNatsClientToken;
10
+ const createNatsJetStreamToken = (name) => `NATS_JET_STREAM_${name.toUpperCase()}`;
11
+ exports.createNatsJetStreamToken = createNatsJetStreamToken;
6
12
  //# sourceMappingURL=client.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.constants.js","sourceRoot":"","sources":["../../src/client/client.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACnD,QAAA,6BAA6B,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"client.constants.js","sourceRoot":"","sources":["../../src/client/client.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,uCAAuC,GAClD,yBAAyB,CAAC;AACf,QAAA,2CAA2C,GACtD,6BAA6B,CAAC;AAEnB,QAAA,2BAA2B,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACnD,QAAA,qCAAqC,GAAG,MAAM,CACzD,qBAAqB,CACtB,CAAC;AAEK,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC5D,eAAe,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;AADzB,QAAA,qBAAqB,yBACI;AAE/B,MAAM,wBAAwB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/D,mBAAmB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;AAD7B,QAAA,wBAAwB,4BACK"}
@@ -1,2 +1,2 @@
1
- export declare const InjectNatsClient: () => ParameterDecorator;
2
- export declare const InjectNatsProducer: () => ParameterDecorator;
1
+ export declare const InjectNatsClient: (connectionName?: string) => ParameterDecorator;
2
+ export declare const InjectNatsJetStreamClient: (connectionName?: string) => ParameterDecorator;
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InjectNatsProducer = exports.InjectNatsClient = void 0;
3
+ exports.InjectNatsJetStreamClient = exports.InjectNatsClient = void 0;
4
4
  const common_1 = require("@nestjs/common");
5
5
  const client_constants_1 = require("./client.constants");
6
- const InjectNatsClient = () => (0, common_1.Inject)(client_constants_1.NATS_CLIENT_INJECTION_TOKEN);
6
+ const InjectNatsClient = (connectionName) => (0, common_1.Inject)(connectionName
7
+ ? (0, client_constants_1.createNatsClientToken)(connectionName)
8
+ : client_constants_1.NATS_CLIENT_INJECTION_TOKEN);
7
9
  exports.InjectNatsClient = InjectNatsClient;
8
- const InjectNatsProducer = () => (0, common_1.Inject)(client_constants_1.NATS_PRODUCER_INJECTION_TOKEN);
9
- exports.InjectNatsProducer = InjectNatsProducer;
10
+ const InjectNatsJetStreamClient = (connectionName) => (0, common_1.Inject)(connectionName
11
+ ? (0, client_constants_1.createNatsJetStreamToken)(connectionName)
12
+ : client_constants_1.NATS_JETSTREAM_CLIENT_INJECTION_TOKEN);
13
+ exports.InjectNatsJetStreamClient = InjectNatsJetStreamClient;
10
14
  //# sourceMappingURL=client.decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.decorators.js","sourceRoot":"","sources":["../../src/client/client.decorators.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,yDAG4B;AAErB,MAAM,gBAAgB,GAAG,GAAuB,EAAE,CACvD,IAAA,eAAM,EAAC,8CAA2B,CAAC,CAAC;AADzB,QAAA,gBAAgB,oBACS;AAE/B,MAAM,kBAAkB,GAAG,GAAuB,EAAE,CACzD,IAAA,eAAM,EAAC,gDAA6B,CAAC,CAAC;AAD3B,QAAA,kBAAkB,sBACS"}
1
+ {"version":3,"file":"client.decorators.js","sourceRoot":"","sources":["../../src/client/client.decorators.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,yDAK4B;AAErB,MAAM,gBAAgB,GAAG,CAAC,cAAuB,EAAsB,EAAE,CAC9E,IAAA,eAAM,EACJ,cAAc;IACZ,CAAC,CAAC,IAAA,wCAAqB,EAAC,cAAc,CAAC;IACvC,CAAC,CAAC,8CAA2B,CAChC,CAAC;AALS,QAAA,gBAAgB,oBAKzB;AAEG,MAAM,yBAAyB,GAAG,CACvC,cAAuB,EACH,EAAE,CACtB,IAAA,eAAM,EACJ,cAAc;IACZ,CAAC,CAAC,IAAA,2CAAwB,EAAC,cAAc,CAAC;IAC1C,CAAC,CAAC,wDAAqC,CAC1C,CAAC;AAPS,QAAA,yBAAyB,6BAOlC"}
@@ -1,4 +1,4 @@
1
- import type { EventType } from '../event.type';
1
+ import type { EventType } from '@rsdk/events.common';
2
2
  export declare enum TopicType {
3
3
  PRODUCE = 0
4
4
  }
@@ -1,2 +1,9 @@
1
+ import type { DynamicModule } from '@nestjs/common';
2
+ import type { Constructor } from '@rsdk/common';
3
+ import { DefaultNatsConfig } from './client.config';
1
4
  export declare class NatsClientModule {
5
+ static forRoot(connections?: {
6
+ connectionName: string;
7
+ config: Constructor<DefaultNatsConfig>;
8
+ }[]): DynamicModule;
2
9
  }
@@ -5,23 +5,39 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var NatsClientModule_1;
8
9
  Object.defineProperty(exports, "__esModule", { value: true });
9
10
  exports.NatsClientModule = void 0;
10
11
  const common_1 = require("@nestjs/common");
11
- const core_1 = require("@rsdk/core");
12
12
  const client_config_1 = require("./client.config");
13
+ const client_constants_1 = require("./client.constants");
13
14
  const client_provider_1 = require("./client.provider");
14
- const producer_provider_1 = require("./producer.provider");
15
+ const jetstream_client_provider_1 = require("./jetstream-client.provider");
15
16
  const topics_service_1 = require("./topics.service");
16
- let NatsClientModule = class NatsClientModule {
17
+ let NatsClientModule = NatsClientModule_1 = class NatsClientModule {
18
+ static forRoot(connections) {
19
+ const providers = [];
20
+ if (connections) {
21
+ for (const { connectionName, config } of connections) {
22
+ providers.push((0, client_provider_1.createNatsProvider)(config, (0, client_constants_1.createNatsClientToken)(connectionName)), (0, jetstream_client_provider_1.createNatsJetStreamProvider)((0, client_constants_1.createNatsClientToken)(connectionName), (0, client_constants_1.createNatsJetStreamToken)(connectionName)));
23
+ }
24
+ }
25
+ else {
26
+ providers.push((0, client_provider_1.createNatsProvider)(client_config_1.DefaultNatsConfig, client_constants_1.NATS_CLIENT_INJECTION_TOKEN), (0, jetstream_client_provider_1.createNatsJetStreamProvider)(client_constants_1.NATS_CLIENT_INJECTION_TOKEN, client_constants_1.NATS_JETSTREAM_CLIENT_INJECTION_TOKEN));
27
+ }
28
+ return {
29
+ module: NatsClientModule_1,
30
+ providers,
31
+ exports: providers,
32
+ };
33
+ }
17
34
  };
18
35
  exports.NatsClientModule = NatsClientModule;
19
- exports.NatsClientModule = NatsClientModule = __decorate([
36
+ exports.NatsClientModule = NatsClientModule = NatsClientModule_1 = __decorate([
20
37
  (0, common_1.Global)(),
21
38
  (0, common_1.Module)({
22
- imports: [core_1.PlatformConfigModule.forFeature(client_config_1.DefaultNatsConfig)],
23
- providers: [producer_provider_1.natsProducerProvider, client_provider_1.natsProvider, topics_service_1.TopicsService],
24
- exports: [producer_provider_1.natsProducerProvider, client_provider_1.natsProvider, topics_service_1.TopicsService],
39
+ providers: [topics_service_1.TopicsService],
40
+ exports: [topics_service_1.TopicsService],
25
41
  })
26
42
  ], NatsClientModule);
27
43
  //# sourceMappingURL=client.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.module.js","sourceRoot":"","sources":["../../src/client/client.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,qCAAkD;AAElD,mDAAoD;AACpD,uDAAiD;AACjD,2DAA2D;AAC3D,qDAAiD;AAQ1C,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAN5B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,2BAAoB,CAAC,UAAU,CAAC,iCAAiB,CAAC,CAAC;QAC7D,SAAS,EAAE,CAAC,wCAAoB,EAAE,8BAAY,EAAE,8BAAa,CAAC;QAC9D,OAAO,EAAE,CAAC,wCAAoB,EAAE,8BAAY,EAAE,8BAAa,CAAC;KAC7D,CAAC;GACW,gBAAgB,CAAG"}
1
+ {"version":3,"file":"client.module.js","sourceRoot":"","sources":["../../src/client/client.module.ts"],"names":[],"mappings":";;;;;;;;;;AACA,2CAAgD;AAGhD,mDAAoD;AACpD,yDAK4B;AAC5B,uDAAuD;AACvD,2EAA0E;AAC1E,qDAAiD;AAO1C,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAC3B,MAAM,CAAC,OAAO,CACZ,WAGG;QAEH,MAAM,SAAS,GAAe,EAAE,CAAC;QAEjC,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;gBACrD,SAAS,CAAC,IAAI,CACZ,IAAA,oCAAkB,EAAC,MAAM,EAAE,IAAA,wCAAqB,EAAC,cAAc,CAAC,CAAC,EACjE,IAAA,uDAA2B,EACzB,IAAA,wCAAqB,EAAC,cAAc,CAAC,EACrC,IAAA,2CAAwB,EAAC,cAAc,CAAC,CACzC,CACF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CACZ,IAAA,oCAAkB,EAAC,iCAAiB,EAAE,8CAA2B,CAAC,EAClE,IAAA,uDAA2B,EACzB,8CAA2B,EAC3B,wDAAqC,CACtC,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,kBAAgB;YACxB,SAAS;YACT,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,4CAAgB;2BAAhB,gBAAgB;IAL5B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,gBAAgB,CAmC5B"}
@@ -1,2 +1,4 @@
1
- import type { FactoryProvider } from '@nestjs/common';
2
- export declare const natsProvider: FactoryProvider;
1
+ import type { FactoryProvider, InjectionToken } from '@nestjs/common';
2
+ import type { Constructor } from '@rsdk/common';
3
+ import type { DefaultNatsConfig } from './client.config';
4
+ export declare const createNatsProvider: (config: Constructor<DefaultNatsConfig>, token: InjectionToken) => FactoryProvider;
@@ -1,18 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.natsProvider = void 0;
4
- const core_1 = require("@rsdk/core");
3
+ exports.createNatsProvider = void 0;
5
4
  const nats_1 = require("nats");
6
- const client_config_1 = require("./client.config");
7
- const client_constants_1 = require("./client.constants");
8
- exports.natsProvider = {
9
- inject: [client_config_1.DefaultNatsConfig, core_1.APP_NAME],
10
- provide: client_constants_1.NATS_CLIENT_INJECTION_TOKEN,
11
- async useFactory(config, name) {
12
- return await (0, nats_1.connect)({
13
- name: `${name}-${process.pid}`,
14
- ...config,
15
- });
5
+ const createNatsProvider = (config, token) => ({
6
+ inject: [config],
7
+ provide: token,
8
+ async useFactory(config) {
9
+ return await (0, nats_1.connect)(config);
16
10
  },
17
- };
11
+ });
12
+ exports.createNatsProvider = createNatsProvider;
18
13
  //# sourceMappingURL=client.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.provider.js","sourceRoot":"","sources":["../../src/client/client.provider.ts"],"names":[],"mappings":";;;AACA,qCAAsC;AAEtC,+BAA+B;AAE/B,mDAAoD;AACpD,yDAAiE;AAEpD,QAAA,YAAY,GAAoB;IAC3C,MAAM,EAAE,CAAC,iCAAiB,EAAE,eAAQ,CAAC;IACrC,OAAO,EAAE,8CAA2B;IACpC,KAAK,CAAC,UAAU,CACd,MAAyB,EACzB,IAAY;QAEZ,OAAO,MAAM,IAAA,cAAO,EAAC;YACnB,IAAI,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;YAC9B,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"client.provider.js","sourceRoot":"","sources":["../../src/client/client.provider.ts"],"names":[],"mappings":";;;AAGA,+BAA+B;AAIxB,MAAM,kBAAkB,GAAG,CAChC,MAAsC,EACtC,KAAqB,EACJ,EAAE,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK;IACd,KAAK,CAAC,UAAU,CAAC,MAAyB;QACxC,OAAO,MAAM,IAAA,cAAO,EAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF,CAAC,CAAC;AATU,QAAA,kBAAkB,sBAS5B"}
@@ -0,0 +1,2 @@
1
+ import type { FactoryProvider, InjectionToken } from '@nestjs/common';
2
+ export declare const createNatsJetStreamProvider: (natsClientToken: InjectionToken, natsJetStreamToken: InjectionToken) => FactoryProvider;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNatsJetStreamProvider = void 0;
4
+ const createNatsJetStreamProvider = (natsClientToken, natsJetStreamToken) => ({
5
+ inject: [natsClientToken],
6
+ provide: natsJetStreamToken,
7
+ useFactory(client) {
8
+ return client.jetstream();
9
+ },
10
+ });
11
+ exports.createNatsJetStreamProvider = createNatsJetStreamProvider;
12
+ //# sourceMappingURL=jetstream-client.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jetstream-client.provider.js","sourceRoot":"","sources":["../../src/client/jetstream-client.provider.ts"],"names":[],"mappings":";;;AAGO,MAAM,2BAA2B,GAAG,CACzC,eAA+B,EAC/B,kBAAkC,EACjB,EAAE,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,eAAe,CAAC;IACzB,OAAO,EAAE,kBAAkB;IAC3B,UAAU,CAAC,MAAsB;QAC/B,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC;AATU,QAAA,2BAA2B,+BASrC"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { EventType, EventPayload, isEventType, getSubjectName, } from './event.type';
2
- export { EventCodec, ProtoEventCodec, JSONEventCodec } from './event.codec';
3
- export { PayloadFormat, DEFAULT_PAYLOAD_FORMAT, X_FORMAT_HEADER, X_TYPE_HEADER, } from './payload.format';
1
+ export { getStreamName } from './utils/get-stream-name.fn';
2
+ export { getSubjectName } from './utils/get-subject-name.fn';
4
3
  export { NatsTopicMetadata, NatsTopicMetadataByEventType, NatsTopicMetadataByTopic, TopicType, NATS_TOPIC_RSDK_METADATA_SCOPE, } from './client/client.metadata';
5
- export { NATS_CLIENT_INJECTION_TOKEN, NATS_PRODUCER_INJECTION_TOKEN, } from './client/client.constants';
6
- export type { Producer } from './client/producer.provider';
4
+ export * from './client/client.constants';
5
+ export { InjectNatsClient, InjectNatsJetStreamClient, } from './client/client.decorators';
7
6
  export { NatsClientModule } from './client/client.module';
8
7
  export { handleNatsException } from './exceptions/exception.handler';
8
+ export { DefaultNatsConfig } from './client/client.config';
package/dist/index.js CHANGED
@@ -1,25 +1,35 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleNatsException = exports.NatsClientModule = exports.NATS_PRODUCER_INJECTION_TOKEN = exports.NATS_CLIENT_INJECTION_TOKEN = exports.NATS_TOPIC_RSDK_METADATA_SCOPE = exports.TopicType = exports.X_TYPE_HEADER = exports.X_FORMAT_HEADER = exports.DEFAULT_PAYLOAD_FORMAT = exports.PayloadFormat = exports.JSONEventCodec = exports.ProtoEventCodec = exports.getSubjectName = exports.isEventType = void 0;
4
- var event_type_1 = require("./event.type");
5
- Object.defineProperty(exports, "isEventType", { enumerable: true, get: function () { return event_type_1.isEventType; } });
6
- Object.defineProperty(exports, "getSubjectName", { enumerable: true, get: function () { return event_type_1.getSubjectName; } });
7
- var event_codec_1 = require("./event.codec");
8
- Object.defineProperty(exports, "ProtoEventCodec", { enumerable: true, get: function () { return event_codec_1.ProtoEventCodec; } });
9
- Object.defineProperty(exports, "JSONEventCodec", { enumerable: true, get: function () { return event_codec_1.JSONEventCodec; } });
10
- var payload_format_1 = require("./payload.format");
11
- Object.defineProperty(exports, "PayloadFormat", { enumerable: true, get: function () { return payload_format_1.PayloadFormat; } });
12
- Object.defineProperty(exports, "DEFAULT_PAYLOAD_FORMAT", { enumerable: true, get: function () { return payload_format_1.DEFAULT_PAYLOAD_FORMAT; } });
13
- Object.defineProperty(exports, "X_FORMAT_HEADER", { enumerable: true, get: function () { return payload_format_1.X_FORMAT_HEADER; } });
14
- Object.defineProperty(exports, "X_TYPE_HEADER", { enumerable: true, get: function () { return payload_format_1.X_TYPE_HEADER; } });
17
+ exports.DefaultNatsConfig = exports.handleNatsException = exports.NatsClientModule = exports.InjectNatsJetStreamClient = exports.InjectNatsClient = exports.NATS_TOPIC_RSDK_METADATA_SCOPE = exports.TopicType = exports.getSubjectName = exports.getStreamName = void 0;
18
+ var get_stream_name_fn_1 = require("./utils/get-stream-name.fn");
19
+ Object.defineProperty(exports, "getStreamName", { enumerable: true, get: function () { return get_stream_name_fn_1.getStreamName; } });
20
+ var get_subject_name_fn_1 = require("./utils/get-subject-name.fn");
21
+ Object.defineProperty(exports, "getSubjectName", { enumerable: true, get: function () { return get_subject_name_fn_1.getSubjectName; } });
15
22
  var client_metadata_1 = require("./client/client.metadata");
16
23
  Object.defineProperty(exports, "TopicType", { enumerable: true, get: function () { return client_metadata_1.TopicType; } });
17
24
  Object.defineProperty(exports, "NATS_TOPIC_RSDK_METADATA_SCOPE", { enumerable: true, get: function () { return client_metadata_1.NATS_TOPIC_RSDK_METADATA_SCOPE; } });
18
- var client_constants_1 = require("./client/client.constants");
19
- Object.defineProperty(exports, "NATS_CLIENT_INJECTION_TOKEN", { enumerable: true, get: function () { return client_constants_1.NATS_CLIENT_INJECTION_TOKEN; } });
20
- Object.defineProperty(exports, "NATS_PRODUCER_INJECTION_TOKEN", { enumerable: true, get: function () { return client_constants_1.NATS_PRODUCER_INJECTION_TOKEN; } });
25
+ __exportStar(require("./client/client.constants"), exports);
26
+ var client_decorators_1 = require("./client/client.decorators");
27
+ Object.defineProperty(exports, "InjectNatsClient", { enumerable: true, get: function () { return client_decorators_1.InjectNatsClient; } });
28
+ Object.defineProperty(exports, "InjectNatsJetStreamClient", { enumerable: true, get: function () { return client_decorators_1.InjectNatsJetStreamClient; } });
21
29
  var client_module_1 = require("./client/client.module");
22
30
  Object.defineProperty(exports, "NatsClientModule", { enumerable: true, get: function () { return client_module_1.NatsClientModule; } });
23
31
  var exception_handler_1 = require("./exceptions/exception.handler");
24
32
  Object.defineProperty(exports, "handleNatsException", { enumerable: true, get: function () { return exception_handler_1.handleNatsException; } });
33
+ var client_config_1 = require("./client/client.config");
34
+ Object.defineProperty(exports, "DefaultNatsConfig", { enumerable: true, get: function () { return client_config_1.DefaultNatsConfig; } });
25
35
  //# 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,2CAKsB;AAFpB,yGAAA,WAAW,OAAA;AACX,4GAAA,cAAc,OAAA;AAEhB,6CAA4E;AAAvD,8GAAA,eAAe,OAAA;AAAE,6GAAA,cAAc,OAAA;AACpD,mDAK0B;AAJxB,+GAAA,aAAa,OAAA;AACb,wHAAA,sBAAsB,OAAA;AACtB,iHAAA,eAAe,OAAA;AACf,+GAAA,aAAa,OAAA;AAEf,4DAMkC;AAFhC,4GAAA,SAAS,OAAA;AACT,iIAAA,8BAA8B,OAAA;AAEhC,8DAGmC;AAFjC,+HAAA,2BAA2B,OAAA;AAC3B,iIAAA,6BAA6B,OAAA;AAG/B,wDAA0D;AAAjD,iHAAA,gBAAgB,OAAA;AACzB,oEAAqE;AAA5D,wHAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iEAA2D;AAAlD,mHAAA,aAAa,OAAA;AACtB,mEAA6D;AAApD,qHAAA,cAAc,OAAA;AACvB,4DAMkC;AAFhC,4GAAA,SAAS,OAAA;AACT,iIAAA,8BAA8B,OAAA;AAEhC,4DAA0C;AAC1C,gEAGoC;AAFlC,qHAAA,gBAAgB,OAAA;AAChB,8HAAA,yBAAyB,OAAA;AAE3B,wDAA0D;AAAjD,iHAAA,gBAAgB,OAAA;AACzB,oEAAqE;AAA5D,wHAAA,mBAAmB,OAAA;AAC5B,wDAA2D;AAAlD,kHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,5 @@
1
+ import type { EventType } from '@rsdk/events.common';
2
+ /**
3
+ * Генерирует имя стрима из EventType
4
+ */
5
+ export declare const getStreamName: (eventType: EventType) => string;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStreamName = void 0;
4
+ /**
5
+ * Генерирует имя стрима из EventType
6
+ */
7
+ const getStreamName = (eventType) => {
8
+ return `events-${eventType.$group.replaceAll('.', '-')}`;
9
+ };
10
+ exports.getStreamName = getStreamName;
11
+ //# sourceMappingURL=get-stream-name.fn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-stream-name.fn.js","sourceRoot":"","sources":["../../src/utils/get-stream-name.fn.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,MAAM,aAAa,GAAG,CAAC,SAAoB,EAAU,EAAE;IAC5D,OAAO,UAAU,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3D,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB"}
@@ -0,0 +1,5 @@
1
+ import type { EventType } from '@rsdk/events.common';
2
+ /**
3
+ * Генерирует имя subject из EventType
4
+ */
5
+ export declare const getSubjectName: (eventType: EventType, partitionKey?: string) => string;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSubjectName = void 0;
4
+ /**
5
+ * Генерирует имя subject из EventType
6
+ */
7
+ const getSubjectName = (eventType, partitionKey) => {
8
+ return `events.${eventType.$type}${partitionKey ? `.${partitionKey}` : ''}`;
9
+ };
10
+ exports.getSubjectName = getSubjectName;
11
+ //# sourceMappingURL=get-subject-name.fn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-subject-name.fn.js","sourceRoot":"","sources":["../../src/utils/get-subject-name.fn.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,MAAM,cAAc,GAAG,CAC5B,SAAoB,EACpB,YAAqB,EACb,EAAE;IACV,OAAO,UAAU,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9E,CAAC,CAAC;AALW,QAAA,cAAc,kBAKzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/nats.common",
3
- "version": "5.4.0-next.1",
3
+ "version": "5.4.0-next.3",
4
4
  "description": "Common functionality for nats consumers and producers",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -16,6 +16,7 @@
16
16
  "@nestjs/microservices": "^10.0.0",
17
17
  "@rsdk/common": "*",
18
18
  "@rsdk/core": "*",
19
+ "@rsdk/events.common": "*",
19
20
  "@rsdk/logging": "*",
20
21
  "@rsdk/metadata": "*",
21
22
  "nats": "^2.28.2",
@@ -26,5 +27,5 @@
26
27
  "lodash": "^4.17.21",
27
28
  "protobufjs": "^7.2.3"
28
29
  },
29
- "gitHead": "de7a6d46a28e5d5e90eb9ba36cea1ee48891505a"
30
+ "gitHead": "8b755915540bab9a033e50b22fc0223e6a23f6be"
30
31
  }
@@ -1,2 +1,15 @@
1
+ export const NATS_CLIENT_INJECTION_TOKEN_FOR_PACKAGE =
2
+ 'NATS_CLIENT_FOR_PACKAGE';
3
+ export const NATS_JET_STREAM_INJECTION_TOKEN_FOR_PACKAGE =
4
+ 'NATS_JET_STREAM_FOR_PACKAGE';
5
+
1
6
  export const NATS_CLIENT_INJECTION_TOKEN = Symbol('NatsClient');
2
- export const NATS_PRODUCER_INJECTION_TOKEN = Symbol('NatsProducer');
7
+ export const NATS_JETSTREAM_CLIENT_INJECTION_TOKEN = Symbol(
8
+ 'NatsJetStreamClient',
9
+ );
10
+
11
+ export const createNatsClientToken = (name: string): string =>
12
+ `NATS_CLIENT_${name.toUpperCase()}`;
13
+
14
+ export const createNatsJetStreamToken = (name: string): string =>
15
+ `NATS_JET_STREAM_${name.toUpperCase()}`;
@@ -1,12 +1,24 @@
1
1
  import { Inject } from '@nestjs/common';
2
2
 
3
3
  import {
4
+ createNatsClientToken,
5
+ createNatsJetStreamToken,
4
6
  NATS_CLIENT_INJECTION_TOKEN,
5
- NATS_PRODUCER_INJECTION_TOKEN,
7
+ NATS_JETSTREAM_CLIENT_INJECTION_TOKEN,
6
8
  } from './client.constants';
7
9
 
8
- export const InjectNatsClient = (): ParameterDecorator =>
9
- Inject(NATS_CLIENT_INJECTION_TOKEN);
10
+ export const InjectNatsClient = (connectionName?: string): ParameterDecorator =>
11
+ Inject(
12
+ connectionName
13
+ ? createNatsClientToken(connectionName)
14
+ : NATS_CLIENT_INJECTION_TOKEN,
15
+ );
10
16
 
11
- export const InjectNatsProducer = (): ParameterDecorator =>
12
- Inject(NATS_PRODUCER_INJECTION_TOKEN);
17
+ export const InjectNatsJetStreamClient = (
18
+ connectionName?: string,
19
+ ): ParameterDecorator =>
20
+ Inject(
21
+ connectionName
22
+ ? createNatsJetStreamToken(connectionName)
23
+ : NATS_JETSTREAM_CLIENT_INJECTION_TOKEN,
24
+ );
@@ -1,4 +1,4 @@
1
- import type { EventType } from '../event.type';
1
+ import type { EventType } from '@rsdk/events.common';
2
2
 
3
3
  export enum TopicType {
4
4
  // CONSUME,
@@ -1,15 +1,56 @@
1
+ import type { DynamicModule, Provider } from '@nestjs/common';
1
2
  import { Global, Module } from '@nestjs/common';
2
- import { PlatformConfigModule } from '@rsdk/core';
3
+ import type { Constructor } from '@rsdk/common';
3
4
 
4
5
  import { DefaultNatsConfig } from './client.config';
5
- import { natsProvider } from './client.provider';
6
- import { natsProducerProvider } from './producer.provider';
6
+ import {
7
+ createNatsClientToken,
8
+ createNatsJetStreamToken,
9
+ NATS_CLIENT_INJECTION_TOKEN,
10
+ NATS_JETSTREAM_CLIENT_INJECTION_TOKEN,
11
+ } from './client.constants';
12
+ import { createNatsProvider } from './client.provider';
13
+ import { createNatsJetStreamProvider } from './jetstream-client.provider';
7
14
  import { TopicsService } from './topics.service';
8
15
 
9
16
  @Global()
10
17
  @Module({
11
- imports: [PlatformConfigModule.forFeature(DefaultNatsConfig)],
12
- providers: [natsProducerProvider, natsProvider, TopicsService],
13
- exports: [natsProducerProvider, natsProvider, TopicsService],
18
+ providers: [TopicsService],
19
+ exports: [TopicsService],
14
20
  })
15
- export class NatsClientModule {}
21
+ export class NatsClientModule {
22
+ static forRoot(
23
+ connections?: {
24
+ connectionName: string;
25
+ config: Constructor<DefaultNatsConfig>;
26
+ }[],
27
+ ): DynamicModule {
28
+ const providers: Provider[] = [];
29
+
30
+ if (connections) {
31
+ for (const { connectionName, config } of connections) {
32
+ providers.push(
33
+ createNatsProvider(config, createNatsClientToken(connectionName)),
34
+ createNatsJetStreamProvider(
35
+ createNatsClientToken(connectionName),
36
+ createNatsJetStreamToken(connectionName),
37
+ ),
38
+ );
39
+ }
40
+ } else {
41
+ providers.push(
42
+ createNatsProvider(DefaultNatsConfig, NATS_CLIENT_INJECTION_TOKEN),
43
+ createNatsJetStreamProvider(
44
+ NATS_CLIENT_INJECTION_TOKEN,
45
+ NATS_JETSTREAM_CLIENT_INJECTION_TOKEN,
46
+ ),
47
+ );
48
+ }
49
+
50
+ return {
51
+ module: NatsClientModule,
52
+ providers,
53
+ exports: providers,
54
+ };
55
+ }
56
+ }
@@ -1,21 +1,17 @@
1
- import type { FactoryProvider } from '@nestjs/common';
2
- import { APP_NAME } from '@rsdk/core';
1
+ import type { FactoryProvider, InjectionToken } from '@nestjs/common';
2
+ import type { Constructor } from '@rsdk/common';
3
3
  import type { NatsConnection } from 'nats';
4
4
  import { connect } from 'nats';
5
5
 
6
- import { DefaultNatsConfig } from './client.config';
7
- import { NATS_CLIENT_INJECTION_TOKEN } from './client.constants';
6
+ import type { DefaultNatsConfig } from './client.config';
8
7
 
9
- export const natsProvider: FactoryProvider = {
10
- inject: [DefaultNatsConfig, APP_NAME],
11
- provide: NATS_CLIENT_INJECTION_TOKEN,
12
- async useFactory(
13
- config: DefaultNatsConfig,
14
- name: string,
15
- ): Promise<NatsConnection> {
16
- return await connect({
17
- name: `${name}-${process.pid}`,
18
- ...config,
19
- });
8
+ export const createNatsProvider = (
9
+ config: Constructor<DefaultNatsConfig>,
10
+ token: InjectionToken,
11
+ ): FactoryProvider => ({
12
+ inject: [config],
13
+ provide: token,
14
+ async useFactory(config: DefaultNatsConfig): Promise<NatsConnection> {
15
+ return await connect(config);
20
16
  },
21
- };
17
+ });
@@ -0,0 +1,13 @@
1
+ import type { FactoryProvider, InjectionToken } from '@nestjs/common';
2
+ import type { JetStreamClient, NatsConnection } from 'nats';
3
+
4
+ export const createNatsJetStreamProvider = (
5
+ natsClientToken: InjectionToken,
6
+ natsJetStreamToken: InjectionToken,
7
+ ): FactoryProvider => ({
8
+ inject: [natsClientToken],
9
+ provide: natsJetStreamToken,
10
+ useFactory(client: NatsConnection): JetStreamClient {
11
+ return client.jetstream();
12
+ },
13
+ });
package/src/index.ts CHANGED
@@ -1,16 +1,5 @@
1
- export {
2
- EventType,
3
- EventPayload,
4
- isEventType,
5
- getSubjectName,
6
- } from './event.type';
7
- export { EventCodec, ProtoEventCodec, JSONEventCodec } from './event.codec';
8
- export {
9
- PayloadFormat,
10
- DEFAULT_PAYLOAD_FORMAT,
11
- X_FORMAT_HEADER,
12
- X_TYPE_HEADER,
13
- } from './payload.format';
1
+ export { getStreamName } from './utils/get-stream-name.fn';
2
+ export { getSubjectName } from './utils/get-subject-name.fn';
14
3
  export {
15
4
  NatsTopicMetadata,
16
5
  NatsTopicMetadataByEventType,
@@ -18,10 +7,11 @@ export {
18
7
  TopicType,
19
8
  NATS_TOPIC_RSDK_METADATA_SCOPE,
20
9
  } from './client/client.metadata';
10
+ export * from './client/client.constants';
21
11
  export {
22
- NATS_CLIENT_INJECTION_TOKEN,
23
- NATS_PRODUCER_INJECTION_TOKEN,
24
- } from './client/client.constants';
25
- export type { Producer } from './client/producer.provider';
12
+ InjectNatsClient,
13
+ InjectNatsJetStreamClient,
14
+ } from './client/client.decorators';
26
15
  export { NatsClientModule } from './client/client.module';
27
16
  export { handleNatsException } from './exceptions/exception.handler';
17
+ export { DefaultNatsConfig } from './client/client.config';
@@ -0,0 +1,8 @@
1
+ import type { EventType } from '@rsdk/events.common';
2
+
3
+ /**
4
+ * Генерирует имя стрима из EventType
5
+ */
6
+ export const getStreamName = (eventType: EventType): string => {
7
+ return `events-${eventType.$group.replaceAll('.', '-')}`;
8
+ };
@@ -0,0 +1,11 @@
1
+ import type { EventType } from '@rsdk/events.common';
2
+
3
+ /**
4
+ * Генерирует имя subject из EventType
5
+ */
6
+ export const getSubjectName = (
7
+ eventType: EventType,
8
+ partitionKey?: string,
9
+ ): string => {
10
+ return `events.${eventType.$type}${partitionKey ? `.${partitionKey}` : ''}`;
11
+ };
@@ -1,4 +0,0 @@
1
- import type { FactoryProvider } from '@nestjs/common';
2
- import type { JetStreamClient } from 'nats';
3
- export type Producer = JetStreamClient;
4
- export declare const natsProducerProvider: FactoryProvider;
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.natsProducerProvider = void 0;
4
- const client_constants_1 = require("./client.constants");
5
- exports.natsProducerProvider = {
6
- inject: [client_constants_1.NATS_CLIENT_INJECTION_TOKEN],
7
- provide: client_constants_1.NATS_PRODUCER_INJECTION_TOKEN,
8
- async useFactory(client) {
9
- return client.jetstream();
10
- },
11
- };
12
- //# sourceMappingURL=producer.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"producer.provider.js","sourceRoot":"","sources":["../../src/client/producer.provider.ts"],"names":[],"mappings":";;;AAGA,yDAG4B;AAIf,QAAA,oBAAoB,GAAoB;IACnD,MAAM,EAAE,CAAC,8CAA2B,CAAC;IACrC,OAAO,EAAE,gDAA6B;IACtC,KAAK,CAAC,UAAU,CAAC,MAAsB;QACrC,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;CACF,CAAC"}
@@ -1,22 +0,0 @@
1
- import type { Payload } from 'nats';
2
- import type { EventPayload, EventType } from './event.type';
3
- export interface EventCodec<E extends EventType> {
4
- decode<P extends EventPayload<E> = EventPayload<E>>(payload: Payload): P;
5
- encode<P extends EventPayload<E> = EventPayload<E>>(payload: P): Payload;
6
- }
7
- /**
8
- * Protobuf-encoding strategy
9
- */
10
- export declare class ProtoEventCodec<E extends EventType> implements EventCodec<E> {
11
- readonly eventType: E;
12
- constructor(eventType: E);
13
- decode<P extends EventPayload<E>>(buffer: Buffer): P;
14
- encode<P extends EventPayload<E>>(payload: P): Buffer;
15
- }
16
- /**
17
- * JSON-encoding strategy
18
- */
19
- export declare class JSONEventCodec<E extends EventType> implements EventCodec<E> {
20
- decode<P extends EventPayload<E>>(payload: string): P;
21
- encode<P extends EventPayload<E>>(payload: P): Payload;
22
- }
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JSONEventCodec = exports.ProtoEventCodec = void 0;
4
- /**
5
- * Protobuf-encoding strategy
6
- */
7
- class ProtoEventCodec {
8
- eventType;
9
- constructor(eventType) {
10
- this.eventType = eventType;
11
- }
12
- decode(buffer) {
13
- return this.eventType.decode(buffer);
14
- }
15
- encode(payload) {
16
- return Buffer.from(this.eventType.encode(payload).finish());
17
- }
18
- }
19
- exports.ProtoEventCodec = ProtoEventCodec;
20
- /**
21
- * JSON-encoding strategy
22
- */
23
- class JSONEventCodec {
24
- decode(payload) {
25
- return JSON.parse(payload);
26
- }
27
- encode(payload) {
28
- return JSON.stringify(payload);
29
- }
30
- }
31
- exports.JSONEventCodec = JSONEventCodec;
32
- //# sourceMappingURL=event.codec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.codec.js","sourceRoot":"","sources":["../src/event.codec.ts"],"names":[],"mappings":";;;AAUA;;GAEG;AACH,MAAa,eAAe;IACL;IAArB,YAAqB,SAAY;QAAZ,cAAS,GAAT,SAAS,CAAG;IAAG,CAAC;IAErC,MAAM,CAA4B,MAAc;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAA4B,OAAU;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AAVD,0CAUC;AAED;;GAEG;AACH,MAAa,cAAc;IACzB,MAAM,CAA4B,OAAe;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAA4B,OAAU;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;CACF;AARD,wCAQC"}
@@ -1,23 +0,0 @@
1
- import type { Reader, Writer } from 'protobufjs/minimal';
2
- /**
3
- * Генерируется при компиляции proto-файлов
4
- */
5
- export interface EventType<T = any> {
6
- $group: string;
7
- $partitionKeyField: string | null;
8
- $type: string;
9
- encode(message: T): Writer;
10
- decode(data: Uint8Array | Reader): T;
11
- }
12
- /**
13
- * Выводит тип payload из EventType
14
- */
15
- export type EventPayload<E extends EventType> = E extends EventType<infer P> ? P : never;
16
- /**
17
- * Проверяет, является ли переданный тип EventType
18
- */
19
- export declare const isEventType: <T = any>(x: any) => x is EventType<T>;
20
- /**
21
- * Генерирует имя subject из EventType
22
- */
23
- export declare const getSubjectName: (eventType: EventType, partitionKey?: string) => string;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSubjectName = exports.isEventType = void 0;
4
- /**
5
- * Проверяет, является ли переданный тип EventType
6
- */
7
- const isEventType = (x) => typeof x === 'object' &&
8
- typeof x.$type === 'string' &&
9
- typeof x.$group === 'string';
10
- exports.isEventType = isEventType;
11
- /**
12
- * Генерирует имя subject из EventType
13
- */
14
- const getSubjectName = (eventType, partitionKey) => {
15
- return `events.${eventType.$type}${partitionKey ? `.${partitionKey}` : ''}`;
16
- };
17
- exports.getSubjectName = getSubjectName;
18
- //# sourceMappingURL=event.type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.type.js","sourceRoot":"","sources":["../src/event.type.ts"],"names":[],"mappings":";;;AAqBA;;GAEG;AACI,MAAM,WAAW,GAAG,CAAU,CAAM,EAAqB,EAAE,CAChE,OAAO,CAAC,KAAK,QAAQ;IACrB,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;IAC3B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;AAHlB,QAAA,WAAW,eAGO;AAE/B;;GAEG;AACI,MAAM,cAAc,GAAG,CAC5B,SAAoB,EACpB,YAAqB,EACb,EAAE;IACV,OAAO,UAAU,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9E,CAAC,CAAC;AALW,QAAA,cAAc,kBAKzB"}
@@ -1,5 +0,0 @@
1
- import type { EnumValue } from '@rsdk/common';
2
- import { BootstrapException } from '@rsdk/core';
3
- export declare class PayloadFormatException extends BootstrapException {
4
- constructor(value: string, allowed: EnumValue[]);
5
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PayloadFormatException = void 0;
4
- const core_1 = require("@rsdk/core");
5
- class PayloadFormatException extends core_1.BootstrapException {
6
- constructor(value, allowed) {
7
- super(`PayloadFormat has wrong value: ${value}, allowed: ${allowed.join(',')}`);
8
- }
9
- }
10
- exports.PayloadFormatException = PayloadFormatException;
11
- //# sourceMappingURL=payload-format.exception.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload-format.exception.js","sourceRoot":"","sources":["../../src/exceptions/payload-format.exception.ts"],"names":[],"mappings":";;;AACA,qCAAgD;AAEhD,MAAa,sBAAuB,SAAQ,yBAAkB;IAC5D,YAAY,KAAa,EAAE,OAAoB;QAC7C,KAAK,CACH,kCAAkC,KAAK,cAAc,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACzE,CAAC;IACJ,CAAC;CACF;AAND,wDAMC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Способ сериализации данных события
3
- */
4
- export declare enum PayloadFormat {
5
- PROTOBUF = "protobuf",
6
- JSON = "json"
7
- }
8
- /**
9
- * Проверяет, является ли переданная строка - одним
10
- * из значений перечисления PayloadFormat
11
- */
12
- export declare const isPayloadFormat: (value: string) => value is PayloadFormat;
13
- /**
14
- * Проверяет, является ли переданная строка - одним
15
- * из значений перечисления PayloadFormat. В случае,
16
- * если передано неверное значение - бросает ошибку
17
- */
18
- export declare const assertIsPayloadFormat: (value: string) => asserts value is PayloadFormat;
19
- /**
20
- * Заголовок в kafka, через который передаётся способ
21
- * сериализации
22
- */
23
- export declare const X_FORMAT_HEADER = "X-Format";
24
- /**
25
- * Сериализация по умолчанию (protobuf)
26
- */
27
- export declare const DEFAULT_PAYLOAD_FORMAT = PayloadFormat.PROTOBUF;
28
- /**
29
- * Заголовок в nats, через который передаётся тип сообщения
30
- */
31
- export declare const X_TYPE_HEADER = "X-Type";
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.X_TYPE_HEADER = exports.DEFAULT_PAYLOAD_FORMAT = exports.X_FORMAT_HEADER = exports.assertIsPayloadFormat = exports.isPayloadFormat = exports.PayloadFormat = void 0;
4
- const common_1 = require("@rsdk/common");
5
- const payload_format_exception_1 = require("./exceptions/payload-format.exception");
6
- /**
7
- * Способ сериализации данных события
8
- */
9
- var PayloadFormat;
10
- (function (PayloadFormat) {
11
- PayloadFormat["PROTOBUF"] = "protobuf";
12
- PayloadFormat["JSON"] = "json";
13
- })(PayloadFormat || (exports.PayloadFormat = PayloadFormat = {}));
14
- const allowed = common_1.Enum.values(PayloadFormat);
15
- /**
16
- * Проверяет, является ли переданная строка - одним
17
- * из значений перечисления PayloadFormat
18
- */
19
- const isPayloadFormat = (value) => allowed.includes(value);
20
- exports.isPayloadFormat = isPayloadFormat;
21
- /**
22
- * Проверяет, является ли переданная строка - одним
23
- * из значений перечисления PayloadFormat. В случае,
24
- * если передано неверное значение - бросает ошибку
25
- */
26
- const assertIsPayloadFormat = (value) => {
27
- if ((0, exports.isPayloadFormat)(value)) {
28
- return;
29
- }
30
- throw new payload_format_exception_1.PayloadFormatException(value, allowed);
31
- };
32
- exports.assertIsPayloadFormat = assertIsPayloadFormat;
33
- /**
34
- * Заголовок в kafka, через который передаётся способ
35
- * сериализации
36
- */
37
- exports.X_FORMAT_HEADER = 'X-Format';
38
- /**
39
- * Сериализация по умолчанию (protobuf)
40
- */
41
- exports.DEFAULT_PAYLOAD_FORMAT = PayloadFormat.PROTOBUF;
42
- /**
43
- * Заголовок в nats, через который передаётся тип сообщения
44
- */
45
- exports.X_TYPE_HEADER = 'X-Type';
46
- //# sourceMappingURL=payload.format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload.format.js","sourceRoot":"","sources":["../src/payload.format.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAEpC,oFAA+E;AAE/E;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,8BAAa,CAAA;AACf,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAED,MAAM,OAAO,GAAG,aAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE3C;;;GAGG;AACI,MAAM,eAAe,GAAG,CAAC,KAAa,EAA0B,EAAE,CACvE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AADb,QAAA,eAAe,mBACF;AAE1B;;;;GAIG;AACI,MAAM,qBAAqB,GAAG,CACnC,KAAa,EACmB,EAAE;IAClC,IAAI,IAAA,uBAAe,EAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,iDAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC,CAAC;AARW,QAAA,qBAAqB,yBAQhC;AAEF;;;GAGG;AACU,QAAA,eAAe,GAAG,UAAU,CAAC;AAE1C;;GAEG;AACU,QAAA,sBAAsB,GAAG,aAAa,CAAC,QAAQ,CAAC;AAE7D;;GAEG;AACU,QAAA,aAAa,GAAG,QAAQ,CAAC"}
@@ -1,17 +0,0 @@
1
- import type { FactoryProvider } from '@nestjs/common';
2
- import type { JetStreamClient, NatsConnection } from 'nats';
3
-
4
- import {
5
- NATS_CLIENT_INJECTION_TOKEN,
6
- NATS_PRODUCER_INJECTION_TOKEN,
7
- } from './client.constants';
8
-
9
- export type Producer = JetStreamClient;
10
-
11
- export const natsProducerProvider: FactoryProvider = {
12
- inject: [NATS_CLIENT_INJECTION_TOKEN],
13
- provide: NATS_PRODUCER_INJECTION_TOKEN,
14
- async useFactory(client: NatsConnection): Promise<Producer> {
15
- return client.jetstream();
16
- },
17
- };
@@ -1,37 +0,0 @@
1
- import type { Payload } from 'nats';
2
-
3
- import type { EventPayload, EventType } from './event.type';
4
-
5
- export interface EventCodec<E extends EventType> {
6
- decode<P extends EventPayload<E> = EventPayload<E>>(payload: Payload): P;
7
-
8
- encode<P extends EventPayload<E> = EventPayload<E>>(payload: P): Payload;
9
- }
10
-
11
- /**
12
- * Protobuf-encoding strategy
13
- */
14
- export class ProtoEventCodec<E extends EventType> implements EventCodec<E> {
15
- constructor(readonly eventType: E) {}
16
-
17
- decode<P extends EventPayload<E>>(buffer: Buffer): P {
18
- return this.eventType.decode(buffer);
19
- }
20
-
21
- encode<P extends EventPayload<E>>(payload: P): Buffer {
22
- return Buffer.from(this.eventType.encode(payload).finish());
23
- }
24
- }
25
-
26
- /**
27
- * JSON-encoding strategy
28
- */
29
- export class JSONEventCodec<E extends EventType> implements EventCodec<E> {
30
- decode<P extends EventPayload<E>>(payload: string): P {
31
- return JSON.parse(payload);
32
- }
33
-
34
- encode<P extends EventPayload<E>>(payload: P): Payload {
35
- return JSON.stringify(payload);
36
- }
37
- }
package/src/event.type.ts DELETED
@@ -1,38 +0,0 @@
1
- import type { Reader, Writer } from 'protobufjs/minimal';
2
-
3
- /**
4
- * Генерируется при компиляции proto-файлов
5
- */
6
- export interface EventType<T = any> {
7
- $group: string;
8
- $partitionKeyField: string | null;
9
- $type: string;
10
-
11
- encode(message: T): Writer;
12
-
13
- decode(data: Uint8Array | Reader): T;
14
- }
15
-
16
- /**
17
- * Выводит тип payload из EventType
18
- */
19
- export type EventPayload<E extends EventType> =
20
- E extends EventType<infer P> ? P : never;
21
-
22
- /**
23
- * Проверяет, является ли переданный тип EventType
24
- */
25
- export const isEventType = <T = any>(x: any): x is EventType<T> =>
26
- typeof x === 'object' &&
27
- typeof x.$type === 'string' &&
28
- typeof x.$group === 'string';
29
-
30
- /**
31
- * Генерирует имя subject из EventType
32
- */
33
- export const getSubjectName = (
34
- eventType: EventType,
35
- partitionKey?: string,
36
- ): string => {
37
- return `events.${eventType.$type}${partitionKey ? `.${partitionKey}` : ''}`;
38
- };
@@ -1,10 +0,0 @@
1
- import type { EnumValue } from '@rsdk/common';
2
- import { BootstrapException } from '@rsdk/core';
3
-
4
- export class PayloadFormatException extends BootstrapException {
5
- constructor(value: string, allowed: EnumValue[]) {
6
- super(
7
- `PayloadFormat has wrong value: ${value}, allowed: ${allowed.join(',')}`,
8
- );
9
- }
10
- }
@@ -1,51 +0,0 @@
1
- import { Enum } from '@rsdk/common';
2
-
3
- import { PayloadFormatException } from './exceptions/payload-format.exception';
4
-
5
- /**
6
- * Способ сериализации данных события
7
- */
8
- export enum PayloadFormat {
9
- PROTOBUF = 'protobuf',
10
- JSON = 'json',
11
- }
12
-
13
- const allowed = Enum.values(PayloadFormat);
14
-
15
- /**
16
- * Проверяет, является ли переданная строка - одним
17
- * из значений перечисления PayloadFormat
18
- */
19
- export const isPayloadFormat = (value: string): value is PayloadFormat =>
20
- allowed.includes(value);
21
-
22
- /**
23
- * Проверяет, является ли переданная строка - одним
24
- * из значений перечисления PayloadFormat. В случае,
25
- * если передано неверное значение - бросает ошибку
26
- */
27
- export const assertIsPayloadFormat = (
28
- value: string,
29
- ): asserts value is PayloadFormat => {
30
- if (isPayloadFormat(value)) {
31
- return;
32
- }
33
-
34
- throw new PayloadFormatException(value, allowed);
35
- };
36
-
37
- /**
38
- * Заголовок в kafka, через который передаётся способ
39
- * сериализации
40
- */
41
- export const X_FORMAT_HEADER = 'X-Format';
42
-
43
- /**
44
- * Сериализация по умолчанию (protobuf)
45
- */
46
- export const DEFAULT_PAYLOAD_FORMAT = PayloadFormat.PROTOBUF;
47
-
48
- /**
49
- * Заголовок в nats, через который передаётся тип сообщения
50
- */
51
- export const X_TYPE_HEADER = 'X-Type';