import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './common';
export interface Account {
    active_since: string;
    address_1: string;
    address_2?: string;
    balance: number;
    balances: {
        uninvoiced: number;
        past_due: boolean;
    };
    billing_source: string;
    capabilities: string[];
    city: string;
    company: string;
    country: string;
    credit_card: {
        expiry: string;
        last_four: string;
    };
    email: string;
    euuid: string;
    first_name: string;
    last_name: string;
    phone: string;
    state: string;
    tax_id: string;
    zip: string;
}
export interface UpdateAccountRequest {
    address_1?: string;
    address_2?: string;
    city?: string;
    company?: string;
    country?: string;
    email?: string;
    first_name?: string;
    last_name?: string;
    phone?: string;
    state?: string;
    tax_id?: string;
    zip?: string;
}
export interface Agreement {
    id: string;
    description: string;
    body: string;
    title: string;
    created: string;
    modified: string;
    expiry?: string;
    url?: string;
}
export interface AcknowledgeAgreementRequest {
    agreement_ids: string[];
}
export interface ServiceAvailability {
    region: string;
    services: Record<string, boolean>;
}
export interface RegionServiceAvailability {
    id: string;
    services: Record<string, boolean>;
}
export interface CancelAccountRequest {
    comments?: string;
}
export interface ChildAccount {
    euuid: string;
    company: string;
    email: string;
    is_active: boolean;
    billing_cycle: string;
    state: string;
    has_credit_card: boolean;
    enterprise_data?: {
        credit_limit: number;
        acl: Record<string, string>;
    };
}
export interface ProxyTokenRequest {
    expiry?: string;
    scopes?: string[];
}
export interface ProxyToken {
    token: string;
    scopes: string[];
    expiry: string;
}
export interface AccountEvent {
    id: number;
    action: string;
    created: string;
    entity: {
        id: number;
        label: string;
        type: string;
        url: string;
    };
    percent_complete?: number;
    rate?: string;
    read: boolean;
    seen: boolean;
    status: string;
    time_remaining?: number;
    username: string;
    message?: string;
    secondary_entity?: {
        id: number;
        label: string;
        type: string;
        url: string;
    };
}
export interface Invoice {
    id: number;
    date: string;
    label: string;
    subtotal: number;
    tax: number;
    total: number;
}
export interface InvoiceItem {
    amount: number;
    from: string;
    to: string;
    label: string;
    quantity: number;
    type: string;
    unit_price: string;
    tax: number;
    total: number;
}
export interface AccountLogin {
    id: number;
    datetime: string;
    ip: string;
    restricted: boolean;
    status: string;
    username: string;
}
export interface Maintenance {
    when: string;
    entity: {
        id: string;
        label: string;
        type: string;
        url: string;
    };
    duration: number;
    status: string;
    type: string;
    reason: string;
    key: string;
    created: string;
    updated: string;
}
export interface Notification {
    body: string;
    entity: {
        id: number;
        label: string;
        type: string;
        url: string;
    };
    label: string;
    message: string;
    severity: string;
    type: string;
    until: string;
    when: string;
}
export interface OAuthClient {
    id: string;
    label: string;
    redirect_uri: string;
    secret: string;
    public: boolean;
    status: string;
    thumbnail_url?: string;
}
export interface CreateOAuthClientRequest {
    label: string;
    redirect_uri: string;
    public?: boolean;
}
export interface UpdateOAuthClientRequest {
    label?: string;
    redirect_uri?: string;
    public?: boolean;
}
export interface OAuthClientSecret {
    secret: string;
}
export interface AccountSettings {
    managed: boolean;
    longview_subscription: string | null;
    network_helper: boolean;
    backups_enabled: boolean;
    object_storage: 'active' | 'disabled' | 'suspended';
}
export interface UpdateAccountSettingsRequest {
    network_helper?: boolean;
    backups_enabled?: boolean;
}
export interface AccountNetworkTransfer {
    billable: number;
    used: number;
    quota: number;
}
export interface User {
    username: string;
    email: string;
    restricted: boolean;
    ssh_keys: string[];
    two_factor_auth: boolean;
}
export interface CreateUserRequest {
    username: string;
    email: string;
    restricted: boolean;
}
export interface UpdateUserRequest {
    email?: string;
    restricted?: boolean;
}
export interface UserGrants {
    global: {
        account_access: string;
        add_domains?: boolean;
        add_databases?: boolean;
        add_firewalls?: boolean;
        add_images?: boolean;
        add_linodes?: boolean;
        add_longview?: boolean;
        add_nodebalancers?: boolean;
        add_stackscripts?: boolean;
        add_volumes?: boolean;
        cancel_account?: boolean;
        longview_subscription?: boolean;
    };
    database: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    domain: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    firewall: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    image: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    linode: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    longview: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    nodebalancer: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    stackscript: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
    volume: Record<string, {
        id: number;
        permissions: string;
        label: string;
    }>;
}
export interface UpdateUserGrantsRequest {
    global: {
        account_access?: string;
        add_domains?: boolean;
        add_databases?: boolean;
        add_firewalls?: boolean;
        add_images?: boolean;
        add_linodes?: boolean;
        add_longview?: boolean;
        add_nodebalancers?: boolean;
        add_stackscripts?: boolean;
        add_volumes?: boolean;
        cancel_account?: boolean;
        longview_subscription?: boolean;
    };
    database?: Record<string, {
        permissions: string;
    }>;
    domain?: Record<string, {
        permissions: string;
    }>;
    firewall?: Record<string, {
        permissions: string;
    }>;
    image?: Record<string, {
        permissions: string;
    }>;
    linode?: Record<string, {
        permissions: string;
    }>;
    longview?: Record<string, {
        permissions: string;
    }>;
    nodebalancer?: Record<string, {
        permissions: string;
    }>;
    stackscript?: Record<string, {
        permissions: string;
    }>;
    volume?: Record<string, {
        permissions: string;
    }>;
}
export interface Entity {
    id: number;
    type: string;
    label: string;
    url: string;
}
export interface IamRole {
    name: string;
    description: string;
    permissions: string[];
}
export interface UserRolePermissions {
    username: string;
    roles: string[];
}
export interface UpdateUserRolePermissionsRequest {
    roles: string[];
}
export interface DelegationChildAccount {
    euuid: string;
    company: string;
    email: string;
    is_active: boolean;
}
export interface DelegationChildAccountUsers {
    euuid: string;
    users: string[];
}
export interface UpdateDelegationChildAccountUsersRequest {
    users: string[];
}
export interface DelegationDefaultRoles {
    roles: string[];
}
export interface UpdateDelegationDefaultRolesRequest {
    roles: string[];
}
export interface DelegationProfileAccount {
    euuid: string;
    company: string;
    email: string;
    is_active: boolean;
}
export interface DelegationToken {
    token: string;
    scopes: string[];
    expiry: string;
}
export interface UserDelegations {
    username: string;
    child_accounts: string[];
}
export interface MaintenancePolicy {
    id: number;
    type: string;
    frequency: string;
    day_of_week: number;
    pending: boolean;
}
export interface ResourceLock {
    id: number;
    resource_id: number;
    resource_type: string;
    reason?: string;
    created: string;
}
export interface CreateResourceLockRequest {
    resource_id: number;
    resource_type: string;
    reason?: string;
}
export interface AccountClientInterface {
    getAccount(): Promise<Account>;
    updateAccount(data: UpdateAccountRequest): Promise<Account>;
    getAgreements(): Promise<Agreement[]>;
    acknowledgeAgreements(data: AcknowledgeAgreementRequest): Promise<{}>;
    getServiceAvailability(): Promise<ServiceAvailability[]>;
    getRegionServiceAvailability(regionId: string): Promise<RegionServiceAvailability>;
    cancelAccount(data: CancelAccountRequest): Promise<{}>;
    getEvents(params?: PaginationParams): Promise<PaginatedResponse<AccountEvent>>;
    getEvent(eventId: number): Promise<AccountEvent>;
    markEventAsSeen(eventId: number): Promise<{}>;
    getInvoices(params?: PaginationParams): Promise<PaginatedResponse<Invoice>>;
    getInvoice(invoiceId: number): Promise<Invoice>;
    getInvoiceItems(invoiceId: number, params?: PaginationParams): Promise<PaginatedResponse<InvoiceItem>>;
    getLogins(params?: PaginationParams): Promise<PaginatedResponse<AccountLogin>>;
    getLogin(loginId: number): Promise<AccountLogin>;
    getMaintenances(params?: PaginationParams): Promise<PaginatedResponse<Maintenance>>;
    getNotifications(): Promise<Notification[]>;
    getOAuthClients(params?: PaginationParams): Promise<PaginatedResponse<OAuthClient>>;
    createOAuthClient(data: CreateOAuthClientRequest): Promise<OAuthClient>;
    deleteOAuthClient(clientId: string): Promise<void>;
    getOAuthClient(clientId: string): Promise<OAuthClient>;
    updateOAuthClient(clientId: string, data: UpdateOAuthClientRequest): Promise<OAuthClient>;
    resetOAuthClientSecret(clientId: string): Promise<OAuthClientSecret>;
    getOAuthClientThumbnail(clientId: string): Promise<any>;
    updateOAuthClientThumbnail(clientId: string, thumbnailData: any): Promise<{}>;
    getAccountSettings(): Promise<AccountSettings>;
    updateAccountSettings(data: UpdateAccountSettingsRequest): Promise<AccountSettings>;
    enableManagedService(): Promise<{}>;
    getNetworkTransfer(): Promise<AccountNetworkTransfer>;
    getUsers(params?: PaginationParams): Promise<PaginatedResponse<User>>;
    createUser(data: CreateUserRequest): Promise<User>;
    deleteUser(username: string): Promise<void>;
    getUser(username: string): Promise<User>;
    updateUser(username: string, data: UpdateUserRequest): Promise<User>;
    getUserGrants(username: string): Promise<UserGrants>;
    updateUserGrants(username: string, data: UpdateUserGrantsRequest): Promise<UserGrants>;
    getEntities(params?: PaginationParams): Promise<PaginatedResponse<Entity>>;
    getIamRoles(): Promise<IamRole[]>;
    getUserRolePermissions(username: string): Promise<UserRolePermissions>;
    updateUserRolePermissions(username: string, data: UpdateUserRolePermissionsRequest): Promise<UserRolePermissions>;
    getDelegationChildAccounts(params?: PaginationParams): Promise<PaginatedResponse<DelegationChildAccount>>;
    getDelegationChildAccountUsers(euuid: string): Promise<DelegationChildAccountUsers>;
    updateDelegationChildAccountUsers(euuid: string, data: UpdateDelegationChildAccountUsersRequest): Promise<DelegationChildAccountUsers>;
    getDelegationDefaultRoles(): Promise<DelegationDefaultRoles>;
    updateDelegationDefaultRoles(data: UpdateDelegationDefaultRolesRequest): Promise<DelegationDefaultRoles>;
    getDelegationProfileAccounts(params?: PaginationParams): Promise<PaginatedResponse<DelegationProfileAccount>>;
    getDelegationProfileAccount(euuid: string): Promise<DelegationProfileAccount>;
    createDelegationToken(euuid: string): Promise<DelegationToken>;
    getUserDelegations(username: string): Promise<UserDelegations>;
    getMaintenancePolicies(params?: PaginationParams): Promise<PaginatedResponse<MaintenancePolicy>>;
    getResourceLocks(params?: PaginationParams): Promise<PaginatedResponse<ResourceLock>>;
    getResourceLock(resourceLockId: number): Promise<ResourceLock>;
    createResourceLock(data: CreateResourceLockRequest): Promise<ResourceLock>;
    deleteResourceLock(resourceLockId: number): Promise<void>;
}
export declare function createAccountClient(axiosInstance: AxiosInstance): AccountClientInterface;
