@rsdk/kafka.producer.direct 4.0.0-next.1 → 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 (49) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/constants.d.ts +3 -0
  3. package/dist/constants.js +9 -1
  4. package/dist/constants.js.map +1 -1
  5. package/dist/decorator.d.ts +3 -0
  6. package/dist/decorator.js +24 -0
  7. package/dist/decorator.js.map +1 -0
  8. package/dist/direct-events.factory.d.ts +7 -0
  9. package/dist/direct-events.factory.js +23 -0
  10. package/dist/direct-events.factory.js.map +1 -0
  11. package/dist/direct-outbox.module-generator.d.ts +6 -0
  12. package/dist/direct-outbox.module-generator.js +76 -0
  13. package/dist/direct-outbox.module-generator.js.map +1 -0
  14. package/dist/index.d.ts +4 -2
  15. package/dist/index.js +12 -5
  16. package/dist/index.js.map +1 -1
  17. package/dist/metadata/autodoc.resolver.js +1 -1
  18. package/dist/metadata/autodoc.resolver.js.map +1 -1
  19. package/dist/module/kafka-producer-direct.health-indicator.d.ts +3 -7
  20. package/dist/module/kafka-producer-direct.health-indicator.js +9 -16
  21. package/dist/module/kafka-producer-direct.health-indicator.js.map +1 -1
  22. package/dist/module/kafka-producer-direct.module.d.ts +1 -1
  23. package/dist/module/kafka-producer-direct.module.js +6 -5
  24. package/dist/module/kafka-producer-direct.module.js.map +1 -1
  25. package/dist/producers/batch.producer.d.ts +14 -0
  26. package/dist/producers/batch.producer.js +45 -0
  27. package/dist/producers/batch.producer.js.map +1 -0
  28. package/dist/producers/single.producer.d.ts +13 -0
  29. package/dist/producers/single.producer.js +29 -0
  30. package/dist/producers/single.producer.js.map +1 -0
  31. package/package.json +16 -12
  32. package/src/constants.ts +14 -0
  33. package/src/decorator.ts +46 -0
  34. package/src/direct-events.factory.ts +28 -0
  35. package/src/direct-outbox.module-generator.ts +114 -0
  36. package/src/index.ts +10 -2
  37. package/src/metadata/autodoc.resolver.ts +6 -4
  38. package/src/module/kafka-producer-direct.health-indicator.ts +9 -14
  39. package/src/module/kafka-producer-direct.module.ts +3 -3
  40. package/src/producers/batch.producer.ts +51 -0
  41. package/src/producers/single.producer.ts +38 -0
  42. package/dist/direct.producer.d.ts +0 -15
  43. package/dist/direct.producer.js +0 -58
  44. package/dist/direct.producer.js.map +0 -1
  45. package/dist/direct.strategy.d.ts +0 -5
  46. package/dist/direct.strategy.js +0 -48
  47. package/dist/direct.strategy.js.map +0 -1
  48. package/src/direct.producer.ts +0 -75
  49. package/src/direct.strategy.ts +0 -71
package/CHANGELOG.md CHANGED
@@ -3,6 +3,46 @@
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.producer.direct
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.producer.direct
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.producer.direct
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.producer.direct
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.producer.direct
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.producer.direct
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.producer.direct
45
+
6
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)
7
47
 
8
48
  **Note:** Version bump only for package @rsdk/kafka.producer.direct
@@ -1 +1,4 @@
1
+ import type { EventType } from '@rsdk/kafka.common';
1
2
  export declare const KAFKA_PRODUCED_RSDK_METADATA_SCOPE = "kafka-producer-direct";
3
+ export declare const createDirectProducerToken: (eventType: EventType<any>) => string;
4
+ export declare const createDirectBatchProducerToken: (eventTypes: EventType[]) => string;
package/dist/constants.js CHANGED
@@ -1,5 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KAFKA_PRODUCED_RSDK_METADATA_SCOPE = void 0;
3
+ exports.createDirectBatchProducerToken = exports.createDirectProducerToken = exports.KAFKA_PRODUCED_RSDK_METADATA_SCOPE = void 0;
4
+ const common_1 = require("@rsdk/common");
4
5
  exports.KAFKA_PRODUCED_RSDK_METADATA_SCOPE = 'kafka-producer-direct';
