import Configuration extension AbsoluteConfigKey { /// A namespace for the static files cache configuration keys, as absolute keys. public enum Cache { /// The absolute configuration key for the max-age, in seconds, applied to fingerprinted assets and fonts. public static let maxAgeAsset: AbsoluteConfigKey = .init(.Cache.maxAgeAsset) /// The absolute configuration key for the max-age, in seconds, applied to unversioned text-based static files. public static let maxAgeText: AbsoluteConfigKey = .init(.Cache.maxAgeText) /// The absolute configuration key for the max-age, in seconds, applied to image static files. public static let maxAgeImage: AbsoluteConfigKey = .init(.Cache.maxAgeImage) /// The absolute configuration key for the max-age, in seconds, applied to all other static files. public static let maxAgeDefault: AbsoluteConfigKey = .init(.Cache.maxAgeDefault) } /// A namespace for the response compression configuration keys, as absolute keys. public enum Compression { /// The absolute configuration key for the minimum response body size, in bytes, before compression is applied. public static let minResponseSize: AbsoluteConfigKey = .init(.Compression.minResponseSize) } /// A namespace for the persistence configuration keys, as absolute keys. public enum Database { /// The absolute configuration key selecting migrate-and-exit mode. public static let migrate: AbsoluteConfigKey = .init(.Database.migrate) /// The absolute configuration key for the persistence driver. public static let driver: AbsoluteConfigKey = .init(.Database.driver) /// The absolute configuration key for the PostgreSQL host. public static let host: AbsoluteConfigKey = .init(.Database.host) /// The absolute configuration key for the PostgreSQL port. public static let port: AbsoluteConfigKey = .init(.Database.port) /// The absolute configuration key for the database name. public static let name: AbsoluteConfigKey = .init(.Database.name) /// The absolute configuration key for the database username. public static let username: AbsoluteConfigKey = .init(.Database.username) /// The absolute configuration key for the database password. public static let password: AbsoluteConfigKey = .init(.Database.password) /// The absolute configuration key for the TLS posture used when connecting. public static let tls: AbsoluteConfigKey = .init(.Database.tls) /// The absolute configuration key for the maximum pooled connections per event loop. public static let poolMaxPerEventLoop: AbsoluteConfigKey = .init(.Database.poolMaxPerEventLoop) /// The absolute configuration key for the longest wait, in seconds, for a pooled connection to become available. public static let poolTimeout: AbsoluteConfigKey = .init(.Database.poolTimeout) } /// A namespace for the HTTP server configuration keys, as absolute keys. public enum HTTP { /// The absolute configuration key for the host the server binds to. public static let host: AbsoluteConfigKey = .init(.HTTP.host) /// The absolute configuration key for the port the server listens on. public static let port: AbsoluteConfigKey = .init(.HTTP.port) /// The absolute configuration key for the server's name. public static let serverName: AbsoluteConfigKey = .init(.HTTP.serverName) } /// A namespace for the logging configuration keys, as absolute keys. public enum Log { /// The absolute configuration key for the minimum log level. public static let level: AbsoluteConfigKey = .init(.Log.level) } /// A namespace for the rate limit configuration keys, as absolute keys. public enum RateLimit { /// The absolute configuration key for the number of requests admitted per client per window. public static let limit: AbsoluteConfigKey = .init(.RateLimit.limit) /// The absolute configuration key for the window length, in seconds. public static let window: AbsoluteConfigKey = .init(.RateLimit.window) /// The absolute configuration key for keying clients by the first `X-Forwarded-For` entry. public static let trustForwardedFor: AbsoluteConfigKey = .init(.RateLimit.trustForwardedFor) } /// A namespace for the path configuration keys, as absolute keys. public enum Path { /// The absolute configuration key for the directory the static files are served from. public static let staticFiles: AbsoluteConfigKey = .init(.Path.staticFiles) } /// A namespace for the security headers configuration keys, as absolute keys. public enum Security { /// The absolute configuration key for the `Content-Security-Policy` header value. public static let contentSecurityPolicy: AbsoluteConfigKey = .init(.Security.contentSecurityPolicy) /// The absolute configuration key for the `X-Content-Type-Options` header value. public static let contentTypeOptions: AbsoluteConfigKey = .init(.Security.contentTypeOptions) /// The absolute configuration key for the `X-Frame-Options` header value. public static let frameOptions: AbsoluteConfigKey = .init(.Security.frameOptions) /// The absolute configuration key for the `Referrer-Policy` header value. public static let referrerPolicy: AbsoluteConfigKey = .init(.Security.referrerPolicy) /// The absolute configuration key for the `Permissions-Policy` header value. public static let permissionsPolicy: AbsoluteConfigKey = .init(.Security.permissionsPolicy) /// The absolute configuration key for the `Strict-Transport-Security` header value. public static let strictTransportSecurity: AbsoluteConfigKey = .init(.Security.strictTransportSecurity) } }