@rsdk/kafka.common 4.0.0-next.0 → 4.0.0-next.10

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 (111) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/client/constants.d.ts +2 -0
  3. package/dist/client/constants.js +6 -0
  4. package/dist/client/constants.js.map +1 -0
  5. package/dist/client/decorators/inject-kafka.decorator.d.ts +1 -0
  6. package/dist/client/decorators/inject-kafka.decorator.js +8 -0
  7. package/dist/client/decorators/inject-kafka.decorator.js.map +1 -0
  8. package/dist/client/decorators/inject-producer.decorator.d.ts +1 -0
  9. package/dist/client/decorators/inject-producer.decorator.js +8 -0
  10. package/dist/client/decorators/inject-producer.decorator.js.map +1 -0
  11. package/dist/client/kafka-client.module.js +7 -6
  12. package/dist/client/kafka-client.module.js.map +1 -1
  13. package/dist/client/kafka.base-indicator.d.ts +10 -0
  14. package/dist/client/{kafka.healthcheck.js → kafka.base-indicator.js} +18 -18
  15. package/dist/client/kafka.base-indicator.js.map +1 -0
  16. package/dist/client/kafka.config.js +2 -1
  17. package/dist/client/kafka.config.js.map +1 -1
  18. package/dist/{metadata → client}/kafka.metadata.d.ts +9 -5
  19. package/dist/client/kafka.metadata.js +10 -0
  20. package/dist/client/kafka.metadata.js.map +1 -0
  21. package/dist/client/providers/kafka-producer.provider.d.ts +2 -0
  22. package/dist/client/providers/kafka-producer.provider.js +19 -0
  23. package/dist/client/providers/kafka-producer.provider.js.map +1 -0
  24. package/dist/client/providers/kafka.provider.d.ts +2 -0
  25. package/dist/client/providers/kafka.provider.js +24 -0
  26. package/dist/client/providers/kafka.provider.js.map +1 -0
  27. package/dist/client/providers/topics.service.d.ts +8 -0
  28. package/dist/{metadata/kafka-metadata.provider.js → client/providers/topics.service.js} +15 -21
  29. package/dist/client/providers/topics.service.js.map +1 -0
  30. package/dist/event.type.d.ts +13 -0
  31. package/dist/event.type.js +6 -0
  32. package/dist/event.type.js.map +1 -1
  33. package/dist/exceptions/missing-topics.exception.d.ts +12 -0
  34. package/dist/exceptions/missing-topics.exception.js +21 -0
  35. package/dist/exceptions/missing-topics.exception.js.map +1 -0
  36. package/dist/exceptions/payload-format.exception.d.ts +5 -0
  37. package/dist/exceptions/payload-format.exception.js +11 -0
  38. package/dist/exceptions/payload-format.exception.js.map +1 -0
  39. package/dist/exceptions/unknown-kafka.exception.d.ts +4 -0
  40. package/dist/exceptions/unknown-kafka.exception.js +17 -0
  41. package/dist/exceptions/unknown-kafka.exception.js.map +1 -0
  42. package/dist/index.d.ts +14 -10
  43. package/dist/index.js +24 -19
  44. package/dist/index.js.map +1 -1
  45. package/dist/payload-format.d.ts +21 -0
  46. package/dist/payload-format.js +32 -1
  47. package/dist/payload-format.js.map +1 -1
  48. package/dist/{create-logger-adapter.fn.d.ts → utils/create-logger-adapter.fn.d.ts} +3 -0
  49. package/dist/{create-logger-adapter.fn.js → utils/create-logger-adapter.fn.js} +3 -0
  50. package/dist/utils/create-logger-adapter.fn.js.map +1 -0
  51. package/dist/utils/event.codec.d.ts +22 -0
  52. package/dist/utils/event.codec.js +32 -0
  53. package/dist/utils/event.codec.js.map +1 -0
  54. package/dist/utils/handle-kafka.error.fn.d.ts +1 -0
  55. package/dist/utils/handle-kafka.error.fn.js +15 -0
  56. package/dist/utils/handle-kafka.error.fn.js.map +1 -0
  57. package/dist/utils/retry-policy.infinite.d.ts +2 -0
  58. package/dist/{retry-policy.js → utils/retry-policy.infinite.js} +3 -3
  59. package/dist/utils/retry-policy.infinite.js.map +1 -0
  60. package/package.json +10 -8
  61. package/src/client/constants.ts +2 -0
  62. package/src/client/decorators/inject-kafka.decorator.ts +6 -0
  63. package/src/client/decorators/inject-producer.decorator.ts +6 -0
  64. package/src/client/kafka-client.module.ts +5 -6
  65. package/src/client/{kafka.healthcheck.ts → kafka.base-indicator.ts} +17 -18
  66. package/src/{metadata → client}/kafka.metadata.ts +12 -5
  67. package/src/client/providers/kafka-producer.provider.ts +23 -0
  68. package/src/client/providers/kafka.provider.ts +24 -0
  69. package/src/client/providers/topics.service.ts +23 -0
  70. package/src/event.type.ts +16 -0
  71. package/src/exceptions/missing-topics.exception.ts +19 -0
  72. package/src/exceptions/payload-format.exception.ts +10 -0
  73. package/src/exceptions/unknown-kafka.exception.ts +13 -0
  74. package/src/index.ts +20 -12
  75. package/src/payload-format.ts +38 -0
  76. package/src/{create-logger-adapter.fn.ts → utils/create-logger-adapter.fn.ts} +3 -0
  77. package/src/utils/event.codec.ts +34 -0
  78. package/src/utils/handle-kafka.error.fn.ts +17 -0
  79. package/src/utils/retry-policy.infinite.ts +8 -0
  80. package/tsconfig.json +0 -1
  81. package/dist/client/kafka.client.d.ts +0 -7
  82. package/dist/client/kafka.client.js +0 -43
  83. package/dist/client/kafka.client.js.map +0 -1
  84. package/dist/client/kafka.healthcheck.d.ts +0 -9
  85. package/dist/client/kafka.healthcheck.js.map +0 -1
  86. package/dist/create-logger-adapter.fn.js.map +0 -1
  87. package/dist/exception.d.ts +0 -32
  88. package/dist/exception.js +0 -61
  89. package/dist/exception.js.map +0 -1
  90. package/dist/exceptions/payload-format-validator.exception.d.ts +0 -4
  91. package/dist/exceptions/payload-format-validator.exception.js +0 -30
  92. package/dist/exceptions/payload-format-validator.exception.js.map +0 -1
  93. package/dist/metadata/kafka-metadata.module.d.ts +0 -2
  94. package/dist/metadata/kafka-metadata.module.js +0 -20
  95. package/dist/metadata/kafka-metadata.module.js.map +0 -1
  96. package/dist/metadata/kafka-metadata.provider.d.ts +0 -8
  97. package/dist/metadata/kafka-metadata.provider.js.map +0 -1
  98. package/dist/metadata/kafka.metadata.js +0 -10
  99. package/dist/metadata/kafka.metadata.js.map +0 -1
  100. package/dist/retry-policy.d.ts +0 -6
  101. package/dist/retry-policy.js.map +0 -1
  102. package/dist/validators/payload-format.validator.d.ts +0 -3
  103. package/dist/validators/payload-format.validator.js +0 -14
  104. package/dist/validators/payload-format.validator.js.map +0 -1
  105. package/src/client/kafka.client.ts +0 -49
  106. package/src/exception.ts +0 -67
  107. package/src/exceptions/payload-format-validator.exception.ts +0 -17
  108. package/src/metadata/kafka-metadata.module.ts +0 -9
  109. package/src/metadata/kafka-metadata.provider.ts +0 -36
  110. package/src/retry-policy.ts +0 -6
  111. package/src/validators/payload-format.validator.ts +0 -18
