@accelerated-software-development/caddy-api-client - v0.2.2
    Preparing search index...

    Class CertificateManager

    Certificate Manager

    Unified interface for certificate operations. Bundles certificate inspection, rotation, cleanup, and monitoring.

    const manager = new CertificateManager(client);

    // Inspect certificate
    const info = await manager.inspect(certPem);

    // Rotate certificate
    const result = await manager.rotate({
    domain: "example.com",
    certPath: "/path/to/new-cert.pem",
    keyPath: "/path/to/new-key.pem",
    cleanupOld: true,
    });

    // Check expiration
    const check = await manager.checkExpiration("example.com", 30);
    if (check.hasExpiring) {
    console.log(`${check.expiringCertificates.length} certs expiring soon`);
    }
    Index

    Constructors

    Methods

    • Check if any certificates are expiring soon

      Parameters

      • domain: string

        Domain name

      • thresholdDays: number = 30

        Days before expiration to consider "expiring soon" (default: 30)

      Returns Promise<ExpirationCheckResult>

      Expiration check result

      const check = await manager.checkExpiration("example.com", 30);
      if (check.hasExpiring) {
      for (const cert of check.expiringCertificates) {
      console.log(`Certificate ${cert.tag} expires in ${cert.daysUntilExpiration} days`);
      }
      }
    • Remove old certificates after rotation

      Removes all certificates for the domain except the one with the specified tag.

      Parameters

      • domain: string

        Domain name

      • keepTag: string

        Certificate tag to keep

      • OptionaladminUrl: string

        Optional Caddy admin URL

      Returns Promise<number>

      Number of certificates removed

      const removed = await manager.cleanupOld("example.com", "example.com-abc123-1234567890");
      console.log(`Removed ${removed} old certificates`);
    • Generate a certificate tag for a domain

      Tags are in format: {domain}-{serial}-{timestamp}

      Parameters

      • domain: string

        Domain name

      • certPem: string

        PEM-encoded certificate

      Returns Promise<string>

      Certificate tag

      const tag = await manager.generateTag("example.com", certPem);
      // Returns: "example.com-abc123def456-1234567890"
    • Get days until certificate expiration

      Parameters

      • certPem: string

        PEM-encoded certificate

      Returns Promise<number>

      Days until expiration (negative if expired)

      const days = await manager.getDaysUntilExpiration(certPem);
      console.log(`Certificate expires in ${days} days`);
    • Inspect certificate metadata from PEM string

      Parameters

      • certPem: string

        PEM-encoded certificate

      Returns Promise<CertificateInfo>

      Certificate information

      const info = await manager.inspect(certPem);
      console.log(`Serial: ${info.serialNumber}`);
      console.log(`Expires: ${info.notAfter}`);
    • Check if certificate is expired

      Parameters

      • certPem: string

        PEM-encoded certificate

      Returns Promise<boolean>

      True if certificate is expired

      const isExpired = await manager.isExpired(certPem);
      if (isExpired) {
      console.log("Certificate is expired!");
      }
    • Check if certificate expires soon

      Parameters

      • certPem: string

        PEM-encoded certificate

      • thresholdDays: number = 30

        Days before expiration (default: 30)

      Returns Promise<boolean>

      True if certificate expires within threshold

      const expiringSoon = await manager.isExpiringSoon(certPem, 30);
      if (expiringSoon) {
      console.log("Certificate expires soon!");
      }
    • List all certificates for a domain

      Queries Caddy configuration to find all certificates tagged with the domain.

      Parameters

      • domain: string

        Domain name

      Returns Promise<CertificateWithMetadata[]>

      Array of certificates with metadata

      const certs = await manager.list("example.com");
      for (const cert of certs) {
      console.log(`Tag: ${cert.tag}, Expires: ${cert.notAfter}`);
      }
    • Rotate certificate with zero downtime

      Process:

      1. Load new certificate and key
      2. Generate unique tag
      3. Add new certificate to Caddy
      4. Update domain's TLS automation to use new certificate
      5. Optionally remove old certificates

      Parameters

      Returns Promise<RotationResult>

      Rotation result with new tag and cleanup count

      const result = await manager.rotate({
      domain: "example.com",
      certPath: "/certs/new-cert.pem",
      keyPath: "/certs/new-key.pem",
      cleanupOld: true,
      });
      console.log(`New tag: ${result.tag}`);
      console.log(`Removed ${result.removedCount} old certificates`);