kafka-ts
Version:
**KafkaTS** is a Apache Kafka client library for Node.js. It provides both a low-level API for communicating directly with the Apache Kafka cluster and high-level APIs for publishing and subscribing to Kafka topics.
169 lines (165 loc) • 6.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SYNC_GROUP = void 0;
const api_1 = require("../utils/api");
const decoder_1 = require("../utils/decoder");
const encoder_1 = require("../utils/encoder");
const error_1 = require("../utils/error");
/*
SyncGroup Request (Version: 3) => group_id generation_id member_id group_instance_id [assignments]
group_id => STRING
generation_id => INT32
member_id => STRING
group_instance_id => NULLABLE_STRING
assignments => member_id assignment
member_id => STRING
assignment => BYTES
SyncGroup Response (Version: 3) => throttle_time_ms error_code assignment
throttle_time_ms => INT32
error_code => INT16
assignment => BYTES
*/
const SYNC_GROUP_V3 = (0, api_1.createApi)({
apiKey: 14,
apiVersion: 3,
requestHeaderVersion: 1,
responseHeaderVersion: 0,
request: (encoder, data) => encoder
.writeString(data.groupId)
.writeInt32(data.generationId)
.writeString(data.memberId)
.writeString(data.groupInstanceId)
.writeArray(data.assignments, (encoder, assignment) => encoder
.writeString(assignment.memberId)
.writeBytes(encodeAssignment(assignment.assignment))),
response: (decoder) => {
const result = {
throttleTimeMs: decoder.readInt32(),
errorCode: decoder.readInt16(),
protocolType: null,
protocolName: null,
assignment: decodeAssignment(decoder.readBytes()),
tags: {},
};
if (result.errorCode)
throw new error_1.KafkaTSApiError(result.errorCode, null, result);
return result;
},
});
/*
SyncGroup Request (Version: 4) => group_id generation_id member_id group_instance_id [assignments] _tagged_fields
group_id => COMPACT_STRING
generation_id => INT32
member_id => COMPACT_STRING
group_instance_id => COMPACT_NULLABLE_STRING
assignments => member_id assignment _tagged_fields
member_id => COMPACT_STRING
assignment => COMPACT_BYTES
SyncGroup Response (Version: 4) => throttle_time_ms error_code assignment _tagged_fields
throttle_time_ms => INT32
error_code => INT16
assignment => COMPACT_BYTES
*/
const SYNC_GROUP_V4 = (0, api_1.createApi)({
apiKey: 14,
apiVersion: 4,
fallback: SYNC_GROUP_V3,
requestHeaderVersion: 2,
responseHeaderVersion: 1,
request: (encoder, data) => encoder
.writeCompactString(data.groupId)
.writeInt32(data.generationId)
.writeCompactString(data.memberId)
.writeCompactString(data.groupInstanceId)
.writeCompactArray(data.assignments, (encoder, assignment) => encoder
.writeCompactString(assignment.memberId)
.writeCompactBytes(encodeAssignment(assignment.assignment))
.writeTagBuffer())
.writeTagBuffer(),
response: (decoder) => {
const result = {
throttleTimeMs: decoder.readInt32(),
errorCode: decoder.readInt16(),
protocolType: null,
protocolName: null,
assignment: decodeAssignment(decoder.readCompactBytes()),
tags: decoder.readTagBuffer(),
};
if (result.errorCode)
throw new error_1.KafkaTSApiError(result.errorCode, null, result);
return result;
},
});
/*
SyncGroup Request (Version: 5) => group_id generation_id member_id group_instance_id protocol_type protocol_name [assignments] _tagged_fields
group_id => COMPACT_STRING
generation_id => INT32
member_id => COMPACT_STRING
group_instance_id => COMPACT_NULLABLE_STRING
protocol_type => COMPACT_NULLABLE_STRING
protocol_name => COMPACT_NULLABLE_STRING
assignments => member_id assignment _tagged_fields
member_id => COMPACT_STRING
assignment => COMPACT_BYTES
SyncGroup Response (Version: 5) => throttle_time_ms error_code protocol_type protocol_name assignment _tagged_fields
throttle_time_ms => INT32
error_code => INT16
protocol_type => COMPACT_NULLABLE_STRING
protocol_name => COMPACT_NULLABLE_STRING
assignment => COMPACT_BYTES
*/
exports.SYNC_GROUP = (0, api_1.createApi)({
apiKey: 14,
apiVersion: 5,
fallback: SYNC_GROUP_V4,
requestHeaderVersion: 2,
responseHeaderVersion: 1,
request: (encoder, data) => encoder
.writeCompactString(data.groupId)
.writeInt32(data.generationId)
.writeCompactString(data.memberId)
.writeCompactString(data.groupInstanceId)
.writeCompactString(data.protocolType)
.writeCompactString(data.protocolName)
.writeCompactArray(data.assignments, (encoder, assignment) => encoder
.writeCompactString(assignment.memberId)
.writeCompactBytes(encodeAssignment(assignment.assignment))
.writeTagBuffer())
.writeTagBuffer(),
response: (decoder) => {
const result = {
throttleTimeMs: decoder.readInt32(),
errorCode: decoder.readInt16(),
protocolType: decoder.readCompactString(),
protocolName: decoder.readCompactString(),
assignment: decodeAssignment(decoder.readCompactBytes()),
tags: decoder.readTagBuffer(),
};
if (result.errorCode)
throw new error_1.KafkaTSApiError(result.errorCode, null, result);
return result;
},
});
const encodeAssignment = (data) => new encoder_1.Encoder()
.writeInt16(0)
.writeArray(Object.entries(data), (encoder, [topic, partitions]) => encoder.writeString(topic).writeArray(partitions, (encoder, partition) => encoder.writeInt32(partition)))
.writeBytes(Buffer.alloc(0))
.value();
const decodeAssignment = (data) => {
if (!data) {
return {};
}
const decoder = new decoder_1.Decoder(data);
if (!decoder.getBufferLength()) {
return {};
}
const result = {
version: decoder.readInt16(),
assignment: decoder.readArray((decoder) => ({
topic: decoder.readString(),
partitions: decoder.readArray((decoder) => decoder.readInt32()),
})),
userData: decoder.readBytes(),
};
return Object.fromEntries(result.assignment.map(({ topic, partitions }) => [topic, partitions]));
};