package/CHANGELOG.md CHANGED
@@ -3,6 +3,50 @@
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
+ ## [4.0.0-next.10](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.9...v4.0.0-next.10) (2023-11-29)
7
+
8
+ **Note:** Version bump only for package @rsdk/kafka.common
9
+
10
+ ## [4.0.0-next.9](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.8...v4.0.0-next.9) (2023-11-29)
11
+
12
+ **Note:** Version bump only for package @rsdk/kafka.common
13
+
14
+ ## [4.0.0-next.8](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.7...v4.0.0-next.8) (2023-11-29)
15
+
16
+ ### Features
17
+
18
+ * Kafka batch producer ([#150](https://github.com/R-Vision/rsdk/issues/150)) ([2faa2f4](https://github.com/R-Vision/rsdk/commit/2faa2f41ca0dbb6d8a92cbf0ab20cf5cefeaf4e9))
19
+
20
+ ## [4.0.0-next.7](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.6...v4.0.0-next.7) (2023-11-21)
21
+
22
+ **Note:** Version bump only for package @rsdk/kafka.common
23
+
24
+ ## [4.0.0-next.6](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.5...v4.0.0-next.6) (2023-11-21)
25
+
26
+ **Note:** Version bump only for package @rsdk/kafka.common
27
+
28
+ ## [4.0.0-next.5](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.4...v4.0.0-next.5) (2023-11-13)
29
+
30
+ **Note:** Version bump only for package @rsdk/kafka.common
31
+
32
+ ## [4.0.0-next.4](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.3...v4.0.0-next.4) (2023-11-12)
33
+
34
+ **Note:** Version bump only for package @rsdk/kafka.common
35
+
36
+ ## [4.0.0-next.3](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.2...v4.0.0-next.3) (2023-11-12)
37
+
38
+ ### Bug Fixes
39
+
40
+ * all yarn peers dependency issues ([e0db9ef](https://github.com/R-Vision/rsdk/commit/e0db9ef1ab8a4df4e1f8ff6f6a9e3728f497549b))
41
+
42
+ ## [4.0.0-next.2](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.1...v4.0.0-next.2) (2023-11-10)
43
+
44
+ **Note:** Version bump only for package @rsdk/kafka.common
45
+
46
+ ## [4.0.0-next.1](https://github.com/R-Vision/rsdk/compare/v4.0.0-next.0...v4.0.0-next.1) (2023-11-10)
47
+
48
+ **Note:** Version bump only for package @rsdk/kafka.common
49
+
6
50
  ## [4.0.0-next.0](https://github.com/R-Vision/rsdk/compare/v3.6.2-next.0...v4.0.0-next.0) (2023-10-26)
7
51
 
8
52
  **Note:** Version bump only for package @rsdk/kafka.common
@@ -0,0 +1,2 @@
1
+ export declare const KAFKA_CLIENT_INJECTION_TOKEN: unique symbol;
2
+ export declare const KAFKA_PRODUCER_INJECTION_TOKEN: unique symbol;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KAFKA_PRODUCER_INJECTION_TOKEN = exports.KAFKA_CLIENT_INJECTION_TOKEN = void 0;
4
+ exports.KAFKA_CLIENT_INJECTION_TOKEN = Symbol('KafkaClient');
5
+ exports.KAFKA_PRODUCER_INJECTION_TOKEN = Symbol('KafkaProducer');
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/client/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,4BAA4B,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACrD,QAAA,8BAA8B,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const InjectKafka: () => ParameterDecorator;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InjectKafka = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const constants_1 = require("../constants");
6
+ const InjectKafka = () => (0, common_1.Inject)(constants_1.KAFKA_CLIENT_INJECTION_TOKEN);
7
+ exports.InjectKafka = InjectKafka;
8
+ //# sourceMappingURL=inject-kafka.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-kafka.decorator.js","sourceRoot":"","sources":["../../../src/client/decorators/inject-kafka.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,4CAA4D;AAErD,MAAM,WAAW,GAAG,GAAuB,EAAE,CAClD,IAAA,eAAM,EAAC,wCAA4B,CAAC,CAAC;AAD1B,QAAA,WAAW,eACe"}
@@ -0,0 +1 @@
1
+ export declare const InjectKafkaProducer: () => ParameterDecorator;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InjectKafkaProducer = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const constants_1 = require("../constants");
6
+ const InjectKafkaProducer = () => (0, common_1.Inject)(constants_1.KAFKA_PRODUCER_INJECTION_TOKEN);
7
+ exports.InjectKafkaProducer = InjectKafkaProducer;
8
+ //# sourceMappingURL=inject-producer.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-producer.decorator.js","sourceRoot":"","sources":["../../../src/client/decorators/inject-producer.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,4CAA8D;AAEvD,MAAM,mBAAmB,GAAG,GAAuB,EAAE,CAC1D,IAAA,eAAM,EAAC,0CAA8B,CAAC,CAAC;AAD5B,QAAA,mBAAmB,uBACS"}
@@ -8,16 +8,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.KafkaClientModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
- const kafka_metadata_module_1 = require("../metadata/kafka-metadata.module");
12
- const kafka_client_1 = require("./kafka.client");
13
- let KafkaClientModule = exports.KafkaClientModule = class KafkaClientModule {
11
+ const kafka_provider_1 = require("./providers/kafka.provider");
12
+ const kafka_producer_provider_1 = require("./providers/kafka-producer.provider");
13
+ const topics_service_1 = require("./providers/topics.service");
14
+ let KafkaClientModule = class KafkaClientModule {
14
15
  };
16
+ exports.KafkaClientModule = KafkaClientModule;
15
17
  exports.KafkaClientModule = KafkaClientModule = __decorate([
16
18
  (0, common_1.Global)(),
17
19
  (0, common_1.Module)({
18
- imports: [kafka_metadata_module_1.KafkaMetadataModule],
19
- providers: [kafka_client_1.KafkaClient, kafka_client_1.KafkaProducer],
20
- exports: [kafka_client_1.KafkaClient, kafka_client_1.KafkaProducer, kafka_metadata_module_1.KafkaMetadataModule],
20
+ providers: [kafka_producer_provider_1.kafkaProducerProvider, kafka_provider_1.kafkaProvider, topics_service_1.TopicsService],
21
+ exports: [kafka_producer_provider_1.kafkaProducerProvider, kafka_provider_1.kafkaProvider, topics_service_1.TopicsService],
21
22
  })
22
23
  ], KafkaClientModule);
23
24
  //# sourceMappingURL=kafka-client.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kafka-client.module.js","sourceRoot":"","sources":["../../src/client/kafka-client.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAEhD,6EAAwE;AAExE,iDAA4D;AAQrD,IAAM,iBAAiB,+BAAvB,MAAM,iBAAiB;CAAG,CAAA;4BAApB,iBAAiB;IAN7B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,2CAAmB,CAAC;QAC9B,SAAS,EAAE,CAAC,0BAAW,EAAE,4BAAa,CAAC;QACvC,OAAO,EAAE,CAAC,0BAAW,EAAE,4BAAa,EAAE,2CAAmB,CAAC;KAC3D,CAAC;GACW,iBAAiB,CAAG"}
1
+ {"version":3,"file":"kafka-client.module.js","sourceRoot":"","sources":["../../src/client/kafka-client.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAEhD,+DAA2D;AAC3D,iFAA4E;AAC5E,+DAA2D;AAOpD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAL7B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,+CAAqB,EAAE,8BAAa,EAAE,8BAAa,CAAC;QAChE,OAAO,EAAE,CAAC,+CAAqB,EAAE,8BAAa,EAAE,8BAAa,CAAC;KAC/D,CAAC;GACW,iBAAiB,CAAG"}
@@ -0,0 +1,10 @@
1
+ import type { HealthIndicator } from '@rsdk/core';
2
+ import { CheckResult } from '@rsdk/core';
3
+ import type { Kafka } from 'kafkajs';
4
+ export declare class KafkaBaseIndicator implements HealthIndicator {
5
+ readonly client: Kafka;
6
+ readonly topics: string[];
7
+ constructor(client: Kafka, topics: string[]);
8
+ check(): Promise<CheckResult>;
9
+ private getMissingTopics;
10
+ }
@@ -1,22 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KafkaHealthcheck = void 0;
3
+ exports.KafkaBaseIndicator = void 0;
4
4
  const core_1 = require("@rsdk/core");
5
- class KafkaHealthcheck {
6
- kafkaClient;
7
- neededTopics;
8
- constructor(kafkaClient, neededTopics) {
9
- this.kafkaClient = kafkaClient;
10
- this.neededTopics = neededTopics;
11
- }
12
- async getMissingTopics() {
13
- const admin = this.kafkaClient.admin({
14
- retry: { retries: 1 },
15
- });
16
- await admin.connect();
17
- const topics = await admin.listTopics();
18
- await admin.disconnect();
19
- return this.neededTopics.filter((neededTopic) => !topics.includes(neededTopic));
5
+ class KafkaBaseIndicator {
6
+ client;
7
+ topics;
8
+ constructor(client, topics) {
9
+ this.client = client;
10
+ this.topics = topics;
20
11
  }
21
12
  async check() {
22
13
  try {
@@ -34,6 +25,15 @@ class KafkaHealthcheck {
34
25
  });
35
26
  }
36
27
  }
28
+ async getMissingTopics() {
29
+ const admin = this.client.admin({
30
+ retry: { retries: 1 },
31
+ });
32
+ await admin.connect();
33
+ const topics = await admin.listTopics();
34
+ await admin.disconnect();
35
+ return this.topics.filter((neededTopic) => !topics.includes(neededTopic));
36
+ }
37
37
  }
38
- exports.KafkaHealthcheck = KafkaHealthcheck;
39
- //# sourceMappingURL=kafka.healthcheck.js.map
38
+ exports.KafkaBaseIndicator = KafkaBaseIndicator;
39
+ //# sourceMappingURL=kafka.base-indicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.base-indicator.js","sourceRoot":"","sources":["../../src/client/kafka.base-indicator.ts"],"names":[],"mappings":";;;AACA,qCAAyC;AAGzC,MAAa,kBAAkB;IAElB;IACA;IAFX,YACW,MAAa,EACb,MAAgB;QADhB,WAAM,GAAN,MAAM,CAAO;QACb,WAAM,GAAN,MAAM,CAAU;IACxB,CAAC;IAEJ,KAAK,CAAC,KAAK;QACT,IAAI;YACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,OAAO,kBAAW,CAAC,IAAI,CAAC;oBACtB,aAAa;iBACd,CAAC,CAAC;aACJ;YACD,OAAO,kBAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC3B;QAAC,OAAO,KAAc,EAAE;YACvB,OAAO,kBAAW,CAAC,IAAI,CAAC;gBACtB,KAAK,EAAG,KAAe,CAAC,OAAO;aAChC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAC9B,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACtB,CAAC,CAAC;QAEH,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAExC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF;AAlCD,gDAkCC"}
@@ -11,9 +11,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.KafkaConfig = void 0;
13
13
  const core_1 = require("@rsdk/core");
14
- let KafkaConfig = exports.KafkaConfig = class KafkaConfig extends core_1.Config {
14
+ let KafkaConfig = class KafkaConfig extends core_1.Config {
15
15
  brokers;
16
16
  };
17
+ exports.KafkaConfig = KafkaConfig;
17
18
  __decorate([
18
19
  (0, core_1.Property)('KAFKA_BROKERS', new core_1.ArrayParser(new core_1.StringParser()), {
19
20
  description: 'List of Kafka brokers',
@@ -1 +1 @@
1
- {"version":3,"file":"kafka.config.js","sourceRoot":"","sources":["../../src/client/kafka.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAMoB;AAGb,IAAM,WAAW,yBAAjB,MAAM,WAAY,SAAQ,aAAM;IAI5B,OAAO,CAAY;CAC7B,CAAA;AADU;IAHR,IAAA,eAAQ,EAAC,eAAe,EAAE,IAAI,kBAAW,CAAC,IAAI,mBAAY,EAAE,CAAC,EAAE;QAC9D,WAAW,EAAE,uBAAuB;KACrC,CAAC;;4CAC0B;sBAJjB,WAAW;IADvB,IAAA,oBAAa,GAAE;GACH,WAAW,CAKvB"}
1
+ {"version":3,"file":"kafka.config.js","sourceRoot":"","sources":["../../src/client/kafka.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAMoB;AAGb,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,aAAM;IAI5B,OAAO,CAAY;CAC7B,CAAA;AALY,kCAAW;AAIb;IAHR,IAAA,eAAQ,EAAC,eAAe,EAAE,IAAI,kBAAW,CAAC,IAAI,mBAAY,EAAE,CAAC,EAAE;QAC9D,WAAW,EAAE,uBAAuB;KACrC,CAAC;;4CAC0B;sBAJjB,WAAW;IADvB,IAAA,oBAAa,GAAE;GACH,WAAW,CAKvB"}
@@ -1,14 +1,18 @@
1
1
  import type { EventType } from '../event.type';
2
- export declare enum KafkaTopicType {
3
- Consume = 0,
4
- Produce = 1
2
+ export declare enum TopicType {
3
+ CONSUME = 0,
4
+ PRODUCE = 1
5
5
  }
6
+ /**
7
+ * TODO: Здесь надо разбираться с неймингом. Потому что хрен
8
+ * поймёшь сейчас, что это за типы
9
+ */
6
10
  export type KafkaTopicMetadataByTopic = {
7
- type: KafkaTopicType;
11
+ type: TopicType;
8
12
  topicName: string;
9
13
  };
10
14
  export type KafkaTopicMetadataByEventType = {
11
- type: KafkaTopicType;
15
+ type: TopicType;
12
16
  topicName: string;
13
17
  group: string;
14
18
  partitionKeyField: string | null;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KAFKA_TOPIC_RSDK_METADATA_SCOPE = exports.TopicType = void 0;
4
+ var TopicType;
5
+ (function (TopicType) {
6
+ TopicType[TopicType["CONSUME"] = 0] = "CONSUME";
7
+ TopicType[TopicType["PRODUCE"] = 1] = "PRODUCE";
8
+ })(TopicType || (exports.TopicType = TopicType = {}));
9
+ exports.KAFKA_TOPIC_RSDK_METADATA_SCOPE = 'kafka-topic';
10
+ //# sourceMappingURL=kafka.metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.metadata.js","sourceRoot":"","sources":["../../src/client/kafka.metadata.ts"],"names":[],"mappings":";;;AAEA,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,+CAAO,CAAA;IACP,+CAAO,CAAA;AACT,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAwBY,QAAA,+BAA+B,GAAG,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { FactoryProvider } from '@nestjs/common';
2
+ export declare const kafkaProducerProvider: FactoryProvider;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kafkaProducerProvider = void 0;
4
+ const kafkajs_1 = require("kafkajs");
5
+ const constants_1 = require("../constants");
6
+ exports.kafkaProducerProvider = {
7
+ inject: [constants_1.KAFKA_CLIENT_INJECTION_TOKEN],
8
+ provide: constants_1.KAFKA_PRODUCER_INJECTION_TOKEN,
9
+ async useFactory(kafka) {
10
+ const producer = kafka.producer({
11
+ allowAutoTopicCreation: false,
12
+ createPartitioner: kafkajs_1.Partitioners.DefaultPartitioner,
13
+ retry: { retries: 1 },
14
+ });
15
+ await producer.connect();
16
+ return { ...producer, onModuleDestroy: () => producer.disconnect() };
17
+ },
18
+ };
19
+ //# sourceMappingURL=kafka-producer.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka-producer.provider.js","sourceRoot":"","sources":["../../../src/client/providers/kafka-producer.provider.ts"],"names":[],"mappings":";;;AAEA,qCAAuC;AAEvC,4CAGsB;AAET,QAAA,qBAAqB,GAAoB;IACpD,MAAM,EAAE,CAAC,wCAA4B,CAAC;IACtC,OAAO,EAAE,0CAA8B;IACvC,KAAK,CAAC,UAAU,CAAC,KAAY;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC9B,sBAAsB,EAAE,KAAK;YAC7B,iBAAiB,EAAE,sBAAY,CAAC,kBAAkB;YAClD,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACtB,CAAC,CAAC;QAEH,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,GAAG,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;IACvE,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { FactoryProvider } from '@nestjs/common';
2
+ export declare const kafkaProvider: FactoryProvider;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kafkaProvider = void 0;
4
+ const core_1 = require("@rsdk/core");
5
+ const logging_1 = require("@rsdk/logging");
6
+ const kafkajs_1 = require("kafkajs");
7
+ const create_logger_adapter_fn_1 = require("../../utils/create-logger-adapter.fn");
8
+ const retry_policy_infinite_1 = require("../../utils/retry-policy.infinite");
9
+ const constants_1 = require("../constants");
10
+ const kafka_config_1 = require("../kafka.config");
11
+ exports.kafkaProvider = {
12
+ inject: [kafka_config_1.KafkaConfig, core_1.APP_NAME],
13
+ provide: constants_1.KAFKA_CLIENT_INJECTION_TOKEN,
14
+ useFactory(config, name) {
15
+ const logger = logging_1.LoggerFactory.create('NativeKafkaProducer');
16
+ return new kafkajs_1.Kafka({
17
+ clientId: `${name}-${process.pid}`,
18
+ brokers: config.brokers,
19
+ logCreator: (0, create_logger_adapter_fn_1.createLoggerAdapter)(logger),
20
+ retry: retry_policy_infinite_1.INFINITE_RETRIES,
21
+ });
22
+ },
23
+ };
24
+ //# sourceMappingURL=kafka.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.provider.js","sourceRoot":"","sources":["../../../src/client/providers/kafka.provider.ts"],"names":[],"mappings":";;;AACA,qCAAsC;AACtC,2CAA8C;AAC9C,qCAAgC;AAEhC,mFAA2E;AAC3E,6EAAqE;AACrE,4CAA4D;AAC5D,kDAA8C;AAEjC,QAAA,aAAa,GAAoB;IAC5C,MAAM,EAAE,CAAC,0BAAW,EAAE,eAAQ,CAAC;IAC/B,OAAO,EAAE,wCAA4B;IACrC,UAAU,CAAC,MAAmB,EAAE,IAAY;QAC1C,MAAM,MAAM,GAAG,uBAAa,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAE3D,OAAO,IAAI,eAAK,CAAC;YACf,QAAQ,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,IAAA,8CAAmB,EAAC,MAAM,CAAC;YACvC,KAAK,EAAE,wCAAgB;SACxB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { RsdkMetadataProvider } from '@rsdk/metadata';
2
+ import type { TopicType } from '../kafka.metadata';
3
+ export declare class TopicsService {
4
+ private readonly provider;
5
+ constructor(provider: RsdkMetadataProvider);
6
+ getTopics(type: TopicType): string[];
7
+ private getResources;
8
+ }
@@ -9,33 +9,27 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.KafkaMetadataProvider = void 0;
12
+ exports.TopicsService = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const metadata_1 = require("@rsdk/metadata");
15
- const kafka_metadata_1 = require("./kafka.metadata");
16
- let KafkaMetadataProvider = exports.KafkaMetadataProvider = class KafkaMetadataProvider {
17
- rsdkMetadataProvider;
18
- constructor(rsdkMetadataProvider) {
19
- this.rsdkMetadataProvider = rsdkMetadataProvider;
15
+ const kafka_metadata_1 = require("../kafka.metadata");
16
+ let TopicsService = class TopicsService {
17
+ provider;
18
+ constructor(provider) {
19
+ this.provider = provider;
20
20
  }
21
- getProducedTopics() {
22
- const resources = this.getResources();
23
- return resources
24
- .filter(({ value: { type } }) => type === kafka_metadata_1.KafkaTopicType.Produce)
25
- .map((value) => value.value.topicName);
26
- }
27
- getConsumedTopics() {
28
- const resources = this.getResources();
29
- return resources
30
- .filter(({ value: { type } }) => type === kafka_metadata_1.KafkaTopicType.Consume)
31
- .map((value) => value.value.topicName);
21
+ getTopics(type) {
22
+ return this.getResources()
23
+ .filter(({ value }) => value.type === type)
24
+ .map(({ value }) => value.topicName);
32
25
  }
33
26
  getResources() {
34
- return this.rsdkMetadataProvider.get(kafka_metadata_1.KAFKA_TOPIC_RSDK_METADATA_SCOPE);
27
+ return this.provider.get(kafka_metadata_1.KAFKA_TOPIC_RSDK_METADATA_SCOPE);
35
28
  }
36
29
  };
37
- exports.KafkaMetadataProvider = KafkaMetadataProvider = __decorate([
30
+ exports.TopicsService = TopicsService;
31
+ exports.TopicsService = TopicsService = __decorate([
38
32
  (0, common_1.Injectable)(),
39
33
  __metadata("design:paramtypes", [metadata_1.RsdkMetadataProvider])
40
- ], KafkaMetadataProvider);
41
- //# sourceMappingURL=kafka-metadata.provider.js.map
34
+ ], TopicsService);
35
+ //# sourceMappingURL=topics.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.service.js","sourceRoot":"","sources":["../../../src/client/providers/topics.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6CAAsD;AAGtD,sDAAoE;AAG7D,IAAM,aAAa,GAAnB,MAAM,aAAa;IACK;IAA7B,YAA6B,QAA8B;QAA9B,aAAQ,GAAR,QAAQ,CAAsB;IAAG,CAAC;IAE/D,SAAS,CAAC,IAAe;QACvB,OAAO,IAAI,CAAC,YAAY,EAAE;aACvB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;aAC1C,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CACtB,gDAA+B,CAChC,CAAC;IACJ,CAAC;CACF,CAAA;AAdY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE4B,+BAAoB;GADhD,aAAa,CAczB"}
@@ -1,4 +1,7 @@
1
1
  import type { Reader, Writer } from 'protobufjs/minimal';
2
+ /**
3
+ * Генерируется при компиляции proto-файлов
4
+ */
2
5
  export interface EventType<T = any> {
3
6
  $group: string;
4
7
  $partitionKeyField: string | null;
@@ -6,5 +9,15 @@ export interface EventType<T = any> {
6
9
  encode(message: T): Writer;
7
10
  decode(data: Uint8Array | Reader): T;
8
11
  }
12
+ /**
13
+ * Выводит тип payload из EventType
14
+ */
15
+ export type EventPayload<E extends EventType> = E extends EventType<infer P> ? P : never;
16
+ /**
17
+ * Проверяет, является ли переданный тип EventType
18
+ */
9
19
  export declare const isEventType: <T = any>(x: any) => x is EventType<T>;
20
+ /**
21
+ * Генерирует имя топика из EventType
22
+ */
10
23
  export declare const getTopicName: (eventType: EventType) => string;
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTopicName = exports.isEventType = void 0;
4
+ /**
5
+ * Проверяет, является ли переданный тип EventType
6
+ */
4
7
  const isEventType = (x) => typeof x === 'object' &&
5
8
  typeof x.$type === 'string' &&
6
9
  typeof x.$group === 'string';
7
10
  exports.isEventType = isEventType;
11
+ /**
12
+ * Генерирует имя топика из EventType
13
+ */
8
14
  const getTopicName = (eventType) => {
9
15
  return `events.${eventType.$group}`;
10
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"event.type.js","sourceRoot":"","sources":["../src/event.type.ts"],"names":[],"mappings":";;;AAUO,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;AAExB,MAAM,YAAY,GAAG,CAAC,SAAoB,EAAU,EAAE;IAC3D,OAAO,UAAU,SAAS,CAAC,MAAM,EAAE,CAAC;AACtC,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB"}
1
+ {"version":3,"file":"event.type.js","sourceRoot":"","sources":["../src/event.type.ts"],"names":[],"mappings":";;;AAoBA;;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,YAAY,GAAG,CAAC,SAAoB,EAAU,EAAE;IAC3D,OAAO,UAAU,SAAS,CAAC,MAAM,EAAE,CAAC;AACtC,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB"}
@@ -0,0 +1,12 @@
1
+ import { InternalException } from '@rsdk/core';
2
+ export declare class MissingTopicsException extends InternalException {
3
+ readonly topics: string[];
4
+ readonly props?: {
5
+ details?: unknown;
6
+ cause?: unknown;
7
+ } | undefined;
8
+ constructor(topics: string[], props?: {
9
+ details?: unknown;
10
+ cause?: unknown;
11
+ } | undefined);
12
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingTopicsException = void 0;
4
+ const core_1 = require("@rsdk/core");
5
+ class MissingTopicsException extends core_1.InternalException {
6
+ topics;
7
+ props;
8
+ constructor(topics, props) {
9
+ super('Expected topics or partitions are missing!', {
10
+ details: {
11
+ topics,
12
+ details: props?.details,
13
+ },
14
+ cause: props?.cause,
15
+ });
16
+ this.topics = topics;
17
+ this.props = props;
18
+ }
19
+ }
20
+ exports.MissingTopicsException = MissingTopicsException;
21
+ //# sourceMappingURL=missing-topics.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-topics.exception.js","sourceRoot":"","sources":["../../src/exceptions/missing-topics.exception.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAE/C,MAAa,sBAAuB,SAAQ,wBAAiB;IAEhD;IACA;IAFX,YACW,MAAgB,EAChB,KAGR;QAED,KAAK,CAAC,4CAA4C,EAAE;YAClD,OAAO,EAAE;gBACP,MAAM;gBACN,OAAO,EAAE,KAAK,EAAE,OAAO;aACxB;YACD,KAAK,EAAE,KAAK,EAAE,KAAK;SACpB,CAAC,CAAC;QAZM,WAAM,GAAN,MAAM,CAAU;QAChB,UAAK,GAAL,KAAK,CAGb;IASH,CAAC;CACF;AAhBD,wDAgBC"}
@@ -0,0 +1,5 @@
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
+ }
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,4 @@
1
+ import { InternalException } from '@rsdk/core';
2
+ export declare class UnknownKafkaException extends InternalException {
3
+ constructor(cause: unknown, pattern: string, details?: unknown);
4
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnknownKafkaException = void 0;
4
+ const core_1 = require("@rsdk/core");
5
+ class UnknownKafkaException extends core_1.InternalException {
6
+ constructor(cause, pattern, details) {
7
+ super('Unknown exception from ServerKafka!', {
8
+ details: {
9
+ pattern,
10
+ details: details,
11
+ },
12
+ cause,
13
+ });
14
+ }
15
+ }
16
+ exports.UnknownKafkaException = UnknownKafkaException;
17
+ //# sourceMappingURL=unknown-kafka.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown-kafka.exception.js","sourceRoot":"","sources":["../../src/exceptions/unknown-kafka.exception.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAE/C,MAAa,qBAAsB,SAAQ,wBAAiB;IAC1D,YAAY,KAAc,EAAE,OAAe,EAAE,OAAiB;QAC5D,KAAK,CAAC,qCAAqC,EAAE;YAC3C,OAAO,EAAE;gBACP,OAAO;gBACP,OAAO,EAAE,OAAO;aACjB;YACD,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CACF;AAVD,sDAUC"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,18 @@
1
- export { retryPolicy } from './retry-policy';
2
- export { KAFKA_PRODUCER_INJECTION_TOKEN, KAFKA_CLIENT_INJECTION_TOKEN, } from './client/kafka.client';
1
+ export { KafkaTopicMetadataByEventType } from './client/kafka.metadata';
2
+ export { InjectKafka } from './client/decorators/inject-kafka.decorator';
3
+ export { InjectKafkaProducer } from './client/decorators/inject-producer.decorator';
4
+ export { KAFKA_PRODUCER_INJECTION_TOKEN, KAFKA_CLIENT_INJECTION_TOKEN, } from './client/constants';
5
+ export { INFINITE_RETRIES } from './utils/retry-policy.infinite';
6
+ export { EventPayload } from './event.type';
7
+ export { ProtoEventCodec, EventCodec, JSONEventCodec, } from './utils/event.codec';
3
8
  export { KafkaClientModule } from './client/kafka-client.module';
4
9
  export { KafkaConfig } from './client/kafka.config';
5
- export { KafkaMetadataModule } from './metadata/kafka-metadata.module';
6
- export { KafkaMetadataProvider } from './metadata/kafka-metadata.provider';
7
- export { KAFKA_TOPIC_RSDK_METADATA_SCOPE, KafkaTopicMetadata, KafkaTopicType, } from './metadata/kafka.metadata';
8
- export { ServerKafkaExceptionFactory } from './exception';
9
- export { createLoggerAdapter } from './create-logger-adapter.fn';
10
+ export { TopicsService } from './client/providers/topics.service';
11
+ export { KAFKA_TOPIC_RSDK_METADATA_SCOPE, KafkaTopicMetadata, TopicType, } from './client/kafka.metadata';
12
+ export { handleKafkaError } from './utils/handle-kafka.error.fn';
13
+ export { createLoggerAdapter } from './utils/create-logger-adapter.fn';
10
14
  export { getTopicName, isEventType, EventType } from './event.type';
11
- export { KafkaHealthcheck } from './client/kafka.healthcheck';
15
+ export { KafkaBaseIndicator } from './client/kafka.base-indicator';
12
16
  export * from './payload-format';
13
- export * from './exceptions/payload-format-validator.exception';
14
- export * from './validators/payload-format.validator';
17
+ export * from './exceptions/payload-format.exception';
18
+ export * from './exceptions/missing-topics.exception';