All files handler.ts

100% Statements 12/12
40% Branches 2/5
66.66% Functions 2/3
100% Lines 11/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 511x 1x 1x     1x             1x 1x                   1x   1x     1x                       1x     1x              
import { Kafka, Producer } from "kafkajs";
import { _handler } from "./tx-outbox";
import { envOrThrow } from "./env";
 
let producer: Producer | undefined;
const getProducer = async (
  brokers: string[],
  username: string,
  password: string,
  authMechanism: "plain" | "scram-sha-256" | "scram-sha-512" = "plain",
  useSsl = false
) => {
  if (!producer) {
    producer = new Kafka({
      clientId: "members-service",
      brokers,
      ssl: useSsl,
      sasl: {
        mechanism: authMechanism as any,
        username: username,
        password: password,
      },
    }).producer();
    await producer.connect();
  }
  return producer;
};
 
export const buildHandler = ({
  brokers,
  username,
  password,
  authMechanism,
  useSsl
}: {
  brokers: string[];
  username: string;
  password: string;
  authMechanism: "plain" | "scram-sha-256" | "scram-sha-512";
  useSsl: boolean;
}) => _handler(getProducer(brokers, username, password, authMechanism, useSsl));
 
// eslint-disable-next-line @typescript-eslint/no-empty-function
export const handler = process.env.NODE_ENV === "test" ? (() => {}) as any : buildHandler({
  brokers: envOrThrow("KAFKA_BROKERS").split(","),
  username: envOrThrow("KAFKA_USERNAME"),
  password: envOrThrow("KAFKA_PASSWORD"),
  authMechanism: envOrThrow("KAFKA_AUTH_MECHANISM") as any,
  useSsl: envOrThrow("KAFKA_USE_SSL").toLowerCase() === "true",
});