@palmetto/nestjs-pubsub 3.5.3 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -28,27 +28,43 @@ GoogleCloud pubsub:
28
28
  yarn add @google-cloud/pubsub
29
29
  ```
30
30
 
31
+ Kafka:
32
+
33
+ ```sh
34
+ yarn add @confluentinc/kafka-javascript
35
+ ```
36
+
31
37
  ## Usage
32
38
 
33
39
  ### Add to your `AppModule` imports
34
40
 
35
41
  ```ts
36
42
  import {
37
- RABBITMQ_TRANSPORT,
38
- RabbitQueueExchangeConfiguration,
39
43
  BULLMQ_TRANSPORT,
40
44
  BullMqQueueConfiguration,
41
45
  IdMetaSchema,
46
+ KAFKA_TRANSPORT,
47
+ KafkaPubSubConnectionConfig
48
+ KafkaPubSubSubscriberConfiguration,
49
+ MessageResult,
42
50
  Publisher,
51
+ RABBITMQ_TRANSPORT,
52
+ RabbitMqConnectionConfig,
53
+ RabbitQueueExchangeConfiguration,
43
54
  } from "@palmetto/pubsub";
44
55
 
45
56
  import {
57
+ PubSubBullMqModule,
58
+ PubSubKafkaBatchSubscriber,
59
+ PubSubKafkaModule,
60
+ PubSubRabbitMqModule,
46
61
  PubSubRabbitSubscriber,
47
- PubSubBullMqSubscriber,
48
62
  } from "@palmetto/nestjs-pubsub";
49
63
 
50
64
  import { Injectable, Module } from "@nestjs/common";
51
65
 
66
+ import type { ConnectionOptions } from "bullmq";
67
+
52
68
  import { z } from "zod";
53
69
 
54
70
  // MyModel* objects define the model you are publishing or subscribing using RabbitMQ
@@ -61,6 +77,7 @@ const MyModelConfig: RabbitQueueExchangeConfiguration = {
61
77
  name: "my-model",
62
78
  schema: MyModelSchema,
63
79
  transport: RABBITMQ_TRANSPORT,
80
+ quorum: true,
64
81
  exchangeType: "direct",
65
82
  };
66
83
 
@@ -76,13 +93,23 @@ const MyOtherModelConfig: BullMqQueueConfiguration = {
76
93
  transport: BULLMQ_TRANSPORT,
77
94
  };
78
95
 
96
+ const MyKafkaModelConfig: KafkaPubSubSubscriberConfiguration = {
97
+ name: "my-model-kafka",
98
+ schema: MyModelSchema,
99
+ transport: KAFKA_TRASPORT,
100
+ topicName: "my-model-topic",
101
+ subscriberConfig: {
102
+ groupId: "my-model-consumer-group-id",
103
+ },
104
+ };
105
+
79
106
  // MyModelHandler demonstrates a subscriber to the MyModel event over RabbitMQ
80
107
  @Injectable()
