kafkajs
Version:
A modern Apache Kafka client for node.js
55 lines (45 loc) • 1.32 kB
JavaScript
const Decoder = require('../../../decoder')
const { failure, createErrorFromCode } = require('../../../error')
/**
* Produce Response (Version: 3) => [responses] throttle_time_ms
* responses => topic [partition_responses]
* topic => STRING
* partition_responses => partition error_code base_offset log_append_time
* partition => INT32
* error_code => INT16
* base_offset => INT64
* log_append_time => INT64
* throttle_time_ms => INT32
*/
const partition = decoder => ({
partition: decoder.readInt32(),
errorCode: decoder.readInt16(),
baseOffset: decoder.readInt64().toString(),
logAppendTime: decoder.readInt64().toString(),
})
const decode = async rawData => {
const decoder = new Decoder(rawData)
const topics = decoder.readArray(decoder => ({
topicName: decoder.readString(),
partitions: decoder.readArray(partition),
}))
const throttleTime = decoder.readInt32()
return {
topics,
throttleTime,
}
}
const parse = async data => {
const errors = data.topics.flatMap(response => {
return response.partitions.filter(partition => failure(partition.errorCode))
})
if (errors.length > 0) {
const { errorCode } = errors[0]
throw createErrorFromCode(errorCode)
}
return data
}
module.exports = {
decode,
parse,
}