/**
 * Server-side network access interfaces.
 * These cover tunnel/VPN/endpoint management, NOT the addon-facing INetworkProvider.
 */
export interface INetworkEndpoint {
    id: string;
    type: 'lan' | 'mdns' | 'domain' | 'tunnel' | 'vpn' | 'custom';
    provider: string;
    url: string;
    internal: boolean;
    capabilities: EndpointCapabilities;
    priority: number;
    status: 'online' | 'offline' | 'unknown';
    metadata?: Record<string, unknown>;
}
export interface EndpointCapabilities {
    supportsWebRTC: boolean;
    supportsWebSocket: boolean;
    supportsSSE: boolean;
    maxBandwidthMbps?: number;
}
export interface INetworkAccessProvider {
    id: string;
    type: string;
    start(): Promise<INetworkEndpoint>;
    stop(): Promise<void>;
    getEndpoint(): INetworkEndpoint | null;
    getStatus(): NetworkAccessStatus;
}
export interface NetworkAccessStatus {
    connected: boolean;
    publicUrl?: string;
    error?: string;
    connectedSince?: number;
}
export interface IExposedResource {
    id: string;
    providerId: string;
    deviceId?: string;
    type: ExposedResourceType;
    path: string;
    auth: ResourceAuthMode;
    description: string;
    contentType?: string;
    enabled: boolean;
}
export type ExposedResourceType = 'snapshot' | 'stream' | 'webhook' | 'api' | 'media' | 'custom';
export type ResourceAuthMode = {
    mode: 'public';
} | {
    mode: 'token';
    token: string;
} | {
    mode: 'api-key';
} | {
    mode: 'jwt';
} | {
    mode: 'ip-whitelist';
    ips: string[];
};
export interface IResourceExposer {
    getExposedResources(): IExposedResource[];
    handleResourceRequest(resourceId: string, request: ExposedResourceRequest): Promise<ExposedResourceResponse>;
}
export interface ExposedResourceRequest {
    method: 'GET' | 'POST' | 'PUT' | 'DELETE';
    path: string;
    headers: Record<string, string>;
    query: Record<string, string>;
    body?: Buffer | string;
    remoteIp: string;
}
export interface ExposedResourceResponse {
    status: number;
    headers?: Record<string, string>;
    body?: Buffer | string | NodeJS.ReadableStream;
}
//# sourceMappingURL=server-network.d.ts.map