UNPKG

kafkajs

Version:

A modern Apache Kafka client for node.js

52 lines (44 loc) 1.35 kB
const Decoder = require('../../../decoder') const { failure, createErrorFromCode } = require('../../../error') /** * ListOffsets Response (Version: 2) => throttle_time_ms [responses] * throttle_time_ms => INT32 * responses => topic [partition_responses] * topic => STRING * partition_responses => partition error_code timestamp offset * partition => INT32 * error_code => INT16 * timestamp => INT64 * offset => INT64 */ const decode = async rawData => { const decoder = new Decoder(rawData) return { throttleTime: decoder.readInt32(), responses: decoder.readArray(decodeResponses), } } const decodeResponses = decoder => ({ topic: decoder.readString(), partitions: decoder.readArray(decodePartitions), }) const decodePartitions = decoder => ({ partition: decoder.readInt32(), errorCode: decoder.readInt16(), timestamp: decoder.readInt64().toString(), offset: decoder.readInt64().toString(), }) const parse = async data => { const partitionsWithError = data.responses.flatMap(response => response.partitions.filter(partition => failure(partition.errorCode)) ) const partitionWithError = partitionsWithError[0] if (partitionWithError) { throw createErrorFromCode(partitionWithError.errorCode) } return data } module.exports = { decode, parse, }