import crypto from "crypto";
async function generateSessionId(pem, secret) {
if (!pem) throw new Error("pem is required");
if (secret && !/^[0-9A-Fa-f]+$/.test(secret)) {
throw new Error("secret must be a hex string");
}
const secretKey = secret ?? crypto.randomUUID().replace(/-/g, "");
const secretKeyBase64 = Buffer.from(secretKey, "hex").toString("base64");
const secretKeyBase64Buffer = Buffer.from(secretKeyBase64, "utf-8");
const secretKeyBase64BufferEncrypted = crypto.publicEncrypt(
{
key: pem,
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
oaepHash: 'sha1'
},
secretKeyBase64Buffer,
);
return {
secretKey,
sessionId: secretKeyBase64BufferEncrypted.toString("base64"),
};
}