@application-kit/kafka 0.3.0 → 0.4.1

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # @application-kit/kafka
2
2
 
3
+ ## 0.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 8e10f98: Peer-зависимости принимают Nest 12, `@nestjs/graphql` и `@nestjs/mercurius` 14, `@nestjs/cqrs` 12 и `nestjs-pino` 5. `PinoLoggerConfig` задаёт `forRoutes` явно: с маршрутом nestjs-pino 5 по умолчанию запросы на Fastify не логировались.
8
+
9
+ ## 0.4.0
10
+
11
+ ### Minor Changes
12
+
13
+ - bedf9ac: `eventIdOf` и `eventVersionOfHeaders` читают заголовок Debezium в его настоящем формате `{"schema":…,"payload":…}`: `KafkaParser` превращает такой заголовок в объект, и идентификатор события был `null`, а версия контракта всегда `1`. Новый экспорт `debeziumHeaderText` достаёт текст такого заголовка.
14
+
15
+ После обновления проверка версии контракта начинает работать: сообщение чужой версии уходит в DLQ, а сообщение v2 в топике `.v2` принимается. Журнал аудита начинает получать `event_id`, записи без него остаются как есть.
16
+
3
17
  ## 0.3.0
4
18
 
5
19
  ### Minor Changes
@@ -0,0 +1 @@
1
+ export declare const debeziumHeaderText: (raw: unknown) => null | string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.debeziumHeaderText = void 0;
4
+ const debeziumHeaderText = (raw) => {
5
+ const value = typeof raw === 'object' && raw !== null && 'payload' in raw ? raw.payload : raw;
6
+ const text = Buffer.isBuffer(value) ? value.toString('utf8') : value;
7
+ return typeof text === 'string' && text !== '' ? text : null;
8
+ };
9
+ exports.debeziumHeaderText = debeziumHeaderText;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.versionedQueueName = exports.eventVersionOfHeaders = exports.eventVersionOfTopic = exports.EVENT_VERSION_HEADER = exports.DEFAULT_EVENT_VERSION = void 0;
4
+ const debezium_header_text_js_1 = require("./debezium-header-text.js");
4
5
  exports.DEFAULT_EVENT_VERSION = '1';
5
6
  exports.EVENT_VERSION_HEADER = 'x-event-version';
6
7
  const VERSION_SEGMENT = /^v\d+$/u;
@@ -10,11 +11,7 @@ const eventVersionOfTopic = (topic) => {
10
11
  return segment === undefined ? exports.DEFAULT_EVENT_VERSION : segment.slice(1);
11
12
  };
12
13
  exports.eventVersionOfTopic = eventVersionOfTopic;
13
- const eventVersionOfHeaders = (headers) => {
14
- const raw = headers?.[exports.EVENT_VERSION_HEADER];
15
- const value = Buffer.isBuffer(raw) ? raw.toString('utf8') : raw;
16
- return typeof value === 'string' && value !== '' ? value : exports.DEFAULT_EVENT_VERSION;
17
- };
14
+ const eventVersionOfHeaders = (headers) => (0, debezium_header_text_js_1.debeziumHeaderText)(headers?.[exports.EVENT_VERSION_HEADER]) ?? exports.DEFAULT_EVENT_VERSION;
18
15
  exports.eventVersionOfHeaders = eventVersionOfHeaders;
19
16
  const versionedQueueName = (queueName, version) => `${queueName}${versionSegment(version)}`;
20
17
  exports.versionedQueueName = versionedQueueName;
@@ -1 +1,2 @@
1
+ export * from './debezium-header-text.js';
1
2
  export * from './event-contract-version.js';
@@ -14,4 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./debezium-header-text.js"), exports);
17
18
  __exportStar(require("./event-contract-version.js"), exports);
@@ -1,11 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.eventIdOf = void 0;
4
- const eventIdOf = (context) => {
5
- const raw = context.getMessage().headers?.id;
6
- if (Buffer.isBuffer(raw)) {
7
- return raw.toString('utf8');
8
- }
9
- return typeof raw === 'string' && raw !== '' ? raw : null;
10
- };
4
+ const debezium_header_text_js_1 = require("../event-contract/debezium-header-text.js");
5
+ const eventIdOf = (context) => (0, debezium_header_text_js_1.debeziumHeaderText)(context.getMessage().headers?.id);
11
6
  exports.eventIdOf = eventIdOf;
