@drarzter/kafka-client 0.9.3 → 0.10.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.
Files changed (170) hide show
  1. package/README.md +625 -8
  2. package/dist/chunk-CMO7SMVK.mjs +4814 -0
  3. package/dist/chunk-CMO7SMVK.mjs.map +1 -0
  4. package/dist/cli/dlq.d.ts +119 -0
  5. package/dist/cli/dlq.d.ts.map +1 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/{chunk-TPIP5VV7.mjs → cli/index.js} +965 -265
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/index.mjs +355 -0
  11. package/dist/cli/index.mjs.map +1 -0
  12. package/dist/client/config/from-env.d.ts +188 -0
  13. package/dist/client/config/from-env.d.ts.map +1 -0
  14. package/dist/client/config/index.d.ts +2 -0
  15. package/dist/client/config/index.d.ts.map +1 -0
  16. package/dist/client/errors.d.ts +67 -0
  17. package/dist/client/errors.d.ts.map +1 -0
  18. package/dist/client/kafka.client/admin/ops.d.ts +114 -0
  19. package/dist/client/kafka.client/admin/ops.d.ts.map +1 -0
  20. package/dist/client/kafka.client/consumer/features/delayed.d.ts +24 -0
  21. package/dist/client/kafka.client/consumer/features/delayed.d.ts.map +1 -0
  22. package/dist/client/kafka.client/consumer/features/dlq-replay.d.ts +52 -0
  23. package/dist/client/kafka.client/consumer/features/dlq-replay.d.ts.map +1 -0
  24. package/dist/client/kafka.client/consumer/features/routed.d.ts +4 -0
  25. package/dist/client/kafka.client/consumer/features/routed.d.ts.map +1 -0
  26. package/dist/client/kafka.client/consumer/features/snapshot.d.ts +10 -0
  27. package/dist/client/kafka.client/consumer/features/snapshot.d.ts.map +1 -0
  28. package/dist/client/kafka.client/consumer/features/window.d.ts +5 -0
  29. package/dist/client/kafka.client/consumer/features/window.d.ts.map +1 -0
  30. package/dist/client/kafka.client/consumer/handler.d.ts +149 -0
  31. package/dist/client/kafka.client/consumer/handler.d.ts.map +1 -0
  32. package/dist/client/kafka.client/consumer/ops.d.ts +51 -0
  33. package/dist/client/kafka.client/consumer/ops.d.ts.map +1 -0
  34. package/dist/client/kafka.client/consumer/pipeline.d.ts +167 -0
  35. package/dist/client/kafka.client/consumer/pipeline.d.ts.map +1 -0
  36. package/dist/client/kafka.client/consumer/queue.d.ts +37 -0
  37. package/dist/client/kafka.client/consumer/queue.d.ts.map +1 -0
  38. package/dist/client/kafka.client/consumer/retry-topic.d.ts +65 -0
  39. package/dist/client/kafka.client/consumer/retry-topic.d.ts.map +1 -0
  40. package/dist/client/kafka.client/consumer/setup.d.ts +63 -0
  41. package/dist/client/kafka.client/consumer/setup.d.ts.map +1 -0
  42. package/dist/client/kafka.client/consumer/start.d.ts +7 -0
  43. package/dist/client/kafka.client/consumer/start.d.ts.map +1 -0
  44. package/dist/client/kafka.client/consumer/stop.d.ts +19 -0
  45. package/dist/client/kafka.client/consumer/stop.d.ts.map +1 -0
  46. package/dist/client/kafka.client/consumer/subscribe-retry.d.ts +4 -0
  47. package/dist/client/kafka.client/consumer/subscribe-retry.d.ts.map +1 -0
  48. package/dist/client/kafka.client/context.d.ts +72 -0
  49. package/dist/client/kafka.client/context.d.ts.map +1 -0
  50. package/dist/client/kafka.client/index.d.ts +155 -0
  51. package/dist/client/kafka.client/index.d.ts.map +1 -0
  52. package/dist/client/kafka.client/infra/circuit-breaker.manager.d.ts +61 -0
  53. package/dist/client/kafka.client/infra/circuit-breaker.manager.d.ts.map +1 -0
  54. package/dist/client/kafka.client/infra/dedup.store.d.ts +28 -0
  55. package/dist/client/kafka.client/infra/dedup.store.d.ts.map +1 -0
  56. package/dist/client/kafka.client/infra/inflight.tracker.d.ts +22 -0
  57. package/dist/client/kafka.client/infra/inflight.tracker.d.ts.map +1 -0
  58. package/dist/client/kafka.client/infra/metrics.manager.d.ts +67 -0
  59. package/dist/client/kafka.client/infra/metrics.manager.d.ts.map +1 -0
  60. package/dist/client/kafka.client/producer/lifecycle.d.ts +41 -0
  61. package/dist/client/kafka.client/producer/lifecycle.d.ts.map +1 -0
  62. package/dist/client/kafka.client/producer/ops.d.ts +70 -0
  63. package/dist/client/kafka.client/producer/ops.d.ts.map +1 -0
  64. package/dist/client/kafka.client/producer/send.d.ts +21 -0
  65. package/dist/client/kafka.client/producer/send.d.ts.map +1 -0
  66. package/dist/client/kafka.client/validate-options.d.ts +11 -0
  67. package/dist/client/kafka.client/validate-options.d.ts.map +1 -0
  68. package/dist/client/message/envelope.d.ts +105 -0
  69. package/dist/client/message/envelope.d.ts.map +1 -0
  70. package/dist/client/message/schema-registry.d.ts +105 -0
  71. package/dist/client/message/schema-registry.d.ts.map +1 -0
  72. package/dist/client/message/topic.d.ts +138 -0
  73. package/dist/client/message/topic.d.ts.map +1 -0
  74. package/dist/client/message/versioned-schema.d.ts +53 -0
  75. package/dist/client/message/versioned-schema.d.ts.map +1 -0
  76. package/dist/client/outbox/index.d.ts +4 -0
  77. package/dist/client/outbox/index.d.ts.map +1 -0
  78. package/dist/client/outbox/outbox.relay.d.ts +90 -0
  79. package/dist/client/outbox/outbox.relay.d.ts.map +1 -0
  80. package/dist/client/outbox/outbox.store.d.ts +42 -0
  81. package/dist/client/outbox/outbox.store.d.ts.map +1 -0
  82. package/dist/client/outbox/outbox.types.d.ts +144 -0
  83. package/dist/client/outbox/outbox.types.d.ts.map +1 -0
  84. package/dist/client/security/acl.d.ts +108 -0
  85. package/dist/client/security/acl.d.ts.map +1 -0
  86. package/dist/client/security/index.d.ts +5 -0
  87. package/dist/client/security/index.d.ts.map +1 -0
  88. package/dist/client/security/providers.d.ts +88 -0
  89. package/dist/client/security/providers.d.ts.map +1 -0
  90. package/dist/client/security/resolve-security.d.ts +19 -0
  91. package/dist/client/security/resolve-security.d.ts.map +1 -0
  92. package/dist/client/security/security.types.d.ts +76 -0
  93. package/dist/client/security/security.types.d.ts.map +1 -0
  94. package/dist/client/transport/confluent.transport.d.ts +32 -0
  95. package/dist/client/transport/confluent.transport.d.ts.map +1 -0
  96. package/dist/client/transport/transport.interface.d.ts +216 -0
  97. package/dist/client/transport/transport.interface.d.ts.map +1 -0
  98. package/dist/client/types/admin.interface.d.ts +174 -0
  99. package/dist/client/types/admin.interface.d.ts.map +1 -0
  100. package/dist/client/types/admin.types.d.ts +140 -0
  101. package/dist/client/types/admin.types.d.ts.map +1 -0
  102. package/dist/client/types/client.d.ts +21 -0
  103. package/dist/client/types/client.d.ts.map +1 -0
  104. package/dist/client/types/common.d.ts +84 -0
  105. package/dist/client/types/common.d.ts.map +1 -0
  106. package/dist/client/types/config.types.d.ts +150 -0
  107. package/dist/client/types/config.types.d.ts.map +1 -0
  108. package/dist/client/types/consumer.interface.d.ts +115 -0
  109. package/dist/client/types/consumer.interface.d.ts.map +1 -0
  110. package/dist/{consumer.types-fFCag3VJ.d.mts → client/types/consumer.types.d.ts} +62 -383
  111. package/dist/client/types/consumer.types.d.ts.map +1 -0
  112. package/dist/client/types/dedup.types.d.ts +50 -0
  113. package/dist/client/types/dedup.types.d.ts.map +1 -0
  114. package/dist/client/types/lifecycle.interface.d.ts +72 -0
  115. package/dist/client/types/lifecycle.interface.d.ts.map +1 -0
  116. package/dist/client/types/producer.interface.d.ts +52 -0
  117. package/dist/client/types/producer.interface.d.ts.map +1 -0
  118. package/dist/client/types/producer.types.d.ts +90 -0
  119. package/dist/client/types/producer.types.d.ts.map +1 -0
  120. package/dist/client/types.d.ts +8 -0
  121. package/dist/client/types.d.ts.map +1 -0
  122. package/dist/core.d.ts +10 -314
  123. package/dist/core.d.ts.map +1 -0
  124. package/dist/core.js +1326 -74
  125. package/dist/core.js.map +1 -1
  126. package/dist/core.mjs +39 -3
  127. package/dist/index.d.ts +7 -128
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +1343 -74
  130. package/dist/index.js.map +1 -1
  131. package/dist/index.mjs +56 -3
  132. package/dist/index.mjs.map +1 -1
  133. package/dist/nest/kafka.constants.d.ts +5 -0
  134. package/dist/nest/kafka.constants.d.ts.map +1 -0
  135. package/dist/nest/kafka.decorator.d.ts +49 -0
  136. package/dist/nest/kafka.decorator.d.ts.map +1 -0
  137. package/dist/nest/kafka.explorer.d.ts +17 -0
  138. package/dist/nest/kafka.explorer.d.ts.map +1 -0
  139. package/dist/nest/kafka.health.d.ts +7 -0
  140. package/dist/nest/kafka.health.d.ts.map +1 -0
  141. package/dist/nest/kafka.module.d.ts +61 -0
  142. package/dist/nest/kafka.module.d.ts.map +1 -0
  143. package/dist/otel.d.ts +83 -5
  144. package/dist/otel.d.ts.map +1 -0
  145. package/dist/otel.js +100 -6
  146. package/dist/otel.js.map +1 -1
  147. package/dist/otel.mjs +98 -5
  148. package/dist/otel.mjs.map +1 -1
  149. package/dist/testing/client.mock.d.ts +47 -0
  150. package/dist/testing/client.mock.d.ts.map +1 -0
  151. package/dist/testing/index.d.ts +4 -0
  152. package/dist/testing/index.d.ts.map +1 -0
  153. package/dist/testing/test.container.d.ts +63 -0
  154. package/dist/testing/test.container.d.ts.map +1 -0
  155. package/dist/{testing.d.mts → testing/transport.fake.d.ts} +7 -111
  156. package/dist/testing/transport.fake.d.ts.map +1 -0
  157. package/dist/testing.d.ts +2 -318
  158. package/dist/testing.d.ts.map +1 -0
  159. package/dist/testing.js +28 -2
  160. package/dist/testing.js.map +1 -1
  161. package/dist/testing.mjs +28 -2
  162. package/dist/testing.mjs.map +1 -1
  163. package/package.json +22 -9
  164. package/dist/chunk-TPIP5VV7.mjs.map +0 -1
  165. package/dist/client-CBBUDDtu.d.ts +0 -751
  166. package/dist/client-D-SxYV2b.d.mts +0 -751
  167. package/dist/consumer.types-fFCag3VJ.d.ts +0 -958
  168. package/dist/core.d.mts +0 -314
  169. package/dist/index.d.mts +0 -128
  170. package/dist/otel.d.mts +0 -27
