generate-certs
Version:
🗝️ Effortless HTTPS Certificate Generation for Local Development
63 lines (60 loc) • 2.65 kB
JavaScript
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