export type TServiceTargetProtocol = 'http' | 'https' | 'ssh' | 'tcp' | 'udp' | `custom:${string}`; export type TServiceTargetPortRef = string | number; export interface IServiceTargetPort { name: string; port: number; portEnd?: number; protocol: TServiceTargetProtocol; description?: string; default?: boolean; } export interface IServiceDomainRoute { domainId?: string; name: string; targetPort?: TServiceTargetPortRef; /** * Legacy backend target port. New writes must use targetPort. */ port?: number; protocol?: 'http' | 'https'; sourceProfileRef?: string; /** * Provider-specific desired DNS proxy state (for example Cloudflare). * Producers should persist an explicit boolean when gateway DNS reconciliation is enabled. */ proxied?: boolean; } export interface IServicePublicPortMapping { name: string; publicPort: number; publicPortEnd?: number; targetPort: TServiceTargetPortRef; protocol: 'tcp' | 'udp'; sourceProfileRef?: string; exclusive: true; } export interface IResolvedServiceDomainRoute extends IServiceDomainRoute { targetPort: TServiceTargetPortRef; target: IServiceTargetPort; } export interface IResolvedServicePublicPortMapping extends IServicePublicPortMapping { target: IServiceTargetPort; targetPortStart: number; targetPortEnd: number; publicPortEnd: number; } export interface IServicePortSourceData { name?: string; ports?: { web?: number; custom?: Record; }; targetPorts?: IServiceTargetPort[]; domains?: IServiceDomainRoute[]; publicPortMappings?: IServicePublicPortMapping[]; } export interface INormalizedServicePortConfig { targetPorts: IServiceTargetPort[]; defaultTargetPort?: IServiceTargetPort; domains: IResolvedServiceDomainRoute[]; publicPortMappings: IResolvedServicePublicPortMapping[]; } export interface IServicePortNormalizationOptions { /** * Accept legacy domains[].port only when it resolves to a declared target. * Defaults to true for staged migration reads. */ allowLegacyDomainPort?: boolean; /** * Domain routes are HTTP(S) virtual-host routes. Defaults to true. */ requireHttpDomainTargets?: boolean; } export declare function normalizeServicePortConfig(serviceDataArg: IServicePortSourceData, optionsArg?: IServicePortNormalizationOptions): INormalizedServicePortConfig; export declare function normalizeServicePortData(serviceDataArg: T, optionsArg?: IServicePortNormalizationOptions): T & { targetPorts: IServiceTargetPort[]; domains?: IServiceDomainRoute[]; publicPortMappings?: IServicePublicPortMapping[]; }; export declare function resolveServiceTargetPort(targetPortsArg: IServiceTargetPort[], refArg: TServiceTargetPortRef): IServiceTargetPort | undefined; export declare function resolveDefaultServiceTargetPort(targetPortsArg: IServiceTargetPort[]): IServiceTargetPort | undefined; export declare function isHttpServiceTargetProtocol(protocolArg: TServiceTargetProtocol): boolean;