/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { IConfigurationService } from '../../configuration/common/configuration.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IProductService } from '../../product/common/productService.mjs';
import { IAddressProvider, ISocketFactory } from '../../remote/common/remoteAgentConnection.mjs';
import {
	AbstractTunnelService,
	ISharedTunnelsService as ISharedTunnelsService,
	RemoteTunnel,
} from '../common/tunnel.mjs';
import { ISignService } from '../../sign/common/sign.mjs';
export declare class BaseTunnelService extends AbstractTunnelService {
	private readonly socketFactory;
	private readonly signService;
	private readonly productService;
	constructor(
		socketFactory: ISocketFactory,
		logService: ILogService,
		signService: ISignService,
		productService: IProductService,
		configurationService: IConfigurationService,
	);
	isPortPrivileged(port: number): boolean;
	protected retainOrCreateTunnel(
		addressProvider: IAddressProvider,
		remoteHost: string,
		remotePort: number,
		localPort: number | undefined,
		elevateIfNeeded: boolean,
		privacy?: string,
		protocol?: string,
	): Promise<RemoteTunnel | undefined> | undefined;
}
export declare class TunnelService extends BaseTunnelService {
	constructor(
		logService: ILogService,
		signService: ISignService,
		productService: IProductService,
		configurationService: IConfigurationService,
	);
}
export declare class SharedTunnelsService extends Disposable implements ISharedTunnelsService {
	protected readonly logService: ILogService;
	private readonly productService;
	private readonly signService;
	private readonly configurationService;
	readonly _serviceBrand: undefined;
	private readonly _tunnelServices;
	constructor(
		logService: ILogService,
		productService: IProductService,
		signService: ISignService,
		configurationService: IConfigurationService,
	);
	openTunnel(
		authority: string,
		addressProvider: IAddressProvider | undefined,
		remoteHost: string | undefined,
		remotePort: number,
		localPort?: number,
		elevateIfNeeded?: boolean,
		privacy?: string,
		protocol?: string,
	): Promise<RemoteTunnel | undefined>;
}
