From 5918ddbfeb210ddcb393f732152312d007feb0ec Mon Sep 17 00:00:00 2001
From: Michael Kaufman <2073135+mkaufmaner@users.noreply.github.com>
Date: Mon, 6 May 2024 07:22:48 -0400
Subject: [PATCH 1/5] fix: update message header type to match

The existing MessageHeader type is just a plain object and not an array of plain objects.
---
 types/rdkafka.d.ts | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/types/rdkafka.d.ts b/types/rdkafka.d.ts
index 4c9150e9..50e76d91 100644
--- a/types/rdkafka.d.ts
+++ b/types/rdkafka.d.ts
@@ -96,7 +96,8 @@ export interface DeliveryReport extends TopicPartitionOffset {
 export type NumberNullUndefined = number | null | undefined;
 
 export type MessageKey = Buffer | string | null | undefined;
-export type MessageHeader = { [key: string]: string | Buffer };
+export type MessageHeader = string | Buffer;
+export type MessageHeaders = { [key: string]: MessageHeader };
 export type MessageValue = Buffer | null;
 export type SubscribeTopic = string | RegExp;
 export type SubscribeTopicList = SubscribeTopic[];
@@ -107,7 +108,7 @@ export interface Message extends TopicPartitionOffset {
     topic: string;
     key?: MessageKey;
     timestamp?: number;
-    headers?: MessageHeader[];
+    headers?: MessageHeaders;
     opaque?: any;
 }
 
@@ -265,7 +266,7 @@ export class Producer extends Client<KafkaProducerEvents> {
 
     poll(): this;
 
-    produce(topic: string, partition: NumberNullUndefined, message: MessageValue, key?: MessageKey, timestamp?: NumberNullUndefined, opaque?: any, headers?: MessageHeader[]): any;
+    produce(topic: string, partition: NumberNullUndefined, message: MessageValue, key?: MessageKey, timestamp?: NumberNullUndefined, opaque?: any, headers?: MessageHeaders): any;
 
     setPollInterval(interval: number): this;
 
@@ -284,7 +285,7 @@ export class Producer extends Client<KafkaProducerEvents> {
 
 export class HighLevelProducer extends Producer {
   produce(topic: string, partition: NumberNullUndefined, message: any, key: any, timestamp: NumberNullUndefined, callback: (err: any, offset?: NumberNullUndefined) => void): any;
-  produce(topic: string, partition: NumberNullUndefined, message: any, key: any, timestamp: NumberNullUndefined, headers: MessageHeader[], callback: (err: any, offset?: NumberNullUndefined) => void): any;
+  produce(topic: string, partition: NumberNullUndefined, message: any, key: any, timestamp: NumberNullUndefined, headers: MessageHeaders, callback: (err: any, offset?: NumberNullUndefined) => void): any;
 
   setKeySerializer(serializer: (key: any, cb: (err: any, key: MessageKey) => void) => void): void;
   setKeySerializer(serializer: (key: any) => MessageKey | Promise<MessageKey>): void;

From d0277e3d4b263b1c395b0ce3fa9851100dedd77c Mon Sep 17 00:00:00 2001
From: Michael Kaufman <2073135+mkaufmaner@users.noreply.github.com>
Date: Mon, 6 May 2024 07:26:00 -0400
Subject: [PATCH 2/5] fix: add null to message header type

---
 types/rdkafka.d.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/types/rdkafka.d.ts b/types/rdkafka.d.ts
index 50e76d91..521763ac 100644
--- a/types/rdkafka.d.ts
+++ b/types/rdkafka.d.ts
@@ -96,7 +96,7 @@ export interface DeliveryReport extends TopicPartitionOffset {
 export type NumberNullUndefined = number | null | undefined;
 
 export type MessageKey = Buffer | string | null | undefined;
-export type MessageHeader = string | Buffer;
+export type MessageHeader = Buffer | string | null;
 export type MessageHeaders = { [key: string]: MessageHeader };
 export type MessageValue = Buffer | null;
 export type SubscribeTopic = string | RegExp;

From 8bcea2de70351aec4d7e2baf3b403a7859f926f9 Mon Sep 17 00:00:00 2001
From: Michael Kaufman <2073135+mkaufmaner@users.noreply.github.com>
Date: Mon, 6 May 2024 08:31:21 -0400
Subject: [PATCH 3/5] fix: update message header types

---
 types/rdkafka.d.ts | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/types/rdkafka.d.ts b/types/rdkafka.d.ts
index 521763ac..865cf9bd 100644
--- a/types/rdkafka.d.ts
+++ b/types/rdkafka.d.ts
@@ -96,8 +96,9 @@ export interface DeliveryReport extends TopicPartitionOffset {
 export type NumberNullUndefined = number | null | undefined;
 
 export type MessageKey = Buffer | string | null | undefined;
-export type MessageHeader = Buffer | string | null;
-export type MessageHeaders = { [key: string]: MessageHeader };
+export type MessageHeaderValue = Buffer | string | number | null;
+export type MessageHeader = Record<string, MessageHeaderValue>;
+export type MessageHeaderList = MessageHeader[];
 export type MessageValue = Buffer | null;
 export type SubscribeTopic = string | RegExp;
 export type SubscribeTopicList = SubscribeTopic[];
@@ -108,7 +109,7 @@ export interface Message extends TopicPartitionOffset {
     topic: string;
     key?: MessageKey;
     timestamp?: number;
-    headers?: MessageHeaders;
+    headers?: MessageHeaderList;
     opaque?: any;
 }
 
@@ -266,7 +267,7 @@ export class Producer extends Client<KafkaProducerEvents> {
 
     poll(): this;
 
-    produce(topic: string, partition: NumberNullUndefined, message: MessageValue, key?: MessageKey, timestamp?: NumberNullUndefined, opaque?: any, headers?: MessageHeaders): any;
+    produce(topic: string, partition: NumberNullUndefined, message: MessageValue, key?: MessageKey, timestamp?: NumberNullUndefined, opaque?: any, headers?: MessageHeaderList): any;
 
     setPollInterval(interval: number): this;
 
@@ -285,7 +286,7 @@ export class Producer extends Client<KafkaProducerEvents> {
 
 export class HighLevelProducer extends Producer {
   produce(topic: string, partition: NumberNullUndefined, message: any, key: any, timestamp: NumberNullUndefined, callback: (err: any, offset?: NumberNullUndefined) => void): any;
-  produce(topic: string, partition: NumberNullUndefined, message: any, key: any, timestamp: NumberNullUndefined, headers: MessageHeaders, callback: (err: any, offset?: NumberNullUndefined) => void): any;
+  produce(topic: string, partition: NumberNullUndefined, message: any, key: any, timestamp: NumberNullUndefined, headers: MessageHeaderList, callback: (err: any, offset?: NumberNullUndefined) => void): any;
 
   setKeySerializer(serializer: (key: any, cb: (err: any, key: MessageKey) => void) => void): void;
   setKeySerializer(serializer: (key: any) => MessageKey | Promise<MessageKey>): void;

From b92553a96bcc60dc4c6c23f26e52ddcb489ff25c Mon Sep 17 00:00:00 2001
From: Michael Kaufman <mkaufmaner@gmail.com>
Date: Tue, 7 May 2024 08:14:40 -0400
Subject: [PATCH 4/5] fix: update header typing for nulls and numbers

---
 .eslintrc.js       | 1 +
 types/kafkajs.d.ts | 2 +-
 types/rdkafka.d.ts | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 120e6804..35795ba2 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,5 +1,6 @@
 module.exports = {
     "env": {
+        "node": true,
         "browser": true,
         "commonjs": true,
         "es2021": true
diff --git a/types/kafkajs.d.ts b/types/kafkajs.d.ts
index e182c4b6..07bb48f4 100644
--- a/types/kafkajs.d.ts
+++ b/types/kafkajs.d.ts
@@ -118,7 +118,7 @@ export interface ProducerConstructorConfig extends ProducerGlobalConfig {
 }
 
 export interface IHeaders {
-  [key: string]: Buffer | string | (Buffer | string)[] | undefined
+  [key: string]: Buffer | string | number | null | (Buffer | string | number)[] | undefined
 }
 
 export interface Message {
diff --git a/types/rdkafka.d.ts b/types/rdkafka.d.ts
index 865cf9bd..1d03174e 100644
--- a/types/rdkafka.d.ts
+++ b/types/rdkafka.d.ts
@@ -98,7 +98,7 @@ export type NumberNullUndefined = number | null | undefined;
 export type MessageKey = Buffer | string | null | undefined;
 export type MessageHeaderValue = Buffer | string | number | null;
 export type MessageHeader = Record<string, MessageHeaderValue>;
-export type MessageHeaderList = MessageHeader[];
+export type MessageHeaderList = MessageHeader[] | null | undefined;
 export type MessageValue = Buffer | null;
 export type SubscribeTopic = string | RegExp;
 export type SubscribeTopicList = SubscribeTopic[];

From 48550b96d480c434d7a1e6582e8653792b020743 Mon Sep 17 00:00:00 2001
From: Michael Kaufman <mkaufmaner@gmail.com>
Date: Wed, 15 May 2024 09:26:52 -0400
Subject: [PATCH 5/5] fix: remove number from message header type

---
 types/rdkafka.d.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/types/rdkafka.d.ts b/types/rdkafka.d.ts
index 1d03174e..894d8864 100644
--- a/types/rdkafka.d.ts
+++ b/types/rdkafka.d.ts
@@ -96,7 +96,7 @@ export interface DeliveryReport extends TopicPartitionOffset {
 export type NumberNullUndefined = number | null | undefined;
 
 export type MessageKey = Buffer | string | null | undefined;
-export type MessageHeaderValue = Buffer | string | number | null;
+export type MessageHeaderValue = Buffer | string | null;
 export type MessageHeader = Record<string, MessageHeaderValue>;
 export type MessageHeaderList = MessageHeader[] | null | undefined;
 export type MessageValue = Buffer | null;