import { createHash, createHmac, randomBytes } from "node:crypto";

export type SignedHeaders = {
  "X-FilyX-Worker": string;
  "X-FilyX-Timestamp": string;
  "X-FilyX-Nonce": string;
  "X-FilyX-Signature": string;
};

export const sha256 = (value: string): string => createHash("sha256").update(value).digest("hex");

export const signRequest = (
  method: string,
  path: string,
  body: string,
  workerId: string,
  secret: string,
  timestamp = Math.floor(Date.now() / 1000).toString(),
  nonce = randomBytes(18).toString("hex")
): SignedHeaders => {
  const canonical = [method.toUpperCase(), path, timestamp, nonce, sha256(body)].join("\n");
  return {
    "X-FilyX-Worker": workerId,
    "X-FilyX-Timestamp": timestamp,
    "X-FilyX-Nonce": nonce,
    "X-FilyX-Signature": createHmac("sha256", secret).update(canonical).digest("hex")
  };
};

