/**
 * Wireguard interface helpers
 *
 * @since 1.0.0
 */
import * as Platform from "@effect/platform";
import * as ParseResult from "@effect/schema/ParseResult";
import * as Schema from "@effect/schema/Schema";
import * as Effect from "effect/Effect";
import * as Scope from "effect/Scope";
import * as WireguardConfig from "./WireguardConfig.js";
import * as WireguardErrors from "./WireguardErrors.js";
declare const WireguardInterface_base: Schema.Class<WireguardInterface, {
    /** Ensures the interface name matches the platform's interface name regex. */
    Name: Schema.transformOrFail<Schema.$string, Schema.$string, never>;
}, {
    readonly Name: string;
}, {
    readonly Name: string;
}, never, {
    readonly Name: string;
}, {}, {}>;
/**
 * A wireguard interface name.
 *
 * @since 1.0.0
 * @category Datatypes
 */
export declare class WireguardInterface extends WireguardInterface_base {
    /**
     * @since 1.0.0
     * @category Constructors
     */
    static getNextAvailableInterface: Effect.Effect<WireguardInterface, WireguardErrors.WireguardError, never>;
    /**
     * Starts a wireguard tunnel that will be gracefully shutdown and stop
     * serving traffic once the scope is closed. If no how options is specified,
     * then the interface will be brought up using the
     * bundled-wireguard-go+userspace-api method.
     *
     * @since 1.0.0
     * @category Wireguard
     * @param config - The wireguard configuration to use in INI format.
     * @param options - Options to control how the wireguard configuration is
     *   applied.
     */
    upScoped: {
        (config: WireguardConfig.WireguardConfig, options: {
            how?: "bundled-wireguard-go+userspace-api" | "system-wireguard-go+userspace-api" | "system-wireguard+system-wg-quick" | "system-wireguard+bundled-wg-quick" | "system-wireguard-go+system-wg-quick" | "bundled-wireguard-go+system-wg-quick" | "system-wireguard-go+bundled-wg-quick" | "bundled-wireguard-go+bundled-wg-quick" | undefined;
            sudo?: boolean | "ask";
        }): Effect.Effect<WireguardInterface, WireguardErrors.WireguardError | ParseResult.ParseError | Platform.Error.PlatformError, Platform.FileSystem.FileSystem | Platform.Path.Path | Scope.Scope>;
    };
    /**
     * Starts a wireguard tunnel that will continue to run and serve traffic
     * even after the nodejs process exits. If no how options is specified, then
     * the interface will be brought up using the
     * bundled-wireguard-go+userspace-api method.
     *
     * @since 1.0.0
     * @category Wireguard
     * @param config - The wireguard configuration to use in INI format.
     * @param options - Options to control how the wireguard configuration is
     *   applied.
     */
    up: {
        (config: WireguardConfig.WireguardConfig, options: {
            how?: "bundled-wireguard-go+userspace-api" | "system-wireguard-go+userspace-api" | "system-wireguard+system-wg-quick" | "system-wireguard+bundled-wg-quick" | "system-wireguard-go+system-wg-quick" | "bundled-wireguard-go+system-wg-quick" | "system-wireguard-go+bundled-wg-quick" | "bundled-wireguard-go+bundled-wg-quick" | undefined;
            sudo?: boolean | "ask";
        }): Effect.Effect<WireguardInterface, WireguardErrors.WireguardError | ParseResult.ParseError | Platform.Error.PlatformError, Platform.FileSystem.FileSystem | Platform.Path.Path>;
    };
    /**
     * Stops a previously started wireguard tunnel.
     *
     * @since 1.0.0
     * @category Wireguard
     */
    down: {
        (options: {
            sudo?: boolean | "ask";
            how: "bundled-wg-quick" | "userspace-api" | "system-wg-quick";
        }): Effect.Effect<void, Platform.Error.PlatformError, Platform.FileSystem.FileSystem>;
    };
}
export default WireguardInterface;
//# sourceMappingURL=WireguardInterface.d.ts.map