UNPKG

generate-certs

Version:

🗝️ Effortless HTTPS Certificate Generation for Local Development

63 lines (60 loc) 2.65 kB
import fs from 'fs'; import path from 'path'; import forge from 'node-forge'; // src/index.ts function $generateCerts(certificatesPath) { if (fs.existsSync(certificatesPath)) fs.rmSync(certificatesPath, { recursive: true }); fs.mkdirSync(certificatesPath, { recursive: true }); const keys = forge.pki.rsa.generateKeyPair(2048); const privateKey = forge.pki.privateKeyToPem(keys.privateKey); fs.writeFileSync(path.join(certificatesPath, "key.pem"), privateKey); const cert = forge.pki.createCertificate(); cert.publicKey = keys.publicKey; cert.serialNumber = "01"; cert.validity.notBefore = /* @__PURE__ */ new Date(); cert.validity.notAfter = /* @__PURE__ */ new Date(); cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1); const attrs = [{ name: "commonName", value: "localhost" }]; cert.setSubject(attrs); cert.setIssuer(attrs); cert.sign(keys.privateKey, forge.md.sha256.create()); const certPem = forge.pki.certificateToPem(cert); fs.writeFileSync(path.join(certificatesPath, "cert.pem"), certPem); } // src/index.ts function generateCerts({ certsPath, activateLogs = true }) { const certs = $checkForCerts({ certsPath, activateLogs }); if (certs) return certs; try { $generateCerts(certsPath); if (activateLogs) { console.log("\u{1F510} Certificates for HTTPS have been generated successfully!"); console.log(`\u{1F6D1} Please visit the URL, click on 'Advanced' -> 'Proceed to localhost(unsafe)' to continue.`); } return { key: $readFile(certsPath, "key.pem"), cert: $readFile(certsPath, "cert.pem") }; } catch (err) { throw new Error(`\u274C Error generating certificates: ${err instanceof Error ? err.message : "Unknown error"}`); } } function $checkForCerts({ certsPath, activateLogs: log = true }) { try { if ($isFileExists(certsPath, "key.pem") && $isFileExists(certsPath, "cert.pem")) { if (log) console.log("\u{1F50D} Found existing certificates for HTTPS."); return { key: $readFile(certsPath, "key.pem"), cert: $readFile(certsPath, "cert.pem") }; } } catch (err) { throw new Error( `\u274C Error checking for existing certificates: ${err instanceof Error ? err.message : "Unknown error"}` ); } } function $isFileExists(dir, fileName) { return fs.existsSync(path.join(dir, fileName)); } function $readFile(dir, fileName) { if (!$isFileExists(dir, fileName)) throw new Error(`"${fileName}" not found.`); return fs.readFileSync(path.join(dir, fileName), "utf8"); } export { $isFileExists, $readFile, generateCerts }; //# sourceMappingURL=index.mjs.map //# sourceMappingURL=index.mjs.map