6
+ const createDirectProducerToken = (eventType) => `DIRECT_KAFKA_PRODUCER_${eventType.$type}`;
7
+ exports.createDirectProducerToken = createDirectProducerToken;
8
+ const createDirectBatchProducerToken = (eventTypes) => `DIRECT_KAFKA_BATCH_PRODUCER_${common_1.Case.toUpperSnake(eventTypes
9
+ .map(({ $type }) => $type)
10
+ .sort()
11
+ .join('_'))}`;
12
+ exports.createDirectBatchProducerToken = createDirectBatchProducerToken;
5
13
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,kCAAkC,GAAG,uBAAuB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAGvB,QAAA,kCAAkC,GAAG,uBAAuB,CAAC;AACnE,MAAM,yBAAyB,GAAG,CAAC,SAAyB,EAAU,EAAE,CAC7E,yBAAyB,SAAS,CAAC,KAAK,EAAE,CAAC;AADhC,QAAA,yBAAyB,6BACO;AACtC,MAAM,8BAA8B,GAAG,CAC5C,UAAuB,EACf,EAAE,CACV,+BAA+B,aAAI,CAAC,YAAY,CAC9C,UAAU;KACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;KACzB,IAAI,EAAE;KACN,IAAI,CAAC,GAAG,CAAC,CACb,EAAE,CAAC;AARO,QAAA,8BAA8B,kCAQrC"}
@@ -0,0 +1,3 @@
1
+ import type { EventType } from '@rsdk/kafka.common';
2
+ export declare const InjectDirectProducer: (eventType: EventType) => ParameterDecorator;
3
+ export declare const InjectDirectBatchProducer: (eventTypes: EventType[]) => ParameterDecorator;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InjectDirectBatchProducer = exports.InjectDirectProducer = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const metadata_1 = require("@rsdk/metadata");
6
+ const constants_1 = require("./constants");
7
+ const direct_outbox_module_generator_1 = require("./direct-outbox.module-generator");
8
+ const InjectDirectProducer = (eventType) => {
9
+ return (target, propertyKey, parameterIndex) => {
10
+ const directProducerToken = (0, constants_1.createDirectProducerToken)(eventType);
11
+ (0, common_1.Inject)(directProducerToken)(target, propertyKey, parameterIndex);
12
+ metadata_1.RsdkMetadata.setWithScope(target, metadata_1.PLATFORM_RAW_GLOBAL_METADATA_SCOPE, directProducerToken, direct_outbox_module_generator_1.DirectOutboxModuleGenerator.createModule(eventType), true);
13
+ };
14
+ };
15
+ exports.InjectDirectProducer = InjectDirectProducer;
16
+ const InjectDirectBatchProducer = (eventTypes) => {
17
+ return (target, propertyKey, parameterIndex) => {
18
+ const directBatchProducerToken = (0, constants_1.createDirectBatchProducerToken)(eventTypes);
19
+ (0, common_1.Inject)(directBatchProducerToken)(target, propertyKey, parameterIndex);
20
+ metadata_1.RsdkMetadata.setWithScope(target, metadata_1.PLATFORM_RAW_GLOBAL_METADATA_SCOPE, directBatchProducerToken, direct_outbox_module_generator_1.DirectOutboxModuleGenerator.createBatchModule(eventTypes), true);
21
+ };
22
+ };
23
+ exports.InjectDirectBatchProducer = InjectDirectBatchProducer;
24
+ //# sourceMappingURL=decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,6CAGwB;AAExB,2CAGqB;AACrB,qFAA+E;AAExE,MAAM,oBAAoB,GAAG,CAClC,SAAoB,EACA,EAAE;IACtB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;QAC7C,MAAM,mBAAmB,GAAG,IAAA,qCAAyB,EAAC,SAAS,CAAC,CAAC;QAEjE,IAAA,eAAM,EAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QACjE,uBAAY,CAAC,YAAY,CACvB,MAAM,EACN,6CAAkC,EAClC,mBAAmB,EACnB,4DAA2B,CAAC,YAAY,CAAC,SAAS,CAAC,EACnD,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,oBAAoB,wBAe/B;AAEK,MAAM,yBAAyB,GAAG,CACvC,UAAuB,EACH,EAAE;IACtB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;QAC7C,MAAM,wBAAwB,GAAG,IAAA,0CAA8B,EAAC,UAAU,CAAC,CAAC;QAE5E,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QACtE,uBAAY,CAAC,YAAY,CACvB,MAAM,EACN,6CAAkC,EAClC,wBAAwB,EACxB,4DAA2B,CAAC,iBAAiB,CAAC,UAAU,CAAC,EACzD,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,yBAAyB,6BAepC"}
@@ -0,0 +1,7 @@
1
+ import type { EventPayload, EventType } from '@rsdk/kafka.common';
2
+ import type { PublishOptions } from '@rsdk/kafka.producer';
3
+ import { EventsFactory } from '@rsdk/kafka.producer';
4
+ import type { Message } from 'kafkajs';
5
+ export declare class EventsFactoryDirect<E extends EventType> extends EventsFactory<E, Message> {
6
+ create<P extends EventPayload<E>>(payload: P, options?: PublishOptions): Message;
7
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventsFactoryDirect = void 0;
4
+ const kafka_producer_1 = require("@rsdk/kafka.producer");
5
+ const node_crypto_1 = require("node:crypto");
6
+ class EventsFactoryDirect extends kafka_producer_1.EventsFactory {
7
+ create(payload, options) {
8
+ return {
9
+ headers: {
10
+ id: (0, node_crypto_1.randomUUID)(),
11
+ type: this.eventType.$type,
12
+ metadata: JSON.stringify(this.getMetadata(options?.metadata ?? {})),
13
+ },
14
+ key: JSON.stringify({
15
+ schema: { type: 'string', optional: false },
16
+ payload: this.getPartitionKey(payload, options),
17
+ }),
18
+ value: this.serializePayload(payload),
19
+ };
20
+ }
21
+ }
22
+ exports.EventsFactoryDirect = EventsFactoryDirect;
23
+ //# sourceMappingURL=direct-events.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-events.factory.js","sourceRoot":"","sources":["../src/direct-events.factory.ts"],"names":[],"mappings":";;;AAEA,yDAAqD;AAErD,6CAAyC;AAEzC,MAAa,mBAAyC,SAAQ,8BAG7D;IACC,MAAM,CACJ,OAAU,EACV,OAAwB;QAExB,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,EAAE,IAAA,wBAAU,GAAE;gBAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;gBAC1B,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;aACpE;YACD,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;gBAClB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAC3C,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;aAChD,CAAC;YACF,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;SACtC,CAAC;IACJ,CAAC;CACF;AArBD,kDAqBC"}
@@ -0,0 +1,6 @@
1
+ import type { DynamicModule } from '@nestjs/common';
2
+ import type { EventType } from '@rsdk/kafka.common';
3
+ export declare class DirectOutboxModuleGenerator {
4
+ static createModule(eventType: EventType): DynamicModule;
5
+ static createBatchModule(eventTypes: EventType[]): DynamicModule;
6
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DirectOutboxModuleGenerator = void 0;
7
+ const autodoc_protocol_1 = require("@rsdk/autodoc.protocol");
8
+ const kafka_common_1 = require("@rsdk/kafka.common");
9
+ const kafka_producer_1 = require("@rsdk/kafka.producer");
10
+ const metadata_1 = require("@rsdk/metadata");
11
+ const omit_1 = __importDefault(require("lodash/omit"));
12
+ const autodoc_resolver_1 = require("./metadata/autodoc.resolver");
13
+ const kafka_producer_direct_module_1 = require("./module/kafka-producer-direct.module");
14
+ const batch_producer_1 = require("./producers/batch.producer");
15
+ const single_producer_1 = require("./producers/single.producer");
16
+ const constants_1 = require("./constants");
17
+ class DirectOutboxModuleGenerator {
18
+ static createModule(eventType) {
19
+ const providers = [
20
+ {
21
+ inject: [kafka_common_1.KAFKA_PRODUCER_INJECTION_TOKEN, kafka_producer_1.ProducerConfig],
22
+ provide: (0, constants_1.createDirectProducerToken)(eventType),
23
+ useFactory: (client, config) => {
24
+ return new single_producer_1.DirectProducer(client, eventType, config);
25
+ },
26
+ },
27
+ ];
28
+ const moduleDef = {
29
+ imports: [kafka_common_1.KafkaClientModule, kafka_producer_direct_module_1.DirectKafkaProducerModule],
30
+ providers,
31
+ module: DirectOutboxModuleGenerator,
32
+ exports: providers,
33
+ };
34
+ const rsdkKafkaMetadata = new metadata_1.RsdkMetadata(moduleDef, kafka_common_1.KAFKA_TOPIC_RSDK_METADATA_SCOPE);
35
+ rsdkKafkaMetadata.add({
36
+ type: kafka_common_1.TopicType.PRODUCE,
37
+ topicName: (0, kafka_common_1.getTopicName)(eventType),
38
+ group: eventType.$group,
39
+ partitionKeyField: eventType.$partitionKeyField,
40
+ eventType: (0, omit_1.default)(eventType, 'toJSON', 'encode', 'decode'),
41
+ });
42
+ autodoc_protocol_1.AutodocMetadata.defineResolver(moduleDef, kafka_common_1.KAFKA_TOPIC_RSDK_METADATA_SCOPE, autodoc_resolver_1.kafkaProducerDirectAutodocResolver);
43
+ return moduleDef;
44
+ }
45
+ static createBatchModule(eventTypes) {
46
+ const providers = [
47
+ {
48
+ provide: (0, constants_1.createDirectBatchProducerToken)(eventTypes),
49
+ inject: [kafka_common_1.KAFKA_PRODUCER_INJECTION_TOKEN, kafka_producer_1.ProducerConfig],
50
+ useFactory(client, config) {
51
+ return new batch_producer_1.DirectBatchProducer(client, config);
52
+ },
53
+ },
54
+ ];
55
+ const moduleDef = {
56
+ imports: [kafka_common_1.KafkaClientModule, kafka_producer_direct_module_1.DirectKafkaProducerModule],
57
+ providers,
58
+ module: DirectOutboxModuleGenerator,
59
+ exports: providers,
60
+ };
61
+ const rsdkKafkaMetadata = new metadata_1.RsdkMetadata(moduleDef, kafka_common_1.KAFKA_TOPIC_RSDK_METADATA_SCOPE);
62
+ for (const eventType of eventTypes) {
63
+ rsdkKafkaMetadata.add({
64
+ type: kafka_common_1.TopicType.PRODUCE,
65
+ topicName: (0, kafka_common_1.getTopicName)(eventType),
66
+ group: eventType.$group,
67
+ partitionKeyField: eventType.$partitionKeyField,
68
+ eventType: (0, omit_1.default)(eventType, 'toJSON', 'encode', 'decode'),
69
+ });
70
+ }
71
+ autodoc_protocol_1.AutodocMetadata.defineResolver(moduleDef, kafka_common_1.KAFKA_TOPIC_RSDK_METADATA_SCOPE, autodoc_resolver_1.kafkaProducerDirectAutodocResolver);
72
+ return moduleDef;
73
+ }
74
+ }
75
+ exports.DirectOutboxModuleGenerator = DirectOutboxModuleGenerator;
76
+ //# sourceMappingURL=direct-outbox.module-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-outbox.module-generator.js","sourceRoot":"","sources":["../src/direct-outbox.module-generator.ts"],"names":[],"mappings":";;;;;;AACA,6DAAyD;AAEzD,qDAM4B;AAE5B,yDAAsD;AACtD,6CAA8C;AAE9C,uDAA+B;AAE/B,kEAAiF;AACjF,wFAAkF;AAClF,+DAAiE;AACjE,iEAA6D;AAC7D,2CAGqB;AAErB,MAAa,2BAA2B;IACtC,MAAM,CAAC,YAAY,CAAC,SAAoB;QACtC,MAAM,SAAS,GAAsB;YACnC;gBACE,MAAM,EAAE,CAAC,6CAA8B,EAAE,+BAAc,CAAC;gBACxD,OAAO,EAAE,IAAA,qCAAyB,EAAC,SAAS,CAAC;gBAC7C,UAAU,EAAE,CACV,MAAgB,EAChB,MAAsB,EACK,EAAE;oBAC7B,OAAO,IAAI,gCAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACvD,CAAC;aACF;SACF,CAAC;QAEF,MAAM,SAAS,GAAG;YAChB,OAAO,EAAE,CAAC,gCAAiB,EAAE,wDAAyB,CAAC;YACvD,SAAS;YACT,MAAM,EAAE,2BAA2B;YACnC,OAAO,EAAE,SAAS;SACnB,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAI,uBAAY,CACxC,SAAS,EACT,8CAA+B,CAChC,CAAC;QAEF,iBAAiB,CAAC,GAAG,CAAC;YACpB,IAAI,EAAE,wBAAS,CAAC,OAAO;YACvB,SAAS,EAAE,IAAA,2BAAY,EAAC,SAAS,CAAC;YAClC,KAAK,EAAE,SAAS,CAAC,MAAM;YACvB,iBAAiB,EAAE,SAAS,CAAC,kBAAkB;YAC/C,SAAS,EAAE,IAAA,cAAI,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;SACzD,CAAC,CAAC;QAEH,kCAAe,CAAC,cAAc,CAC5B,SAAS,EACT,8CAA+B,EAC/B,qDAAkC,CACnC,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,UAAuB;QAC9C,MAAM,SAAS,GAAsB;YACnC;gBACE,OAAO,EAAE,IAAA,0CAA8B,EAAC,UAAU,CAAC;gBACnD,MAAM,EAAE,CAAC,6CAA8B,EAAE,+BAAc,CAAC;gBACxD,UAAU,CACR,MAAgB,EAChB,MAAsB;oBAEtB,OAAO,IAAI,oCAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACjD,CAAC;aACF;SACF,CAAC;QAEF,MAAM,SAAS,GAAG;YAChB,OAAO,EAAE,CAAC,gCAAiB,EAAE,wDAAyB,CAAC;YACvD,SAAS;YACT,MAAM,EAAE,2BAA2B;YACnC,OAAO,EAAE,SAAS;SACnB,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAI,uBAAY,CACxC,SAAS,EACT,8CAA+B,CAChC,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,iBAAiB,CAAC,GAAG,CAAC;gBACpB,IAAI,EAAE,wBAAS,CAAC,OAAO;gBACvB,SAAS,EAAE,IAAA,2BAAY,EAAC,SAAS,CAAC;gBAClC,KAAK,EAAE,SAAS,CAAC,MAAM;gBACvB,iBAAiB,EAAE,SAAS,CAAC,kBAAkB;gBAC/C,SAAS,EAAE,IAAA,cAAI,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;aACzD,CAAC,CAAC;SACJ;QAED,kCAAe,CAAC,cAAc,CAC5B,SAAS,EACT,8CAA+B,EAC/B,qDAAkC,CACnC,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAxFD,kEAwFC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export { DirectProducer } from './direct.producer';
2
- export { KafkaDirectProducer } from './direct.strategy';
1
+ export { DirectBatchProducer } from './producers/batch.producer';
2
+ export { DirectProducer } from './producers/single.producer';
3
+ export { InjectDirectBatchProducer, InjectDirectProducer } from './decorator';
4
+ export { createDirectBatchProducerToken, createDirectProducerToken, KAFKA_PRODUCED_RSDK_METADATA_SCOPE, } from './constants';
package/dist/index.js CHANGED
@@ -1,8 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KafkaDirectProducer = exports.DirectProducer = void 0;
4
- var direct_producer_1 = require("./direct.producer");
5
- Object.defineProperty(exports, "DirectProducer", { enumerable: true, get: function () { return direct_producer_1.DirectProducer; } });
6
- var direct_strategy_1 = require("./direct.strategy");
7
- Object.defineProperty(exports, "KafkaDirectProducer", { enumerable: true, get: function () { return direct_strategy_1.KafkaDirectProducer; } });
3
+ exports.KAFKA_PRODUCED_RSDK_METADATA_SCOPE = exports.createDirectProducerToken = exports.createDirectBatchProducerToken = exports.InjectDirectProducer = exports.InjectDirectBatchProducer = exports.DirectProducer = exports.DirectBatchProducer = void 0;
4
+ var batch_producer_1 = require("./producers/batch.producer");
5
+ Object.defineProperty(exports, "DirectBatchProducer", { enumerable: true, get: function () { return batch_producer_1.DirectBatchProducer; } });
6
+ var single_producer_1 = require("./producers/single.producer");
7
+ Object.defineProperty(exports, "DirectProducer", { enumerable: true, get: function () { return single_producer_1.DirectProducer; } });
8
+ var decorator_1 = require("./decorator");
9
+ Object.defineProperty(exports, "InjectDirectBatchProducer", { enumerable: true, get: function () { return decorator_1.InjectDirectBatchProducer; } });
10
+ Object.defineProperty(exports, "InjectDirectProducer", { enumerable: true, get: function () { return decorator_1.InjectDirectProducer; } });
11
+ var constants_1 = require("./constants");
12
+ Object.defineProperty(exports, "createDirectBatchProducerToken", { enumerable: true, get: function () { return constants_1.createDirectBatchProducerToken; } });
13
+ Object.defineProperty(exports, "createDirectProducerToken", { enumerable: true, get: function () { return constants_1.createDirectProducerToken; } });
14
+ Object.defineProperty(exports, "KAFKA_PRODUCED_RSDK_METADATA_SCOPE", { enumerable: true, get: function () { return constants_1.KAFKA_PRODUCED_RSDK_METADATA_SCOPE; } });
8
15
  //# 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,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAEvB,qDAAwD;AAA/C,sHAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6DAAiE;AAAxD,qHAAA,mBAAmB,OAAA;AAE5B,+DAA6D;AAApD,iHAAA,cAAc,OAAA;AAEvB,yCAA8E;AAArE,sHAAA,yBAAyB,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAExD,yCAIqB;AAHnB,2HAAA,8BAA8B,OAAA;AAC9B,sHAAA,yBAAyB,OAAA;AACzB,+HAAA,kCAAkC,OAAA"}
@@ -11,7 +11,7 @@ class KafkaProducerDirectAutodocResolver {
11
11
  return null;
12
12
  }
13
13
  return new autodoc_protocol_1.Composite(new autodoc_protocol_1.Table(resources
14
- .filter((resource) => resource.value.type === kafka_common_1.KafkaTopicType.Produce)
14
+ .filter((resource) => resource.value.type === kafka_common_1.TopicType.PRODUCE)
15
15
  .map((resource) => {
16
16
  const { topicName, group: group, partitionKeyField, eventType, } = resource.value;
17
17
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"autodoc.resolver.js","sourceRoot":"","sources":["../../src/metadata/autodoc.resolver.ts"],"names":[],"mappings":";;;AACA,6DAA0D;AAE1D,qDAAoD;AAIpD,4CAAkE;AAElE,MAAa,kCAAkC;IAC7C,OAAO,CAAC,oBAA0C;QAChD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CACxC,8CAAkC,CACnC,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,4BAAS,CAClB,IAAI,wBAAK,CACP,SAAS;aACN,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,6BAAc,CAAC,OAAO,CAAC;aACpE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,EACJ,SAAS,EACT,KAAK,EAAE,KAAK,EACZ,iBAAiB,EACjB,SAAS,GACV,GAAkC,QAAQ,CAAC,KAAK,CAAC;YAElD,OAAO;gBACL,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,KAAK,IAAI,GAAG;gBACnB,iBAAiB,EAAE,iBAAiB,IAAI,GAAG;gBAC3C,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,GAAG;aACnC,CAAC;QACJ,CAAC,CAAC,CACL,EACD,uBAAuB,CACxB,CAAC;IACJ,CAAC;CACF;AAjCD,gFAiCC;AAEY,QAAA,kCAAkC,GAC7C,IAAI,kCAAkC,EAAE,CAAC"}
1
+ {"version":3,"file":"autodoc.resolver.js","sourceRoot":"","sources":["../../src/metadata/autodoc.resolver.ts"],"names":[],"mappings":";;;AACA,6DAA0D;AAK1D,qDAA+C;AAG/C,4CAAkE;AAElE,MAAa,kCAAkC;IAC7C,OAAO,CAAC,oBAA0C;QAChD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CACxC,8CAAkC,CACnC,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,4BAAS,CAClB,IAAI,wBAAK,CACP,SAAS;aACN,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAS,CAAC,OAAO,CAAC;aAC/D,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,EACJ,SAAS,EACT,KAAK,EAAE,KAAK,EACZ,iBAAiB,EACjB,SAAS,GACV,GAAkC,QAAQ,CAAC,KAAK,CAAC;YAElD,OAAO;gBACL,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,KAAK,IAAI,GAAG;gBACnB,iBAAiB,EAAE,iBAAiB,IAAI,GAAG;gBAC3C,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,GAAG;aACnC,CAAC;QACJ,CAAC,CAAC,CACL,EACD,uBAAuB,CACxB,CAAC;IACJ,CAAC;CACF;AAjCD,gFAiCC;AAEY,QAAA,kCAAkC,GAC7C,IAAI,kCAAkC,EAAE,CAAC"}
@@ -1,9 +1,5 @@
1
- import type { CheckResult, HealthIndicator } from '@rsdk/core';
2
- import { KafkaMetadataProvider } from '@rsdk/kafka.common';
1
+ import { KafkaBaseIndicator, TopicsService } from '@rsdk/kafka.common';
3
2
  import { Kafka } from 'kafkajs';
4
- export declare class KafkaProducerDirectHealthIndicator implements HealthIndicator {
5
- private readonly kafkaClient;
6
- private readonly topicStorage;
7
- constructor(kafkaClient: Kafka, topicStorage: KafkaMetadataProvider);
8
- check(): Promise<CheckResult>;
3
+ export declare class DirectProducerIndicator extends KafkaBaseIndicator {
4
+ constructor(client: Kafka, topics: TopicsService);
9
5
  }
@@ -12,28 +12,21 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.KafkaProducerDirectHealthIndicator = void 0;
15
+ exports.DirectProducerIndicator = void 0;
16
16
  const core_1 = require("@rsdk/core");
17
17
  const kafka_common_1 = require("@rsdk/kafka.common");
18
- const kafka_client_1 = require("@rsdk/kafka.common/dist/client/kafka.client");
19
18
  const kafkajs_1 = require("kafkajs");
20
- let KafkaProducerDirectHealthIndicator = exports.KafkaProducerDirectHealthIndicator = class KafkaProducerDirectHealthIndicator {
21
- kafkaClient;
22
- topicStorage;
23
- constructor(kafkaClient, topicStorage) {
24
- this.kafkaClient = kafkaClient;
25
- this.topicStorage = topicStorage;
26
- }
27
- async check() {
28
- return new kafka_common_1.KafkaHealthcheck(this.kafkaClient, this.topicStorage.getProducedTopics()).check();
19
+ let DirectProducerIndicator = class DirectProducerIndicator extends kafka_common_1.KafkaBaseIndicator {
20
+ constructor(client, topics) {
21
+ super(client, topics.getTopics(kafka_common_1.TopicType.PRODUCE));
29
22
  }
30
23
  };
31
- exports.KafkaProducerDirectHealthIndicator = KafkaProducerDirectHealthIndicator = __decorate([
24
+ exports.DirectProducerIndicator = DirectProducerIndicator;
25
+ exports.DirectProducerIndicator = DirectProducerIndicator = __decorate([
32
26
  (0, core_1.Indicator)('kafka-producer-direct', {
33
27
  description: 'Check kafka connection',
34
28
  }),
35
- __param(0, (0, kafka_client_1.InjectKafka)()),
36
- __metadata("design:paramtypes", [kafkajs_1.Kafka,
37
- kafka_common_1.KafkaMetadataProvider])
38
- ], KafkaProducerDirectHealthIndicator);
29
+ __param(0, (0, kafka_common_1.InjectKafka)()),
30
+ __metadata("design:paramtypes", [kafkajs_1.Kafka, kafka_common_1.TopicsService])
31
+ ], DirectProducerIndicator);
39
32
  //# sourceMappingURL=kafka-producer-direct.health-indicator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kafka-producer-direct.health-indicator.js","sourceRoot":"","sources":["../../src/module/kafka-producer-direct.health-indicator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,qCAAuC;AACvC,qDAA6E;AAC7E,8EAA0E;AAC1E,qCAAgC;AAKzB,IAAM,kCAAkC,gDAAxC,MAAM,kCAAkC;IAEX;IACf;IAFnB,YACkC,WAAkB,EACjC,YAAmC;QADpB,gBAAW,GAAX,WAAW,CAAO;QACjC,iBAAY,GAAZ,YAAY,CAAuB;IACnD,CAAC;IAEJ,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,+BAAgB,CACzB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CACtC,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;6CAZY,kCAAkC;IAH9C,IAAA,gBAAS,EAAC,uBAAuB,EAAE;QAClC,WAAW,EAAE,wBAAwB;KACtC,CAAC;IAGG,WAAA,IAAA,0BAAW,GAAE,CAAA;qCAA+B,eAAK;QACnB,oCAAqB;GAH3C,kCAAkC,CAY9C"}
1
+ {"version":3,"file":"kafka-producer-direct.health-indicator.js","sourceRoot":"","sources":["../../src/module/kafka-producer-direct.health-indicator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,qCAAuC;AACvC,qDAK4B;AAC5B,qCAAgC;AAKzB,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,iCAAkB;IAC7D,YAA2B,MAAa,EAAE,MAAqB;QAC7D,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,wBAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAJY,0DAAuB;kCAAvB,uBAAuB;IAHnC,IAAA,gBAAS,EAAC,uBAAuB,EAAE;QAClC,WAAW,EAAE,wBAAwB;KACtC,CAAC;IAEa,WAAA,IAAA,0BAAW,GAAE,CAAA;qCAAS,eAAK,EAAU,4BAAa;GADpD,uBAAuB,CAInC"}
@@ -1,2 +1,2 @@
1
- export declare class KafkaProducerDirectModule {
1
+ export declare class DirectKafkaProducerModule {
2
2
  }
@@ -6,16 +6,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.KafkaProducerDirectModule = void 0;
9
+ exports.DirectKafkaProducerModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const kafka_common_1 = require("@rsdk/kafka.common");
12
12
  const kafka_producer_direct_health_indicator_1 = require("./kafka-producer-direct.health-indicator");
13
- let KafkaProducerDirectModule = exports.KafkaProducerDirectModule = class KafkaProducerDirectModule {
13
+ let DirectKafkaProducerModule = class DirectKafkaProducerModule {
14
14
  };
15
- exports.KafkaProducerDirectModule = KafkaProducerDirectModule = __decorate([
15
+ exports.DirectKafkaProducerModule = DirectKafkaProducerModule;
16
+ exports.DirectKafkaProducerModule = DirectKafkaProducerModule = __decorate([
16
17
  (0, common_1.Module)({
17
18
  imports: [kafka_common_1.KafkaClientModule],
18
- providers: [kafka_producer_direct_health_indicator_1.KafkaProducerDirectHealthIndicator],
19
+ providers: [kafka_producer_direct_health_indicator_1.DirectProducerIndicator],
19
20
  })
20
- ], KafkaProducerDirectModule);
21
+ ], DirectKafkaProducerModule);
21
22
  //# sourceMappingURL=kafka-producer-direct.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kafka-producer-direct.module.js","sourceRoot":"","sources":["../../src/module/kafka-producer-direct.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAuD;AAEvD,qGAA8F;AAMvF,IAAM,yBAAyB,uCAA/B,MAAM,yBAAyB;CAAG,CAAA;oCAA5B,yBAAyB;IAJrC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAiB,CAAC;QAC5B,SAAS,EAAE,CAAC,2EAAkC,CAAC;KAChD,CAAC;GACW,yBAAyB,CAAG"}
1
+ {"version":3,"file":"kafka-producer-direct.module.js","sourceRoot":"","sources":["../../src/module/kafka-producer-direct.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAuD;AAEvD,qGAAmF;AAM5E,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAAG,CAAA;AAA5B,8DAAyB;oCAAzB,yBAAyB;IAJrC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,gCAAiB,CAAC;QAC5B,SAAS,EAAE,CAAC,gEAAuB,CAAC;KACrC,CAAC;GACW,yBAAyB,CAAG"}
@@ -0,0 +1,14 @@
1
+ import type { EventType } from '@rsdk/kafka.common';
2
+ import type { BatchProducerItem, ProducerConfig } from '@rsdk/kafka.producer';
3
+ import type { RawKafkaBatchProducer } from '@rsdk/kafka.producer/dist/interfaces';
4
+ import type { Producer } from 'kafkajs';
5
+ /**
6
+ * Producer, способный отправлять несколько ивентов за раз,
7
+ * в том числе, в разные топики (стратегия: direct)
8
+ */
9
+ export declare class DirectBatchProducer implements RawKafkaBatchProducer {
10
+ private readonly client;
11
+ private readonly config;
12
+ constructor(client: Producer, config: ProducerConfig);
13
+ publish<E extends EventType>(items: BatchProducerItem<E>[]): Promise<void>;
14
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DirectBatchProducer = void 0;
4
+ const kafka_common_1 = require("@rsdk/kafka.common");
5
+ const direct_events_factory_1 = require("../direct-events.factory");
6
+ /**
7
+ * Producer, способный отправлять несколько ивентов за раз,
8
+ * в том числе, в разные топики (стратегия: direct)
9
+ */
10
+ class DirectBatchProducer {
11
+ client;
12
+ config;
13
+ constructor(client, config) {
14
+ this.client = client;
15
+ this.config = config;
16
+ }
17
+ async publish(items) {
18
+ const aggregateByTopic = items.reduce((acc, item) => {
19
+ const topic = (0, kafka_common_1.getTopicName)(item.eventType);
20
+ const exist = acc.get(topic) ?? [];
21
+ exist.push(item);
22
+ acc.set(topic, exist);
23
+ return acc;
24
+ }, new Map());
25
+ for (const [topic, items] of aggregateByTopic) {
26
+ const messages = items.map(({ payload, options, eventType }) => {
27
+ const factory = new direct_events_factory_1.EventsFactoryDirect(eventType, this.config);
28
+ return factory.create(payload, options);
29
+ });
30
+ // TODO: А точно надо в каждый топик последовательно слать это?
31
+ try {
32
+ await this.client.send({ topic, messages: messages });
33
+ }
34
+ catch (error) {
35
+ (0, kafka_common_1.handleKafkaError)(error, topic, {
36
+ items,
37
+ aggregateByTopic,
38
+ messages,
39
+ });
40
+ }
41
+ }
42
+ }
43
+ }
44
+ exports.DirectBatchProducer = DirectBatchProducer;
45
+ //# sourceMappingURL=batch.producer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.producer.js","sourceRoot":"","sources":["../../src/producers/batch.producer.ts"],"names":[],"mappings":";;;AACA,qDAAoE;AAKpE,oEAA+D;AAE/D;;;GAGG;AACH,MAAa,mBAAmB;IAEX;IACA;IAFnB,YACmB,MAAgB,EAChB,MAAsB;QADtB,WAAM,GAAN,MAAM,CAAU;QAChB,WAAM,GAAN,MAAM,CAAgB;IACtC,CAAC;IAEJ,KAAK,CAAC,OAAO,CACX,KAA6B;QAE7B,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAClD,MAAM,KAAK,GAAG,IAAA,2BAAY,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAEnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAEd,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,gBAAgB,EAAE;YAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;gBAC7D,MAAM,OAAO,GAAG,IAAI,2CAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEhE,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,+DAA+D;YAE/D,IAAI;gBACF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;aACvD;YAAC,OAAO,KAAK,EAAE;gBACd,IAAA,+BAAgB,EAAC,KAAK,EAAE,KAAK,EAAE;oBAC7B,KAAK;oBACL,gBAAgB;oBAChB,QAAQ;iBACT,CAAC,CAAC;aACJ;SACF;IACH,CAAC;CACF;AAtCD,kDAsCC"}
@@ -0,0 +1,13 @@
1
+ import type { EventPayload, EventType } from '@rsdk/kafka.common';
2
+ import type { KafkaProducer, ProducerOptions, PublishOptions } from '@rsdk/kafka.producer';
3
+ import type { Producer } from 'kafkajs';
4
+ /**
5
+ * Producer, специализированный под конкретный ивент.
6
+ */
7
+ export declare class DirectProducer<T extends EventType> implements KafkaProducer<T> {
8
+ private readonly client;
9
+ private readonly factory;
10
+ private readonly topic;
11
+ constructor(client: Producer, eventType: T, config: ProducerOptions);
12
+ publish<P extends EventPayload<T>>(payload: P, options?: PublishOptions): Promise<void>;
13
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DirectProducer = void 0;
4
+ const kafka_common_1 = require("@rsdk/kafka.common");
5
+ const direct_events_factory_1 = require("../direct-events.factory");
6
+ /**
7
+ * Producer, специализированный под конкретный ивент.
8
+ */
9
+ class DirectProducer {
10
+ client;
11
+ factory;
12
+ topic;
13
+ constructor(client, eventType, config) {
14
+ this.client = client;
15
+ this.factory = new direct_events_factory_1.EventsFactoryDirect(eventType, config);
16
+ this.topic = (0, kafka_common_1.getTopicName)(eventType);
17
+ }
18
+ async publish(payload, options) {
19
+ try {
20
+ const messages = [this.factory.create(payload, options)];
21
+ await this.client.send({ topic: this.topic, messages });
22
+ }
23
+ catch (error) {
24
+ (0, kafka_common_1.handleKafkaError)(error, this.topic, options);
25
+ }
26
+ }
27
+ }
28
+ exports.DirectProducer = DirectProducer;
29
+ //# sourceMappingURL=single.producer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single.producer.js","sourceRoot":"","sources":["../../src/producers/single.producer.ts"],"names":[],"mappings":";;;AACA,qDAAoE;AAQpE,oEAA+D;AAE/D;;GAEG;AACH,MAAa,cAAc;IACR,MAAM,CAAW;IACjB,OAAO,CAAyB;IAChC,KAAK,CAAS;IAE/B,YAAY,MAAgB,EAAE,SAAY,EAAE,MAAuB;QACjE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,2CAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,IAAA,2BAAY,EAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAU,EACV,OAAwB;QAExB,IAAI;YACF,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAEzD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;SACzD;QAAC,OAAO,KAAK,EAAE;YACd,IAAA,+BAAgB,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAC9C;IACH,CAAC;CACF;AAvBD,wCAuBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/kafka.producer.direct",
3
- "version": "4.0.0-next.1",
3
+ "version": "4.0.0-next.10",
4
4
  "description": "Publishing messages directly to kafka",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -11,19 +11,23 @@
11
11
  },
12
12
  "main": "dist/index.js",
13
13
  "peerDependencies": {
14
- "@nestjs/common": "^10.1.3",
15
- "@nestjs/microservices": "^10.1.3",
16
- "@rsdk/autodoc.protocol": "^4.0.0-next.1",
17
- "@rsdk/common": "^3.5.0",
18
- "@rsdk/core": "^4.0.0-next.1",
19
- "@rsdk/kafka.common": "^4.0.0-next.1",
20
- "@rsdk/kafka.producer": "^4.0.0-next.1",
21
- "@rsdk/logging": "^4.0.0-next.1",
22
- "@rsdk/metadata": "^4.0.0-next.1",
23
- "kafkajs": "^2.2.4"
14
+ "@grpc/grpc-js": "^1.9.9",
15
+ "@nestjs/common": "^10.0.0",
16
+ "@nestjs/core": "^10.0.0",
17
+ "@nestjs/microservices": "^10.0.0",
18
+ "@rsdk/autodoc.protocol": "^4.0.0-next.10",
19
+ "@rsdk/common": "^4.0.0-next.10",
20
+ "@rsdk/core": "^4.0.0-next.10",
21
+ "@rsdk/kafka.common": "^4.0.0-next.10",
22
+ "@rsdk/kafka.producer": "^4.0.0-next.10",
23
+ "@rsdk/logging": "^4.0.0-next.10",
24
+ "@rsdk/metadata": "^4.0.0-next.10",
25
+ "kafkajs": "^2.2.4",
26
+ "reflect-metadata": "^0.1.13",
27
+ "rxjs": "^7.0.0"
24
28
  },
25
29
  "dependencies": {
26
30
  "lodash": "^4.17.21"
27
31
  },
28
- "gitHead": "d21a800ef5dd191b5effec59846c3a44a7ca3d1e"
32
+ "gitHead": "c41d4da9aa0318d5e6417514c763618ce924f9b7"
29
33
  }
package/src/constants.ts CHANGED
@@ -1 +1,15 @@
1
+ import { Case } from '@rsdk/common';
2
+ import type { EventType } from '@rsdk/kafka.common';
3
+
1
4
  export const KAFKA_PRODUCED_RSDK_METADATA_SCOPE = 'kafka-producer-direct';
5
+ export const createDirectProducerToken = (eventType: EventType<any>): string =>
6
+ `DIRECT_KAFKA_PRODUCER_${eventType.$type}`;
7
+ export const createDirectBatchProducerToken = (
8
+ eventTypes: EventType[],
9
+ ): string =>
10
+ `DIRECT_KAFKA_BATCH_PRODUCER_${Case.toUpperSnake(
11
+ eventTypes
12
+ .map(({ $type }) => $type)
13
+ .sort()
14
+ .join('_'),
15
+ )}`;
@@ -0,0 +1,46 @@
1
+ import { Inject } from '@nestjs/common';
2
+ import type { EventType } from '@rsdk/kafka.common';
3
+ import {
4
+ PLATFORM_RAW_GLOBAL_METADATA_SCOPE,
5
+ RsdkMetadata,
6
+ } from '@rsdk/metadata';
7
+
8
+ import {
9
+ createDirectBatchProducerToken,
10
+ createDirectProducerToken,
11
+ } from './constants';
12
+ import { DirectOutboxModuleGenerator } from './direct-outbox.module-generator';
13
+
14
+ export const InjectDirectProducer = (
15
+ eventType: EventType,
16
+ ): ParameterDecorator => {
17
+ return (target, propertyKey, parameterIndex) => {
18
+ const directProducerToken = createDirectProducerToken(eventType);
19
+
20
+ Inject(directProducerToken)(target, propertyKey, parameterIndex);
21
+ RsdkMetadata.setWithScope(
22
+ target,
23
+ PLATFORM_RAW_GLOBAL_METADATA_SCOPE,
24
+ directProducerToken,
25
+ DirectOutboxModuleGenerator.createModule(eventType),
26
+ true,
27
+ );
28
+ };
29
+ };
30
+
31
+ export const InjectDirectBatchProducer = (
32
+ eventTypes: EventType[],
33
+ ): ParameterDecorator => {
34
+ return (target, propertyKey, parameterIndex) => {
35
+ const directBatchProducerToken = createDirectBatchProducerToken(eventTypes);
36
+
37
+ Inject(directBatchProducerToken)(target, propertyKey, parameterIndex);
38
+ RsdkMetadata.setWithScope(
39
+ target,
40
+ PLATFORM_RAW_GLOBAL_METADATA_SCOPE,
41
+ directBatchProducerToken,
42
+ DirectOutboxModuleGenerator.createBatchModule(eventTypes),
43
+ true,
44
+ );
45
+ };
46
+ };