/// <reference types="node" />
import { ChannelCredentials, ChannelOptions, UntypedServiceImplementation, handleUnaryCall, Client, ClientUnaryCall, Metadata, CallOptions, ServiceError } from "@grpc/grpc-js";
import _m0 from "protobufjs/minimal";
import { BillableObject, BillableObjectBinding } from "../../../../yandex/cloud/billing/v1/billable_object";
import { BillingAccount } from "../../../../yandex/cloud/billing/v1/billing_account";
import { Operation } from "../../../../yandex/cloud/operation/operation";
import { ListAccessBindingsRequest, ListAccessBindingsResponse, UpdateAccessBindingsRequest } from "../../../../yandex/cloud/access/access";
export declare const protobufPackage = "yandex.cloud.billing.v1";
export interface GetBillingAccountRequest {
    $type: "yandex.cloud.billing.v1.GetBillingAccountRequest";
    /**
     * ID of the billing account to return.
     * To get the billing account ID, use [BillingAccountService.List] request.
     */
    id: string;
}
export interface ListBillingAccountsRequest {
    $type: "yandex.cloud.billing.v1.ListBillingAccountsRequest";
    /**
     * The maximum number of results per page to return. If the number of available
     * results is larger than [page_size],
     * the service returns a [ListBillingAccountsResponse.next_page_token]
     * that can be used to get the next page of results in subsequent list requests.
     */
    pageSize: number;
    /**
     * Page token. To get the next page of results,
     * set [page_token] to the [ListBillingAccountsResponse.next_page_token]
     * returned by a previous list request.
     */
    pageToken: string;
}
export interface ListBillingAccountsResponse {
    $type: "yandex.cloud.billing.v1.ListBillingAccountsResponse";
    /** List of billing accounts. */
    billingAccounts: BillingAccount[];
    /**
     * This token allows you to get the next page of results for list requests. If the number of results
     * is larger than [ListBillingAccountsRequest.page_size], use
     * [next_page_token] as the value
     * for the [ListBillingAccountsRequest.page_token] query parameter
     * in the next list request. Each subsequent list request will have its own
     * [next_page_token] to continue paging through the results.
     */
    nextPageToken: string;
}
export interface ListBillableObjectBindingsRequest {
    $type: "yandex.cloud.billing.v1.ListBillableObjectBindingsRequest";
    /**
     * ID of the billing account to list associated billable object bindings.
     * To get the billing account ID, use [BillingAccountService.List] request.
     */
    billingAccountId: string;
    /**
     * The maximum number of results per page to return. If the number of available
     * results is larger than [page_size],
     * the service returns a [ListBillableObjectBindingsResponse.next_page_token]
     * that can be used to get the next page of results in subsequent list requests.
     */
    pageSize: number;
    /**
     * Page token. To get the next page of results,
     * set [page_token] to the [ListBillableObjectBindingsResponse.next_page_token]
     * returned by a previous list request.
     */
    pageToken: string;
}
export interface ListBillableObjectBindingsResponse {
    $type: "yandex.cloud.billing.v1.ListBillableObjectBindingsResponse";
    /** List of billable object bindings. */
    billableObjectBindings: BillableObjectBinding[];
    /**
     * This token allows you to get the next page of results for list requests. If the number of results
     * is larger than [ListBillableObjectBindingsRequest.page_size], use
     * [next_page_token] as the value
     * for the [ListBillableObjectBindingsRequest.page_token] query parameter
     * in the next list request. Each subsequent list request will have its own
     * [next_page_token] to continue paging through the results.
     */
    nextPageToken: string;
}
export interface BindBillableObjectRequest {
    $type: "yandex.cloud.billing.v1.BindBillableObjectRequest";
    /**
     * ID of the billing account to bind billable object.
     * To get the billing account ID, use [BillingAccountService.List] request.
     */
    billingAccountId: string;
    /** [yandex.cloud.billing.v1.BillableObject] to bind with billing account. */
    billableObject?: BillableObject;
}
export interface BindBillableObjectMetadata {
    $type: "yandex.cloud.billing.v1.BindBillableObjectMetadata";
    /** ID of the [yandex.cloud.billing.v1.BillableObject] that was bound to billing account. */
    billableObjectId: string;
}
export declare const GetBillingAccountRequest: {
    $type: "yandex.cloud.billing.v1.GetBillingAccountRequest";
    encode(message: GetBillingAccountRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number | undefined): GetBillingAccountRequest;
    fromJSON(object: any): GetBillingAccountRequest;
    toJSON(message: GetBillingAccountRequest): unknown;
    fromPartial<I extends {
        id?: string | undefined;
    } & {
        id?: string | undefined;
    } & Record<Exclude<keyof I, "$type" | "id">, never>>(object: I): GetBillingAccountRequest;
};
export declare const ListBillingAccountsRequest: {
    $type: "yandex.cloud.billing.v1.ListBillingAccountsRequest";
    encode(message: ListBillingAccountsRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number | undefined): ListBillingAccountsRequest;
    fromJSON(object: any): ListBillingAccountsRequest;
    toJSON(message: ListBillingAccountsRequest): unknown;
    fromPartial<I extends {
        pageSize?: number | undefined;
        pageToken?: string | undefined;
    } & {
        pageSize?: number | undefined;
        pageToken?: string | undefined;
    } & Record<Exclude<keyof I, "$type" | "pageSize" | "pageToken">, never>>(object: I): ListBillingAccountsRequest;
};
export declare const ListBillingAccountsResponse: {
    $type: "yandex.cloud.billing.v1.ListBillingAccountsResponse";
    encode(message: ListBillingAccountsResponse, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number | undefined): ListBillingAccountsResponse;
    fromJSON(object: any): ListBillingAccountsResponse;
    toJSON(message: ListBillingAccountsResponse): unknown;
    fromPartial<I extends {
        nextPageToken?: string | undefined;
        billingAccounts?: {
            id?: string | undefined;
            name?: string | undefined;
            createdAt?: Date | undefined;
            countryCode?: string | undefined;
            currency?: string | undefined;
            active?: boolean | undefined;
            balance?: string | undefined;
        }[] | undefined;
    } & {
        nextPageToken?: string | undefined;
        billingAccounts?: ({
            id?: string | undefined;
            name?: string | undefined;
            createdAt?: Date | undefined;
            countryCode?: string | undefined;
            currency?: string | undefined;
            active?: boolean | undefined;
            balance?: string | undefined;
        }[] & ({
            id?: string | undefined;
            name?: string | undefined;
            createdAt?: Date | undefined;
            countryCode?: string | undefined;
            currency?: string | undefined;
            active?: boolean | undefined;
            balance?: string | undefined;
        } & {
            id?: string | undefined;
            name?: string | undefined;
            createdAt?: Date | undefined;
            countryCode?: string | undefined;
            currency?: string | undefined;
            active?: boolean | undefined;
            balance?: string | undefined;
        } & Record<Exclude<keyof I["billingAccounts"][number], "$type" | "id" | "name" | "createdAt" | "countryCode" | "currency" | "active" | "balance">, never>)[] & Record<Exclude<keyof I["billingAccounts"], "$type" | keyof {
            id?: string | undefined;
            name?: string | undefined;
            createdAt?: Date | undefined;
            countryCode?: string | undefined;
            currency?: string | undefined;
            active?: boolean | undefined;
            balance?: string | undefined;
        }[]>, never>) | undefined;
    } & Record<Exclude<keyof I, "$type" | "nextPageToken" | "billingAccounts">, never>>(object: I): ListBillingAccountsResponse;
};
export declare const ListBillableObjectBindingsRequest: {
    $type: "yandex.cloud.billing.v1.ListBillableObjectBindingsRequest";
    encode(message: ListBillableObjectBindingsRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number | undefined): ListBillableObjectBindingsRequest;
    fromJSON(object: any): ListBillableObjectBindingsRequest;
    toJSON(message: ListBillableObjectBindingsRequest): unknown;
    fromPartial<I extends {
        pageSize?: number | undefined;
        pageToken?: string | undefined;
        billingAccountId?: string | undefined;
    } & {
        pageSize?: number | undefined;
        pageToken?: string | undefined;
        billingAccountId?: string | undefined;
    } & Record<Exclude<keyof I, "$type" | "pageSize" | "pageToken" | "billingAccountId">, never>>(object: I): ListBillableObjectBindingsRequest;
};
export declare const ListBillableObjectBindingsResponse: {
    $type: "yandex.cloud.billing.v1.ListBillableObjectBindingsResponse";
    encode(message: ListBillableObjectBindingsResponse, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number | undefined): ListBillableObjectBindingsResponse;
    fromJSON(object: any): ListBillableObjectBindingsResponse;
    toJSON(message: ListBillableObjectBindingsResponse): unknown;
    fromPartial<I extends {
        nextPageToken?: string | undefined;
        billableObjectBindings?: {
            effectiveTime?: Date | undefined;
            billableObject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[] | undefined;
    } & {
        nextPageToken?: string | undefined;
        billableObjectBindings?: ({
            effectiveTime?: Date | undefined;
            billableObject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[] & ({
            effectiveTime?: Date | undefined;
            billableObject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        } & {
            effectiveTime?: Date | undefined;
            billableObject?: ({
                id?: string | undefined;
                type?: string | undefined;
            } & {
                id?: string | undefined;
                type?: string | undefined;
            } & Record<Exclude<keyof I["billableObjectBindings"][number]["billableObject"], "$type" | "id" | "type">, never>) | undefined;
        } & Record<Exclude<keyof I["billableObjectBindings"][number], "$type" | "effectiveTime" | "billableObject">, never>)[] & Record<Exclude<keyof I["billableObjectBindings"], "$type" | keyof {
            effectiveTime?: Date | undefined;
            billableObject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[]>, never>) | undefined;
    } & Record<Exclude<keyof I, "$type" | "nextPageToken" | "billableObjectBindings">, never>>(object: I): ListBillableObjectBindingsResponse;
};
export declare const BindBillableObjectRequest: {
    $type: "yandex.cloud.billing.v1.BindBillableObjectRequest";
    encode(message: BindBillableObjectRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number | undefined): BindBillableObjectRequest;
    fromJSON(object: any): BindBillableObjectRequest;
    toJSON(message: BindBillableObjectRequest): unknown;
    fromPartial<I extends {
        billableObject?: {
            id?: string | undefined;
            type?: string | undefined;
        } | undefined;
        billingAccountId?: string | undefined;
    } & {
        billableObject?: ({
            id?: string | undefined;
            type?: string | undefined;
        } & {
            id?: string | undefined;
            type?: string | undefined;
        } & Record<Exclude<keyof I["billableObject"], "$type" | "id" | "type">, never>) | undefined;
        billingAccountId?: string | undefined;
    } & Record<Exclude<keyof I, "$type" | "billableObject" | "billingAccountId">, never>>(object: I): BindBillableObjectRequest;
};
export declare const BindBillableObjectMetadata: {
    $type: "yandex.cloud.billing.v1.BindBillableObjectMetadata";
    encode(message: BindBillableObjectMetadata, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number | undefined): BindBillableObjectMetadata;
    fromJSON(object: any): BindBillableObjectMetadata;
    toJSON(message: BindBillableObjectMetadata): unknown;
    fromPartial<I extends {
        billableObjectId?: string | undefined;
    } & {
        billableObjectId?: string | undefined;
    } & Record<Exclude<keyof I, "$type" | "billableObjectId">, never>>(object: I): BindBillableObjectMetadata;
};
/** A set of methods for managing BillingAccount resources. */
export declare const BillingAccountServiceService: {
    /** Returns the specified billing account. */
    readonly get: {
        readonly path: "/yandex.cloud.billing.v1.BillingAccountService/Get";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: GetBillingAccountRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => GetBillingAccountRequest;
        readonly responseSerialize: (value: BillingAccount) => Buffer;
        readonly responseDeserialize: (value: Buffer) => BillingAccount;
    };
    /** Retrieves the list of billing accounts available for current user. */
    readonly list: {
        readonly path: "/yandex.cloud.billing.v1.BillingAccountService/List";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: ListBillingAccountsRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => ListBillingAccountsRequest;
        readonly responseSerialize: (value: ListBillingAccountsResponse) => Buffer;
        readonly responseDeserialize: (value: Buffer) => ListBillingAccountsResponse;
    };
    /** Retrieves the list of billable object bindings associated with the specified billing account. */
    readonly listBillableObjectBindings: {
        readonly path: "/yandex.cloud.billing.v1.BillingAccountService/ListBillableObjectBindings";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: ListBillableObjectBindingsRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => ListBillableObjectBindingsRequest;
        readonly responseSerialize: (value: ListBillableObjectBindingsResponse) => Buffer;
        readonly responseDeserialize: (value: Buffer) => ListBillableObjectBindingsResponse;
    };
    /** Binds billable object to the specified billing account. */
    readonly bindBillableObject: {
        readonly path: "/yandex.cloud.billing.v1.BillingAccountService/BindBillableObject";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: BindBillableObjectRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => BindBillableObjectRequest;
        readonly responseSerialize: (value: Operation) => Buffer;
        readonly responseDeserialize: (value: Buffer) => Operation;
    };
    /** Lists access bindings for the specified billing account. */
    readonly listAccessBindings: {
        readonly path: "/yandex.cloud.billing.v1.BillingAccountService/ListAccessBindings";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: ListAccessBindingsRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => ListAccessBindingsRequest;
        readonly responseSerialize: (value: ListAccessBindingsResponse) => Buffer;
        readonly responseDeserialize: (value: Buffer) => ListAccessBindingsResponse;
    };
    /** Updates access bindings for the specified billing account. */
    readonly updateAccessBindings: {
        readonly path: "/yandex.cloud.billing.v1.BillingAccountService/UpdateAccessBindings";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: UpdateAccessBindingsRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => UpdateAccessBindingsRequest;
        readonly responseSerialize: (value: Operation) => Buffer;
        readonly responseDeserialize: (value: Buffer) => Operation;
    };
};
export interface BillingAccountServiceServer extends UntypedServiceImplementation {
    /** Returns the specified billing account. */
    get: handleUnaryCall<GetBillingAccountRequest, BillingAccount>;
    /** Retrieves the list of billing accounts available for current user. */
    list: handleUnaryCall<ListBillingAccountsRequest, ListBillingAccountsResponse>;
    /** Retrieves the list of billable object bindings associated with the specified billing account. */
    listBillableObjectBindings: handleUnaryCall<ListBillableObjectBindingsRequest, ListBillableObjectBindingsResponse>;
    /** Binds billable object to the specified billing account. */
    bindBillableObject: handleUnaryCall<BindBillableObjectRequest, Operation>;
    /** Lists access bindings for the specified billing account. */
    listAccessBindings: handleUnaryCall<ListAccessBindingsRequest, ListAccessBindingsResponse>;
    /** Updates access bindings for the specified billing account. */
    updateAccessBindings: handleUnaryCall<UpdateAccessBindingsRequest, Operation>;
}
export interface BillingAccountServiceClient extends Client {
    /** Returns the specified billing account. */
    get(request: GetBillingAccountRequest, callback: (error: ServiceError | null, response: BillingAccount) => void): ClientUnaryCall;
    get(request: GetBillingAccountRequest, metadata: Metadata, callback: (error: ServiceError | null, response: BillingAccount) => void): ClientUnaryCall;
    get(request: GetBillingAccountRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: BillingAccount) => void): ClientUnaryCall;
    /** Retrieves the list of billing accounts available for current user. */
    list(request: ListBillingAccountsRequest, callback: (error: ServiceError | null, response: ListBillingAccountsResponse) => void): ClientUnaryCall;
    list(request: ListBillingAccountsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: ListBillingAccountsResponse) => void): ClientUnaryCall;
    list(request: ListBillingAccountsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: ListBillingAccountsResponse) => void): ClientUnaryCall;
    /** Retrieves the list of billable object bindings associated with the specified billing account. */
    listBillableObjectBindings(request: ListBillableObjectBindingsRequest, callback: (error: ServiceError | null, response: ListBillableObjectBindingsResponse) => void): ClientUnaryCall;
    listBillableObjectBindings(request: ListBillableObjectBindingsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: ListBillableObjectBindingsResponse) => void): ClientUnaryCall;
    listBillableObjectBindings(request: ListBillableObjectBindingsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: ListBillableObjectBindingsResponse) => void): ClientUnaryCall;
    /** Binds billable object to the specified billing account. */
    bindBillableObject(request: BindBillableObjectRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall;
    bindBillableObject(request: BindBillableObjectRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall;
    bindBillableObject(request: BindBillableObjectRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall;
    /** Lists access bindings for the specified billing account. */
    listAccessBindings(request: ListAccessBindingsRequest, callback: (error: ServiceError | null, response: ListAccessBindingsResponse) => void): ClientUnaryCall;
    listAccessBindings(request: ListAccessBindingsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: ListAccessBindingsResponse) => void): ClientUnaryCall;
    listAccessBindings(request: ListAccessBindingsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: ListAccessBindingsResponse) => void): ClientUnaryCall;
    /** Updates access bindings for the specified billing account. */
    updateAccessBindings(request: UpdateAccessBindingsRequest, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall;
    updateAccessBindings(request: UpdateAccessBindingsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall;
    updateAccessBindings(request: UpdateAccessBindingsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: Operation) => void): ClientUnaryCall;
}
export declare const BillingAccountServiceClient: {
    new (address: string, credentials: ChannelCredentials, options?: Partial<ChannelOptions> | undefined): BillingAccountServiceClient;
    service: typeof BillingAccountServiceService;
};
declare type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
export declare type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
    [K in Exclude<keyof T, "$type">]?: DeepPartial<T[K]>;
} : Partial<T>;
declare type KeysOfUnion<T> = T extends T ? keyof T : never;
export declare type Exact<P, I extends P> = P extends Builtin ? P : P & {
    [K in keyof P]: Exact<P[K], I[K]>;
} & Record<Exclude<keyof I, KeysOfUnion<P> | "$type">, never>;
export {};
