@ddd-ts-kit/kafka 0.0.0-stage → 0.1.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 +397 -2
- package/dist/codec/decode.d.ts +4 -0
- package/dist/codec/decode.d.ts.map +1 -0
- package/dist/codec/decode.js +39 -0
- package/dist/codec/decode.js.map +1 -0
- package/dist/codec/encode.d.ts +9 -0
- package/dist/codec/encode.d.ts.map +1 -0
- package/dist/codec/encode.js +22 -0
- package/dist/codec/encode.js.map +1 -0
- package/dist/codec/headers.d.ts +13 -0
- package/dist/codec/headers.d.ts.map +1 -0
- package/dist/codec/headers.js +13 -0
- package/dist/codec/headers.js.map +1 -0
- package/dist/codec/incoming-record.d.ts +8 -0
- package/dist/codec/incoming-record.d.ts.map +1 -0
- package/dist/codec/incoming-record.js +2 -0
- package/dist/codec/incoming-record.js.map +1 -0
- package/dist/codec/outgoing-record.d.ts +7 -0
- package/dist/codec/outgoing-record.d.ts.map +1 -0
- package/dist/codec/outgoing-record.js +2 -0
- package/dist/codec/outgoing-record.js.map +1 -0
- package/dist/codec/republication.d.ts +5 -0
- package/dist/codec/republication.d.ts.map +1 -0
- package/dist/codec/republication.js +8 -0
- package/dist/codec/republication.js.map +1 -0
- package/dist/codec/routing.d.ts +7 -0
- package/dist/codec/routing.d.ts.map +1 -0
- package/dist/codec/routing.js +2 -0
- package/dist/codec/routing.js.map +1 -0
- package/dist/codec/source-of.d.ts +4 -0
- package/dist/codec/source-of.d.ts.map +1 -0
- package/dist/codec/source-of.js +5 -0
- package/dist/codec/source-of.js.map +1 -0
- package/dist/codec/text-header.d.ts +4 -0
- package/dist/codec/text-header.d.ts.map +1 -0
- package/dist/codec/text-header.js +7 -0
- package/dist/codec/text-header.js.map +1 -0
- package/dist/connection/broker-link.d.ts +44 -0
- package/dist/connection/broker-link.d.ts.map +1 -0
- package/dist/connection/broker-link.js +145 -0
- package/dist/connection/broker-link.js.map +1 -0
- package/dist/connection/cluster-of.d.ts +8 -0
- package/dist/connection/cluster-of.d.ts.map +1 -0
- package/dist/connection/cluster-of.js +16 -0
- package/dist/connection/cluster-of.js.map +1 -0
- package/dist/connection/rebalance.d.ts +7 -0
- package/dist/connection/rebalance.d.ts.map +1 -0
- package/dist/connection/rebalance.js +2 -0
- package/dist/connection/rebalance.js.map +1 -0
- package/dist/consumption/attempts.d.ts +16 -0
- package/dist/consumption/attempts.d.ts.map +1 -0
- package/dist/consumption/attempts.js +23 -0
- package/dist/consumption/attempts.js.map +1 -0
- package/dist/consumption/backoff.d.ts +12 -0
- package/dist/consumption/backoff.d.ts.map +1 -0
- package/dist/consumption/backoff.js +20 -0
- package/dist/consumption/backoff.js.map +1 -0
- package/dist/consumption/consumption.d.ts +18 -0
- package/dist/consumption/consumption.d.ts.map +1 -0
- package/dist/consumption/consumption.js +33 -0
- package/dist/consumption/consumption.js.map +1 -0
- package/dist/consumption/delivery-postponed.d.ts +9 -0
- package/dist/consumption/delivery-postponed.d.ts.map +1 -0
- package/dist/consumption/delivery-postponed.js +12 -0
- package/dist/consumption/delivery-postponed.js.map +1 -0
- package/dist/consumption/failure-of.d.ts +7 -0
- package/dist/consumption/failure-of.d.ts.map +1 -0
- package/dist/consumption/failure-of.js +18 -0
- package/dist/consumption/failure-of.js.map +1 -0
- package/dist/consumption/group-consumer.d.ts +60 -0
- package/dist/consumption/group-consumer.d.ts.map +1 -0
- package/dist/consumption/group-consumer.js +145 -0
- package/dist/consumption/group-consumer.js.map +1 -0
- package/dist/consumption/poison-message.d.ts +3 -0
- package/dist/consumption/poison-message.d.ts.map +1 -0
- package/dist/consumption/poison-message.js +3 -0
- package/dist/consumption/poison-message.js.map +1 -0
- package/dist/consumption/postpone.d.ts +9 -0
- package/dist/consumption/postpone.d.ts.map +1 -0
- package/dist/consumption/postpone.js +30 -0
- package/dist/consumption/postpone.js.map +1 -0
- package/dist/consumption/record-handling.d.ts +58 -0
- package/dist/consumption/record-handling.d.ts.map +1 -0
- package/dist/consumption/record-handling.js +183 -0
- package/dist/consumption/record-handling.js.map +1 -0
- package/dist/consumption/timers.d.ts +7 -0
- package/dist/consumption/timers.d.ts.map +1 -0
- package/dist/consumption/timers.js +17 -0
- package/dist/consumption/timers.js.map +1 -0
- package/dist/errors/broker-unavailable-error.d.ts +8 -0
- package/dist/errors/broker-unavailable-error.d.ts.map +1 -0
- package/dist/errors/broker-unavailable-error.js +12 -0
- package/dist/errors/broker-unavailable-error.js.map +1 -0
- package/dist/errors/consumer-name-required-error.d.ts +5 -0
- package/dist/errors/consumer-name-required-error.d.ts.map +1 -0
- package/dist/errors/consumer-name-required-error.js +8 -0
- package/dist/errors/consumer-name-required-error.js.map +1 -0
- package/dist/errors/event-bus-closed-error.d.ts +5 -0
- package/dist/errors/event-bus-closed-error.d.ts.map +1 -0
- package/dist/errors/event-bus-closed-error.js +8 -0
- package/dist/errors/event-bus-closed-error.js.map +1 -0
- package/dist/errors/failure-code.d.ts +6 -0
- package/dist/errors/failure-code.d.ts.map +1 -0
- package/dist/errors/failure-code.js +15 -0
- package/dist/errors/failure-code.js.map +1 -0
- package/dist/errors/publish-not-acknowledged-error.d.ts +14 -0
- package/dist/errors/publish-not-acknowledged-error.d.ts.map +1 -0
- package/dist/errors/publish-not-acknowledged-error.js +18 -0
- package/dist/errors/publish-not-acknowledged-error.js.map +1 -0
- package/dist/errors/reason-of.d.ts +3 -0
- package/dist/errors/reason-of.d.ts.map +1 -0
- package/dist/errors/reason-of.js +11 -0
- package/dist/errors/reason-of.js.map +1 -0
- package/dist/errors/within.d.ts +3 -0
- package/dist/errors/within.d.ts.map +1 -0
- package/dist/errors/within.js +17 -0
- package/dist/errors/within.js.map +1 -0
- package/dist/ignore.d.ts +3 -0
- package/dist/ignore.d.ts.map +1 -0
- package/dist/ignore.js +5 -0
- package/dist/ignore.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/kafka-event-bus.d.ts +58 -0
- package/dist/kafka-event-bus.d.ts.map +1 -0
- package/dist/kafka-event-bus.js +147 -0
- package/dist/kafka-event-bus.js.map +1 -0
- package/dist/messaging-system.d.ts +3 -0
- package/dist/messaging-system.d.ts.map +1 -0
- package/dist/messaging-system.js +3 -0
- package/dist/messaging-system.js.map +1 -0
- package/dist/options/kafka-delivery.d.ts +15 -0
- package/dist/options/kafka-delivery.d.ts.map +1 -0
- package/dist/options/kafka-delivery.js +2 -0
- package/dist/options/kafka-delivery.js.map +1 -0
- package/dist/options/kafka-event-bus-options.d.ts +42 -0
- package/dist/options/kafka-event-bus-options.d.ts.map +1 -0
- package/dist/options/kafka-event-bus-options.js +2 -0
- package/dist/options/kafka-event-bus-options.js.map +1 -0
- package/dist/options/kafka-failure.d.ts +19 -0
- package/dist/options/kafka-failure.d.ts.map +1 -0
- package/dist/options/kafka-failure.js +2 -0
- package/dist/options/kafka-failure.js.map +1 -0
- package/dist/options/reconnect-options.d.ts +9 -0
- package/dist/options/reconnect-options.d.ts.map +1 -0
- package/dist/options/reconnect-options.js +2 -0
- package/dist/options/reconnect-options.js.map +1 -0
- package/dist/options/retry-options.d.ts +7 -0
- package/dist/options/retry-options.d.ts.map +1 -0
- package/dist/options/retry-options.js +2 -0
- package/dist/options/retry-options.js.map +1 -0
- package/dist/options/settings-of.d.ts +4 -0
- package/dist/options/settings-of.d.ts.map +1 -0
- package/dist/options/settings-of.js +47 -0
- package/dist/options/settings-of.js.map +1 -0
- package/dist/options/settings.d.ts +27 -0
- package/dist/options/settings.d.ts.map +1 -0
- package/dist/options/settings.js +2 -0
- package/dist/options/settings.js.map +1 -0
- package/dist/options/topic-options.d.ts +9 -0
- package/dist/options/topic-options.d.ts.map +1 -0
- package/dist/options/topic-options.js +2 -0
- package/dist/options/topic-options.js.map +1 -0
- package/dist/publication/publications.d.ts +30 -0
- package/dist/publication/publications.d.ts.map +1 -0
- package/dist/publication/publications.js +83 -0
- package/dist/publication/publications.js.map +1 -0
- package/dist/replay/dead-letter-replay.d.ts +31 -0
- package/dist/replay/dead-letter-replay.d.ts.map +1 -0
- package/dist/replay/dead-letter-replay.js +97 -0
- package/dist/replay/dead-letter-replay.js.map +1 -0
- package/dist/secrecy/conceal.d.ts +8 -0
- package/dist/secrecy/conceal.d.ts.map +1 -0
- package/dist/secrecy/conceal.js +12 -0
- package/dist/secrecy/conceal.js.map +1 -0
- package/dist/topology/consumer-binding.d.ts +6 -0
- package/dist/topology/consumer-binding.d.ts.map +1 -0
- package/dist/topology/consumer-binding.js +2 -0
- package/dist/topology/consumer-binding.js.map +1 -0
- package/dist/topology/dead-topic-of.d.ts +3 -0
- package/dist/topology/dead-topic-of.d.ts.map +1 -0
- package/dist/topology/dead-topic-of.js +5 -0
- package/dist/topology/dead-topic-of.js.map +1 -0
- package/dist/topology/describe-topic.d.ts +5 -0
- package/dist/topology/describe-topic.d.ts.map +1 -0
- package/dist/topology/describe-topic.js +5 -0
- package/dist/topology/describe-topic.js.map +1 -0
- package/dist/topology/group-description.d.ts +5 -0
- package/dist/topology/group-description.d.ts.map +1 -0
- package/dist/topology/group-description.js +2 -0
- package/dist/topology/group-description.js.map +1 -0
- package/dist/topology/kafka-topology.d.ts +8 -0
- package/dist/topology/kafka-topology.d.ts.map +1 -0
- package/dist/topology/kafka-topology.js +2 -0
- package/dist/topology/kafka-topology.js.map +1 -0
- package/dist/topology/replay-group-of.d.ts +3 -0
- package/dist/topology/replay-group-of.d.ts.map +1 -0
- package/dist/topology/replay-group-of.js +5 -0
- package/dist/topology/replay-group-of.js.map +1 -0
- package/dist/topology/topic-description.d.ts +10 -0
- package/dist/topology/topic-description.d.ts.map +1 -0
- package/dist/topology/topic-description.js +2 -0
- package/dist/topology/topic-description.js.map +1 -0
- package/dist/topology/topology-of.d.ts +5 -0
- package/dist/topology/topology-of.d.ts.map +1 -0
- package/dist/topology/topology-of.js +25 -0
- package/dist/topology/topology-of.js.map +1 -0
- package/dist/topology/topology-settings.d.ts +7 -0
- package/dist/topology/topology-settings.d.ts.map +1 -0
- package/dist/topology/topology-settings.js +2 -0
- package/dist/topology/topology-settings.js.map +1 -0
- package/package.json +37 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-of.js","sourceRoot":"","sources":["../../src/options/settings-of.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,UAAU,CAAC,OAA6B;IACtD,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;QAC5C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;QAC5C,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAChC,iBAAiB,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ;QACjD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC;QACrC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,MAAM;QACpD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,MAAM;QACpD,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO;QAC/C,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QACrC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAAM,GAAiB,EAAE;IACzC,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC;QACjD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAK,GAAiB,EAAE;IACvC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,WAAW,CAAC,SAAS,GAAqB,EAAE;IACnD,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,GAAG;QACrC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC;QAC7B,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,MAAM;KACjC,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,SAAS,OAAO,CAAI,IAAsC;IACxD,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IntegrationEvent } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { KafkaDelivery } from './kafka-delivery.js';
|
|
3
|
+
import type { KafkaFailure } from './kafka-failure.js';
|
|
4
|
+
import type { ReconnectOptions } from './reconnect-options.js';
|
|
5
|
+
import type { RetryOptions } from './retry-options.js';
|
|
6
|
+
import type { TopicOptions } from './topic-options.js';
|
|
7
|
+
/**
|
|
8
|
+
* The options of a bus with every default applied. The brokers and the client properties are
|
|
9
|
+
* not among them: they carry credentials, and nothing that outlives the constructor keeps them.
|
|
10
|
+
*/
|
|
11
|
+
export interface Settings {
|
|
12
|
+
readonly consumer: string | undefined;
|
|
13
|
+
readonly topicOf: (type: string) => string;
|
|
14
|
+
readonly keyOf: (event: IntegrationEvent) => string | undefined;
|
|
15
|
+
readonly publishedTypes: readonly string[];
|
|
16
|
+
readonly topics: Required<TopicOptions>;
|
|
17
|
+
readonly startFromEarliest: boolean;
|
|
18
|
+
readonly concurrency: number;
|
|
19
|
+
readonly publishTimeoutMs: number;
|
|
20
|
+
readonly connectTimeoutMs: number;
|
|
21
|
+
readonly maxHandlingMs: number;
|
|
22
|
+
readonly retry: Required<RetryOptions>;
|
|
23
|
+
readonly reconnect: Required<ReconnectOptions>;
|
|
24
|
+
readonly onFailure: (failure: KafkaFailure) => void;
|
|
25
|
+
readonly onDelivery: (delivery: KafkaDelivery) => void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/options/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;CACxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/options/settings.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface TopicOptions {
|
|
2
|
+
/** Partitions of a topic the bus creates. Default -1: `num.partitions` of the broker. */
|
|
3
|
+
readonly partitions?: number;
|
|
4
|
+
/** Default -1: `default.replication.factor` of the broker. Use 3 in production. */
|
|
5
|
+
readonly replicationFactor?: number;
|
|
6
|
+
/** Default true. With false the bus creates nothing and expects every topic to exist. */
|
|
7
|
+
readonly create?: boolean;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=topic-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topic-options.d.ts","sourceRoot":"","sources":["../../src/options/topic-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,yFAAyF;IACzF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topic-options.js","sourceRoot":"","sources":["../../src/options/topic-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IntegrationEvent } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { OutgoingRecord } from '../codec/outgoing-record.js';
|
|
3
|
+
import type { Routing } from '../codec/routing.js';
|
|
4
|
+
import type { BrokerLink } from '../connection/broker-link.js';
|
|
5
|
+
import type { TopicDescription } from '../topology/topic-description.js';
|
|
6
|
+
export interface PublicationSettings {
|
|
7
|
+
readonly routing: Routing;
|
|
8
|
+
readonly describe: (topic: string) => TopicDescription;
|
|
9
|
+
readonly failed: (code: string) => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Publishing with an idempotent producer and `acks=all`: a publication succeeds only once
|
|
13
|
+
* every in-sync replica has the record, which is what lets an outbox relay mark it published.
|
|
14
|
+
*/
|
|
15
|
+
export declare class Publications {
|
|
16
|
+
private readonly link;
|
|
17
|
+
private readonly settings;
|
|
18
|
+
private producer;
|
|
19
|
+
constructor(link: BrokerLink, settings: PublicationSettings);
|
|
20
|
+
/** Resolves when every event is acknowledged; rejects with the first failure otherwise. */
|
|
21
|
+
publish(events: readonly IntegrationEvent[]): Promise<void>;
|
|
22
|
+
/** One record to a topic that exists, acknowledged like a publication. */
|
|
23
|
+
send({ topic, message }: OutgoingRecord): Promise<void>;
|
|
24
|
+
/** Lets the acknowledgements in flight arrive, then disconnects. */
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
private deliver;
|
|
27
|
+
private connected;
|
|
28
|
+
private drop;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=publications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publications.d.ts","sourceRoot":"","sources":["../../src/publication/publications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAK/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,gBAAgB,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAQD;;;GAGG;AACH,qBAAa,YAAY;IAIrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,OAAO,CAAC,QAAQ,CAAwC;IAExD,YACmB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,mBAAmB,EAC5C;IAEJ,2FAA2F;IACrF,OAAO,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhE;IAED,0EAA0E;IACpE,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;IAED,oEAAoE;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3B;YAEa,OAAO;YAcP,SAAS;IAavB,OAAO,CAAC,IAAI;CAIb"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { encode } from '../codec/encode.js';
|
|
2
|
+
import { failureCode } from '../errors/failure-code.js';
|
|
3
|
+
import { PublishNotAcknowledgedError } from '../errors/publish-not-acknowledged-error.js';
|
|
4
|
+
import { reasonOf } from '../errors/reason-of.js';
|
|
5
|
+
import { ignore } from '../ignore.js';
|
|
6
|
+
/**
|
|
7
|
+
* Publishing with an idempotent producer and `acks=all`: a publication succeeds only once
|
|
8
|
+
* every in-sync replica has the record, which is what lets an outbox relay mark it published.
|
|
9
|
+
*/
|
|
10
|
+
export class Publications {
|
|
11
|
+
link;
|
|
12
|
+
settings;
|
|
13
|
+
producer;
|
|
14
|
+
constructor(link, settings) {
|
|
15
|
+
this.link = link;
|
|
16
|
+
this.settings = settings;
|
|
17
|
+
}
|
|
18
|
+
/** Resolves when every event is acknowledged; rejects with the first failure otherwise. */
|
|
19
|
+
async publish(events) {
|
|
20
|
+
const sends = sendsOf(events, this.settings.routing);
|
|
21
|
+
await this.link.declare(sends.map((send) => this.settings.describe(send.topic)));
|
|
22
|
+
const outcomes = await Promise.allSettled(sends.map((send) => this.deliver(send)));
|
|
23
|
+
for (const outcome of outcomes) {
|
|
24
|
+
if (outcome.status === 'rejected') {
|
|
25
|
+
throw outcome.reason;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** One record to a topic that exists, acknowledged like a publication. */
|
|
30
|
+
async send({ topic, message }) {
|
|
31
|
+
await this.deliver({ topic, messages: [message], eventIds: [] });
|
|
32
|
+
}
|
|
33
|
+
/** Lets the acknowledgements in flight arrive, then disconnects. */
|
|
34
|
+
async close() {
|
|
35
|
+
const producer = await this.producer?.catch(ignore);
|
|
36
|
+
this.producer = undefined;
|
|
37
|
+
await producer?.disconnect().catch(ignore);
|
|
38
|
+
}
|
|
39
|
+
async deliver({ topic, messages, eventIds }) {
|
|
40
|
+
const producer = await this.connected();
|
|
41
|
+
try {
|
|
42
|
+
await producer.send({ topic, messages });
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (isFatal(error)) {
|
|
46
|
+
this.drop(producer);
|
|
47
|
+
}
|
|
48
|
+
throw new PublishNotAcknowledgedError(eventIds, failureCode(error));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async connected() {
|
|
52
|
+
this.producer ??= this.link.connected(this.link.producer());
|
|
53
|
+
try {
|
|
54
|
+
return await this.producer;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
this.producer = undefined;
|
|
58
|
+
this.settings.failed(reasonOf(error));
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// After a fatal error the producer refuses every send: the next publication opens another.
|
|
63
|
+
drop(producer) {
|
|
64
|
+
this.producer = undefined;
|
|
65
|
+
void producer.disconnect().catch(ignore);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** One send per topic, in the order of the batch: the records of a key keep their order. */
|
|
69
|
+
function sendsOf(events, routing) {
|
|
70
|
+
const sends = new Map();
|
|
71
|
+
for (const event of events) {
|
|
72
|
+
const { topic, message } = encode(event, routing);
|
|
73
|
+
const send = sends.get(topic) ?? { topic, messages: [], eventIds: [] };
|
|
74
|
+
send.messages.push(message);
|
|
75
|
+
send.eventIds.push(event.id);
|
|
76
|
+
sends.set(topic, send);
|
|
77
|
+
}
|
|
78
|
+
return [...sends.values()];
|
|
79
|
+
}
|
|
80
|
+
function isFatal(error) {
|
|
81
|
+
return typeof error === 'object' && error !== null && 'fatal' in error && error.fatal === true;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=publications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publications.js","sourceRoot":"","sources":["../../src/publication/publications.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { BrokerLink } from '../connection/broker-link.js';
|
|
2
|
+
import type { Publications } from '../publication/publications.js';
|
|
3
|
+
export interface ReplayPlan {
|
|
4
|
+
readonly consumer: string;
|
|
5
|
+
/** The topic the dead letters came from and go back to. */
|
|
6
|
+
readonly topic: string;
|
|
7
|
+
readonly limit: number;
|
|
8
|
+
/** How long the replay may take before it returns what it moved so far. */
|
|
9
|
+
readonly timeoutMs: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Copies dead letters back to the topic they came from, marked for the one consumer that
|
|
13
|
+
* gave up on them. The offsets the replay group commits on the dead-letter topic are the
|
|
14
|
+
* record of what was replayed: the lag of that group is the number of dead letters waiting.
|
|
15
|
+
*/
|
|
16
|
+
export declare class DeadLetterReplay {
|
|
17
|
+
private readonly link;
|
|
18
|
+
private readonly publications;
|
|
19
|
+
private readonly plan;
|
|
20
|
+
private readonly dead;
|
|
21
|
+
private readonly group;
|
|
22
|
+
private replayed;
|
|
23
|
+
constructor(link: BrokerLink, publications: Publications, plan: ReplayPlan);
|
|
24
|
+
/** Returns how many records were moved. */
|
|
25
|
+
run(): Promise<number>;
|
|
26
|
+
private waiting;
|
|
27
|
+
private moved;
|
|
28
|
+
/** Acknowledged copy first, commit second: a crash in between replays the record twice. */
|
|
29
|
+
private move;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=dead-letter-replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-letter-replay.d.ts","sourceRoot":"","sources":["../../src/replay/dead-letter-replay.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAInE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAQzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAK;IAErB,YACmB,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,UAAU,EAIlC;IAED,2CAA2C;IACrC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAiB3B;YAEa,OAAO;IAiBrB,OAAO,CAAC,KAAK;IA0Bb,2FAA2F;YAC7E,IAAI;CAenB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { REPLAY_FOR_HEADER } from '../codec/headers.js';
|
|
2
|
+
import { republication } from '../codec/republication.js';
|
|
3
|
+
import { ignore } from '../ignore.js';
|
|
4
|
+
import { deadTopicOf } from '../topology/dead-topic-of.js';
|
|
5
|
+
import { replayGroupOf } from '../topology/replay-group-of.js';
|
|
6
|
+
/**
|
|
7
|
+
* Copies dead letters back to the topic they came from, marked for the one consumer that
|
|
8
|
+
* gave up on them. The offsets the replay group commits on the dead-letter topic are the
|
|
9
|
+
* record of what was replayed: the lag of that group is the number of dead letters waiting.
|
|
10
|
+
*/
|
|
11
|
+
export class DeadLetterReplay {
|
|
12
|
+
link;
|
|
13
|
+
publications;
|
|
14
|
+
plan;
|
|
15
|
+
dead;
|
|
16
|
+
group;
|
|
17
|
+
replayed = 0;
|
|
18
|
+
constructor(link, publications, plan) {
|
|
19
|
+
this.link = link;
|
|
20
|
+
this.publications = publications;
|
|
21
|
+
this.plan = plan;
|
|
22
|
+
this.dead = deadTopicOf(plan.consumer, plan.topic);
|
|
23
|
+
this.group = replayGroupOf(plan.consumer);
|
|
24
|
+
}
|
|
25
|
+
/** Returns how many records were moved. */
|
|
26
|
+
async run() {
|
|
27
|
+
const target = Math.min(this.plan.limit, await this.waiting());
|
|
28
|
+
if (target <= 0) {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
const client = await this.link.connected(this.link.consumer(this.group, ignore));
|
|
32
|
+
try {
|
|
33
|
+
await client.subscribe({ topics: [this.dead] });
|
|
34
|
+
await this.moved(client, target);
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
await client.disconnect().catch(ignore);
|
|
38
|
+
}
|
|
39
|
+
return this.replayed;
|
|
40
|
+
}
|
|
41
|
+
async waiting() {
|
|
42
|
+
const admin = await this.link.admin();
|
|
43
|
+
const ends = await this.link.answered(admin.fetchTopicOffsets(this.dead));
|
|
44
|
+
const groupId = this.group;
|
|
45
|
+
const [committed] = await this.link.answered(admin.fetchOffsets({ groupId, topics: [this.dead] }));
|
|
46
|
+
const positions = new Map(committed?.partitions.map(({ partition, offset }) => [partition, BigInt(offset)]));
|
|
47
|
+
let waiting = 0n;
|
|
48
|
+
for (const { partition, high, low } of ends) {
|
|
49
|
+
const position = positions.get(partition) ?? -1n;
|
|
50
|
+
waiting += BigInt(high) - (position < BigInt(low) ? BigInt(low) : position);
|
|
51
|
+
}
|
|
52
|
+
return Number(waiting);
|
|
53
|
+
}
|
|
54
|
+
moved(client, target) {
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
const timer = setTimeout(resolve, this.plan.timeoutMs);
|
|
57
|
+
const finished = () => {
|
|
58
|
+
clearTimeout(timer);
|
|
59
|
+
resolve();
|
|
60
|
+
};
|
|
61
|
+
const eachMessage = async (delivery) => {
|
|
62
|
+
const moved = this.replayed < target && (await this.move(client, delivery));
|
|
63
|
+
if (this.replayed >= target || !moved) {
|
|
64
|
+
finished();
|
|
65
|
+
}
|
|
66
|
+
if (!moved) {
|
|
67
|
+
delivery.pause();
|
|
68
|
+
throw new ReplayStopped();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
void client.run({ eachMessage }).catch(finished);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/** Acknowledged copy first, commit second: a crash in between replays the record twice. */
|
|
75
|
+
async move(client, delivery) {
|
|
76
|
+
const { topic, partition, message } = delivery;
|
|
77
|
+
const marked = { [REPLAY_FOR_HEADER]: this.plan.consumer };
|
|
78
|
+
try {
|
|
79
|
+
await this.publications.send(republication(delivery, this.plan.topic, marked));
|
|
80
|
+
await client.commitOffsets([{ topic, partition, offset: String(BigInt(message.offset) + 1n) }]);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
this.replayed += 1;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Tells the client to leave the record where it is; the partition was paused beforehand. */
|
|
90
|
+
class ReplayStopped extends Error {
|
|
91
|
+
code = 'REPLAY_STOPPED';
|
|
92
|
+
constructor() {
|
|
93
|
+
super('The replay is over');
|
|
94
|
+
this.name = 'ReplayStopped';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=dead-letter-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-letter-replay.js","sourceRoot":"","sources":["../../src/replay/dead-letter-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Takes the fields an instance holds so far out of enumeration: `Object.keys`, a spread and a
|
|
3
|
+
* comparison no longer reach the client or the connection behind them, whose options carry
|
|
4
|
+
* credentials. Called last in a constructor, next to a `toJSON` and an inspection method that
|
|
5
|
+
* answer a name: nothing the instance is shown through leads to what it holds.
|
|
6
|
+
*/
|
|
7
|
+
export declare function conceal(instance: object): void;
|
|
8
|
+
//# sourceMappingURL=conceal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conceal.d.ts","sourceRoot":"","sources":["../../src/secrecy/conceal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI9C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Takes the fields an instance holds so far out of enumeration: `Object.keys`, a spread and a
|
|
3
|
+
* comparison no longer reach the client or the connection behind them, whose options carry
|
|
4
|
+
* credentials. Called last in a constructor, next to a `toJSON` and an inspection method that
|
|
5
|
+
* answer a name: nothing the instance is shown through leads to what it holds.
|
|
6
|
+
*/
|
|
7
|
+
export function conceal(instance) {
|
|
8
|
+
for (const field of Object.keys(instance)) {
|
|
9
|
+
Object.defineProperty(instance, field, { enumerable: false });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=conceal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conceal.js","sourceRoot":"","sources":["../../src/secrecy/conceal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,QAAgB;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-binding.d.ts","sourceRoot":"","sources":["../../src/topology/consumer-binding.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-binding.js","sourceRoot":"","sources":["../../src/topology/consumer-binding.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-topic-of.d.ts","sourceRoot":"","sources":["../../src/topology/dead-topic-of.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-topic-of.js","sourceRoot":"","sources":["../../src/topology/dead-topic-of.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAa;IACzD,OAAO,GAAG,QAAQ,IAAI,KAAK,OAAO,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TopicDescription } from './topic-description.js';
|
|
2
|
+
import type { TopologySettings } from './topology-settings.js';
|
|
3
|
+
/** A topic with the partitions and the replication the bus creates its topics with. */
|
|
4
|
+
export declare function describeTopic(settings: Pick<TopologySettings, 'partitions' | 'replicationFactor'>, name: string, role: TopicDescription['role']): TopicDescription;
|
|
5
|
+
//# sourceMappingURL=describe-topic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-topic.d.ts","sourceRoot":"","sources":["../../src/topology/describe-topic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,uFAAuF;AACvF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,mBAAmB,CAAC,EACpE,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAC7B,gBAAgB,CAElB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** A topic with the partitions and the replication the bus creates its topics with. */
|
|
2
|
+
export function describeTopic(settings, name, role) {
|
|
3
|
+
return { name, role, partitions: settings.partitions, replicationFactor: settings.replicationFactor };
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=describe-topic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-topic.js","sourceRoot":"","sources":["../../src/topology/describe-topic.ts"],"names":[],"mappings":"AAGA,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAC3B,QAAoE,EACpE,IAAY,EACZ,IAA8B;IAE9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC;AACxG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-description.d.ts","sourceRoot":"","sources":["../../src/topology/group-description.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-description.js","sourceRoot":"","sources":["../../src/topology/group-description.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GroupDescription } from './group-description.js';
|
|
2
|
+
import type { TopicDescription } from './topic-description.js';
|
|
3
|
+
/** Everything the bus creates or joins on the cluster, as data: for documentation and reviews. */
|
|
4
|
+
export interface KafkaTopology {
|
|
5
|
+
readonly topics: readonly TopicDescription[];
|
|
6
|
+
readonly groups: readonly GroupDescription[];
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=kafka-topology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-topology.d.ts","sourceRoot":"","sources":["../../src/topology/kafka-topology.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,kGAAkG;AAClG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-topology.js","sourceRoot":"","sources":["../../src/topology/kafka-topology.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-group-of.d.ts","sourceRoot":"","sources":["../../src/topology/replay-group-of.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-group-of.js","sourceRoot":"","sources":["../../src/topology/replay-group-of.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,GAAG,QAAQ,SAAS,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface TopicDescription {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
/** `events` carries the events of one or several types, `dead` keeps what a consumer gave up on. */
|
|
4
|
+
readonly role: 'events' | 'dead';
|
|
5
|
+
/** -1: the default of the broker. */
|
|
6
|
+
readonly partitions: number;
|
|
7
|
+
/** -1: the default of the broker. */
|
|
8
|
+
readonly replicationFactor: number;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=topic-description.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topic-description.d.ts","sourceRoot":"","sources":["../../src/topology/topic-description.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oGAAoG;IACpG,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACjC,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topic-description.js","sourceRoot":"","sources":["../../src/topology/topic-description.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ConsumerBinding } from './consumer-binding.js';
|
|
2
|
+
import type { KafkaTopology } from './kafka-topology.js';
|
|
3
|
+
import type { TopologySettings } from './topology-settings.js';
|
|
4
|
+
export declare function topologyOf(settings: TopologySettings, bindings: readonly ConsumerBinding[]): KafkaTopology;
|
|
5
|
+
//# sourceMappingURL=topology-of.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-of.d.ts","sourceRoot":"","sources":["../../src/topology/topology-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,aAAa,CAiB1G"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { deadTopicOf } from './dead-topic-of.js';
|
|
2
|
+
import { describeTopic } from './describe-topic.js';
|
|
3
|
+
export function topologyOf(settings, bindings) {
|
|
4
|
+
const consumed = bindings.map(({ consumer, type }) => ({ consumer, topic: settings.topicOf(type) }));
|
|
5
|
+
const names = new Map();
|
|
6
|
+
for (const type of settings.publishedTypes) {
|
|
7
|
+
names.set(settings.topicOf(type), 'events');
|
|
8
|
+
}
|
|
9
|
+
for (const { consumer, topic } of consumed) {
|
|
10
|
+
names.set(topic, 'events');
|
|
11
|
+
names.set(deadTopicOf(consumer, topic), 'dead');
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
topics: [...names].map(([name, role]) => describeTopic(settings, name, role)),
|
|
15
|
+
groups: groupsOf(consumed),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function groupsOf(consumed) {
|
|
19
|
+
const topics = new Map();
|
|
20
|
+
for (const { consumer, topic } of consumed) {
|
|
21
|
+
topics.set(consumer, (topics.get(consumer) ?? new Set()).add(topic));
|
|
22
|
+
}
|
|
23
|
+
return [...topics].map(([groupId, names]) => ({ groupId, topics: [...names] }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=topology-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-of.js","sourceRoot":"","sources":["../../src/topology/topology-of.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,MAAM,UAAU,UAAU,CAAC,QAA0B,EAAE,QAAoC;IACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE1D,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC3C,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC3C,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7E,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,QAAwD;IACxE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,KAAK,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-settings.d.ts","sourceRoot":"","sources":["../../src/topology/topology-settings.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-settings.js","sourceRoot":"","sources":["../../src/topology/topology-settings.ts"],"names":[],"mappings":""}
|