11import { randomUUID } from "node:crypto" ;
22import { checkServerIdentity } from "node:tls" ;
3- import * as KafkaJS from "kafkajs" ;
3+ import {
4+ CompressionTypes ,
5+ Kafka ,
6+ type Producer ,
7+ type ProducerConfig ,
8+ } from "kafkajs" ;
49import LZ4Codec from "kafkajs-lz4" ;
510import type { ServiceName } from "../core/services.js" ;
611import { type UsageV2Event , getTopicName } from "../core/usageV2.js" ;
712
13+ // Import KafkaJS with CJS pattern (source: https://github.com/tulios/kafkajs/issues/1391)
14+ import KafkaJS from "kafkajs" ;
15+ const { CompressionCodecs } = KafkaJS ;
16+
817/**
918 * Creates a UsageV2Producer which opens a persistent TCP connection.
1019 * This class is thread-safe so your service should re-use one instance.
@@ -19,10 +28,10 @@ import { type UsageV2Event, getTopicName } from "../core/usageV2.js";
1928 * ```
2029 */
2130export class UsageV2Producer {
22- private kafka : KafkaJS . Kafka ;
23- private producer : KafkaJS . Producer | null = null ;
31+ private kafka : Kafka ;
32+ private producer : Producer | null = null ;
2433 private topic : string ;
25- private compression : KafkaJS . CompressionTypes ;
34+ private compression : CompressionTypes ;
2635
2736 constructor ( config : {
2837 /**
@@ -40,7 +49,7 @@ export class UsageV2Producer {
4049 /**
4150 * The compression algorithm to use.
4251 */
43- compression ?: KafkaJS . CompressionTypes ;
52+ compression ?: CompressionTypes ;
4453
4554 username : string ;
4655 password : string ;
@@ -49,12 +58,12 @@ export class UsageV2Producer {
4958 producerName,
5059 environment,
5160 productName,
52- compression = KafkaJS . CompressionTypes . LZ4 ,
61+ compression = CompressionTypes . LZ4 ,
5362 username,
5463 password,
5564 } = config ;
5665
57- this . kafka = new KafkaJS . Kafka ( {
66+ this . kafka = new Kafka ( {
5867 clientId : `${ producerName } -${ environment } ` ,
5968 brokers :
6069 environment === "production"
@@ -80,10 +89,9 @@ export class UsageV2Producer {
8089 * Connect the producer.
8190 * This must be called before calling `sendEvents()`.
8291 */
83- async init ( configOverrides ?: KafkaJS . ProducerConfig ) {
84- if ( this . compression === KafkaJS . CompressionTypes . LZ4 ) {
85- KafkaJS . CompressionCodecs [ KafkaJS . CompressionTypes . LZ4 ] =
86- new LZ4Codec ( ) . codec ;
92+ async init ( configOverrides ?: ProducerConfig ) {
93+ if ( this . compression === CompressionTypes . LZ4 ) {
94+ CompressionCodecs [ CompressionTypes . LZ4 ] = new LZ4Codec ( ) . codec ;
8795 }
8896
8997 this . producer = this . kafka . producer ( {
0 commit comments