import type { SharedServiceProfile } from '../../config/shared-service-profile.js'; import type { CliContext } from '../../context/create-context.js'; import type { CaddyRouteOptions, RouteManifest, RouteManifestInput } from '../../runtime/manifest-store.js'; import type { ReserveRouteManifestOptions, RouteManifestConflict } from '../../runtime/route-reservation.js'; import { SharedDockerService } from '../docker-service.js'; import type { ServiceStatus } from '../service.js'; type CaddyPrepared = { config: string; dataDir: string; }; export declare class CaddyService extends SharedDockerService { static readonly container = "stamhoofd-caddy"; readonly key = "caddy"; readonly name = "Caddy"; getContainer(): string; getDetail(): Promise; prepare(context: CliContext): Promise; canReuse(_context: CliContext, _options: void, _prepared: CaddyPrepared, status: ServiceStatus): Promise; getDockerArgs(_context: CliContext, _options: void, prepared: CaddyPrepared): Promise; /** * Render the config of every active manifest and apply it to the running container. */ static reload(context: CliContext): Promise; /** * The active manifests that already claim one of the ports of `manifest`. Ask this before * adding a manifest of your own: overlapping ports mean the two would fight over the same * servers (and, for Playwright workers, over the same domains). */ static findRouteManifestConflicts(context: CliContext, manifest: RouteManifestInput): Promise; /** * Claim a free port range for this process, retrying other ranges while they conflict with an * active manifest or with a port that is already bound. Give the range back with * `removeOwnRouteManifests` followed by a reload. */ static reserveRouteManifest(context: CliContext, options: ReserveRouteManifestOptions): Promise; static buildRouteOptions(context: CliContext): CaddyRouteOptions; private static writeRuntimeConfig; static dockerArgs(config: string, dataDir: string, profile: SharedServiceProfile, options?: { disableLabel?: boolean; }): string[]; private static validateConfig; /** * Build the custom Caddy image that bundles the plugins the config relies on (currently * `replace_response`, used by the webshop strict-dynamic CSP nonce). The stock Caddy image * does not ship these, so `caddy validate`/`caddy run` would reject the config without them. * The build is layer-cached, so this is a no-op once the image exists. */ static ensureImage(context: CliContext): Promise; static dockerfile(): string; static dataDir(): string; private static runsInHostNetwork; } export declare const caddyService: CaddyService; export {}; //# sourceMappingURL=caddy-service.d.ts.map