import { ScalewayInstanceV1PrivateNIC, ScalewayInstanceV1SecurityGroupRule, CreateServerRequest, ServerActionRequestActionEnum, CreateSecurityGroupRequest, ScalewayInstanceV1Server, ScalewayInstanceV1SecurityGroup, ScalewayInstanceV1SetSecurityGroupRulesRequestRule, ScalewayInstanceV1ListServersTypesResponseServersServerKey, CreateServerZoneEnum } from './generated/instances';
export declare const INSTANCE_ZONES: CreateServerZoneEnum[];
export interface ScalewayInstanceServerType extends ScalewayInstanceV1ListServersTypesResponseServersServerKey {
    name?: string;
}
export declare class ScalewayInstancesAdapter {
    private readonly logger;
    private readonly baseUrl;
    private readonly timeout;
    private createAxiosInstance;
    private createConfiguration;
    private createInstancesApi;
    private createInstanceTypesApi;
    private createSecurityGroupsApi;
    private createPrivateNicsApi;
    /**
     * Resolve a Scaleway IPAM IP UUID to its inline address (e.g. "10.10.1.3").
     * IPv6 addresses are filtered out — callers want the v4 used by K3s join.
     */
    resolveIpamIpv4(token: string, region: string, ipId: string): Promise<string | null>;
    /**
     * Resolve the IPv4 address of the first NIC attached to a Private Network.
     * Returns null if the server has no NIC or IPAM hasn't allocated an IPv4 yet.
     */
    getInstancePrivateIp(token: string, zone: CreateServerZoneEnum, server: ScalewayInstanceV1Server): Promise<string | null>;
    /**
     * Attach a Scaleway Instance to a Private Network by creating a Private NIC.
     * Idempotent: returns the existing NIC if one already attaches the server to
     * the same private network.
     */
    attachToPrivateNetwork(token: string, zone: CreateServerZoneEnum, serverId: string, privateNetworkId: string): Promise<ScalewayInstanceV1PrivateNIC>;
    listServers(token: string, zone: CreateServerZoneEnum): Promise<ScalewayInstanceV1Server[]>;
    getServer(token: string, zone: string, serverId: string): Promise<ScalewayInstanceV1Server | null>;
    createServer(token: string, zone: CreateServerZoneEnum, payload: CreateServerRequest): Promise<ScalewayInstanceV1Server>;
    deleteServer(token: string, zone: string, serverId: string): Promise<void>;
    serverAction(token: string, zone: string, serverId: string, action: ServerActionRequestActionEnum): Promise<void>;
    updateServerTags(token: string, zone: string, serverId: string, tags: string[]): Promise<void>;
    /**
     * Change the commercial_type of a stopped Instance. Scaleway constraints:
     * - server must be in `stopped` state
     * - cannot be in a placement group
     * - cross-OS family (Linux↔Windows) not allowed
     * - local-storage requirements of the target type must be satisfied
     *
     * The caller is responsible for stopping the server beforehand and for
     * starting it after. Returns when the API accepts the request; the change
     * is applied during the next power-on.
     */
    updateServerCommercialType(token: string, zone: string, serverId: string, commercialType: string): Promise<void>;
    listServerTypes(token: string, zone: CreateServerZoneEnum): Promise<Array<ScalewayInstanceServerType & {
        name: string;
    }>>;
    /**
     * Set cloud-init user data on an instance.
     * The generated UserDataApi uses the browser File type — bypass with raw axios.
     */
    setUserData(token: string, zone: string, serverId: string, cloudInit: string): Promise<void>;
    createSecurityGroup(token: string, zone: string, payload: CreateSecurityGroupRequest): Promise<ScalewayInstanceV1SecurityGroup>;
    getSecurityGroup(token: string, zone: string, sgId: string): Promise<ScalewayInstanceV1SecurityGroup | null>;
    listSecurityGroups(token: string, zone: string): Promise<ScalewayInstanceV1SecurityGroup[]>;
    listSecurityGroupRules(token: string, zone: string, sgId: string): Promise<ScalewayInstanceV1SecurityGroupRule[]>;
    setSecurityGroupRules(token: string, zone: string, sgId: string, rules: ScalewayInstanceV1SetSecurityGroupRulesRequestRule[]): Promise<void>;
    deleteSecurityGroup(token: string, zone: string, sgId: string): Promise<void>;
    applySecurityGroupToServer(token: string, zone: string, serverId: string, sgId: string): Promise<void>;
    removeSecurityGroupFromServer(token: string, zone: string, serverId: string): Promise<void>;
}