@@ -0,0 +1 @@
1
+ export declare const debeziumHeaderText: (raw: unknown) => null | string;
@@ -0,0 +1,5 @@
1
+ export const debeziumHeaderText = (raw) => {
2
+ const value = typeof raw === 'object' && raw !== null && 'payload' in raw ? raw.payload : raw;
3
+ const text = Buffer.isBuffer(value) ? value.toString('utf8') : value;
4
+ return typeof text === 'string' && text !== '' ? text : null;
5
+ };
@@ -1,3 +1,4 @@
1
+ import { debeziumHeaderText } from './debezium-header-text.js';
1
2
  export const DEFAULT_EVENT_VERSION = '1';
2
3
  export const EVENT_VERSION_HEADER = 'x-event-version';
3
4
  const VERSION_SEGMENT = /^v\d+$/u;
@@ -6,9 +7,5 @@ export const eventVersionOfTopic = (topic) => {
6
7
  const segment = topic.split('.').find((part) => VERSION_SEGMENT.test(part));
7
8
  return segment === undefined ? DEFAULT_EVENT_VERSION : segment.slice(1);
8
9
  };
9
- export const eventVersionOfHeaders = (headers) => {
10
- const raw = headers?.[EVENT_VERSION_HEADER];
11
- const value = Buffer.isBuffer(raw) ? raw.toString('utf8') : raw;
12
- return typeof value === 'string' && value !== '' ? value : DEFAULT_EVENT_VERSION;
13
- };
10
+ export const eventVersionOfHeaders = (headers) => debeziumHeaderText(headers?.[EVENT_VERSION_HEADER]) ?? DEFAULT_EVENT_VERSION;
14
11
  export const versionedQueueName = (queueName, version) => `${queueName}${versionSegment(version)}`;
@@ -1 +1,2 @@
1
+ export * from './debezium-header-text.js';
1
2
  export * from './event-contract-version.js';
@@ -1 +1,2 @@
1
+ export * from './debezium-header-text.js';
1
2
  export * from './event-contract-version.js';
@@ -1,7 +1,2 @@
1
- export const eventIdOf = (context) => {
2
- const raw = context.getMessage().headers?.id;
3
- if (Buffer.isBuffer(raw)) {
4
- return raw.toString('utf8');
5
- }
6
- return typeof raw === 'string' && raw !== '' ? raw : null;
7
- };
1
+ import { debeziumHeaderText } from '../event-contract/debezium-header-text.js';
2
+ export const eventIdOf = (context) => debeziumHeaderText(context.getMessage().headers?.id);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@application-kit/kafka",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Kafka-транспорт для NestJS: консьюмер-процесс с heartbeat, auto-commit, retry/DLQ и контракт версии события",
5
5
  "keywords": [
6
6
  "consumer",
@@ -68,32 +68,32 @@
68
68
  },
69
69
  "devDependencies": {
70
70
  "@libs-for-dev/nestjs-config-module": "3.0.0",
71
- "@nestjs/common": "^11.2.7",
72
- "@nestjs/core": "^11.2.7",
73
- "@nestjs/microservices": "^11.2.7",
71
+ "@nestjs/common": "^12.0.0",
72
+ "@nestjs/core": "^12.0.0",
73
+ "@nestjs/microservices": "^12.0.0",
74
74
  "@stryker-mutator/core": "^10.0.0",
75
75
  "@stryker-mutator/vitest-runner": "^10.0.0",
76
76
  "@types/node": "^26.2.0",
77
77
  "class-transformer": "^0.5.1",
78
78
  "class-validator": "^0.15.1",
79
79
  "kafkajs": "^2.2.4",
80
- "nestjs-pino": "^4.6.1",
80
+ "nestjs-pino": "^5.0.0",
81
81
  "pino": "^10.3.1",
82
82
  "pino-http": "^11.0.0",
83
83
  "reflect-metadata": "^0.2.2",
84
84
  "rxjs": "^7.8.2",
85
85
  "typescript": "^6.0.3",
86
- "vitest": "^4.1.11"
86
+ "vitest": "^5.0.0"
87
87
  },
88
88
  "peerDependencies": {
89
89
  "@libs-for-dev/nestjs-config-module": "^3.0.0",
90
- "@nestjs/common": "^11.0.0",
91
- "@nestjs/core": "^11.0.0",
92
- "@nestjs/microservices": "^11.0.0",
90
+ "@nestjs/common": "^11.0.0 || ^12.0.0",
91
+ "@nestjs/core": "^11.0.0 || ^12.0.0",
92
+ "@nestjs/microservices": "^11.0.0 || ^12.0.0",
93
93
  "class-transformer": "^0.5.1",
94
94
  "class-validator": "^0.15.1",
95
95
  "kafkajs": "^2.2.4",
96
- "nestjs-pino": "^4.6.1",
96
+ "nestjs-pino": "^4.6.1 || ^5.0.0",
97
97
  "rxjs": "^7.8.0"
98
98
  },
99
99
  "peerDependenciesMeta": {