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

import { IAddress } from './remoteAgentConnection.mjs';
export declare const ISharedProcessTunnelService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<ISharedProcessTunnelService>;
export declare const ipcSharedProcessTunnelChannelName = 'sharedProcessTunnel';
export interface ISharedProcessTunnel {
	tunnelLocalPort: number | undefined;
	localAddress: string;
}
/**
 * A service that creates tunnels on the shared process
 */
export interface ISharedProcessTunnelService {
	readonly _serviceBrand: undefined;
	/**
	 * Create a tunnel.
	 */
	createTunnel(): Promise<{
		id: string;
	}>;
	/**
	 * Start a previously created tunnel.
	 * Can only be called once per created tunnel.
	 */
	startTunnel(
		authority: string,
		id: string,
		tunnelRemoteHost: string,
		tunnelRemotePort: number,
		tunnelLocalPort: number | undefined,
		elevateIfNeeded: boolean | undefined,
	): Promise<ISharedProcessTunnel>;
	/**
	 * Set the remote address info for a previously created tunnel.
	 * Should be called as often as the resolver resolves.
	 */
	setAddress(id: string, address: IAddress): Promise<void>;
	/**
	 * Destroy a previously created tunnel.
	 */
	destroyTunnel(id: string): Promise<void>;
}