@@ -0,0 +1,167 @@
1
+ import type { IProducer } from "../../transport/transport.interface";
2
+ type Producer = IProducer;
3
+ import type { EventEnvelope } from "../../message/envelope";
4
+ import type { SchemaLike } from "../../message/topic";
5
+ import type { ConsumerInterceptor, DlqReason, KafkaInstrumentation, KafkaLogger, MessageHeaders, MessageLostContext, RetryOptions, TopicMapConstraint } from "../../types";
6
+ import { toError } from "../../errors";
7
+ export { toError };
8
+ /**
9
+ * Return a Promise that resolves after `ms` milliseconds.
10
+ * Used for exponential backoff between retry attempts.
11
+ * @param ms Delay in milliseconds.
12
+ */
13
+ export declare function sleep(ms: number): Promise<void>;
14
+ /** Parse raw message as JSON. Returns null on failure (logs error). */
15
+ export declare function parseJsonMessage(raw: string, topic: string, logger: KafkaLogger): any | null;
16
+ /**
17
+ * Validate a parsed message against the schema map.
18
+ * On failure: logs error, sends to DLQ if enabled, calls interceptor.onError.
19
+ * Returns validated message or null.
20
+ */
21
+ export declare function validateWithSchema<T extends TopicMapConstraint<T>>(message: any, raw: string, topic: string, schemaMap: Map<string, SchemaLike>, interceptors: ConsumerInterceptor<T>[], dlq: boolean, deps: {
22
+ logger: KafkaLogger;
23
+ producer: Producer;
24
+ onMessageLost?: (ctx: MessageLostContext) => void | Promise<void>;
25
+ originalHeaders?: MessageHeaders;
26
+ instrumentation?: KafkaInstrumentation[];
27
+ }): Promise<any | null>;
28
+ export interface DlqMetadata {
29
+ error: Error;
30
+ attempt: number;
31
+ /** Original Kafka message headers — forwarded to DLQ to preserve correlationId, traceparent, etc. */
32
+ originalHeaders?: MessageHeaders;
33
+ }
34
+ /** Build the DLQ send payload without sending it. Used by sendToDlq and EOS routing. */
35
+ export declare function buildDlqPayload(topic: string, rawMessage: string, meta?: DlqMetadata): {
36
+ topic: string;
37
+ messages: Array<{
38
+ value: string;
39
+ headers: MessageHeaders;
40
+ }>;
41
+ };
42
+ /**
43
+ * Produce a message to `<topic>.dlq`, stamping standard DLQ headers.
44
+ * Falls back to `onMessageLost` when the DLQ produce itself fails.
45
+ * @param topic Original topic the message was consumed from.
46
+ * @param rawMessage Raw JSON string of the original message.
47
+ * @param deps Logger, producer, and optional `onMessageLost` callback.
48
+ * @param meta Error, attempt count, and original headers to attach as DLQ metadata headers.
49
+ */
50
+ export declare function sendToDlq(topic: string, rawMessage: string, deps: {
51
+ logger: KafkaLogger;
52
+ producer: Producer;
53
+ onMessageLost?: (ctx: MessageLostContext) => void | Promise<void>;
54
+ }, meta?: DlqMetadata): Promise<void>;
55
+ /** Headers stamped on messages sent to a `<topic>.retry` topic. */
56
+ export declare const RETRY_HEADER_ATTEMPT = "x-retry-attempt";
57
+ export declare const RETRY_HEADER_AFTER = "x-retry-after";
58
+ export declare const RETRY_HEADER_MAX_RETRIES = "x-retry-max-retries";
59
+ export declare const RETRY_HEADER_ORIGINAL_TOPIC = "x-retry-original-topic";
60
+ /** Build the retry topic send payload without sending it. Used by sendToRetryTopic and EOS routing. */
61
+ export declare function buildRetryTopicPayload(originalTopic: string, rawMessages: string[], attempt: number, maxRetries: number, delayMs: number,
62
+ /** Per-message headers (array) or a single object applied to all messages. */
63
+ originalHeaders: MessageHeaders | MessageHeaders[]): {
64
+ topic: string;
65
+ messages: Array<{
66
+ value: string;
67
+ headers: MessageHeaders;
68
+ }>;
69
+ };
70
+ /**
71
+ * Send raw messages to the retry topic `<originalTopic>.retry`.
72
+ * Stamps scheduling headers so the retry consumer knows when and how many times to retry.
73
+ */
74
+ export declare function sendToRetryTopic(originalTopic: string, rawMessages: string[], attempt: number, maxRetries: number, delayMs: number,
75
+ /** Per-message headers (array) or a single object applied to all messages. */
76
+ originalHeaders: MessageHeaders | MessageHeaders[], deps: {
77
+ logger: KafkaLogger;
78
+ producer: Producer;
79
+ onMessageLost?: (ctx: MessageLostContext) => void | Promise<void>;
80
+ }): Promise<void>;
81
+ export interface DuplicateMetadata {
82
+ /** The `x-lamport-clock` value from the incoming (duplicate) message. */
83
+ incomingClock: number;
84
+ /** The last processed clock value for this topic/partition. */
85
+ lastProcessedClock: number;
86
+ /** Original Kafka message headers — forwarded to preserve correlationId, traceparent, etc. */
87
+ originalHeaders?: MessageHeaders;
88
+ }
89
+ /** Build the payload for a duplicate message forwarded to a custom topic. */
90
+ export declare function buildDuplicateTopicPayload(sourceTopic: string, rawMessage: string, destinationTopic: string, meta?: DuplicateMetadata): {
91
+ topic: string;
92
+ messages: Array<{
93
+ value: string;
94
+ headers: MessageHeaders;
95
+ }>;
96
+ };
97
+ /**
98
+ * Forward a duplicate message to a dedicated topic (e.g. `<topic>.duplicates`).
99
+ * Stamps reason metadata headers so consumers of that topic know why it landed there.
100
+ */
101
+ export declare function sendToDuplicatesTopic(sourceTopic: string, rawMessage: string, destinationTopic: string, deps: {
102
+ logger: KafkaLogger;
103
+ producer: Producer;
104
+ }, meta?: DuplicateMetadata): Promise<void>;
105
+ /**
106
+ * Run `fn` through the full instrumentation and interceptor lifecycle:
107
+ * beforeConsume → interceptor.before → fn → interceptor.after → cleanup
108
+ *
109
+ * On error: fires `onConsumeError` and cleanup, then returns the error.
110
+ * The caller is responsible for calling `notifyInterceptorsOnError` (with
111
+ * a possibly-wrapped error) and deciding what happens next.
112
+ *
113
+ * Returns `null` on success, the caught `Error` on failure.
114
+ */
115
+ export declare function runHandlerWithPipeline<T extends TopicMapConstraint<T>>(fn: () => Promise<void>, envelopes: EventEnvelope<any>[], interceptors: ConsumerInterceptor<T>[], instrumentation: KafkaInstrumentation[]): Promise<Error | null>;
116
+ /**
117
+ * Call `interceptor.onError` for every envelope with the given error.
118
+ * Separated from `runHandlerWithPipeline` so callers can wrap the raw error
119
+ * (e.g. in `KafkaRetryExhaustedError`) before notifying interceptors.
120
+ */
121
+ export declare function notifyInterceptorsOnError<T extends TopicMapConstraint<T>>(envelopes: EventEnvelope<any>[], interceptors: ConsumerInterceptor<T>[], error: Error): Promise<void>;
122
+ /**
123
+ * Input context passed to `executeWithRetry`.
124
+ * Bundles the envelope(s), raw message bytes, interceptors, and retry/DLQ policy
125
+ * so the retry loop has everything it needs without relying on closure state.
126
+ */
127
+ export interface ExecuteWithRetryContext<T extends TopicMapConstraint<T>> {
128
+ envelope: EventEnvelope<any> | EventEnvelope<any>[];
129
+ rawMessages: string[];
130
+ interceptors: ConsumerInterceptor<T>[];
131
+ dlq: boolean;
132
+ retry?: RetryOptions;
133
+ isBatch?: boolean;
134
+ /**
135
+ * When `true`, failed messages are routed to `<topic>.retry` instead of being
136
+ * retried in-process. All backoff and subsequent attempts are handled by the
137
+ * companion retry consumer started by `startRetryTopicConsumers`.
138
+ */
139
+ retryTopics?: boolean;
140
+ }
141
+ /**
142
+ * Execute a handler with retry, interceptors, instrumentation, and DLQ support.
143
+ * Used by both single-message and batch consumers.
144
+ */
145
+ export declare function executeWithRetry<T extends TopicMapConstraint<T>>(fn: () => Promise<void>, ctx: ExecuteWithRetryContext<T>, deps: {
146
+ logger: KafkaLogger;
147
+ producer: Producer;
148
+ instrumentation: KafkaInstrumentation[];
149
+ onMessageLost?: (ctx: MessageLostContext) => void | Promise<void>;
150
+ onRetry?: (envelope: EventEnvelope<any>, attempt: number, maxRetries: number) => void;
151
+ onDlq?: (envelope: EventEnvelope<any>, reason: DlqReason) => void;
152
+ onMessage?: (envelope: EventEnvelope<any>) => void;
153
+ /** Fired once per failed handler attempt — drives the circuit breaker. */
154
+ onFailure?: (envelope: EventEnvelope<any>) => void;
155
+ /**
156
+ * EOS atomic routing to `<topic>.retry.1` (main consumer only).
157
+ * When present, replaces `sendToRetryTopic` with a Kafka transaction that
158
+ * sends to the retry topic AND commits the source offset atomically.
159
+ */
160
+ eosRouteToRetry?: (rawMessages: string[], envelopes: EventEnvelope<any>[], delay: number) => Promise<void>;
161
+ /**
162
+ * Manual offset commit for the success path when the main consumer runs
163
+ * with `autoCommit: false` (required when `eosRouteToRetry` is active).
164
+ */
165
+ eosCommitOnSuccess?: () => Promise<void>;
166
+ }): Promise<void>;
167
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/consumer/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /** Push-to-pull async queue used by consume() to bridge Kafka's push model to AsyncIterableIterator. */
2
+ export declare class AsyncQueue<V> {
3
+ private readonly highWaterMark;
4
+ private readonly onFull;
5
+ private readonly onDrained;
6
+ private readonly items;
7
+ private readonly waiting;
8
+ private closed;
9
+ private error?;
10
+ private paused;
11
+ constructor(highWaterMark?: number, onFull?: () => void, onDrained?: () => void);
12
+ /**
13
+ * Enqueue an item. If a consumer is already awaiting the next item, delivers it immediately.
14
+ * When the internal buffer reaches `highWaterMark`, calls `onFull` to signal backpressure.
15
+ * @param item The value to enqueue.
16
+ */
17
+ push(item: V): void;
18
+ /**
19
+ * Terminate the queue with an error. All pending and future `next()` calls will reject.
20
+ * @param err The error to propagate to all waiting consumers.
21
+ */
22
+ fail(err: Error): void;
23
+ /**
24
+ * Signal end-of-stream. All pending `next()` calls resolve with `{ done: true }`,
25
+ * and future `next()` calls resolve immediately with `{ done: true }`.
26
+ */
27
+ close(): void;
28
+ /**
29
+ * Pull the next item from the queue, conforming to the `AsyncIterator` protocol.
30
+ * Rejects if the queue has been failed. Resolves with `{ done: true }` if it has been closed.
31
+ * Suspends (returns a pending Promise) when the queue is empty and not yet closed.
32
+ * When items drain below `highWaterMark / 2`, calls `onDrained` to resume backpressure.
33
+ * @returns A Promise resolving to an `IteratorResult<V>`.
34
+ */
35
+ next(): Promise<IteratorResult<V>>;
36
+ }
37
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/consumer/queue.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,qBAAa,UAAU,CAAC,CAAC;IAWrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAZ5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGhB;IACR,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAS;gBAGJ,aAAa,SAAW,EACxB,MAAM,GAAE,MAAM,IAAe,EAC7B,SAAS,GAAE,MAAM,IAAe;IAGnD;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAanB;;;OAGG;IACH,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAMtB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAMb;;;;;;OAMG;IACH,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CAgBnC"}
@@ -0,0 +1,65 @@
1
+ import type { IConsumer, IProducer } from "../../transport/transport.interface";
2
+ type Consumer = IConsumer;
3
+ type Producer = IProducer;
4
+ import type { EventEnvelope } from "../../message/envelope";
5
+ import type { SchemaLike } from "../../message/topic";
6
+ import type { ConsumerInterceptor, DlqReason, KafkaClientOptions, KafkaInstrumentation, KafkaLogger } from "../../types";
7
+ /**
8
+ * Dependencies injected into retry topic consumers by `KafkaClient`.
9
+ * Provides infrastructure (producer, logger, instrumentation), lifecycle callbacks,
10
+ * and factories for creating consumers and transactional producers per retry level.
11
+ */
12
+ export type RetryTopicDeps = {
13
+ logger: KafkaLogger;
14
+ producer: Producer;
15
+ instrumentation: KafkaInstrumentation[];
16
+ onMessageLost: KafkaClientOptions["onMessageLost"];
17
+ onRetry?: (envelope: EventEnvelope<any>, attempt: number, maxRetries: number) => void;
18
+ onDlq?: (envelope: EventEnvelope<any>, reason: DlqReason) => void;
19
+ onMessage?: (envelope: EventEnvelope<any>) => void;
20
+ /** Fired on every failed handler attempt inside the retry chain — drives the circuit breaker. */
21
+ onFailure?: (envelope: EventEnvelope<any>) => void;
22
+ ensureTopic: (topic: string) => Promise<void>;
23
+ getOrCreateConsumer: (groupId: string, fromBeginning: boolean, autoCommit: boolean) => Consumer;
24
+ runningConsumers: Map<string, "eachMessage" | "eachBatch">;
25
+ /** Factory that creates and connects a transactional producer for EOS routing. */
26
+ createRetryTxProducer: (transactionalId: string) => Promise<Producer>;
27
+ /**
28
+ * Called immediately after each retry level consumer successfully starts and
29
+ * receives partition assignments. Allows the caller to register the group ID
30
+ * incrementally so partial startup failures still leave started consumers tracked.
31
+ */
32
+ onLevelStarted?: (groupId: string) => void;
33
+ };
34
+ /**
35
+ * Poll `consumer.assignment()` until the consumer has received at least one
36
+ * partition for the given topics, then return. Logs a warning and returns
37
+ * (rather than throwing) on timeout so that a slow broker does not break
38
+ * the caller.
39
+ */
40
+ export declare function waitForPartitionAssignment(consumer: Consumer, topics: string[], logger: KafkaLogger, timeoutMs?: number): Promise<void>;
41
+ /**
42
+ * Start one consumer per retry level on `<topic>.retry.<level>` topics.
43
+ *
44
+ * With `maxRetries: N`, creates N consumers:
45
+ * - `${groupId}-retry.1` → `<topic>.retry.1`
46
+ * - `${groupId}-retry.2` → `<topic>.retry.2`
47
+ * - …
48
+ * - `${groupId}-retry.N` → `<topic>.retry.N`
49
+ *
50
+ * Each level consumer uses pause/sleep/resume to honour the scheduled delay
51
+ * without committing the offset early. Failed message routing (to the next
52
+ * level or DLQ) is wrapped in a Kafka transaction via `sendOffsetsToTransaction`
53
+ * for exactly-once routing semantics — no duplicates even if the process
54
+ * crashes between the produce and the offset commit.
55
+ *
56
+ * Returns the list of started consumer group IDs so the caller can stop
57
+ * them selectively via `stopConsumer`.
58
+ */
59
+ export declare function startRetryTopicConsumers(originalTopics: string[], originalGroupId: string, handleMessage: (envelope: EventEnvelope<any>) => Promise<void>, retry: {
60
+ maxRetries: number;
61
+ backoffMs?: number;
62
+ maxBackoffMs?: number;
63
+ }, dlq: boolean, interceptors: ConsumerInterceptor<any>[], schemaMap: Map<string, SchemaLike>, deps: RetryTopicDeps, assignmentTimeoutMs?: number): Promise<string[]>;
64
+ export {};
65
+ //# sourceMappingURL=retry-topic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-topic.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/consumer/retry-topic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChF,KAAK,QAAQ,GAAG,SAAS,CAAC;AAC1B,KAAK,QAAQ,GAAG,SAAS,CAAC;AAM1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAgB5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,CACR,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,KACf,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IAClE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACnD,iGAAiG;IACjG,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACnD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,mBAAmB,EAAE,CACnB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,UAAU,EAAE,OAAO,KAChB,QAAQ,CAAC;IACd,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAAC,CAAC;IAC3D,kFAAkF;IAClF,qBAAqB,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,WAAW,EACnB,SAAS,SAAS,GACjB,OAAO,CAAC,IAAI,CAAC,CAgBf;AA4SD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,wBAAwB,CAC5C,cAAc,EAAE,MAAM,EAAE,EACxB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAC9D,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EACxE,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,EACxC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAClC,IAAI,EAAE,cAAc,EACpB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAgCnB"}
@@ -0,0 +1,63 @@
1
+ import type { IConsumer, IProducer } from "../../transport/transport.interface";
2
+ import type { SchemaLike } from "../../message/topic";
3
+ import type { EventEnvelope } from "../../message/envelope";
4
+ import type { KafkaClientContext } from "../context";
5
+ import type { TopicMapConstraint, ConsumerOptions, ConsumerInterceptor, RetryOptions } from "../../types";
6
+ import type { MessageHandlerDeps, DeduplicationContext } from "./handler";
7
+ /** Guard checks shared by startConsumer and startBatchConsumer. */
8
+ export declare function validateTopicConsumerOpts<T extends TopicMapConstraint<T>>(topics: any[], options: ConsumerOptions<T>): void;
9
+ /** Ensure all required topics exist for a consumer: base, DLQ, and dedup topics. */
10
+ export declare function ensureConsumerTopics<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topicNames: string[], dlq: boolean, deduplication: import("../../types").DeduplicationOptions | undefined): Promise<void>;
11
+ /**
12
+ * Shared consumer bootstrap: groupId conflict check, schema map, connect, subscribe.
13
+ * Returns all values needed by startConsumer / startBatchConsumer.
14
+ */
15
+ export declare function setupConsumer<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topics: any[], mode: "eachMessage" | "eachBatch", options: ConsumerOptions<T>): Promise<{
16
+ consumer: IConsumer;
17
+ schemaMap: Map<string, SchemaLike<any>>;
18
+ topicNames: string[];
19
+ gid: string;
20
+ dlq: boolean;
21
+ interceptors: ConsumerInterceptor<T>[];
22
+ retry: RetryOptions | undefined;
23
+ hasRegex: boolean;
24
+ readyPromise: Promise<void>;
25
+ }>;
26
+ /**
27
+ * Create or retrieve the deduplication context for a consumer group.
28
+ *
29
+ * Uses the user-supplied `options.store` when present, otherwise an
30
+ * `InMemoryDedupStore` backed by `ctx.dedupStates` — so `stopConsumer` /
31
+ * `disconnect` clearing that map continues to reset in-memory dedup state.
32
+ */
33
+ export declare function resolveDeduplicationContext<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, groupId: string, options: import("../../types").DeduplicationOptions | undefined): DeduplicationContext | undefined;
34
+ /** Build MessageHandlerDeps with circuit-breaker callbacks bound to the given groupId. */
35
+ export declare function messageDepsFor<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, gid: string, options?: Pick<import("../../types").ConsumerOptions<T>, "onMessageLost" | "onRetry">): MessageHandlerDeps;
36
+ /** Build the RetryTopicDeps object passed to retry topic consumers. */
37
+ export declare function buildRetryTopicDeps<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>): {
38
+ logger: import("../../types").KafkaLogger;
39
+ producer: IProducer;
40
+ instrumentation: import("../../types").KafkaInstrumentation[];
41
+ onMessageLost: ((ctx: import("../../types").MessageLostContext) => void | Promise<void>) | undefined;
42
+ onRetry: (envelope: EventEnvelope<any>, attempt: number, maxRetries: number) => void;
43
+ onDlq: (envelope: EventEnvelope<any>, reason: import("../../types").DlqReason) => void;
44
+ onMessage: (envelope: EventEnvelope<any>, gid?: string) => void;
45
+ ensureTopic: (t: string) => Promise<void>;
46
+ getOrCreateConsumer: (gid: string, fb: boolean, ac: boolean) => IConsumer;
47
+ runningConsumers: Map<string, "eachMessage" | "eachBatch">;
48
+ createRetryTxProducer: (txId: string) => Promise<IProducer>;
49
+ };
50
+ /** Create EOS transactional producer context for atomic main → retry.1 routing. */
51
+ export declare function makeEosMainContext<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, gid: string, consumer: IConsumer, options: ConsumerOptions<T>): Promise<{
52
+ txProducer: IProducer;
53
+ consumer: IConsumer;
54
+ } | undefined>;
55
+ /** Start companion retry-level consumers and register them under the main groupId. */
56
+ export declare function launchRetryChain<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, gid: string, topicNames: string[], handleMessage: (env: EventEnvelope<any>) => Promise<void>, opts: {
57
+ retry: RetryOptions;
58
+ dlq: boolean;
59
+ interceptors: ConsumerInterceptor<T>[];
60
+ schemaMap: Map<string, SchemaLike>;
61
+ assignmentTimeoutMs?: number;
62
+ }): Promise<void>;
63
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/consumer/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { KafkaClientContext } from "../context";
2
+ import type { TopicMapConstraint, ConsumerOptions, ConsumerHandle, BatchMeta, TransactionalHandlerContext } from "../../types";
3
+ import type { EventEnvelope } from "../../message/envelope";
4
+ export declare function startConsumerImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topics: any[], handleMessage: (envelope: EventEnvelope<any>) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
5
+ export declare function startBatchConsumerImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topics: any[], handleBatch: (envelopes: EventEnvelope<any>[], meta: BatchMeta) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
6
+ export declare function startTransactionalConsumerImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topics: any[], handler: (envelope: EventEnvelope<any>, tx: TransactionalHandlerContext<T>) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
7
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/consumer/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,SAAS,EAGT,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAiB5D,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACrE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,MAAM,EAAE,GAAG,EAAE,EACb,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAC9D,OAAO,GAAE,eAAe,CAAC,CAAC,CAAM,GAC/B,OAAO,CAAC,cAAc,CAAC,CAqDzB;AAID,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAC1E,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,MAAM,EAAE,GAAG,EAAE,EACb,WAAW,EAAE,CACX,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,EAC/B,IAAI,EAAE,SAAS,KACZ,OAAO,CAAC,IAAI,CAAC,EAClB,OAAO,GAAE,eAAe,CAAC,CAAC,CAAM,GAC/B,OAAO,CAAC,cAAc,CAAC,CAmEzB;AAID,wBAAsB,8BAA8B,CAClD,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAE/B,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,MAAM,EAAE,GAAG,EAAE,EACb,OAAO,EAAE,CACP,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAC5B,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC,KAC/B,OAAO,CAAC,IAAI,CAAC,EAClB,OAAO,GAAE,eAAe,CAAC,CAAC,CAAM,GAC/B,OAAO,CAAC,cAAc,CAAC,CAmGzB"}
@@ -0,0 +1,19 @@
1
+ import type { KafkaClientContext } from "../context";
2
+ import type { TopicMapConstraint } from "../../types";
3
+ /** Minimal context surface required by this module. */
4
+ type StopCtx<T extends TopicMapConstraint<T>> = Pick<KafkaClientContext<T>, "circuitBreaker" | "companionGroupIds" | "consumerCreationOptions" | "consumers" | "dedupStates" | "defaultGroupId" | "logger" | "retryTxProducers" | "runningConsumers">;
5
+ export declare function stopConsumerImpl<T extends TopicMapConstraint<T>>(ctx: StopCtx<T>, groupId?: string): Promise<void>;
6
+ export declare function pauseConsumerImpl<T extends TopicMapConstraint<T>>(ctx: StopCtx<T>, groupId: string | undefined, assignments: Array<{
7
+ topic: string;
8
+ partitions: number[];
9
+ }>): void;
10
+ export declare function resumeConsumerImpl<T extends TopicMapConstraint<T>>(ctx: StopCtx<T>, groupId: string | undefined, assignments: Array<{
11
+ topic: string;
12
+ partitions: number[];
13
+ }>): void;
14
+ /** Pause all assigned partitions of a topic for a consumer group (backpressure for consume()). */
15
+ export declare function pauseTopicAllPartitions<T extends TopicMapConstraint<T>>(ctx: StopCtx<T>, gid: string, topic: string): void;
16
+ /** Resume all assigned partitions of a topic for a consumer group (backpressure for consume()). */
17
+ export declare function resumeTopicAllPartitions<T extends TopicMapConstraint<T>>(ctx: StopCtx<T>, gid: string, topic: string): void;
18
+ export {};
19
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/consumer/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,uDAAuD;AACvD,KAAK,OAAO,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAClD,kBAAkB,CAAC,CAAC,CAAC,EACnB,gBAAgB,GAChB,mBAAmB,GACnB,yBAAyB,GACzB,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,QAAQ,GACR,kBAAkB,GAClB,kBAAkB,CACrB,CAAC;AAIF,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACpE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA8Ff;AAID,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAC/D,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAC1D,IAAI,CAYN;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAChE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAC1D,IAAI,CAYN;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACrE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI,CASN;AAED,mGAAmG;AACnG,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACtE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI,CASN"}
@@ -0,0 +1,4 @@
1
+ import type { IConsumer } from "../../transport/transport.interface";
2
+ import type { KafkaLogger, SubscribeRetryOptions } from "../../types";
3
+ export declare function subscribeWithRetry(consumer: IConsumer, topics: (string | RegExp)[], logger: KafkaLogger, retryOpts?: SubscribeRetryOptions): Promise<void>;
4
+ //# sourceMappingURL=subscribe-retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe-retry.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/consumer/subscribe-retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGtE,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC3B,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -0,0 +1,72 @@
1
+ import type { KafkaTransport, IProducer, IConsumer } from "../transport/transport.interface";
2
+ import type { SchemaLike } from "../message/topic";
3
+ import type { ClientId, KafkaClientOptions, KafkaInstrumentation, KafkaLogger } from "../types";
4
+ import type { CircuitBreakerManager } from "./infra/circuit-breaker.manager";
5
+ import type { AdminOps } from "./admin/ops";
6
+ import type { MetricsManager } from "./infra/metrics.manager";
7
+ import type { InFlightTracker } from "./infra/inflight.tracker";
8
+ import type { BuildSendPayloadDeps } from "./producer/ops";
9
+ import type { ConsumerOpsDeps } from "./consumer/ops";
10
+ import type { RetryTopicDeps } from "./consumer/retry-topic";
11
+ /**
12
+ * All shared state for a `KafkaClient` instance passed to extracted
13
+ * implementation functions. The class stores this as `this.ctx` and
14
+ * delegates every method to the relevant module.
15
+ */
16
+ export type KafkaClientContext<T> = {
17
+ /** @internal Phantom type carrier — keeps the topic-map generic flowing through impl modules. */
18
+ readonly __topicMap?: T;
19
+ readonly clientId: ClientId;
20
+ readonly defaultGroupId: string;
21
+ readonly logger: KafkaLogger;
22
+ readonly autoCreateTopicsEnabled: boolean;
23
+ readonly strictSchemasEnabled: boolean;
24
+ readonly numPartitions: number;
25
+ readonly txId: string;
26
+ readonly clockRecoveryTopics: string[];
27
+ /** Max time to wait for clock recovery before proceeding with a partial result. */
28
+ readonly clockRecoveryTimeoutMs: number;
29
+ readonly lagThrottleOpts: KafkaClientOptions["lagThrottle"];
30
+ readonly instrumentation: KafkaInstrumentation[];
31
+ readonly onMessageLost: KafkaClientOptions["onMessageLost"];
32
+ readonly onTtlExpired: KafkaClientOptions["onTtlExpired"];
33
+ readonly onRebalance: KafkaClientOptions["onRebalance"];
34
+ readonly transport: KafkaTransport;
35
+ readonly producer: IProducer;
36
+ /** Lazy transactional producer — created on first `transaction()` call. */
37
+ txProducer: IProducer | undefined;
38
+ /** Guards concurrent init so only one producer is created. */
39
+ txProducerInitPromise: Promise<IProducer> | undefined;
40
+ /** Per-transactionalId producers used by retry level consumers. */
41
+ readonly retryTxProducers: Map<string, IProducer>;
42
+ /**
43
+ * Serialises `transaction()` calls — a transactional producer supports only
44
+ * one open transaction at a time, so overlapping calls queue behind this chain.
45
+ */
46
+ _txChain: Promise<void>;
47
+ readonly consumers: Map<string, IConsumer>;
48
+ readonly runningConsumers: Map<string, "eachMessage" | "eachBatch">;
49
+ readonly consumerCreationOptions: Map<string, {
50
+ fromBeginning: boolean;
51
+ autoCommit: boolean;
52
+ }>;
53
+ /** Maps main groupId → companion retry-level groupIds. */
54
+ readonly companionGroupIds: Map<string, string[]>;
55
+ /** Per-groupId Lamport clock dedup state: `"topic:partition"` → last seen clock. */
56
+ readonly dedupStates: Map<string, Map<string, number>>;
57
+ readonly ensuredTopics: Set<string>;
58
+ /** Pending createTopics promises — deduplicates concurrent calls for the same topic. */
59
+ readonly ensureTopicPromises: Map<string, Promise<void>>;
60
+ readonly schemaRegistry: Map<string, SchemaLike>;
61
+ _lagThrottled: boolean;
62
+ _lagThrottleTimer: ReturnType<typeof setInterval> | undefined;
63
+ _lamportClock: number;
64
+ readonly circuitBreaker: CircuitBreakerManager;
65
+ readonly adminOps: AdminOps;
66
+ readonly metrics: MetricsManager;
67
+ readonly inFlight: InFlightTracker;
68
+ readonly producerOpsDeps: BuildSendPayloadDeps;
69
+ readonly consumerOpsDeps: ConsumerOpsDeps;
70
+ retryTopicDeps: RetryTopicDeps;
71
+ };
72
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/client/kafka.client/context.ts"],"names":[],"mappings":"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"}