UNPKG

@platformatic/kafka

Version:

Modern and performant client for Apache Kafka

66 lines (65 loc) 2.4 kB
import { ResponseError } from "../../errors.js"; import { Writer } from "../../protocol/writer.js"; import { createAPI } from "../definitions.js"; /* OffsetForLeaderEpoch Request (Version: 4) => replica_id [topic] TAG_BUFFER replica_id => INT32 topic => topic [partitions] TAG_BUFFER topic => COMPACT_STRING partitions => partition current_leader_epoch leader_epoch TAG_BUFFER partition => INT32 current_leader_epoch => INT32 leader_epoch => INT32 */ export function createRequest(replicaId, topics) { return Writer.create() .appendInt32(replicaId) .appendArray(topics, (w, topic) => { w.appendString(topic.name).appendArray(topic.partitions, (w, partition) => { w.appendInt32(partition.partitionIndex) .appendInt32(partition.currentLeaderEpoch) .appendInt32(partition.leaderEpoch); }); }) .appendTaggedFields(); } /* OffsetForLeaderEpoch Response (Version: 4) => throttle_time_ms [topics] TAG_BUFFER throttle_time_ms => INT32 topics => topic [partitions] TAG_BUFFER topic => COMPACT_STRING partitions => partition error_code leader_epoch end_offset TAG_BUFFER partition => INT32 error_code => INT16 leader_epoch => INT32 end_offset => INT64 */ export function parseResponse(_correlationId, apiKey, apiVersion, reader) { const errors = []; const response = { throttleTimeMs: reader.readInt32(), topics: reader.readArray((r, i) => { return { topic: r.readString(), partitions: r.readArray((r, j) => { const partition = r.readInt32(); const errorCode = r.readInt16(); if (errorCode !== 0) { errors.push([`/topics/${i}/partitions/${j}`, errorCode]); } return { partition, errorCode, leaderEpoch: r.readInt32(), endOffset: r.readInt64() }; }) }; }) }; if (errors.length) { throw new ResponseError(apiKey, apiVersion, Object.fromEntries(errors), response); } return response; } export const api = createAPI(23, 4, createRequest, parseResponse);