export async function handleReport()

in src/server/helpers/report.ts [11:63]


export async function handleReport(
  logger: Logger,
  req: Request,
  res: Response,
  workerScript: string,
  workerParams: Record<string, any>,
) {
  const worker = new Worker(workerScript);

  let probabilityThreshold = 0.95;
  if (process.env.PROBABILITY_THRESHOLD) {
    probabilityThreshold = parseFloat(process.env.PROBABILITY_THRESHOLD);
  }

  try {
    // Post the request to the existing worker, and use a new MessageChannel
    // to ensure we only see our own results even if other requests are in-flight.
    const { port1, port2 } = new MessageChannel();
    worker.postMessage(
      {
        type: "fetch",
        projectId: process.env.BQ_PROJECT_ID,
        probabilityThreshold,
        ...workerParams,
        port: port1,
      },
      [port1],
    );
    const results = await new Promise((resolve, reject) => {
      port2.on("message", (msg) => {
        switch (msg.type) {
          case "done":
            resolve(msg.result);
            break;
          case "verbose":
            logger.verbose(msg.msg);
            break;
          case "error":
            reject(msg.error);
            break;
        }
      });
    });

    res.write(results);
    logger.verbose("Handler done.");
  } catch (error: any) {
    logger.error("Handler failed", { error });
    return endWithStatusAndBody(res, 500, error.toString());
  }

  res.end();
}