81
108
  class MyModelHandler {
82
109
  constructor(private readonly publisher: Publisher) {}
83
110
 
84
111
  @PubSubRabbitSubscriber(MyModelConfig)
85
- async handler(message: MyModel) {
112
+ async handler(message: MyModel): Promise<MessageResult> {
86
113
  // here, we're publishing a new message to bullmq based on the message we received
87
114
  const newMessage: MyOtherModel = {
88
115
  message: message.message,
@@ -90,6 +117,16 @@ class MyModelHandler {
90
117
  };
91
118
 
92
119
  await publisher.publish(MyOtherModelConfig, newMessage);
120
+ return MessageResult.Ok;
121
+ }
122
+
123
+ @PubSubKafkaBatchSubscriber(MyKafkaModelConfig)
124
+ async batchHandler(
125
+ messages: BatchMessage<MyModel, KafkaPubSubMessageContext>[],
126
+ batchContext: KafkaBatchContext,
127
+ ): Promise<MessageResult> {
128
+ // process the batch of messages
129
+ return MessageResult.Ok;
93
130
  }
94
131
  }
95
132
  @Module({
@@ -99,7 +136,7 @@ class MyModelHandler {
99
136
  PubSubRabbitMqModule.registerAsync({
100
137
  imports: [AppConfigModule],
101
138
  inject: [AppConfig],
102
- useFactory(appConfig: AppConfig) {
139
+ useFactory(appConfig: AppConfig): RabbitMqConnectionConfig {
103
140
  return {
104
141
  host: appConfig.get("rabbit.url"),
105
142
  };
@@ -108,7 +145,7 @@ class MyModelHandler {
108
145
  PubSubBullMqModule.registerAsync({
109
146
  imports: [AppConfigModule],
110
147
  inject: [AppConfig],
111
- useFactory(appConfig: AppConfig) {
148
+ useFactory(appConfig: AppConfig): ConnectionOptions {
112
149
  return {
113
150
  host: appConfig.get("redis.host"),
114
151
  username: appConfig.get("bullmq.username"),
@@ -116,6 +153,22 @@ class MyModelHandler {
116
153
  };
117
154
  },
118
155
  }),
156
+ PubSubKafkaModule.registerAsync({
157
+ imports: [AppConfigModule],
158
+ inject: [AppConfig],
159
+ useFactory(appConfig: AppConfig): KafkaPubSubConnectionConfig {
160
+ return {
161
+ brokers: [appConfig.get("kafka.host")],
162
+ kafkaJS: {
163
+ sasl: {
164
+ mechanism: "plain",
165
+ username: "admin",
166
+ password: "admin-secret",
167
+ },
168
+ },
169
+ };
170
+ },
171
+ }),
119
172
  ],
120
173
  providers: [MyModelHandler],
121
174
  })
package/dist/main.d.ts CHANGED
@@ -2,5 +2,7 @@ export * from "./pubsub-module.js";
2
2
  export * from "./pubsub-bullmq-module.js";
3
3
  export * from "./pubsub-rabbitmq-module.js";
4
4
  export * from "./pubsub-gcppubsub-module.js";
5
- export { type HandlerMethod, PubSubBullMqSubscriber, PubSubRabbitSubscriber, PubSubGcpSubscriber, } from "./subscriber.js";
5
+ export * from "./pubsub-kafka-module.js";
6
+ export { type HandlerMethod, PubSubBullMqSubscriber, PubSubRabbitSubscriber, PubSubGcpSubscriber, PubSubKafkaSubscriber, } from "./subscriber.js";
7
+ export { type BatchMessage, type BatchHandlerMethod, PubSubKafkaBatchSubscriber, } from "./subscriber-batch.js";
6
8
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EACL,KAAK,aAAa,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,OAAO,EACL,KAAK,aAAa,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC"}
package/dist/main.js CHANGED
@@ -14,12 +14,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.PubSubGcpSubscriber = exports.PubSubRabbitSubscriber = exports.PubSubBullMqSubscriber = void 0;
17
+ exports.PubSubKafkaBatchSubscriber = exports.PubSubKafkaSubscriber = exports.PubSubGcpSubscriber = exports.PubSubRabbitSubscriber = exports.PubSubBullMqSubscriber = void 0;
18
18
  __exportStar(require("./pubsub-module.js"), exports);
19
19
  __exportStar(require("./pubsub-bullmq-module.js"), exports);
20
20
  __exportStar(require("./pubsub-rabbitmq-module.js"), exports);
21
21
  __exportStar(require("./pubsub-gcppubsub-module.js"), exports);
22
+ __exportStar(require("./pubsub-kafka-module.js"), exports);
22
23
  var subscriber_js_1 = require("./subscriber.js");
23
24
  Object.defineProperty(exports, "PubSubBullMqSubscriber", { enumerable: true, get: function () { return subscriber_js_1.PubSubBullMqSubscriber; } });
24
25
  Object.defineProperty(exports, "PubSubRabbitSubscriber", { enumerable: true, get: function () { return subscriber_js_1.PubSubRabbitSubscriber; } });
25
26
  Object.defineProperty(exports, "PubSubGcpSubscriber", { enumerable: true, get: function () { return subscriber_js_1.PubSubGcpSubscriber; } });
27
+ Object.defineProperty(exports, "PubSubKafkaSubscriber", { enumerable: true, get: function () { return subscriber_js_1.PubSubKafkaSubscriber; } });
28
+ var subscriber_batch_js_1 = require("./subscriber-batch.js");
29
+ Object.defineProperty(exports, "PubSubKafkaBatchSubscriber", { enumerable: true, get: function () { return subscriber_batch_js_1.PubSubKafkaBatchSubscriber; } });
@@ -0,0 +1,9 @@
1
+ import { KafkaPubSubConnectionConfig } from "@palmetto/pubsub";
2
+ declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<KafkaPubSubConnectionConfig, "register", "create", {}>;
3
+ /**
4
+ * This module requires @palmetto/pubsub
5
+ */
6
+ export declare class PubSubKafkaModule extends ConfigurableModuleClass {
7
+ }
8
+ export {};
9
+ //# sourceMappingURL=pubsub-kafka-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub-kafka-module.d.ts","sourceRoot":"","sources":["../src/pubsub-kafka-module.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,2BAA2B,EAC5B,MAAM,kBAAkB,CAAC;AAO1B,QAAA,MAAQ,uBAAuB,uGACuC,CAAC;AAEvE;;GAEG;AACH,qBAgCa,iBAAkB,SAAQ,uBAAuB;CAAG"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PubSubKafkaModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const pubsub_1 = require("@palmetto/pubsub");
12
+ const pubsub_provider_module_1 = require("./pubsub-provider-module");
13
+ const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new common_1.ConfigurableModuleBuilder().build();
14
+ /**
15
+ * This module requires @palmetto/pubsub
16
+ */
17
+ let PubSubKafkaModule = class PubSubKafkaModule extends ConfigurableModuleClass {
18
+ };
19
+ exports.PubSubKafkaModule = PubSubKafkaModule;
20
+ exports.PubSubKafkaModule = PubSubKafkaModule = __decorate([
21
+ (0, common_1.Module)({
22
+ imports: [pubsub_provider_module_1.PubSubProviderFactoryModule],
23
+ providers: [
24
+ {
25
+ provide: pubsub_1.KafkaPubSubConnection,
26
+ useFactory: (config) => pubsub_1.KafkaPubSubConnection.create(config, new common_1.Logger(pubsub_1.KafkaPubSubConnection.name)),
27
+ inject: [MODULE_OPTIONS_TOKEN],
28
+ },
29
+ {
30
+ provide: pubsub_1.KafkaPubSubProvider,
31
+ useFactory: (providers, connection) => {
32
+ const provider = new pubsub_1.KafkaPubSubProvider(connection, new common_1.Logger(pubsub_1.KafkaPubSubProvider.name));
33
+ providers.addProvider(provider);
34
+ return provider;
35
+ },
36
+ inject: [pubsub_provider_module_1.PubSubProviderFactory, pubsub_1.KafkaPubSubConnection],
37
+ },
38
+ ],
39
+ exports: [pubsub_1.KafkaPubSubConnection, pubsub_1.KafkaPubSubProvider],
40
+ })
41
+ ], PubSubKafkaModule);
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub-module.d.ts","sourceRoot":"","sources":["../src/pubsub-module.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,QAAA,MAAQ,uBAAuB,+FAC+B,CAAC;AAyG/D,qBAmBa,YAAa,SAAQ,uBAAuB;CAAG"}
1
+ {"version":3,"file":"pubsub-module.d.ts","sourceRoot":"","sources":["../src/pubsub-module.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,QAAA,MAAQ,uBAAuB,+FAC+B,CAAC;AAwJ/D,qBAmBa,YAAa,SAAQ,uBAAuB;CAAG"}
@@ -28,6 +28,7 @@ const common_1 = require("@nestjs/common");
28
28
  const nestjs_discovery_1 = require("@golevelup/nestjs-discovery");
29
29
  const subscriber_1 = require("./subscriber");
30
30
  const pubsub_provider_module_1 = require("./pubsub-provider-module");
31
+ const subscriber_batch_1 = require("./subscriber-batch");
31
32
  const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new common_1.ConfigurableModuleBuilder().build();
32
33
  function isPublisherProvider(obj) {
33
34
  return "publish" in obj && typeof obj.publish === "function";
@@ -60,7 +61,6 @@ let PubSubManager = PubSubManager_1 = class PubSubManager {
60
61
  }
61
62
  onApplicationBootstrap() {
62
63
  return __awaiter(this, void 0, void 0, function* () {
63
- var _a;
64
64
  if (this.bootstrapped) {
65
65
  this.logger.warn("already bootstrapped");
66
66
  return;
@@ -76,9 +76,23 @@ let PubSubManager = PubSubManager_1 = class PubSubManager {
76
76
  this.subscriber.addProvider(provider);
77
77
  }
78
78
  }
79
- if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.disableSubscribers) {
80
- this.logger.warn("pubsub subscribers are disabled via module options. No subscriber methods will be registered.");
81
- this.logger.debug("bootstrapping completed");
79
+ yield this.bootstrapSubscribers();
80
+ yield this.bootstrapBatchSubscribers();
81
+ this.logger.debug("bootstrapping completed");
82
+ });
83
+ }
84
+ disableSubscribers() {
85
+ var _a;
86
+ if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.disableSubscribers) {
87
+ this.logger.warn("pubsub subscribers are disabled via module options. No subscriber methods will be registered.");
88
+ this.logger.debug("bootstrapping completed");
89
+ return true;
90
+ }
91
+ return false;
92
+ }
93
+ bootstrapSubscribers() {
94
+ return __awaiter(this, void 0, void 0, function* () {
95
+ if (this.disableSubscribers()) {
82
96
  return;
83
97
  }
84
98
  const handlers = (yield this.discover.providerMethodsWithMetaAtKey(subscriber_1.EVENT_HANDLER)).concat(yield this.discover.controllerMethodsWithMetaAtKey(subscriber_1.EVENT_HANDLER));
@@ -87,7 +101,19 @@ let PubSubManager = PubSubManager_1 = class PubSubManager {
87
101
  yield this.subscriber.subscribe(handler.meta, (msg, context) => method.handler.call(method.parentClass.instance, msg, context));
88
102
  this.logger.log(`Added subscriber method ${method.parentClass.name}.${method.methodName} for ${handler.meta.transport}:${handler.meta.name}`);
89
103
  }
90
- this.logger.debug("bootstrapping completed");
104
+ });
105
+ }
106
+ bootstrapBatchSubscribers() {
107
+ return __awaiter(this, void 0, void 0, function* () {
108
+ if (this.disableSubscribers()) {
109
+ return;
110
+ }
111
+ const handlers = (yield this.discover.providerMethodsWithMetaAtKey(subscriber_batch_1.BATCH_EVENT_HANDLER)).concat(yield this.discover.controllerMethodsWithMetaAtKey(subscriber_batch_1.BATCH_EVENT_HANDLER));
112
+ for (const handler of handlers) {
113
+ const method = handler.discoveredMethod;
114
+ yield this.subscriber.subscribeBatch(handler.meta, (msgs, batchContext) => method.handler.call(method.parentClass.instance, msgs, batchContext));
115
+ this.logger.log(`Added batch subscriber method ${method.parentClass.name}.${method.methodName} for ${handler.meta.transport}:${handler.meta.name}`);
116
+ }
91
117
  });
92
118
  }
93
119
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub-provider-module.d.ts","sourceRoot":"","sources":["../src/pubsub-provider-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBACa,qBAAqB;IAChC,SAAgB,SAAS,EAAE,gBAAgB,EAAE,CAAM;IAEnD,WAAW,CAAC,QAAQ,EAAE,gBAAgB;CAMvC;AAED,qBAKa,2BAA2B;CAAG"}
1
+ {"version":3,"file":"pubsub-provider-module.d.ts","sourceRoot":"","sources":["../src/pubsub-provider-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBACa,qBAAqB;IAChC,SAAgB,SAAS,EAAE,gBAAgB,EAAE,CAAM;IAEnD,WAAW,CAAC,QAAQ,EAAE,gBAAgB;CAMvC;AAED,qBAIa,2BAA2B;CAAG"}
@@ -30,5 +30,4 @@ exports.PubSubProviderFactoryModule = PubSubProviderFactoryModule = __decorate([
30
30
  providers: [PubSubProviderFactory],
31
31
  exports: [PubSubProviderFactory],
32
32
  })
33
- // eslint-disable-next-line @typescript-eslint/no-extraneous-class
34
33
  ], PubSubProviderFactoryModule);
@@ -0,0 +1,9 @@
1
+ import { MessageContext, MessageResult, KafkaPubSubMessageContext, KafkaPubSubSubscriberConfiguration, BatchContext, KafkaBatchContext } from "@palmetto/pubsub";
2
+ export declare const BATCH_EVENT_HANDLER: unique symbol;
3
+ export interface BatchMessage<TMessage, TMessageContext extends MessageContext> {
4
+ message: TMessage;
5
+ context: TMessageContext;
6
+ }
7
+ export type BatchHandlerMethod<TMessageContext extends MessageContext, TBatchContext extends BatchContext> = (messages: BatchMessage<never, TMessageContext>[], context: TBatchContext) => Promise<MessageResult> | MessageResult;
8
+ export declare const PubSubKafkaBatchSubscriber: (config: KafkaPubSubSubscriberConfiguration) => <T extends BatchHandlerMethod<KafkaPubSubMessageContext, KafkaBatchContext>>(target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
9
+ //# sourceMappingURL=subscriber-batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriber-batch.d.ts","sourceRoot":"","sources":["../src/subscriber-batch.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,kCAAkC,EAClC,YAAY,EACZ,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,mBAAmB,eAAgC,CAAC;AAEjE,MAAM,WAAW,YAAY,CAC3B,QAAQ,EACR,eAAe,SAAS,cAAc;IAEtC,OAAO,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,kBAAkB,CAC5B,eAAe,SAAS,cAAc,EACtC,aAAa,SAAS,YAAY,IAChC,CACF,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,EAChD,OAAO,EAAE,aAAa,KACnB,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;AA0B5C,eAAO,MAAM,0BAA0B,mDAhBnC,CAAC,yEAA2D,EAE5D,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAgBzC,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PubSubKafkaBatchSubscriber = exports.BATCH_EVENT_HANDLER = void 0;
4
+ /* eslint-disable @typescript-eslint/no-unnecessary-type-parameters */
5
+ const common_1 = require("@nestjs/common");
6
+ exports.BATCH_EVENT_HANDLER = Symbol("BATCH_EVENT_HANDLER");
7
+ const BatchEventSubscriber = (config) => {
8
+ return function (target, propertyKey, descriptor) {
9
+ (0, common_1.SetMetadata)(exports.BATCH_EVENT_HANDLER, Object.assign({}, config))(target, propertyKey, descriptor);
10
+ return descriptor;
11
+ };
12
+ };
13
+ exports.PubSubKafkaBatchSubscriber = (BatchEventSubscriber);
@@ -1,7 +1,8 @@
1
- import { MessageContext, MessageResult, BullMqMessageContext, BullMqQueueConfiguration, RabbitMqMessageContext, RabbitQueueExchangeConfiguration, GcpPubSubConfiguration, GcpPubSubMessageContext } from "@palmetto/pubsub";
1
+ import { MessageContext, MessageResult, BullMqMessageContext, BullMqQueueConfiguration, RabbitMqMessageContext, RabbitQueueExchangeConfiguration, GcpPubSubConfiguration, GcpPubSubMessageContext, KafkaPubSubMessageContext, KafkaPubSubSubscriberConfiguration } from "@palmetto/pubsub";
2
2
  export declare const EVENT_HANDLER: unique symbol;
3
3
  export type HandlerMethod<TMessageContext extends MessageContext> = (msg: never, context: TMessageContext) => Promise<MessageResult> | MessageResult;
4
4
  export declare const PubSubRabbitSubscriber: (config: RabbitQueueExchangeConfiguration) => <T extends HandlerMethod<RabbitMqMessageContext>>(target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
5
5
  export declare const PubSubBullMqSubscriber: (config: BullMqQueueConfiguration) => <T extends HandlerMethod<BullMqMessageContext>>(target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
6
6
  export declare const PubSubGcpSubscriber: (config: GcpPubSubConfiguration) => <T extends HandlerMethod<GcpPubSubMessageContext>>(target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
7
+ export declare const PubSubKafkaSubscriber: (config: KafkaPubSubSubscriberConfiguration) => <T extends HandlerMethod<KafkaPubSubMessageContext>>(target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
7
8
  //# sourceMappingURL=subscriber.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscriber.d.ts","sourceRoot":"","sources":["../src/subscriber.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,gCAAgC,EAChC,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,aAAa,eAA0B,CAAC;AAErD,MAAM,MAAM,aAAa,CAAC,eAAe,SAAS,cAAc,IAAI,CAClE,GAAG,EAAE,KAAK,EACV,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;AAmB5C,eAAO,MAAM,sBAAsB,iDAXhB,CAAC,8CAAuC,EACvD,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAWzC,CAAC;AACF,eAAO,MAAM,sBAAsB,yCAfhB,CAAC,4CAAuC,EACvD,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAezC,CAAC;AACF,eAAO,MAAM,mBAAmB,uCAnBb,CAAC,+CAAuC,EACvD,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAmBzC,CAAC"}
1
+ {"version":3,"file":"subscriber.d.ts","sourceRoot":"","sources":["../src/subscriber.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,gCAAgC,EAChC,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,kCAAkC,EACnC,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,aAAa,eAA0B,CAAC;AAErD,MAAM,MAAM,aAAa,CAAC,eAAe,SAAS,cAAc,IAAI,CAClE,GAAG,EAAE,KAAK,EACV,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;AAmB5C,eAAO,MAAM,sBAAsB,iDAXhB,CAAC,8CAAuC,EACvD,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAWzC,CAAC;AACF,eAAO,MAAM,sBAAsB,yCAfhB,CAAC,4CAAuC,EACvD,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAezC,CAAC;AACF,eAAO,MAAM,mBAAmB,uCAnBb,CAAC,+CAAuC,EACvD,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAmBzC,CAAC;AACF,eAAO,MAAM,qBAAqB,mDAvBf,CAAC,iDAAuC,EACvD,QAAQ,MAAM,EACd,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,+BAuBzC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PubSubGcpSubscriber = exports.PubSubBullMqSubscriber = exports.PubSubRabbitSubscriber = exports.EVENT_HANDLER = void 0;
3
+ exports.PubSubKafkaSubscriber = exports.PubSubGcpSubscriber = exports.PubSubBullMqSubscriber = exports.PubSubRabbitSubscriber = exports.EVENT_HANDLER = void 0;
4
4
  /* eslint-disable @typescript-eslint/no-unnecessary-type-parameters */
5
5
  const common_1 = require("@nestjs/common");
6
6
  exports.EVENT_HANDLER = Symbol("EVENT_HANDLER");
@@ -13,3 +13,4 @@ const EventSubscriber = (config) => {
13
13
  exports.PubSubRabbitSubscriber = (EventSubscriber);
14
14
  exports.PubSubBullMqSubscriber = (EventSubscriber);
15
15
  exports.PubSubGcpSubscriber = (EventSubscriber);
16
+ exports.PubSubKafkaSubscriber = (EventSubscriber);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@palmetto/nestjs-pubsub",
3
- "version": "3.5.3",
3
+ "version": "3.7.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/palmetto/galaxy"
@@ -25,11 +25,11 @@
25
25
  "test-runner": "../../scripts/test-runner.sh yarn run -T $0 --project @palmetto/nestjs-pubsub"
26
26
  },
27
27
  "devDependencies": {
28
- "@nestjs/common": "11.1.27",
29
- "@nestjs/core": "11.1.27",
30
- "@nestjs/testing": "11.1.27",
31
- "@palmetto/nestjs-errors": "^3.1.0",
32
- "@palmetto/pubsub": "^3.6.1",
28
+ "@nestjs/common": "11.2.1",
29
+ "@nestjs/core": "11.2.1",
30
+ "@nestjs/testing": "11.2.1",
31
+ "@palmetto/nestjs-errors": "^3.3.3",
32
+ "@palmetto/pubsub": "^3.8.0",
33
33
  "@palmetto/trace": "^0.1.1",
34
34
  "@types/node": "^24.13",
35
35
  "typescript": "5.9.3",
@@ -55,7 +55,7 @@
55
55
  "@nestjs/common": "^11",
56
56
  "@nestjs/core": "^11",
57
57
  "@palmetto/nestjs-errors": "^3 || ^2",
58
- "@palmetto/pubsub": "^3.6.1",
58
+ "@palmetto/pubsub": "^3.8.0",
59
59
  "zod": "^4.1"
60
60
  }
61
61
  }