90 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-05-09 17:00:27 +00:00
/**
* Certificate management module for SmartProxy
* Provides certificate provisioning, storage, and management capabilities
*/
// Certificate types and models
export * from './models/certificate-types.js';
// Certificate events
export * from './events/certificate-events.js';
// Certificate providers
export * from './providers/cert-provisioner.js';
// ACME related exports
export * from './acme/acme-factory.js';
export * from './acme/challenge-handler.js';
// Certificate utilities
export * from './utils/certificate-helpers.js';
// Certificate storage
export * from './storage/file-storage.js';
// Convenience function to create a certificate provisioner with common settings
import { CertProvisioner } from './providers/cert-provisioner.js';
import { buildPort80Handler } from './acme/acme-factory.js';
import type { IAcmeOptions, IDomainForwardConfig } from './models/certificate-types.js';
import type { IDomainConfig } from '../forwarding/config/domain-config.js';
2025-05-09 17:00:27 +00:00
/**
* Creates a complete certificate provisioning system with default settings
* @param domainConfigs Domain configurations
* @param acmeOptions ACME options for certificate provisioning
* @param networkProxyBridge Bridge to apply certificates to network proxy
* @param certProvider Optional custom certificate provider
* @returns Configured CertProvisioner
*/
export function createCertificateProvisioner(
domainConfigs: IDomainConfig[],
acmeOptions: IAcmeOptions,
2025-05-09 17:00:27 +00:00
networkProxyBridge: any, // Placeholder until NetworkProxyBridge is migrated
certProvider?: any // Placeholder until cert provider type is properly defined
): CertProvisioner {
// Build the Port80Handler for ACME challenges
const port80Handler = buildPort80Handler(acmeOptions);
// Extract ACME-specific configuration
const {
renewThresholdDays = 30,
renewCheckIntervalHours = 24,
autoRenew = true,
domainForwards = []
} = acmeOptions;
// Create and return the certificate provisioner
// Convert domain configs to route configs for the new CertProvisioner
const routeConfigs = domainConfigs.map(config => {
// Create a basic route config with the minimum required properties
return {
match: {
ports: 443,
domains: config.domains
},
action: {
type: 'forward' as const,
target: config.forwarding.target,
tls: {
mode: config.forwarding.type === 'https-terminate-to-https' ?
'terminate-and-reencrypt' as const :
'terminate' as const,
certificate: 'auto' as 'auto'
},
security: config.forwarding.security
}
};
});
2025-05-09 17:00:27 +00:00
return new CertProvisioner(
routeConfigs,
2025-05-09 17:00:27 +00:00
port80Handler,
networkProxyBridge,
certProvider,
renewThresholdDays,
renewCheckIntervalHours,
autoRenew,
domainForwards
);
}