import * as api from './api'; import { ApiMethods } from './api-methods'; import { MiddlewareOn } from './api-middleware'; declare type PropType = T[PropT]; declare type Predicate = PropType, '_'>; declare type ClassType = new (...args: unknown[]) => T; export declare type ErrorHandler = (error: Error, ctx?: Record) => unknown; export declare type TdLibConfig = NonNullable; export declare type PlainObjectToModelTransformer = (plainObject: TdObject) => ClassType | TdObject; export declare type MiddlewareFn = (ctx: ContextT, next: () => Promise) => any; export declare type Middleware = { middleware: () => MiddlewareFn; } | MiddlewareFn; export declare type NextFn = () => any; export interface Deferred { promise: Promise; resolve: (value?: T) => unknown; reject: (error: ErrorT) => unknown; } export interface Composer { middleware(): MiddlewareFn; on(predicateTypes: string | string[], ...fns: Middleware[]): void; use(...fns: Middleware[]): void; } export interface Config extends TdLibConfig { context?: ExtraContext | ((ctx: BaseApiResponse | BaseUpdateContext) => ExtraContext | Promise); database_encryption_key?: string; logVerbosityLevel?: number; name?: string; } export declare type ProviderFactory = (handleUpdate: (update: TdObject) => Promise, handleError: (error: Error | string) => void) => ProviderT; export declare type CreateProviderFactoryFn = (config: ConfigT) => ProviderFactory; export interface Instance { readonly api: ApiMethods; readonly config: Config; readonly provider: ProviderT; readonly name: string; handleError: ErrorHandler; readonly on: MiddlewareOn; catch(handler: (error: Error) => void): void; destroy(): Promise; emit(update: UpdateT, state?: Record): Promise; use(...fns: Middleware<(ApiResponse | UpdateContext)>[]): void; } export declare type ApiMethod = keyof ApiMethods; export declare type SyncApiMethod = 'addLogMessage' | 'checkQuickReplyShortcutName' | 'cleanFileName' | 'getChatFolderDefaultIconName' | 'getCountryFlagEmoji' | 'getFileExtension' | 'getFileMimeType' | 'getJsonString' | 'getJsonValue' | 'getLanguagePackString' | 'getLogStream' | 'getLogTags' | 'getLogTagVerbosityLevel' | 'getLogVerbosityLevel' | 'getMarkdownText' | 'getOption' | 'getPhoneNumberInfoSync' | 'getPushReceiverId' | 'getTextEntities' | 'getThemeParametersJsonString' | 'parseMarkdown' | 'parseTextEntities' | 'searchQuote' | 'searchStringsByPrefix' | 'setLogStream' | 'setLogTagVerbosityLevel' | 'setLogVerbosityLevel' | 'testReturnError'; export declare type AsyncApiMethod = Exclude; export interface ApiRequest | undefined> { method: string; params: ParamsT; } export interface ApiRequestOptions { state?: Record; } export interface BaseApiResponse extends ContextState { _: Predicate | 'error'; request: ApiRequest; response: ResultT | api.ErrorUnion; options: ApiRequestOptions; airgram: Instance; } export interface ApiResponse extends BaseApiResponse, ExtraContext { } export interface TdProvider { destroy(): Promise; execute(request: ApiRequest): TdObject; send(request: ApiRequest): Promise; } export interface BaseTdObject { _: string; } export interface TdObject extends BaseTdObject { [key: string]: TdObject | TdObject[] | number | number[] | string | string[] | boolean | boolean[] | undefined; } export declare type SetStateFn = (nextState: Record) => void; export declare type GetStateFn = () => Record; export interface ContextState { setState: SetStateFn; getState: GetStateFn; } export interface BaseUpdateContext extends ContextState { _: Predicate; update: UpdateT; airgram: Instance; } export interface UpdateContext extends BaseUpdateContext, ExtraContext { } export declare type Context = ApiResponse | UpdateContext; export interface ExtraContext { } export {};