@drarzter/kafka-client 0.9.4 → 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.
- package/README.md +625 -8
- package/dist/chunk-CMO7SMVK.mjs +4814 -0
- package/dist/chunk-CMO7SMVK.mjs.map +1 -0
- package/dist/cli/dlq.d.ts +119 -0
- package/dist/cli/dlq.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/{chunk-SM4FZKAZ.mjs → cli/index.js} +964 -264
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +355 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/client/config/from-env.d.ts +188 -0
- package/dist/client/config/from-env.d.ts.map +1 -0
- package/dist/client/config/index.d.ts +2 -0
- package/dist/client/config/index.d.ts.map +1 -0
- package/dist/client/errors.d.ts +67 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/kafka.client/admin/ops.d.ts +114 -0
- package/dist/client/kafka.client/admin/ops.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/features/delayed.d.ts +24 -0
- package/dist/client/kafka.client/consumer/features/delayed.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/features/dlq-replay.d.ts +52 -0
- package/dist/client/kafka.client/consumer/features/dlq-replay.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/features/routed.d.ts +4 -0
- package/dist/client/kafka.client/consumer/features/routed.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/features/snapshot.d.ts +10 -0
- package/dist/client/kafka.client/consumer/features/snapshot.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/features/window.d.ts +5 -0
- package/dist/client/kafka.client/consumer/features/window.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/handler.d.ts +149 -0
- package/dist/client/kafka.client/consumer/handler.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/ops.d.ts +51 -0
- package/dist/client/kafka.client/consumer/ops.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/pipeline.d.ts +167 -0
- package/dist/client/kafka.client/consumer/pipeline.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/queue.d.ts +37 -0
- package/dist/client/kafka.client/consumer/queue.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/retry-topic.d.ts +65 -0
- package/dist/client/kafka.client/consumer/retry-topic.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/setup.d.ts +63 -0
- package/dist/client/kafka.client/consumer/setup.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/start.d.ts +7 -0
- package/dist/client/kafka.client/consumer/start.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/stop.d.ts +19 -0
- package/dist/client/kafka.client/consumer/stop.d.ts.map +1 -0
- package/dist/client/kafka.client/consumer/subscribe-retry.d.ts +4 -0
- package/dist/client/kafka.client/consumer/subscribe-retry.d.ts.map +1 -0
- package/dist/client/kafka.client/context.d.ts +72 -0
- package/dist/client/kafka.client/context.d.ts.map +1 -0
- package/dist/client/kafka.client/index.d.ts +155 -0
- package/dist/client/kafka.client/index.d.ts.map +1 -0
- package/dist/client/kafka.client/infra/circuit-breaker.manager.d.ts +61 -0
- package/dist/client/kafka.client/infra/circuit-breaker.manager.d.ts.map +1 -0
- package/dist/client/kafka.client/infra/dedup.store.d.ts +28 -0
- package/dist/client/kafka.client/infra/dedup.store.d.ts.map +1 -0
- package/dist/client/kafka.client/infra/inflight.tracker.d.ts +22 -0
- package/dist/client/kafka.client/infra/inflight.tracker.d.ts.map +1 -0
- package/dist/client/kafka.client/infra/metrics.manager.d.ts +67 -0
- package/dist/client/kafka.client/infra/metrics.manager.d.ts.map +1 -0
- package/dist/client/kafka.client/producer/lifecycle.d.ts +41 -0
- package/dist/client/kafka.client/producer/lifecycle.d.ts.map +1 -0
- package/dist/client/kafka.client/producer/ops.d.ts +70 -0
- package/dist/client/kafka.client/producer/ops.d.ts.map +1 -0
- package/dist/client/kafka.client/producer/send.d.ts +21 -0
- package/dist/client/kafka.client/producer/send.d.ts.map +1 -0
- package/dist/client/kafka.client/validate-options.d.ts +11 -0
- package/dist/client/kafka.client/validate-options.d.ts.map +1 -0
- package/dist/client/message/envelope.d.ts +105 -0
- package/dist/client/message/envelope.d.ts.map +1 -0
- package/dist/client/message/schema-registry.d.ts +105 -0
- package/dist/client/message/schema-registry.d.ts.map +1 -0
- package/dist/client/message/topic.d.ts +138 -0
- package/dist/client/message/topic.d.ts.map +1 -0
- package/dist/client/message/versioned-schema.d.ts +53 -0
- package/dist/client/message/versioned-schema.d.ts.map +1 -0
- package/dist/client/outbox/index.d.ts +4 -0
- package/dist/client/outbox/index.d.ts.map +1 -0
- package/dist/client/outbox/outbox.relay.d.ts +90 -0
- package/dist/client/outbox/outbox.relay.d.ts.map +1 -0
- package/dist/client/outbox/outbox.store.d.ts +42 -0
- package/dist/client/outbox/outbox.store.d.ts.map +1 -0
- package/dist/client/outbox/outbox.types.d.ts +144 -0
- package/dist/client/outbox/outbox.types.d.ts.map +1 -0
- package/dist/client/security/acl.d.ts +108 -0
- package/dist/client/security/acl.d.ts.map +1 -0
- package/dist/client/security/index.d.ts +5 -0
- package/dist/client/security/index.d.ts.map +1 -0
- package/dist/client/security/providers.d.ts +88 -0
- package/dist/client/security/providers.d.ts.map +1 -0
- package/dist/client/security/resolve-security.d.ts +19 -0
- package/dist/client/security/resolve-security.d.ts.map +1 -0
- package/dist/client/security/security.types.d.ts +76 -0
- package/dist/client/security/security.types.d.ts.map +1 -0
- package/dist/client/transport/confluent.transport.d.ts +32 -0
- package/dist/client/transport/confluent.transport.d.ts.map +1 -0
- package/dist/client/transport/transport.interface.d.ts +216 -0
- package/dist/client/transport/transport.interface.d.ts.map +1 -0
- package/dist/client/types/admin.interface.d.ts +174 -0
- package/dist/client/types/admin.interface.d.ts.map +1 -0
- package/dist/client/types/admin.types.d.ts +140 -0
- package/dist/client/types/admin.types.d.ts.map +1 -0
- package/dist/client/types/client.d.ts +21 -0
- package/dist/client/types/client.d.ts.map +1 -0
- package/dist/client/types/common.d.ts +84 -0
- package/dist/client/types/common.d.ts.map +1 -0
- package/dist/client/types/config.types.d.ts +150 -0
- package/dist/client/types/config.types.d.ts.map +1 -0
- package/dist/client/types/consumer.interface.d.ts +115 -0
- package/dist/client/types/consumer.interface.d.ts.map +1 -0
- package/dist/{consumer.types-fFCag3VJ.d.mts → client/types/consumer.types.d.ts} +62 -383
- package/dist/client/types/consumer.types.d.ts.map +1 -0
- package/dist/client/types/dedup.types.d.ts +50 -0
- package/dist/client/types/dedup.types.d.ts.map +1 -0
- package/dist/client/types/lifecycle.interface.d.ts +72 -0
- package/dist/client/types/lifecycle.interface.d.ts.map +1 -0
- package/dist/client/types/producer.interface.d.ts +52 -0
- package/dist/client/types/producer.interface.d.ts.map +1 -0
- package/dist/client/types/producer.types.d.ts +90 -0
- package/dist/client/types/producer.types.d.ts.map +1 -0
- package/dist/client/types.d.ts +8 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/core.d.ts +10 -314
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +1325 -73
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +39 -3
- package/dist/index.d.ts +7 -128
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1342 -73
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +56 -3
- package/dist/index.mjs.map +1 -1
- package/dist/nest/kafka.constants.d.ts +5 -0
- package/dist/nest/kafka.constants.d.ts.map +1 -0
- package/dist/nest/kafka.decorator.d.ts +49 -0
- package/dist/nest/kafka.decorator.d.ts.map +1 -0
- package/dist/nest/kafka.explorer.d.ts +17 -0
- package/dist/nest/kafka.explorer.d.ts.map +1 -0
- package/dist/nest/kafka.health.d.ts +7 -0
- package/dist/nest/kafka.health.d.ts.map +1 -0
- package/dist/nest/kafka.module.d.ts +61 -0
- package/dist/nest/kafka.module.d.ts.map +1 -0
- package/dist/otel.d.ts +83 -5
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +100 -6
- package/dist/otel.js.map +1 -1
- package/dist/otel.mjs +98 -5
- package/dist/otel.mjs.map +1 -1
- package/dist/testing/client.mock.d.ts +47 -0
- package/dist/testing/client.mock.d.ts.map +1 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/test.container.d.ts +63 -0
- package/dist/testing/test.container.d.ts.map +1 -0
- package/dist/{testing.d.mts → testing/transport.fake.d.ts} +7 -111
- package/dist/testing/transport.fake.d.ts.map +1 -0
- package/dist/testing.d.ts +2 -318
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +26 -0
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +26 -0
- package/dist/testing.mjs.map +1 -1
- package/package.json +21 -8
- package/dist/chunk-SM4FZKAZ.mjs.map +0 -1
- package/dist/client-1irhGEu0.d.mts +0 -751
- package/dist/client-BpFjkHhr.d.ts +0 -751
- package/dist/consumer.types-fFCag3VJ.d.ts +0 -958
- package/dist/core.d.mts +0 -314
- package/dist/index.d.mts +0 -128
- package/dist/otel.d.mts +0 -27
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { TopicDescriptor } from "../message/topic";
|
|
2
|
+
import type { EventEnvelope } from "../message/envelope";
|
|
3
|
+
import type { ClientId, GroupId, SendOptions, BatchMessageItem, BatchSendOptions, ConsumerOptions, ConsumerHandle, TransactionContext, TopicMapConstraint, IKafkaClient, KafkaClientOptions, BatchMeta, DlqReplayOptions, ConsumerGroupSummary, TopicDescription, MessageHeaders, ReadSnapshotOptions, CheckpointResult, CheckpointRestoreResult, RestoreCheckpointOptions, WindowConsumerOptions, WindowMeta, RoutingOptions, TransactionalHandlerContext } from "../types";
|
|
4
|
+
export * from "../types";
|
|
5
|
+
export { InMemoryDedupStore } from "./infra/dedup.store";
|
|
6
|
+
/**
|
|
7
|
+
* Type-safe Kafka client.
|
|
8
|
+
* Wraps @confluentinc/kafka-javascript (librdkafka) with JSON serialization,
|
|
9
|
+
* retries, DLQ, transactions, and interceptors.
|
|
10
|
+
*
|
|
11
|
+
* @typeParam T - Topic-to-message type mapping for compile-time safety.
|
|
12
|
+
*/
|
|
13
|
+
export declare class KafkaClient<T extends TopicMapConstraint<T>> implements IKafkaClient<T> {
|
|
14
|
+
readonly clientId: ClientId;
|
|
15
|
+
private readonly ctx;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new KafkaClient.
|
|
18
|
+
* @param clientId Unique client identifier (used in Kafka metadata and logs).
|
|
19
|
+
* @param groupId Default consumer group ID for this client.
|
|
20
|
+
* @param brokers Array of broker addresses, e.g. `['localhost:9092']`.
|
|
21
|
+
* @param options Optional client-wide configuration.
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const kafka = new KafkaClient('my-service', 'my-service-group', ['localhost:9092'], {
|
|
25
|
+
* lagThrottle: { maxLag: 10_000 },
|
|
26
|
+
* onMessageLost: (ctx) => logger.error('Message lost', ctx),
|
|
27
|
+
* });
|
|
28
|
+
* await kafka.connectProducer();
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
constructor(clientId: ClientId, groupId: GroupId, brokers: string[], options?: KafkaClientOptions);
|
|
32
|
+
/** @inheritDoc */
|
|
33
|
+
sendMessage<D extends TopicDescriptor<string & keyof T, T[string & keyof T]>>(descriptor: D, message: D["__type"], options?: SendOptions): Promise<void>;
|
|
34
|
+
sendMessage<K extends keyof T>(topic: K, message: T[K], options?: SendOptions): Promise<void>;
|
|
35
|
+
/** @inheritDoc */
|
|
36
|
+
sendTombstone(topic: string, key: string, headers?: MessageHeaders): Promise<void>;
|
|
37
|
+
/** @inheritDoc */
|
|
38
|
+
sendBatch<D extends TopicDescriptor<string & keyof T, T[string & keyof T]>>(descriptor: D, messages: Array<BatchMessageItem<D["__type"]>>, options?: BatchSendOptions): Promise<void>;
|
|
39
|
+
sendBatch<K extends keyof T>(topic: K, messages: Array<BatchMessageItem<T[K]>>, options?: BatchSendOptions): Promise<void>;
|
|
40
|
+
/** @inheritDoc */
|
|
41
|
+
transaction(fn: (ctx: TransactionContext<T>) => Promise<void>): Promise<void>;
|
|
42
|
+
/** @inheritDoc */
|
|
43
|
+
connectProducer(): Promise<void>;
|
|
44
|
+
/** @internal */
|
|
45
|
+
disconnectProducer(): Promise<void>;
|
|
46
|
+
/** @inheritDoc */
|
|
47
|
+
startConsumer<K extends Array<keyof T>>(topics: K, handleMessage: (envelope: EventEnvelope<T[K[number]]>) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
|
|
48
|
+
startConsumer<D extends TopicDescriptor<string & keyof T, T[string & keyof T]>>(topics: D[], handleMessage: (envelope: EventEnvelope<D["__type"]>) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
|
|
49
|
+
/** @inheritDoc */
|
|
50
|
+
startBatchConsumer<K extends Array<keyof T>>(topics: K, handleBatch: (envelopes: EventEnvelope<T[K[number]]>[], meta: BatchMeta) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
|
|
51
|
+
startBatchConsumer<D extends TopicDescriptor<string & keyof T, T[string & keyof T]>>(topics: D[], handleBatch: (envelopes: EventEnvelope<D["__type"]>[], meta: BatchMeta) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
|
|
52
|
+
/** @inheritDoc */
|
|
53
|
+
consume<K extends keyof T & string>(topic: K, options?: ConsumerOptions<T>): AsyncIterableIterator<EventEnvelope<T[K]>>;
|
|
54
|
+
/** @inheritDoc */
|
|
55
|
+
startWindowConsumer<K extends keyof T & string>(topic: K, handler: (envelopes: EventEnvelope<T[K]>[], meta: WindowMeta) => Promise<void>, options: WindowConsumerOptions<T>): Promise<ConsumerHandle>;
|
|
56
|
+
/** @inheritDoc */
|
|
57
|
+
startRoutedConsumer<K extends Array<keyof T>>(topics: K, routing: RoutingOptions<T[K[number]]>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
|
|
58
|
+
/**
|
|
59
|
+
* Start a relay that delivers messages produced with
|
|
60
|
+
* `SendOptions.deliverAfterMs` from `<topic>.delayed` to their target topic
|
|
61
|
+
* once their deadline passes.
|
|
62
|
+
*
|
|
63
|
+
* Forwarding is transactional (produce + source-offset commit are atomic),
|
|
64
|
+
* so no duplicates are relayed even if the relay crashes mid-forward.
|
|
65
|
+
* Delivery time is a lower bound — the relay must be running for delayed
|
|
66
|
+
* messages to be delivered at all.
|
|
67
|
+
*
|
|
68
|
+
* @param topics Target topic name(s) whose `<topic>.delayed` staging topics to relay.
|
|
69
|
+
* @param options Optional `groupId` override (default: `<defaultGroupId>-delayed-relay`).
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* await kafka.startDelayedRelay(['orders.reminder']);
|
|
74
|
+
* await kafka.sendMessage('orders.reminder', payload, { deliverAfterMs: 60_000 });
|
|
75
|
+
* // → delivered to orders.reminder ~60 s later
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
startDelayedRelay(topics: (keyof T & string) | Array<keyof T & string>, options?: {
|
|
79
|
+
groupId?: string;
|
|
80
|
+
}): Promise<ConsumerHandle>;
|
|
81
|
+
/** @inheritDoc */
|
|
82
|
+
startTransactionalConsumer<K extends Array<keyof T>>(topics: K, handler: (envelope: EventEnvelope<T[K[number]]>, tx: TransactionalHandlerContext<T>) => Promise<void>, options?: ConsumerOptions<T>): Promise<ConsumerHandle>;
|
|
83
|
+
/** @inheritDoc */
|
|
84
|
+
stopConsumer(groupId?: string): Promise<void>;
|
|
85
|
+
/** @inheritDoc */
|
|
86
|
+
pauseConsumer(groupId: string | undefined, assignments: Array<{
|
|
87
|
+
topic: string;
|
|
88
|
+
partitions: number[];
|
|
89
|
+
}>): void;
|
|
90
|
+
/** @inheritDoc */
|
|
91
|
+
resumeConsumer(groupId: string | undefined, assignments: Array<{
|
|
92
|
+
topic: string;
|
|
93
|
+
partitions: number[];
|
|
94
|
+
}>): void;
|
|
95
|
+
/** @inheritDoc */
|
|
96
|
+
replayDlq(topic: string, options?: DlqReplayOptions): Promise<{
|
|
97
|
+
replayed: number;
|
|
98
|
+
skipped: number;
|
|
99
|
+
}>;
|
|
100
|
+
/** @inheritDoc */
|
|
101
|
+
readSnapshot<K extends keyof T & string>(topic: K, options?: ReadSnapshotOptions): Promise<Map<string, EventEnvelope<T[K]>>>;
|
|
102
|
+
/** @inheritDoc */
|
|
103
|
+
checkpointOffsets(groupId: string | undefined, checkpointTopic: string): Promise<CheckpointResult>;
|
|
104
|
+
/** @inheritDoc */
|
|
105
|
+
restoreFromCheckpoint(groupId: string | undefined, checkpointTopic: string, options?: RestoreCheckpointOptions): Promise<CheckpointRestoreResult>;
|
|
106
|
+
/** @inheritDoc */
|
|
107
|
+
resetOffsets(groupId: string | undefined, topic: string, position: "earliest" | "latest"): Promise<void>;
|
|
108
|
+
/** @inheritDoc */
|
|
109
|
+
seekToOffset(groupId: string | undefined, assignments: Array<{
|
|
110
|
+
topic: string;
|
|
111
|
+
partition: number;
|
|
112
|
+
offset: string;
|
|
113
|
+
}>): Promise<void>;
|
|
114
|
+
/** @inheritDoc */
|
|
115
|
+
seekToTimestamp(groupId: string | undefined, assignments: Array<{
|
|
116
|
+
topic: string;
|
|
117
|
+
partition: number;
|
|
118
|
+
timestamp: number;
|
|
119
|
+
}>): Promise<void>;
|
|
120
|
+
/** @inheritDoc */
|
|
121
|
+
getConsumerLag(groupId?: string): Promise<Array<{
|
|
122
|
+
topic: string;
|
|
123
|
+
partition: number;
|
|
124
|
+
lag: number;
|
|
125
|
+
}>>;
|
|
126
|
+
/** @inheritDoc */
|
|
127
|
+
checkStatus(): Promise<import("../types").KafkaHealthResult>;
|
|
128
|
+
/** @inheritDoc */
|
|
129
|
+
listConsumerGroups(): Promise<ConsumerGroupSummary[]>;
|
|
130
|
+
/** @inheritDoc */
|
|
131
|
+
describeTopics(topics?: string[]): Promise<TopicDescription[]>;
|
|
132
|
+
/** @inheritDoc */
|
|
133
|
+
deleteRecords(topic: string, partitions: Array<{
|
|
134
|
+
partition: number;
|
|
135
|
+
offset: string;
|
|
136
|
+
}>): Promise<void>;
|
|
137
|
+
/** @inheritDoc */
|
|
138
|
+
getCircuitState(topic: string, partition: number, groupId?: string): {
|
|
139
|
+
status: "closed" | "open" | "half-open";
|
|
140
|
+
failures: number;
|
|
141
|
+
windowSize: number;
|
|
142
|
+
} | undefined;
|
|
143
|
+
/** @inheritDoc */
|
|
144
|
+
getMetrics(topic?: string): Readonly<import("../types").KafkaMetrics>;
|
|
145
|
+
/** @inheritDoc */
|
|
146
|
+
resetMetrics(topic?: string): void;
|
|
147
|
+
getClientId(): ClientId;
|
|
148
|
+
/** @inheritDoc */
|
|
149
|
+
disconnect(drainTimeoutMs?: number): Promise<void>;
|
|
150
|
+
/** NestJS lifecycle hook — called automatically on module teardown. */
|
|
151
|
+
onModuleDestroy(): Promise<void>;
|
|
152
|
+
/** @inheritDoc */
|
|
153
|
+
enableGracefulShutdown(signals?: NodeJS.Signals[], drainTimeoutMs?: number): void;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/kafka.client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { EventEnvelope } from "../../message/envelope";
|
|
2
|
+
import type { CircuitBreakerOptions, KafkaInstrumentation, KafkaLogger } from "../../types";
|
|
3
|
+
type CircuitBreakerDeps = {
|
|
4
|
+
pauseConsumer: (gid: string, assignments: Array<{
|
|
5
|
+
topic: string;
|
|
6
|
+
partitions: number[];
|
|
7
|
+
}>) => void;
|
|
8
|
+
resumeConsumer: (gid: string, assignments: Array<{
|
|
9
|
+
topic: string;
|
|
10
|
+
partitions: number[];
|
|
11
|
+
}>) => void;
|
|
12
|
+
logger: KafkaLogger;
|
|
13
|
+
instrumentation: KafkaInstrumentation[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Per-consumer-group circuit breaker.
|
|
17
|
+
* State is tracked per `${gid}:${topic}:${partition}` key using a sliding window.
|
|
18
|
+
* Drives CLOSED → OPEN → HALF-OPEN → CLOSED transitions and pauses/resumes
|
|
19
|
+
* topic-partition consumption accordingly.
|
|
20
|
+
*/
|
|
21
|
+
export declare class CircuitBreakerManager {
|
|
22
|
+
private readonly deps;
|
|
23
|
+
private readonly states;
|
|
24
|
+
private readonly configs;
|
|
25
|
+
constructor(deps: CircuitBreakerDeps);
|
|
26
|
+
/**
|
|
27
|
+
* Register or update circuit breaker configuration for a consumer group.
|
|
28
|
+
* Must be called before the group starts consuming for the config to take effect.
|
|
29
|
+
* @param gid Consumer group ID.
|
|
30
|
+
* @param options Circuit breaker thresholds and timing configuration.
|
|
31
|
+
*/
|
|
32
|
+
setConfig(gid: string, options: CircuitBreakerOptions): void;
|
|
33
|
+
/**
|
|
34
|
+
* Returns a snapshot of the circuit breaker state for a given topic-partition.
|
|
35
|
+
* Returns `undefined` when no state exists for the key.
|
|
36
|
+
*/
|
|
37
|
+
getState(topic: string, partition: number, gid: string): {
|
|
38
|
+
status: "closed" | "open" | "half-open";
|
|
39
|
+
failures: number;
|
|
40
|
+
windowSize: number;
|
|
41
|
+
} | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Record a failure for the given envelope and group.
|
|
44
|
+
* Drives the CLOSED → OPEN and HALF-OPEN → OPEN transitions.
|
|
45
|
+
*/
|
|
46
|
+
onFailure(envelope: EventEnvelope<any>, gid: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Record a success for the given envelope and group.
|
|
49
|
+
* Drives the HALF-OPEN → CLOSED transition and updates the success window.
|
|
50
|
+
*/
|
|
51
|
+
onSuccess(envelope: EventEnvelope<any>, gid: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Remove all circuit state and config for the given group.
|
|
54
|
+
* Called when a consumer is stopped via `stopConsumer(groupId)`.
|
|
55
|
+
*/
|
|
56
|
+
removeGroup(gid: string): void;
|
|
57
|
+
/** Clear all circuit state and config. Called on `disconnect()`. */
|
|
58
|
+
clear(): void;
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=circuit-breaker.manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.manager.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/infra/circuit-breaker.manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS5F,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAClG,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACnG,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,oBAAoB,EAAE,CAAC;CACzC,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,qBAAqB;IAIpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;gBAEvC,IAAI,EAAE,kBAAkB;IAErD;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAI5D;;;OAGG;IACH,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV;QAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAUhG;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IA6D1D;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAkC1D;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAU9B,oEAAoE;IACpE,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DedupStore } from "../../types";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory {@link DedupStore} backed by a nested map:
|
|
4
|
+
* `groupId` → `"topic:partition"` → last processed Lamport clock.
|
|
5
|
+
*
|
|
6
|
+
* This is the default store used when `DeduplicationOptions.store` is not set.
|
|
7
|
+
* State lives only in the current process and is cleared on `stopConsumer` /
|
|
8
|
+
* `disconnect` and lost on restart or rebalance. Provide a persistent
|
|
9
|
+
* `DedupStore` (e.g. Redis-backed) to survive restarts and rebalances.
|
|
10
|
+
*
|
|
11
|
+
* The backing map is injected so the client can share a single map across all
|
|
12
|
+
* consumer groups and clear it during shutdown.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const states = new Map<string, Map<string, number>>();
|
|
17
|
+
* const store = new InMemoryDedupStore(states);
|
|
18
|
+
* store.setLastClock('billing', 'orders:0', 42);
|
|
19
|
+
* store.getLastClock('billing', 'orders:0'); // 42
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class InMemoryDedupStore implements DedupStore {
|
|
23
|
+
private readonly states;
|
|
24
|
+
constructor(states: Map<string, Map<string, number>>);
|
|
25
|
+
getLastClock(groupId: string, topicPartition: string): number | undefined;
|
|
26
|
+
setLastClock(groupId: string, topicPartition: string, clock: number): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=dedup.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedup.store.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/infra/dedup.store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IAEjD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG3D,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAQ3E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Tracks in-flight async handlers and provides a drain-wait mechanism. */
|
|
2
|
+
export declare class InFlightTracker {
|
|
3
|
+
private readonly warn;
|
|
4
|
+
private inFlightTotal;
|
|
5
|
+
private readonly drainResolvers;
|
|
6
|
+
constructor(warn: (msg: string) => void);
|
|
7
|
+
/**
|
|
8
|
+
* Wrap an async handler so its lifetime is counted against the in-flight total.
|
|
9
|
+
* Resolvers registered with `waitForDrain` are notified when the count reaches zero.
|
|
10
|
+
* @param fn The async function to track.
|
|
11
|
+
* @returns The same promise returned by `fn`.
|
|
12
|
+
*/
|
|
13
|
+
track<R>(fn: () => Promise<R>): Promise<R>;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve when all tracked handlers have completed, or after `timeoutMs` elapses.
|
|
16
|
+
* Logs a warning (via the injected `warn` callback) if the timeout is hit before draining.
|
|
17
|
+
* Returns immediately if there are no in-flight handlers.
|
|
18
|
+
* @param timeoutMs Maximum time to wait in milliseconds before resolving anyway.
|
|
19
|
+
*/
|
|
20
|
+
waitForDrain(timeoutMs: number): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=inflight.tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inflight.tracker.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/infra/inflight.tracker.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE3B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAExD;;;;;OAKG;IACH,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAgB1C;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB/C"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { EventEnvelope } from "../../message/envelope";
|
|
2
|
+
import type { DlqReason, KafkaInstrumentation, KafkaMetrics } from "../../types";
|
|
3
|
+
export type MetricsManagerDeps = {
|
|
4
|
+
instrumentation: KafkaInstrumentation[];
|
|
5
|
+
onCircuitFailure: (envelope: EventEnvelope<any>, gid: string) => void;
|
|
6
|
+
onCircuitSuccess: (envelope: EventEnvelope<any>, gid: string) => void;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Maintains per-topic event counters and dispatches instrumentation hooks.
|
|
10
|
+
* Created once per `KafkaClient` instance and shared across all consumers and producers.
|
|
11
|
+
*/
|
|
12
|
+
export declare class MetricsManager {
|
|
13
|
+
private readonly deps;
|
|
14
|
+
private readonly topicMetrics;
|
|
15
|
+
constructor(deps: MetricsManagerDeps);
|
|
16
|
+
private metricsFor;
|
|
17
|
+
/** Fire `afterSend` instrumentation hooks for each message in a batch. */
|
|
18
|
+
notifyAfterSend(topic: string, count: number): void;
|
|
19
|
+
/**
|
|
20
|
+
* Increment the retry counter for the envelope's topic and fire all `onRetry` instrumentation hooks.
|
|
21
|
+
* @param envelope The message envelope being retried.
|
|
22
|
+
* @param attempt Current retry attempt number (1-based).
|
|
23
|
+
* @param maxRetries Maximum number of retries configured for this consumer.
|
|
24
|
+
*/
|
|
25
|
+
notifyRetry(envelope: EventEnvelope<any>, attempt: number, maxRetries: number): void;
|
|
26
|
+
/**
|
|
27
|
+
* Increment the DLQ counter for the envelope's topic and fire all `onDlq` instrumentation hooks.
|
|
28
|
+
* Circuit breaker failures are recorded separately via `notifyFailure` at the
|
|
29
|
+
* handler-error boundary — dead-lettering itself is not a circuit event.
|
|
30
|
+
* @param envelope The message envelope being sent to the DLQ.
|
|
31
|
+
* @param reason The reason the message is being dead-lettered.
|
|
32
|
+
*/
|
|
33
|
+
notifyDlq(envelope: EventEnvelope<any>, reason: DlqReason): void;
|
|
34
|
+
/**
|
|
35
|
+
* Notify the circuit breaker of a handler failure. Fired on every failed
|
|
36
|
+
* handler attempt (in-process retries and retry-topic levels included),
|
|
37
|
+
* independent of whether the message is ultimately dead-lettered.
|
|
38
|
+
* @param envelope The message envelope whose handler failed.
|
|
39
|
+
* @param gid Consumer group ID — used to drive circuit breaker state.
|
|
40
|
+
*/
|
|
41
|
+
notifyFailure(envelope: EventEnvelope<any>, gid: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Increment the deduplication counter for the envelope's topic and fire all `onDuplicate` hooks.
|
|
44
|
+
* @param envelope The duplicate message envelope.
|
|
45
|
+
* @param strategy The deduplication strategy applied (`"drop"`, `"dlq"`, or `"topic"`).
|
|
46
|
+
*/
|
|
47
|
+
notifyDuplicate(envelope: EventEnvelope<any>, strategy: "drop" | "dlq" | "topic"): void;
|
|
48
|
+
/**
|
|
49
|
+
* Increment the processed counter for the envelope's topic, fire all `onMessage` hooks,
|
|
50
|
+
* and notify the circuit breaker of a success (when `gid` is provided).
|
|
51
|
+
* @param envelope The successfully processed message envelope.
|
|
52
|
+
* @param gid Consumer group ID — used to drive circuit breaker state.
|
|
53
|
+
*/
|
|
54
|
+
notifyMessage(envelope: EventEnvelope<any>, gid?: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Return a snapshot of event counters.
|
|
57
|
+
* @param topic When provided, returns counters for that topic only; otherwise aggregates all topics.
|
|
58
|
+
* @returns Read-only `KafkaMetrics` snapshot. Returns zero-valued counters if the topic has no events.
|
|
59
|
+
*/
|
|
60
|
+
getMetrics(topic?: string): Readonly<KafkaMetrics>;
|
|
61
|
+
/**
|
|
62
|
+
* Reset event counters to zero.
|
|
63
|
+
* @param topic When provided, clears counters for that topic only; otherwise clears all topics.
|
|
64
|
+
*/
|
|
65
|
+
resetMetrics(topic?: string): void;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=metrics.manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.manager.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/infra/metrics.manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACvE,CAAC;AAEF;;;GAGG;AACH,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;gBAEnC,IAAI,EAAE,kBAAkB;IAErD,OAAO,CAAC,UAAU;IASlB,0EAA0E;IAC1E,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnD;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpF;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI;IAKhE;;;;;;OAMG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9D;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI;IAKvF;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAM/D;;;;OAIG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC;IAelD;;;OAGG;IACH,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAOnC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { IProducer } from "../../transport/transport.interface";
|
|
2
|
+
type Producer = IProducer;
|
|
3
|
+
import type { KafkaClientContext } from "../context";
|
|
4
|
+
import type { TopicMapConstraint } from "../../types";
|
|
5
|
+
import { toError } from "../consumer/pipeline";
|
|
6
|
+
/**
|
|
7
|
+
* Process-level registry of active transactional producer IDs.
|
|
8
|
+
* Shared across `transactionImpl` (send.ts) and `createRetryTxProducer`.
|
|
9
|
+
* Cross-process conflicts cannot be detected here — they surface as fencing errors from the broker.
|
|
10
|
+
*/
|
|
11
|
+
export declare const _activeTransactionalIds: Set<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Ensure a topic exists, creating it if `autoCreateTopics` is enabled.
|
|
14
|
+
* Concurrent calls for the same topic are deduplicated via a promise cache.
|
|
15
|
+
*/
|
|
16
|
+
export declare function ensureTopic<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topic: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Create and connect a transactional producer for EOS routing.
|
|
19
|
+
* Each retry level consumer uses its own producer with a unique `transactionalId`
|
|
20
|
+
* so Kafka can fence stale producers on restart without affecting other levels.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createRetryTxProducer<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, transactionalId: string): Promise<Producer>;
|
|
23
|
+
export declare function connectProducerImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>): Promise<void>;
|
|
24
|
+
export declare function disconnectImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, drainTimeoutMs?: number): Promise<void>;
|
|
25
|
+
export declare function startLagThrottlePoller<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Recover the Lamport clock from the last message across the given topics.
|
|
28
|
+
* Seeks every non-empty partition to its last offset, reads one message per
|
|
29
|
+
* partition, and extracts the maximum `x-lamport-clock` header value.
|
|
30
|
+
* Topics that are empty or missing are silently skipped.
|
|
31
|
+
*/
|
|
32
|
+
export declare function recoverLamportClockImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topics: string[]): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Start a timer that logs a warning if `fn` hasn't resolved within `timeoutMs`.
|
|
35
|
+
* The handler itself is not cancelled — the warning is diagnostic only.
|
|
36
|
+
*/
|
|
37
|
+
export declare function wrapWithTimeoutWarning<R>(logger: {
|
|
38
|
+
warn: (msg: string) => void;
|
|
39
|
+
}, fn: () => Promise<R>, timeoutMs: number, topic: string): Promise<R>;
|
|
40
|
+
export { toError };
|
|
41
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/producer/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,KAAK,QAAQ,GAAG,SAAS,CAAC;AAE1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,aAAoB,CAAC;AAIzD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAC/D,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAcf;AAID;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACzE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AAID,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACvE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,cAAc,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAClE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,cAAc,SAAS,GACtB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAID,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACpE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,GACzB,IAAI,CA8BN;AAID;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAC3E,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,IAAI,CAAC,CAkIf;AAID;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,EACvC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,CAAC,CAWZ;AAGD,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { SchemaLike, SchemaParseContext } from "../../message/topic";
|
|
2
|
+
import type { BatchMessageItem, CompressionType, KafkaInstrumentation, KafkaLogger, MessageHeaders } from "../../types";
|
|
3
|
+
/**
|
|
4
|
+
* Extract the plain topic name string from either a `TopicDescriptor` object or a raw string.
|
|
5
|
+
* Falls back to `String(topicOrDescriptor)` for any other value.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveTopicName(topicOrDescriptor: unknown): string;
|
|
8
|
+
/**
|
|
9
|
+
* Register the schema attached to a `TopicDescriptor` into the shared schema registry.
|
|
10
|
+
* If a different schema is already registered for the same topic, logs a warning and
|
|
11
|
+
* overwrites it — consistent schemas across all call sites avoid silent validation drift.
|
|
12
|
+
*
|
|
13
|
+
* @param topicOrDesc A `TopicDescriptor` (with `__schema`) or a plain string. Plain strings are ignored.
|
|
14
|
+
* @param schemaRegistry Mutable map of topic name → validator shared across the client.
|
|
15
|
+
* @param logger Optional logger for conflict warnings.
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerSchema(topicOrDesc: any, schemaRegistry: Map<string, SchemaLike>, logger?: KafkaLogger): void;
|
|
18
|
+
/**
|
|
19
|
+
* Validate `message` against the schema attached to `topicOrDesc` (or looked up from the
|
|
20
|
+
* registry when `strictSchemasEnabled` is on). Returns the parsed (potentially transformed)
|
|
21
|
+
* value on success, or throws a `KafkaValidationError` on failure.
|
|
22
|
+
*
|
|
23
|
+
* Validation priority:
|
|
24
|
+
* 1. Inline schema on the `TopicDescriptor` — always applied.
|
|
25
|
+
* 2. Registry schema — applied only when `strictSchemasEnabled` is `true`.
|
|
26
|
+
* 3. No schema found — returns `message` unchanged.
|
|
27
|
+
*
|
|
28
|
+
* @param topicOrDesc Topic descriptor carrying an inline `__schema`, or a plain topic string.
|
|
29
|
+
* @param message The raw message payload to validate.
|
|
30
|
+
* @param deps Schema registry and strict-mode flag.
|
|
31
|
+
* @param ctx Optional parse context forwarded to the schema (topic name, headers, version).
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateMessage(topicOrDesc: any, message: any, deps: {
|
|
34
|
+
schemaRegistry: Map<string, SchemaLike>;
|
|
35
|
+
strictSchemasEnabled: boolean;
|
|
36
|
+
}, ctx?: SchemaParseContext): Promise<any>;
|
|
37
|
+
export type BuildSendPayloadDeps = {
|
|
38
|
+
schemaRegistry: Map<string, SchemaLike>;
|
|
39
|
+
strictSchemasEnabled: boolean;
|
|
40
|
+
instrumentation: KafkaInstrumentation[];
|
|
41
|
+
logger: KafkaLogger;
|
|
42
|
+
/** Called once per message to get the next Lamport clock value. Omit to disable clock stamping. */
|
|
43
|
+
nextLamportClock?: () => number;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Build the Kafka producer payload from a topic descriptor (or name) and an array of messages.
|
|
47
|
+
*
|
|
48
|
+
* For each message the function:
|
|
49
|
+
* 1. Builds envelope headers (`x-event-id`, `x-correlation-id`, `x-timestamp`, …).
|
|
50
|
+
* 2. Stamps the Lamport clock header when `deps.nextLamportClock` is provided.
|
|
51
|
+
* 3. Calls `beforeSend` instrumentation hooks so tracing can inject `traceparent` etc.
|
|
52
|
+
* 4. Validates the payload against the attached or registry schema.
|
|
53
|
+
* 5. JSON-serialises the validated value.
|
|
54
|
+
*
|
|
55
|
+
* @param topicOrDesc Topic descriptor or plain topic name string.
|
|
56
|
+
* @param messages Array of outgoing messages with optional key, headers, and metadata.
|
|
57
|
+
* @param deps Schema registry, strict-mode flag, instrumentation hooks, and Lamport clock factory.
|
|
58
|
+
* @param compression Optional compression codec to include in the returned payload object.
|
|
59
|
+
* @returns Kafka producer `send()` payload — `{ topic, messages, compression? }`.
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildSendPayload(topicOrDesc: any, messages: Array<BatchMessageItem<any>>, deps: BuildSendPayloadDeps, compression?: CompressionType): Promise<{
|
|
62
|
+
topic: string;
|
|
63
|
+
compression?: CompressionType;
|
|
64
|
+
messages: Array<{
|
|
65
|
+
value: string;
|
|
66
|
+
key: string | null;
|
|
67
|
+
headers: MessageHeaders;
|
|
68
|
+
}>;
|
|
69
|
+
}>;
|
|
70
|
+
//# sourceMappingURL=ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/producer/ops.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,cAAc,EACf,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,GAAG,MAAM,CAUnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,GAAG,EAChB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,MAAM,CAAC,EAAE,WAAW,GACnB,IAAI,CAYN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,GAAG,EAChB,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE;IACJ,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,oBAAoB,EAAE,OAAO,CAAC;CAC/B,EACD,GAAG,CAAC,EAAE,kBAAkB,GACvB,OAAO,CAAC,GAAG,CAAC,CAwBd;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EACtC,IAAI,EAAE,oBAAoB,EAC1B,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC,CAAC;CACJ,CAAC,CAuCD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { KafkaClientContext } from "../context";
|
|
2
|
+
import type { TopicMapConstraint, SendOptions, BatchMessageItem, BatchSendOptions, TransactionContext, MessageHeaders, CompressionType } from "../../types";
|
|
3
|
+
/**
|
|
4
|
+
* Build a ProduceRequest payload: register schema, validate, stamp envelope headers.
|
|
5
|
+
* Shared by sendMessage, sendBatch, and transaction sends.
|
|
6
|
+
*/
|
|
7
|
+
export declare function preparePayload<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topicOrDesc: any, messages: Array<BatchMessageItem<any>>, compression?: CompressionType): Promise<{
|
|
8
|
+
topic: string;
|
|
9
|
+
compression?: CompressionType;
|
|
10
|
+
messages: Array<{
|
|
11
|
+
value: string;
|
|
12
|
+
key: string | null;
|
|
13
|
+
headers: MessageHeaders;
|
|
14
|
+
}>;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function sendMessageImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topicOrDesc: any, message: any, options?: SendOptions): Promise<void>;
|
|
17
|
+
export declare function sendBatchImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topicOrDesc: any, messages: Array<BatchMessageItem<any>>, options?: BatchSendOptions): Promise<void>;
|
|
18
|
+
export declare function sendTombstoneImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, topic: string, key: string, headers?: MessageHeaders): Promise<void>;
|
|
19
|
+
export declare function transactionImpl<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>, fn: (txCtx: TransactionContext<T>) => Promise<void>): Promise<void>;
|
|
20
|
+
export declare function waitIfThrottled<T extends TopicMapConstraint<T>>(ctx: KafkaClientContext<T>): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=send.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../../src/client/kafka.client/producer/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAC;AAUrB;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAClE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EACtC,WAAW,CAAC,EAAE,eAAe;;;;;;;;GAW9B;AAyBD,wBAAsB,eAAe,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACnE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,WAAW,EAAE,GAAG,EAChB,OAAO,EAAE,GAAG,EACZ,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,wBAAsB,aAAa,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACjE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EACtC,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACrE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,eAAe,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACnE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC1B,EAAE,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAqCf;AA0DD,wBAAsB,eAAe,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EACnE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { KafkaClientOptions } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Fail-fast validation of `KafkaClient` constructor arguments.
|
|
4
|
+
* Collects every problem and throws a single error listing all of them, so a
|
|
5
|
+
* misconfigured client fails at construction with a clear message instead of
|
|
6
|
+
* surfacing as a confusing driver error on first use.
|
|
7
|
+
*
|
|
8
|
+
* @throws Error listing every invalid argument/option found.
|
|
9
|
+
*/
|
|
10
|
+
export declare function validateClientOptions(clientId: string, groupId: string, brokers: string[], options?: KafkaClientOptions): void;
|
|
11
|
+
//# sourceMappingURL=validate-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-options.d.ts","sourceRoot":"","sources":["../../../src/client/kafka.client/validate-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CA0EN"}
|