import crypto from "crypto"; console.log(` Generating Private Keys ----------------- This script will go through and generate all the keys necessary for running the Credential Manager API locally. This process might take several minutes. -----------------`); const keyFiles = [ ".accessToken.key", ".refreshToken.key", ".permissions.key", ".secureValues.key", ]; const publicDir = "public-keys"; await Promise.all( keyFiles.map(async (v) => { const privExists = await Bun.file(v) .exists() .then((bool) => { if (bool) { console.log(`'${v}' already exists`); return true; } return false; }); const pubPath = `${publicDir}/${v.replace(/\.key$/, ".pub")}`; const pubExists = await Bun.file(pubPath) .exists() .then((bool) => { if (bool) { console.log(`'${pubPath}' already exists`); return true; } return false; }); if (!privExists || !pubExists) { // Always regenerate both files together to ensure the key pair matches console.log(`Generating '${v}' and '${pubPath}'...`); const { privateKey, publicKey } = crypto.generateKeyPairSync("rsa", { modulusLength: 4096, privateKeyEncoding: { type: "pkcs8", format: "pem" }, publicKeyEncoding: { type: "spki", format: "pem" }, }); await Bun.write(v, privateKey); await Bun.write(pubPath, publicKey); } return; }), ); console.log("\nGenerated All Keys Successfully!");