@rsdk/kafka.common 4.0.0-next.0 → 4.0.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/dist/client/constants.d.ts +2 -0
- package/dist/client/constants.js +6 -0
- package/dist/client/constants.js.map +1 -0
- package/dist/client/decorators/inject-kafka.decorator.d.ts +1 -0
- package/dist/client/decorators/inject-kafka.decorator.js +8 -0
- package/dist/client/decorators/inject-kafka.decorator.js.map +1 -0
- package/dist/client/decorators/inject-producer.decorator.d.ts +1 -0
- package/dist/client/decorators/inject-producer.decorator.js +8 -0
- package/dist/client/decorators/inject-producer.decorator.js.map +1 -0
- package/dist/client/kafka-client.module.js +7 -6
- package/dist/client/kafka-client.module.js.map +1 -1
- package/dist/client/kafka.base-indicator.d.ts +10 -0
- package/dist/client/{kafka.healthcheck.js → kafka.base-indicator.js} +18 -18
- package/dist/client/kafka.base-indicator.js.map +1 -0
- package/dist/client/kafka.config.js +2 -1
- package/dist/client/kafka.config.js.map +1 -1
- package/dist/{metadata → client}/kafka.metadata.d.ts +9 -5
- package/dist/client/kafka.metadata.js +10 -0
- package/dist/client/kafka.metadata.js.map +1 -0
- package/dist/client/providers/kafka-producer.provider.d.ts +2 -0
- package/dist/client/providers/kafka-producer.provider.js +19 -0
- package/dist/client/providers/kafka-producer.provider.js.map +1 -0
- package/dist/client/providers/kafka.provider.d.ts +2 -0
- package/dist/client/providers/kafka.provider.js +24 -0
- package/dist/client/providers/kafka.provider.js.map +1 -0
- package/dist/client/providers/topics.service.d.ts +8 -0
- package/dist/{metadata/kafka-metadata.provider.js → client/providers/topics.service.js} +15 -21
- package/dist/client/providers/topics.service.js.map +1 -0
- package/dist/event.type.d.ts +13 -0
- package/dist/event.type.js +6 -0
- package/dist/event.type.js.map +1 -1
- package/dist/exceptions/missing-topics.exception.d.ts +12 -0
- package/dist/exceptions/missing-topics.exception.js +21 -0
- package/dist/exceptions/missing-topics.exception.js.map +1 -0
- package/dist/exceptions/payload-format.exception.d.ts +5 -0
- package/dist/exceptions/payload-format.exception.js +11 -0
- package/dist/exceptions/payload-format.exception.js.map +1 -0
- package/dist/exceptions/unknown-kafka.exception.d.ts +4 -0
- package/dist/exceptions/unknown-kafka.exception.js +17 -0
- package/dist/exceptions/unknown-kafka.exception.js.map +1 -0
- package/dist/index.d.ts +14 -10
- package/dist/index.js +24 -19
- package/dist/index.js.map +1 -1
- package/dist/payload-format.d.ts +21 -0
- package/dist/payload-format.js +32 -1
- package/dist/payload-format.js.map +1 -1
- package/dist/{create-logger-adapter.fn.d.ts → utils/create-logger-adapter.fn.d.ts} +3 -0
- package/dist/{create-logger-adapter.fn.js → utils/create-logger-adapter.fn.js} +3 -0
- package/dist/utils/create-logger-adapter.fn.js.map +1 -0
- package/dist/utils/event.codec.d.ts +22 -0
- package/dist/utils/event.codec.js +32 -0
- package/dist/utils/event.codec.js.map +1 -0
- package/dist/utils/handle-kafka.error.fn.d.ts +1 -0
- package/dist/utils/handle-kafka.error.fn.js +15 -0
- package/dist/utils/handle-kafka.error.fn.js.map +1 -0
- package/dist/utils/retry-policy.infinite.d.ts +2 -0
- package/dist/{retry-policy.js → utils/retry-policy.infinite.js} +3 -3
- package/dist/utils/retry-policy.infinite.js.map +1 -0
- package/package.json +10 -8
- package/src/client/constants.ts +2 -0
- package/src/client/decorators/inject-kafka.decorator.ts +6 -0
- package/src/client/decorators/inject-producer.decorator.ts +6 -0
- package/src/client/kafka-client.module.ts +5 -6
- package/src/client/{kafka.healthcheck.ts → kafka.base-indicator.ts} +17 -18
- package/src/{metadata → client}/kafka.metadata.ts +12 -5
- package/src/client/providers/kafka-producer.provider.ts +23 -0
- package/src/client/providers/kafka.provider.ts +24 -0
- package/src/client/providers/topics.service.ts +23 -0
- package/src/event.type.ts +16 -0
- package/src/exceptions/missing-topics.exception.ts +19 -0
- package/src/exceptions/payload-format.exception.ts +10 -0
- package/src/exceptions/unknown-kafka.exception.ts +13 -0
- package/src/index.ts +20 -12
- package/src/payload-format.ts +38 -0
- package/src/{create-logger-adapter.fn.ts → utils/create-logger-adapter.fn.ts} +3 -0
- package/src/utils/event.codec.ts +34 -0
- package/src/utils/handle-kafka.error.fn.ts +17 -0
- package/src/utils/retry-policy.infinite.ts +8 -0
- package/tsconfig.json +0 -1
- package/dist/client/kafka.client.d.ts +0 -7
- package/dist/client/kafka.client.js +0 -43
- package/dist/client/kafka.client.js.map +0 -1
- package/dist/client/kafka.healthcheck.d.ts +0 -9
- package/dist/client/kafka.healthcheck.js.map +0 -1
- package/dist/create-logger-adapter.fn.js.map +0 -1
- package/dist/exception.d.ts +0 -32
- package/dist/exception.js +0 -61
- package/dist/exception.js.map +0 -1
- package/dist/exceptions/payload-format-validator.exception.d.ts +0 -4
- package/dist/exceptions/payload-format-validator.exception.js +0 -30
- package/dist/exceptions/payload-format-validator.exception.js.map +0 -1
- package/dist/metadata/kafka-metadata.module.d.ts +0 -2
- package/dist/metadata/kafka-metadata.module.js +0 -20
- package/dist/metadata/kafka-metadata.module.js.map +0 -1
- package/dist/metadata/kafka-metadata.provider.d.ts +0 -8
- package/dist/metadata/kafka-metadata.provider.js.map +0 -1
- package/dist/metadata/kafka.metadata.js +0 -10
- package/dist/metadata/kafka.metadata.js.map +0 -1
- package/dist/retry-policy.d.ts +0 -6
- package/dist/retry-policy.js.map +0 -1
- package/dist/validators/payload-format.validator.d.ts +0 -3
- package/dist/validators/payload-format.validator.js +0 -14
- package/dist/validators/payload-format.validator.js.map +0 -1
- package/src/client/kafka.client.ts +0 -49
- package/src/exception.ts +0 -67
- package/src/exceptions/payload-format-validator.exception.ts +0 -17
- package/src/metadata/kafka-metadata.module.ts +0 -9
- package/src/metadata/kafka-metadata.provider.ts +0 -36
- package/src/retry-policy.ts +0 -6
- package/src/validators/payload-format.validator.ts +0 -18
package/src/index.ts
CHANGED
|
@@ -1,31 +1,39 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { KafkaTopicMetadataByEventType } from './client/kafka.metadata';
|
|
2
2
|
|
|
3
|
+
export { InjectKafka } from './client/decorators/inject-kafka.decorator';
|
|
4
|
+
export { InjectKafkaProducer } from './client/decorators/inject-producer.decorator';
|
|
3
5
|
export {
|
|
4
6
|
KAFKA_PRODUCER_INJECTION_TOKEN,
|
|
5
7
|
KAFKA_CLIENT_INJECTION_TOKEN,
|
|
6
|
-
} from './client/
|
|
8
|
+
} from './client/constants';
|
|
9
|
+
export { INFINITE_RETRIES } from './utils/retry-policy.infinite';
|
|
10
|
+
export { EventPayload } from './event.type';
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
ProtoEventCodec,
|
|
14
|
+
EventCodec,
|
|
15
|
+
JSONEventCodec,
|
|
16
|
+
} from './utils/event.codec';
|
|
7
17
|
|
|
8
18
|
export { KafkaClientModule } from './client/kafka-client.module';
|
|
9
19
|
|
|
10
20
|
export { KafkaConfig } from './client/kafka.config';
|
|
11
21
|
|
|
12
|
-
export {
|
|
13
|
-
|
|
14
|
-
export { KafkaMetadataProvider } from './metadata/kafka-metadata.provider';
|
|
22
|
+
export { TopicsService } from './client/providers/topics.service';
|
|
15
23
|
export {
|
|
16
24
|
KAFKA_TOPIC_RSDK_METADATA_SCOPE,
|
|
17
25
|
KafkaTopicMetadata,
|
|
18
|
-
|
|
19
|
-
} from './
|
|
26
|
+
TopicType,
|
|
27
|
+
} from './client/kafka.metadata';
|
|
20
28
|
|
|
21
|
-
export {
|
|
29
|
+
export { handleKafkaError } from './utils/handle-kafka.error.fn';
|
|
22
30
|
|
|
23
|
-
export { createLoggerAdapter } from './create-logger-adapter.fn';
|
|
31
|
+
export { createLoggerAdapter } from './utils/create-logger-adapter.fn';
|
|
24
32
|
|
|
25
33
|
export { getTopicName, isEventType, EventType } from './event.type';
|
|
26
34
|
|
|
27
|
-
export {
|
|
35
|
+
export { KafkaBaseIndicator } from './client/kafka.base-indicator';
|
|
28
36
|
|
|
29
37
|
export * from './payload-format';
|
|
30
|
-
export * from './exceptions/payload-format
|
|
31
|
-
export * from './
|
|
38
|
+
export * from './exceptions/payload-format.exception';
|
|
39
|
+
export * from './exceptions/missing-topics.exception';
|
package/src/payload-format.ts
CHANGED
|
@@ -1,8 +1,46 @@
|
|
|
1
|
+
import { Enum } from '@rsdk/common';
|
|
2
|
+
|
|
3
|
+
import { PayloadFormatException } from './exceptions/payload-format.exception';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Способ сериализации данных события
|
|
7
|
+
*/
|
|
1
8
|
export enum PayloadFormat {
|
|
2
9
|
PROTOBUF = 'protobuf',
|
|
3
10
|
JSON = 'json',
|
|
4
11
|
}
|
|
5
12
|
|
|
13
|
+
const allowed = Enum.values(PayloadFormat);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Проверяет, является ли переданная строка - одним
|
|
17
|
+
* из значений перечисления PayloadFormat
|
|
18
|
+
*/
|
|
19
|
+
export const isPayloadFormat = (value: string): value is PayloadFormat =>
|
|
20
|
+
allowed.includes(value);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Проверяет, является ли переданная строка - одним
|
|
24
|
+
* из значений перечисления PayloadFormat. В случае,
|
|
25
|
+
* если передано неверное значение - бросает ошибку
|
|
26
|
+
*/
|
|
27
|
+
export const assertIsPayloadFormat = (
|
|
28
|
+
value: string,
|
|
29
|
+
): asserts value is PayloadFormat => {
|
|
30
|
+
if (isPayloadFormat(value)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
throw new PayloadFormatException(value, allowed);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Заголовок в kafka, через который передаётся способ
|
|
39
|
+
* сериализации
|
|
40
|
+
*/
|
|
6
41
|
export const X_FORMAT_HEADER = 'X-Format';
|
|
7
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Сериализация по умолчанию (protobuf)
|
|
45
|
+
*/
|
|
8
46
|
export const DEFAULT_PAYLOAD_FORMAT = PayloadFormat.PROTOBUF;
|
|
@@ -3,6 +3,9 @@ import type { ILogger } from '@rsdk/logging';
|
|
|
3
3
|
import type { logCreator, LogEntry } from 'kafkajs';
|
|
4
4
|
import { logLevel } from 'kafkajs';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Creates adapter for injecting rsdk logger to kafkajs
|
|
8
|
+
*/
|
|
6
9
|
export const createLoggerAdapter =
|
|
7
10
|
(logger: ILogger): logCreator =>
|
|
8
11
|
(_logLevel: logLevel) =>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { EventPayload, EventType } from '../event.type';
|
|
2
|
+
|
|
3
|
+
export interface EventCodec<E extends EventType> {
|
|
4
|
+
decode<P extends EventPayload<E> = EventPayload<E>>(buffer: Buffer): P;
|
|
5
|
+
encode<P extends EventPayload<E> = EventPayload<E>>(payload: P): Buffer;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Protobuf-encoding strategy
|
|
10
|
+
*/
|
|
11
|
+
export class ProtoEventCodec<E extends EventType> implements EventCodec<E> {
|
|
12
|
+
constructor(readonly eventType: E) {}
|
|
13
|
+
|
|
14
|
+
decode<P extends EventPayload<E>>(buffer: Buffer): P {
|
|
15
|
+
return this.eventType.decode(buffer);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
encode<P extends EventPayload<E>>(payload: P): Buffer {
|
|
19
|
+
return Buffer.from(this.eventType.encode(payload).finish());
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* JSON-encoding strategy
|
|
25
|
+
*/
|
|
26
|
+
export class JSONEventCodec<E extends EventType> implements EventCodec<E> {
|
|
27
|
+
decode<P extends EventPayload<E>>(buffer: Buffer): P {
|
|
28
|
+
return JSON.parse(buffer.toString());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
encode<P extends EventPayload<E>>(payload: P): Buffer {
|
|
32
|
+
return Buffer.from(JSON.stringify(payload));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { KafkaJSProtocolError } from 'kafkajs';
|
|
2
|
+
|
|
3
|
+
import { MissingTopicsException } from '../exceptions/missing-topics.exception';
|
|
4
|
+
import { UnknownKafkaException } from '../exceptions/unknown-kafka.exception';
|
|
5
|
+
|
|
6
|
+
export const handleKafkaError = (
|
|
7
|
+
error: unknown,
|
|
8
|
+
pattern: string,
|
|
9
|
+
details?: unknown,
|
|
10
|
+
): never => {
|
|
11
|
+
// https://github.com/tulios/kafkajs/blob/master/src/protocol/error.js#L26
|
|
12
|
+
if (!(error instanceof KafkaJSProtocolError) || error.code !== 3) {
|
|
13
|
+
throw new UnknownKafkaException(error, pattern, details);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
throw new MissingTopicsException([pattern], { cause: error, details });
|
|
17
|
+
};
|
package/tsconfig.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { FactoryProvider } from '@nestjs/common';
|
|
2
|
-
export declare const KAFKA_CLIENT_INJECTION_TOKEN: unique symbol;
|
|
3
|
-
export declare const KAFKA_PRODUCER_INJECTION_TOKEN: unique symbol;
|
|
4
|
-
export declare const InjectKafka: () => ParameterDecorator;
|
|
5
|
-
export declare const InjectKafkaProducer: () => ParameterDecorator;
|
|
6
|
-
export declare const KafkaClient: FactoryProvider;
|
|
7
|
-
export declare const KafkaProducer: FactoryProvider;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KafkaProducer = exports.KafkaClient = exports.InjectKafkaProducer = exports.InjectKafka = exports.KAFKA_PRODUCER_INJECTION_TOKEN = exports.KAFKA_CLIENT_INJECTION_TOKEN = void 0;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const core_1 = require("@rsdk/core");
|
|
6
|
-
const logging_1 = require("@rsdk/logging");
|
|
7
|
-
const kafkajs_1 = require("kafkajs");
|
|
8
|
-
const create_logger_adapter_fn_1 = require("../create-logger-adapter.fn");
|
|
9
|
-
const retry_policy_1 = require("../retry-policy");
|
|
10
|
-
const kafka_config_1 = require("./kafka.config");
|
|
11
|
-
exports.KAFKA_CLIENT_INJECTION_TOKEN = Symbol('KafkaClient');
|
|
12
|
-
exports.KAFKA_PRODUCER_INJECTION_TOKEN = Symbol('KafkaProducer');
|
|
13
|
-
const InjectKafka = () => (0, common_1.Inject)(exports.KAFKA_CLIENT_INJECTION_TOKEN);
|
|
14
|
-
exports.InjectKafka = InjectKafka;
|
|
15
|
-
const InjectKafkaProducer = () => (0, common_1.Inject)(exports.KAFKA_PRODUCER_INJECTION_TOKEN);
|
|
16
|
-
exports.InjectKafkaProducer = InjectKafkaProducer;
|
|
17
|
-
exports.KafkaClient = {
|
|
18
|
-
inject: [kafka_config_1.KafkaConfig, core_1.APP_NAME],
|
|
19
|
-
provide: exports.KAFKA_CLIENT_INJECTION_TOKEN,
|
|
20
|
-
useFactory(config, name) {
|
|
21
|
-
const logger = logging_1.LoggerFactory.create('NativeKafkaProducer');
|
|
22
|
-
return new kafkajs_1.Kafka({
|
|
23
|
-
clientId: `${name}-${process.pid}`,
|
|
24
|
-
brokers: config.brokers,
|
|
25
|
-
logCreator: (0, create_logger_adapter_fn_1.createLoggerAdapter)(logger),
|
|
26
|
-
retry: retry_policy_1.retryPolicy,
|
|
27
|
-
});
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
exports.KafkaProducer = {
|
|
31
|
-
inject: [exports.KAFKA_CLIENT_INJECTION_TOKEN],
|
|
32
|
-
provide: exports.KAFKA_PRODUCER_INJECTION_TOKEN,
|
|
33
|
-
async useFactory(kafka) {
|
|
34
|
-
const producer = kafka.producer({
|
|
35
|
-
allowAutoTopicCreation: false,
|
|
36
|
-
createPartitioner: kafkajs_1.Partitioners.DefaultPartitioner,
|
|
37
|
-
retry: { retries: 1 },
|
|
38
|
-
});
|
|
39
|
-
await producer.connect();
|
|
40
|
-
return { ...producer, onModuleDestroy: () => producer.disconnect() };
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=kafka.client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kafka.client.js","sourceRoot":"","sources":["../../src/client/kafka.client.ts"],"names":[],"mappings":";;;AACA,2CAAwC;AACxC,qCAAsC;AACtC,2CAA8C;AAE9C,qCAA8C;AAE9C,0EAAkE;AAClE,kDAA8C;AAE9C,iDAA6C;AAEhC,QAAA,4BAA4B,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACrD,QAAA,8BAA8B,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAE/D,MAAM,WAAW,GAAG,GAAuB,EAAE,CAClD,IAAA,eAAM,EAAC,oCAA4B,CAAC,CAAC;AAD1B,QAAA,WAAW,eACe;AAChC,MAAM,mBAAmB,GAAG,GAAuB,EAAE,CAC1D,IAAA,eAAM,EAAC,sCAA8B,CAAC,CAAC;AAD5B,QAAA,mBAAmB,uBACS;AAE5B,QAAA,WAAW,GAAoB;IAC1C,MAAM,EAAE,CAAC,0BAAW,EAAE,eAAQ,CAAC;IAC/B,OAAO,EAAE,oCAA4B;IACrC,UAAU,CAAC,MAAmB,EAAE,IAAY;QAC1C,MAAM,MAAM,GAAG,uBAAa,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAE3D,OAAO,IAAI,eAAK,CAAC;YACf,QAAQ,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,IAAA,8CAAmB,EAAC,MAAM,CAAC;YACvC,KAAK,EAAE,0BAAW;SACnB,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEW,QAAA,aAAa,GAAoB;IAC5C,MAAM,EAAE,CAAC,oCAA4B,CAAC;IACtC,OAAO,EAAE,sCAA8B;IACvC,KAAK,CAAC,UAAU,CAAC,KAAY;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC9B,sBAAsB,EAAE,KAAK;YAC7B,iBAAiB,EAAE,sBAAY,CAAC,kBAAkB;YAClD,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACtB,CAAC,CAAC;QAEH,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,GAAG,QAAQ,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;IACvE,CAAC;CACF,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { CheckResult } from '@rsdk/core';
|
|
2
|
-
import type { Kafka } from 'kafkajs';
|
|
3
|
-
export declare class KafkaHealthcheck {
|
|
4
|
-
readonly kafkaClient: Kafka;
|
|
5
|
-
readonly neededTopics: string[];
|
|
6
|
-
constructor(kafkaClient: Kafka, neededTopics: string[]);
|
|
7
|
-
getMissingTopics(): Promise<string[]>;
|
|
8
|
-
check(): Promise<CheckResult>;
|
|
9
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kafka.healthcheck.js","sourceRoot":"","sources":["../../src/client/kafka.healthcheck.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AAGzC,MAAa,gBAAgB;IAEhB;IACA;IAFX,YACW,WAAkB,EAClB,YAAsB;QADtB,gBAAW,GAAX,WAAW,CAAO;QAClB,iBAAY,GAAZ,YAAY,CAAU;IAC9B,CAAC;IAEJ,KAAK,CAAC,gBAAgB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACnC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACtB,CAAC,CAAC;QAEH,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAExC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAC7B,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC/C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI;YACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,OAAO,kBAAW,CAAC,IAAI,CAAC;oBACtB,aAAa;iBACd,CAAC,CAAC;aACJ;YACD,OAAO,kBAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC3B;QAAC,OAAO,KAAc,EAAE;YACvB,OAAO,kBAAW,CAAC,IAAI,CAAC;gBACtB,KAAK,EAAG,KAAe,CAAC,OAAO;aAChC,CAAC,CAAC;SACJ;IACH,CAAC;CACF;AApCD,4CAoCC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-logger-adapter.fn.js","sourceRoot":"","sources":["../src/create-logger-adapter.fn.ts"],"names":[],"mappings":";;;AAAA,yCAA2C;AAG3C,qCAAmC;AAE5B,MAAM,mBAAmB,GAC9B,CAAC,MAAe,EAAc,EAAE,CAChC,CAAC,SAAmB,EAAE,EAAE,CACxB,CAAC,KAAe,EAAQ,EAAE;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC;IACtC,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,GAAG;KACP,CAAC;IAEF,QAAQ,KAAK,CAAC,KAAK,EAAE;QACnB,KAAK,kBAAQ,CAAC,KAAK;YACjB,sFAAsF;YACtF,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,kBAAQ,CAAC,KAAK;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,kBAAQ,CAAC,IAAI;YAChB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,kBAAQ,CAAC,IAAI;YAChB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,kBAAQ,CAAC,OAAO;YACnB,OAAO;QACT;YACE,IAAA,oBAAW,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC5B;AACH,CAAC,CAAC;AAzBS,QAAA,mBAAmB,uBAyB5B"}
|
package/dist/exception.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { InternalException } from '@rsdk/core';
|
|
2
|
-
declare class ServerKafkaException extends InternalException {
|
|
3
|
-
}
|
|
4
|
-
export declare class ServerKafkaExceptionFactory {
|
|
5
|
-
readonly pattern: string;
|
|
6
|
-
readonly props?: {
|
|
7
|
-
details?: unknown;
|
|
8
|
-
cause?: unknown;
|
|
9
|
-
} | undefined;
|
|
10
|
-
constructor(pattern: string, props?: {
|
|
11
|
-
details?: unknown;
|
|
12
|
-
cause?: unknown;
|
|
13
|
-
} | undefined);
|
|
14
|
-
unknown(): UnknownException;
|
|
15
|
-
missingTopics(): MissingTopics;
|
|
16
|
-
wrapAndThrow(error: unknown): never;
|
|
17
|
-
}
|
|
18
|
-
export declare class MissingTopics extends ServerKafkaException {
|
|
19
|
-
readonly topics: string[];
|
|
20
|
-
readonly props?: {
|
|
21
|
-
details?: unknown;
|
|
22
|
-
cause?: unknown;
|
|
23
|
-
} | undefined;
|
|
24
|
-
constructor(topics: string[], props?: {
|
|
25
|
-
details?: unknown;
|
|
26
|
-
cause?: unknown;
|
|
27
|
-
} | undefined);
|
|
28
|
-
}
|
|
29
|
-
export declare class UnknownException extends ServerKafkaException {
|
|
30
|
-
constructor(cause: unknown, pattern: string, details?: unknown);
|
|
31
|
-
}
|
|
32
|
-
export {};
|
package/dist/exception.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UnknownException = exports.MissingTopics = exports.ServerKafkaExceptionFactory = void 0;
|
|
4
|
-
const core_1 = require("@rsdk/core");
|
|
5
|
-
const kafkajs_1 = require("kafkajs");
|
|
6
|
-
class ServerKafkaException extends core_1.InternalException {
|
|
7
|
-
}
|
|
8
|
-
class ServerKafkaExceptionFactory {
|
|
9
|
-
pattern;
|
|
10
|
-
props;
|
|
11
|
-
constructor(pattern, props) {
|
|
12
|
-
this.pattern = pattern;
|
|
13
|
-
this.props = props;
|
|
14
|
-
}
|
|
15
|
-
unknown() {
|
|
16
|
-
return new UnknownException(this.props?.cause, this.pattern, this.props?.details);
|
|
17
|
-
}
|
|
18
|
-
missingTopics() {
|
|
19
|
-
return new MissingTopics([this.pattern], this.props);
|
|
20
|
-
}
|
|
21
|
-
wrapAndThrow(error) {
|
|
22
|
-
if (!(error instanceof kafkajs_1.KafkaJSProtocolError)) {
|
|
23
|
-
throw this.unknown();
|
|
24
|
-
}
|
|
25
|
-
// https://github.com/tulios/kafkajs/blob/master/src/protocol/error.js#L26
|
|
26
|
-
if (error.code === 3) {
|
|
27
|
-
throw this.missingTopics();
|
|
28
|
-
}
|
|
29
|
-
throw this.unknown();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.ServerKafkaExceptionFactory = ServerKafkaExceptionFactory;
|
|
33
|
-
class MissingTopics extends ServerKafkaException {
|
|
34
|
-
topics;
|
|
35
|
-
props;
|
|
36
|
-
constructor(topics, props) {
|
|
37
|
-
super('Expected topics or partitions is missing!', {
|
|
38
|
-
details: {
|
|
39
|
-
topics,
|
|
40
|
-
details: props?.details,
|
|
41
|
-
},
|
|
42
|
-
cause: props?.cause,
|
|
43
|
-
});
|
|
44
|
-
this.topics = topics;
|
|
45
|
-
this.props = props;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.MissingTopics = MissingTopics;
|
|
49
|
-
class UnknownException extends ServerKafkaException {
|
|
50
|
-
constructor(cause, pattern, details) {
|
|
51
|
-
super('Unknown exception from ServerKafka!', {
|
|
52
|
-
details: {
|
|
53
|
-
pattern,
|
|
54
|
-
details: details,
|
|
55
|
-
},
|
|
56
|
-
cause,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
exports.UnknownException = UnknownException;
|
|
61
|
-
//# sourceMappingURL=exception.js.map
|
package/dist/exception.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exception.js","sourceRoot":"","sources":["../src/exception.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAC/C,qCAA+C;AAE/C,MAAM,oBAAqB,SAAQ,wBAAiB;CAAG;AAEvD,MAAa,2BAA2B;IAE3B;IACA;IAFX,YACW,OAAe,EACf,KAGR;QAJQ,YAAO,GAAP,OAAO,CAAQ;QACf,UAAK,GAAL,KAAK,CAGb;IACA,CAAC;IAEJ,OAAO;QACL,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EACjB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,EAAE,OAAO,CACpB,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO,IAAI,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,IAAI,CAAC,CAAC,KAAK,YAAY,8BAAoB,CAAC,EAAE;YAC5C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;SACtB;QACD,0EAA0E;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;YACpB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;SAC5B;QACD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF;AA/BD,kEA+BC;AAED,MAAa,aAAc,SAAQ,oBAAoB;IAE1C;IACA;IAFX,YACW,MAAgB,EAChB,KAGR;QAED,KAAK,CAAC,2CAA2C,EAAE;YACjD,OAAO,EAAE;gBACP,MAAM;gBACN,OAAO,EAAE,KAAK,EAAE,OAAO;aACxB;YACD,KAAK,EAAE,KAAK,EAAE,KAAK;SACpB,CAAC,CAAC;QAZM,WAAM,GAAN,MAAM,CAAU;QAChB,UAAK,GAAL,KAAK,CAGb;IASH,CAAC;CACF;AAhBD,sCAgBC;AAED,MAAa,gBAAiB,SAAQ,oBAAoB;IACxD,YAAY,KAAc,EAAE,OAAe,EAAE,OAAiB;QAC5D,KAAK,CAAC,qCAAqC,EAAE;YAC3C,OAAO,EAAE;gBACP,OAAO;gBACP,OAAO,EAAE,OAAO;aACjB;YACD,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CACF;AAVD,4CAUC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.InvalidPayloadFormatException = void 0;
|
|
13
|
-
const common_1 = require("@rsdk/common");
|
|
14
|
-
const core_1 = require("@rsdk/core");
|
|
15
|
-
let InvalidPayloadFormatException = exports.InvalidPayloadFormatException = class InvalidPayloadFormatException extends core_1.BootstrapException {
|
|
16
|
-
constructor(value, allowedValues) {
|
|
17
|
-
super((0, common_1.text) `
|
|
18
|
-
PayloadFormat has wrong value: ${value}, allowed: ${allowedValues.join(',')}.
|
|
19
|
-
`);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
exports.InvalidPayloadFormatException = InvalidPayloadFormatException = __decorate([
|
|
23
|
-
(0, core_1.Exception)({
|
|
24
|
-
description: (0, common_1.text) `
|
|
25
|
-
PayloadFormat has wrong value.
|
|
26
|
-
`,
|
|
27
|
-
}),
|
|
28
|
-
__metadata("design:paramtypes", [String, Array])
|
|
29
|
-
], InvalidPayloadFormatException);
|
|
30
|
-
//# sourceMappingURL=payload-format-validator.exception.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payload-format-validator.exception.js","sourceRoot":"","sources":["../../src/exceptions/payload-format-validator.exception.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAoC;AACpC,qCAA2D;AAOpD,IAAM,6BAA6B,2CAAnC,MAAM,6BAA8B,SAAQ,yBAAkB;IACnE,YAAY,KAAa,EAAE,aAAuB;QAChD,KAAK,CAAC,IAAA,aAAI,EAAA;qCACuB,KAAK,cAAc,aAAa,CAAC,IAAI,CACpE,GAAG,CACJ;KACA,CAAC,CAAC;IACL,CAAC;CACF,CAAA;wCARY,6BAA6B;IALzC,IAAA,gBAAS,EAAC;QACT,WAAW,EAAE,IAAA,aAAI,EAAA;;GAEhB;KACF,CAAC;;GACW,6BAA6B,CAQzC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.KafkaMetadataModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const kafka_metadata_provider_1 = require("./kafka-metadata.provider");
|
|
12
|
-
let KafkaMetadataModule = exports.KafkaMetadataModule = class KafkaMetadataModule {
|
|
13
|
-
};
|
|
14
|
-
exports.KafkaMetadataModule = KafkaMetadataModule = __decorate([
|
|
15
|
-
(0, common_1.Module)({
|
|
16
|
-
providers: [kafka_metadata_provider_1.KafkaMetadataProvider],
|
|
17
|
-
exports: [kafka_metadata_provider_1.KafkaMetadataProvider],
|
|
18
|
-
})
|
|
19
|
-
], KafkaMetadataModule);
|
|
20
|
-
//# sourceMappingURL=kafka-metadata.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kafka-metadata.module.js","sourceRoot":"","sources":["../../src/metadata/kafka-metadata.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAExC,uEAAkE;AAM3D,IAAM,mBAAmB,iCAAzB,MAAM,mBAAmB;CAAG,CAAA;8BAAtB,mBAAmB;IAJ/B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,+CAAqB,CAAC;QAClC,OAAO,EAAE,CAAC,+CAAqB,CAAC;KACjC,CAAC;GACW,mBAAmB,CAAG"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { RsdkMetadataProvider } from '@rsdk/metadata';
|
|
2
|
-
export declare class KafkaMetadataProvider {
|
|
3
|
-
private readonly rsdkMetadataProvider;
|
|
4
|
-
constructor(rsdkMetadataProvider: RsdkMetadataProvider);
|
|
5
|
-
getProducedTopics(): string[];
|
|
6
|
-
getConsumedTopics(): string[];
|
|
7
|
-
private getResources;
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kafka-metadata.provider.js","sourceRoot":"","sources":["../../src/metadata/kafka-metadata.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6CAAsD;AAGtD,qDAG0B;AAGnB,IAAM,qBAAqB,mCAA3B,MAAM,qBAAqB;IACH;IAA7B,YAA6B,oBAA0C;QAA1C,yBAAoB,GAApB,oBAAoB,CAAsB;IAAG,CAAC;IAE3E,iBAAiB;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEtC,OAAO,SAAS;aACb,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,+BAAc,CAAC,OAAO,CAAC;aAChE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEtC,OAAO,SAAS;aACb,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,+BAAc,CAAC,OAAO,CAAC;aAChE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAClC,gDAA+B,CAChC,CAAC;IACJ,CAAC;CACF,CAAA;gCAxBY,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAEwC,+BAAoB;GAD5D,qBAAqB,CAwBjC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KAFKA_TOPIC_RSDK_METADATA_SCOPE = exports.KafkaTopicType = void 0;
|
|
4
|
-
var KafkaTopicType;
|
|
5
|
-
(function (KafkaTopicType) {
|
|
6
|
-
KafkaTopicType[KafkaTopicType["Consume"] = 0] = "Consume";
|
|
7
|
-
KafkaTopicType[KafkaTopicType["Produce"] = 1] = "Produce";
|
|
8
|
-
})(KafkaTopicType || (exports.KafkaTopicType = KafkaTopicType = {}));
|
|
9
|
-
exports.KAFKA_TOPIC_RSDK_METADATA_SCOPE = 'kafka-topic';
|
|
10
|
-
//# sourceMappingURL=kafka.metadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kafka.metadata.js","sourceRoot":"","sources":["../../src/metadata/kafka.metadata.ts"],"names":[],"mappings":";;;AAEA,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yDAAO,CAAA;IACP,yDAAO,CAAA;AACT,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAiBY,QAAA,+BAA+B,GAAG,aAAa,CAAC"}
|
package/dist/retry-policy.d.ts
DELETED
package/dist/retry-policy.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry-policy.js","sourceRoot":"","sources":["../src/retry-policy.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG;IACzB,YAAY,EAAE,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC,iBAAiB;IACjC,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,EAAE;CACf,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assertIsPayloadFormat = exports.isValidPayloadFormat = void 0;
|
|
4
|
-
const payload_format_validator_exception_1 = require("../exceptions/payload-format-validator.exception");
|
|
5
|
-
const payload_format_1 = require("../payload-format");
|
|
6
|
-
const isValidPayloadFormat = (value) => Object.values(payload_format_1.PayloadFormat).includes(value);
|
|
7
|
-
exports.isValidPayloadFormat = isValidPayloadFormat;
|
|
8
|
-
const assertIsPayloadFormat = (value) => {
|
|
9
|
-
if (!(0, exports.isValidPayloadFormat)(value)) {
|
|
10
|
-
throw new payload_format_validator_exception_1.InvalidPayloadFormatException(value, Object.values(payload_format_1.PayloadFormat));
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
exports.assertIsPayloadFormat = assertIsPayloadFormat;
|
|
14
|
-
//# sourceMappingURL=payload-format.validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payload-format.validator.js","sourceRoot":"","sources":["../../src/validators/payload-format.validator.ts"],"names":[],"mappings":";;;AAAA,yGAAiG;AACjG,sDAAkD;AAE3C,MAAM,oBAAoB,GAAG,CAClC,KAA6B,EACL,EAAE,CAC1B,MAAM,CAAC,MAAM,CAAC,8BAAa,CAAC,CAAC,QAAQ,CAAC,KAAsB,CAAC,CAAC;AAHnD,QAAA,oBAAoB,wBAG+B;AAEzD,MAAM,qBAAqB,GAAG,CACnC,KAA6B,EACG,EAAE;IAClC,IAAI,CAAC,IAAA,4BAAoB,EAAC,KAAK,CAAC,EAAE;QAChC,MAAM,IAAI,kEAA6B,CACrC,KAAK,EACL,MAAM,CAAC,MAAM,CAAC,8BAAa,CAAC,CAC7B,CAAC;KACH;AACH,CAAC,CAAC;AATW,QAAA,qBAAqB,yBAShC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { FactoryProvider, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
-
import { Inject } from '@nestjs/common';
|
|
3
|
-
import { APP_NAME } from '@rsdk/core';
|
|
4
|
-
import { LoggerFactory } from '@rsdk/logging';
|
|
5
|
-
import type { Producer } from 'kafkajs';
|
|
6
|
-
import { Kafka, Partitioners } from 'kafkajs';
|
|
7
|
-
|
|
8
|
-
import { createLoggerAdapter } from '../create-logger-adapter.fn';
|
|
9
|
-
import { retryPolicy } from '../retry-policy';
|
|
10
|
-
|
|
11
|
-
import { KafkaConfig } from './kafka.config';
|
|
12
|
-
|
|
13
|
-
export const KAFKA_CLIENT_INJECTION_TOKEN = Symbol('KafkaClient');
|
|
14
|
-
export const KAFKA_PRODUCER_INJECTION_TOKEN = Symbol('KafkaProducer');
|
|
15
|
-
|
|
16
|
-
export const InjectKafka = (): ParameterDecorator =>
|
|
17
|
-
Inject(KAFKA_CLIENT_INJECTION_TOKEN);
|
|
18
|
-
export const InjectKafkaProducer = (): ParameterDecorator =>
|
|
19
|
-
Inject(KAFKA_PRODUCER_INJECTION_TOKEN);
|
|
20
|
-
|
|
21
|
-
export const KafkaClient: FactoryProvider = {
|
|
22
|
-
inject: [KafkaConfig, APP_NAME],
|
|
23
|
-
provide: KAFKA_CLIENT_INJECTION_TOKEN,
|
|
24
|
-
useFactory(config: KafkaConfig, name: string): Kafka {
|
|
25
|
-
const logger = LoggerFactory.create('NativeKafkaProducer');
|
|
26
|
-
|
|
27
|
-
return new Kafka({
|
|
28
|
-
clientId: `${name}-${process.pid}`,
|
|
29
|
-
brokers: config.brokers,
|
|
30
|
-
logCreator: createLoggerAdapter(logger),
|
|
31
|
-
retry: retryPolicy,
|
|
32
|
-
});
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const KafkaProducer: FactoryProvider = {
|
|
37
|
-
inject: [KAFKA_CLIENT_INJECTION_TOKEN],
|
|
38
|
-
provide: KAFKA_PRODUCER_INJECTION_TOKEN,
|
|
39
|
-
async useFactory(kafka: Kafka): Promise<Producer & OnModuleDestroy> {
|
|
40
|
-
const producer = kafka.producer({
|
|
41
|
-
allowAutoTopicCreation: false,
|
|
42
|
-
createPartitioner: Partitioners.DefaultPartitioner,
|
|
43
|
-
retry: { retries: 1 },
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
await producer.connect();
|
|
47
|
-
return { ...producer, onModuleDestroy: () => producer.disconnect() };
|
|
48
|
-
},
|
|
49
|
-
};
|
package/src/exception.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { InternalException } from '@rsdk/core';
|
|
2
|
-
import { KafkaJSProtocolError } from 'kafkajs';
|
|
3
|
-
|
|
4
|
-
class ServerKafkaException extends InternalException {}
|
|
5
|
-
|
|
6
|
-
export class ServerKafkaExceptionFactory {
|
|
7
|
-
constructor(
|
|
8
|
-
readonly pattern: string,
|
|
9
|
-
readonly props?: {
|
|
10
|
-
details?: unknown;
|
|
11
|
-
cause?: unknown;
|
|
12
|
-
},
|
|
13
|
-
) {}
|
|
14
|
-
|
|
15
|
-
unknown(): UnknownException {
|
|
16
|
-
return new UnknownException(
|
|
17
|
-
this.props?.cause,
|
|
18
|
-
this.pattern,
|
|
19
|
-
this.props?.details,
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
missingTopics(): MissingTopics {
|
|
24
|
-
return new MissingTopics([this.pattern], this.props);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
wrapAndThrow(error: unknown): never {
|
|
28
|
-
if (!(error instanceof KafkaJSProtocolError)) {
|
|
29
|
-
throw this.unknown();
|
|
30
|
-
}
|
|
31
|
-
// https://github.com/tulios/kafkajs/blob/master/src/protocol/error.js#L26
|
|
32
|
-
if (error.code === 3) {
|
|
33
|
-
throw this.missingTopics();
|
|
34
|
-
}
|
|
35
|
-
throw this.unknown();
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export class MissingTopics extends ServerKafkaException {
|
|
40
|
-
constructor(
|
|
41
|
-
readonly topics: string[],
|
|
42
|
-
readonly props?: {
|
|
43
|
-
details?: unknown;
|
|
44
|
-
cause?: unknown;
|
|
45
|
-
},
|
|
46
|
-
) {
|
|
47
|
-
super('Expected topics or partitions is missing!', {
|
|
48
|
-
details: {
|
|
49
|
-
topics,
|
|
50
|
-
details: props?.details,
|
|
51
|
-
},
|
|
52
|
-
cause: props?.cause,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export class UnknownException extends ServerKafkaException {
|
|
58
|
-
constructor(cause: unknown, pattern: string, details?: unknown) {
|
|
59
|
-
super('Unknown exception from ServerKafka!', {
|
|
60
|
-
details: {
|
|
61
|
-
pattern,
|
|
62
|
-
details: details,
|
|
63
|
-
},
|
|
64
|
-
cause,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { text } from '@rsdk/common';
|
|
2
|
-
import { BootstrapException, Exception } from '@rsdk/core';
|
|
3
|
-
|
|
4
|
-
@Exception({
|
|
5
|
-
description: text`
|
|
6
|
-
PayloadFormat has wrong value.
|
|
7
|
-
`,
|
|
8
|
-
})
|
|
9
|
-
export class InvalidPayloadFormatException extends BootstrapException {
|
|
10
|
-
constructor(value: string, allowedValues: string[]) {
|
|
11
|
-
super(text`
|
|
12
|
-
PayloadFormat has wrong value: ${value}, allowed: ${allowedValues.join(
|
|
13
|
-
',',
|
|
14
|
-
)}.
|
|
15
|
-
`);
|
|
16
|
-
}
|
|
17
|
-
}
|