import { type AxiosResponse } from 'axios';
import { type UpdateUserInput, type CreateUserInput, type User, type Metadata, type CreateCustomerInput, type Customer, type UpdateCustomerCustomFieldsInput, type CreateTicketInput, type Ticket, type UpdateTicketInput } from '../types';
declare class SendbirdChatAPI {
    private readonly _baseApi;
    constructor({ applicationId, token, }: {
        applicationId: string;
        token: string;
    });
    createUser: (user: CreateUserInput) => Promise<AxiosResponse<User>>;
    updateUser: ({ user_id, ...user }: UpdateUserInput) => Promise<AxiosResponse<User>>;
    getUser: (userId: string) => Promise<AxiosResponse<User>>;
    deleteUser: (userId: string) => Promise<AxiosResponse<never>>;
    updateMetadata: (userId: string, metadata: Metadata) => Promise<AxiosResponse<Metadata>>;
    /**
     * @description if `key` is empty -> removes all metadata
     */
    deleteMetadata: (userId: string, key?: string) => Promise<AxiosResponse<never>>;
}
declare class SendbirdDeskAPI {
    private readonly _baseApi;
    constructor({ applicationId, token, }: {
        applicationId: string;
        token: string;
    });
    createCustomer: (customer: CreateCustomerInput) => Promise<AxiosResponse<Customer>>;
    getCustomer: (customerId: number) => Promise<AxiosResponse<Customer>>;
    updateCustomerCustomFields: (customerId: number, { customFields }: Pick<UpdateCustomerCustomFieldsInput, "customFields">) => Promise<AxiosResponse<Customer>>;
    createTicket: (ticket: CreateTicketInput) => Promise<AxiosResponse<Ticket>>;
    updateTicket: (ticketId: number, ticket: UpdateTicketInput) => Promise<AxiosResponse<any>>;
}
export declare class SendbirdClient {
    readonly chatApi: SendbirdChatAPI;
    readonly deskApi: SendbirdDeskAPI;
    constructor({ applicationId, chatApiToken, deskApiToken, }: {
        applicationId: string;
        chatApiToken: string;
        deskApiToken: string;
    });
}
export {};
