UNPKG

kafkajs

Version:

A modern Apache Kafka client for node.js

56 lines (48 loc) 1.68 kB
const Decoder = require('../../../decoder') const { parse: parseV1 } = require('../v1/response') const decodeMessages = require('./decodeMessages') /** * Fetch Response (Version: 4) => throttle_time_ms [responses] * throttle_time_ms => INT32 * responses => topic [partition_responses] * topic => STRING * partition_responses => partition_header record_set * partition_header => partition error_code high_watermark last_stable_offset [aborted_transactions] * partition => INT32 * error_code => INT16 * high_watermark => INT64 * last_stable_offset => INT64 * aborted_transactions => producer_id first_offset * producer_id => INT64 * first_offset => INT64 * record_set => RECORDS */ const decodeAbortedTransactions = decoder => ({ producerId: decoder.readInt64().toString(), firstOffset: decoder.readInt64().toString(), }) const decodePartition = async decoder => ({ partition: decoder.readInt32(), errorCode: decoder.readInt16(), highWatermark: decoder.readInt64().toString(), lastStableOffset: decoder.readInt64().toString(), abortedTransactions: decoder.readArray(decodeAbortedTransactions), messages: await decodeMessages(decoder), }) const decodeResponse = async decoder => ({ topicName: decoder.readString(), partitions: await decoder.readArrayAsync(decodePartition), }) const decode = async rawData => { const decoder = new Decoder(rawData) const throttleTime = decoder.readInt32() const responses = await decoder.readArrayAsync(decodeResponse) return { throttleTime, responses, } } module.exports = { decode, parse: parseV1, }