From ac3b5df9a03d9ebe1e20f9493ceeedd71db8617d Mon Sep 17 00:00:00 2001 From: Alina Sireneva Date: Sat, 3 Feb 2024 20:14:03 +0300 Subject: [PATCH] refactor!: renamed MaybeAsync -> MaybePromise --- e2e/ts/utils.ts | 4 +-- packages/core/src/highlevel/client.ts | 8 ++--- .../core/src/highlevel/methods/_imports.ts | 2 +- .../core/src/highlevel/methods/auth/start.ts | 8 ++--- .../src/highlevel/storage/repository/peers.ts | 12 ++++---- .../storage/repository/ref-messages.ts | 12 ++++---- .../core/src/highlevel/types/conversation.ts | 14 ++++----- packages/core/src/highlevel/types/utils.ts | 4 +-- .../core/src/highlevel/updates/manager.ts | 4 +-- .../core/src/network/transports/abstract.ts | 6 ++-- packages/core/src/storage/driver.ts | 16 +++++----- .../core/src/storage/repository/auth-keys.ts | 14 ++++----- .../core/src/storage/repository/key-value.ts | 10 +++---- packages/core/src/types/utils.ts | 2 +- packages/core/src/utils/crypto/abstract.ts | 10 +++---- packages/core/src/utils/crypto/node.ts | 4 +-- .../dispatcher/src/context/callback-query.ts | 4 +-- packages/dispatcher/src/dispatcher.ts | 29 +++++++++---------- packages/dispatcher/src/filters/bots.ts | 4 +-- packages/dispatcher/src/filters/group.ts | 6 ++-- packages/dispatcher/src/filters/logic.ts | 6 ++-- packages/dispatcher/src/filters/state.ts | 4 +-- packages/dispatcher/src/filters/types.ts | 4 +-- packages/dispatcher/src/handler.ts | 10 +++---- packages/dispatcher/src/state/key.ts | 4 +-- .../dispatcher/src/state/providers/memory.ts | 8 ++--- .../dispatcher/src/state/providers/sqlite.ts | 12 ++++---- packages/dispatcher/src/state/repository.ts | 14 ++++----- packages/dispatcher/src/wizard.ts | 4 +-- packages/test/src/client.ts | 13 +++++++-- 30 files changed, 127 insertions(+), 125 deletions(-) diff --git a/e2e/ts/utils.ts b/e2e/ts/utils.ts index 7dd31e43..90f869f1 100644 --- a/e2e/ts/utils.ts +++ b/e2e/ts/utils.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line no-restricted-imports import { join } from 'path' -import { MaybeAsync, MemoryStorage } from '@mtcute/core' +import { MaybePromise, MemoryStorage } from '@mtcute/core' import { LogManager, sleep } from '@mtcute/core/utils.js' import { SqliteStorage } from '@mtcute/sqlite' @@ -19,7 +19,7 @@ export const getApiParams = (storage?: string) => { } } -export async function waitFor(condition: () => MaybeAsync, timeout = 5000): Promise { +export async function waitFor(condition: () => MaybePromise, timeout = 5000): Promise { const start = Date.now() let lastError diff --git a/packages/core/src/highlevel/client.ts b/packages/core/src/highlevel/client.ts index fbe77cb6..8ff17f80 100644 --- a/packages/core/src/highlevel/client.ts +++ b/packages/core/src/highlevel/client.ts @@ -8,7 +8,7 @@ import { tdFileId } from '@mtcute/file-id' import { tl } from '@mtcute/tl' import { MemoryStorage } from '../storage/providers/memory/index.js' -import { MaybeArray, MaybeAsync, PartialExcept, PartialOnly } from '../types/index.js' +import { MaybeArray, MaybePromise, PartialExcept, PartialOnly } from '../types/index.js' import { StringSessionData } from '../utils/string-session.js' import { BaseTelegramClient, BaseTelegramClientOptions } from './base.js' import { ITelegramClient } from './client.types.js' @@ -672,7 +672,7 @@ export interface TelegramClient extends ITelegramClient { * This method handles both login and sign up, and also handles 2FV * * All parameters are `MaybeDynamic`, meaning you - * can either supply `T`, or a function that returns `MaybeAsync` + * can either supply `T`, or a function that returns `MaybePromise` * * This method is intended for simple and fast use in automated * scripts and bots. If you are developing a custom client, @@ -725,7 +725,7 @@ export interface TelegramClient extends ITelegramClient { * If provided `code`/`password` is a constant string, providing an * invalid one will interrupt authorization flow. */ - invalidCodeCallback?: (type: 'code' | 'password') => MaybeAsync + invalidCodeCallback?: (type: 'code' | 'password') => MaybePromise /** * Whether to force code delivery through SMS @@ -741,7 +741,7 @@ export interface TelegramClient extends ITelegramClient { * @param code * @default `console.log`. */ - codeSentCallback?: (code: SentCode) => MaybeAsync + codeSentCallback?: (code: SentCode) => MaybePromise }): Promise /** * Check if the given peer/input peer is referring to the current user diff --git a/packages/core/src/highlevel/methods/_imports.ts b/packages/core/src/highlevel/methods/_imports.ts index bd0296c7..138d8da4 100644 --- a/packages/core/src/highlevel/methods/_imports.ts +++ b/packages/core/src/highlevel/methods/_imports.ts @@ -6,7 +6,7 @@ import { tdFileId } from '@mtcute/file-id' import { tl } from '@mtcute/tl' // @copy -import { MaybeArray, MaybeAsync, PartialExcept, PartialOnly } from '../../types/index.js' +import { MaybeArray, MaybePromise, PartialExcept, PartialOnly } from '../../types/index.js' // @copy import { StringSessionData } from '../../utils/string-session.js' // @copy diff --git a/packages/core/src/highlevel/methods/auth/start.ts b/packages/core/src/highlevel/methods/auth/start.ts index e47eca03..223ca918 100644 --- a/packages/core/src/highlevel/methods/auth/start.ts +++ b/packages/core/src/highlevel/methods/auth/start.ts @@ -2,7 +2,7 @@ import { tl } from '@mtcute/tl' import { MtArgumentError } from '../../../types/errors.js' -import { MaybeAsync } from '../../../types/utils.js' +import { MaybePromise } from '../../../types/utils.js' import { StringSessionData } from '../../../utils/string-session.js' import { ITelegramClient } from '../../client.types.js' import { SentCode } from '../../types/auth/sent-code.js' @@ -24,7 +24,7 @@ import { signInBot } from './sign-in-bot.js' * This method handles both login and sign up, and also handles 2FV * * All parameters are `MaybeDynamic`, meaning you - * can either supply `T`, or a function that returns `MaybeAsync` + * can either supply `T`, or a function that returns `MaybePromise` * * This method is intended for simple and fast use in automated * scripts and bots. If you are developing a custom client, @@ -77,7 +77,7 @@ export async function start( * If provided `code`/`password` is a constant string, providing an * invalid one will interrupt authorization flow. */ - invalidCodeCallback?: (type: 'code' | 'password') => MaybeAsync + invalidCodeCallback?: (type: 'code' | 'password') => MaybePromise /** * Whether to force code delivery through SMS @@ -93,7 +93,7 @@ export async function start( * @param code * @default `console.log`. */ - codeSentCallback?: (code: SentCode) => MaybeAsync + codeSentCallback?: (code: SentCode) => MaybePromise }, ): Promise { if (params.session) { diff --git a/packages/core/src/highlevel/storage/repository/peers.ts b/packages/core/src/highlevel/storage/repository/peers.ts index 897368fd..7ec1c598 100644 --- a/packages/core/src/highlevel/storage/repository/peers.ts +++ b/packages/core/src/highlevel/storage/repository/peers.ts @@ -1,4 +1,4 @@ -import { MaybeAsync } from '../../../types/utils.js' +import { MaybePromise } from '../../../types/utils.js' // eslint-disable-next-line @typescript-eslint/no-namespace export namespace IPeersRepository { @@ -25,13 +25,13 @@ export namespace IPeersRepository { export interface IPeersRepository { /** Store the given peer*/ - store(peer: IPeersRepository.PeerInfo): MaybeAsync + store(peer: IPeersRepository.PeerInfo): MaybePromise /** Find a peer by their `id` */ - getById(id: number): MaybeAsync + getById(id: number): MaybePromise /** Find a peer by their username (where `usernames` includes `username`) */ - getByUsername(username: string): MaybeAsync + getByUsername(username: string): MaybePromise /** Find a peer by their `phone` */ - getByPhone(phone: string): MaybeAsync + getByPhone(phone: string): MaybePromise - deleteAll(): MaybeAsync + deleteAll(): MaybePromise } diff --git a/packages/core/src/highlevel/storage/repository/ref-messages.ts b/packages/core/src/highlevel/storage/repository/ref-messages.ts index 71035ba3..fbf77117 100644 --- a/packages/core/src/highlevel/storage/repository/ref-messages.ts +++ b/packages/core/src/highlevel/storage/repository/ref-messages.ts @@ -1,8 +1,8 @@ -import { MaybeAsync } from '../../../types/utils.js' +import { MaybePromise } from '../../../types/utils.js' export interface IReferenceMessagesRepository { /** Store a reference message */ - store(peerId: number, chatId: number, msgId: number): MaybeAsync + store(peerId: number, chatId: number, msgId: number): MaybePromise /** * Get the reference message for the given `peerId`. * @@ -10,13 +10,13 @@ export interface IReferenceMessagesRepository { * the one with the highest `msgId` should be returned, but this is not * really important. */ - getByPeer(peerId: number): MaybeAsync<[number, number] | null> + getByPeer(peerId: number): MaybePromise<[number, number] | null> /** * Delete reference messages given the `chatId` * where `msgId` is one of `msgIds` */ - delete(chatId: number, msgIds: number[]): MaybeAsync - deleteByPeer(peerId: number): MaybeAsync - deleteAll(): MaybeAsync + delete(chatId: number, msgIds: number[]): MaybePromise + deleteByPeer(peerId: number): MaybePromise + deleteAll(): MaybePromise } diff --git a/packages/core/src/highlevel/types/conversation.ts b/packages/core/src/highlevel/types/conversation.ts index 06d12be6..0dd89ccc 100644 --- a/packages/core/src/highlevel/types/conversation.ts +++ b/packages/core/src/highlevel/types/conversation.ts @@ -1,7 +1,7 @@ import { tl } from '@mtcute/tl' import { MtArgumentError, MtTimeoutError } from '../../types/errors.js' -import { MaybeAsync } from '../../types/utils.js' +import { MaybePromise } from '../../types/utils.js' import { AsyncLock } from '../../utils/async-lock.js' import { ControllablePromise, createControllablePromise } from '../../utils/controllable-promise.js' import { Deque } from '../../utils/deque.js' @@ -20,7 +20,7 @@ import { ParametersSkip2 } from './utils.js' interface QueuedHandler { promise: ControllablePromise - check?: (update: T) => MaybeAsync + check?: (update: T) => MaybePromise timeout?: NodeJS.Timeout } @@ -304,7 +304,7 @@ export class Conversation { * * @param handler */ - async with(handler: () => MaybeAsync): Promise { + async with(handler: () => MaybePromise): Promise { await this.start() let err: unknown @@ -332,7 +332,7 @@ export class Conversation { * When the timeout is reached, `MtTimeoutError` is thrown. */ waitForNewMessage( - filter?: (msg: Message) => MaybeAsync, + filter?: (msg: Message) => MaybePromise, timeout: number | null = 15000, ): Promise { if (!this._started) { @@ -372,7 +372,7 @@ export class Conversation { * @param params */ waitForResponse( - filter?: (msg: Message) => MaybeAsync, + filter?: (msg: Message) => MaybePromise, params?: { /** * Message for which to wait for response for. @@ -408,7 +408,7 @@ export class Conversation { * @param params */ waitForReply( - filter?: (msg: Message) => MaybeAsync, + filter?: (msg: Message) => MaybePromise, params?: { /** * Message for which to wait for reply for. @@ -451,7 +451,7 @@ export class Conversation { * @param params */ async waitForEdit( - filter?: (msg: Message) => MaybeAsync, + filter?: (msg: Message) => MaybePromise, params?: { /** * Message for which to wait for reply for. diff --git a/packages/core/src/highlevel/types/utils.ts b/packages/core/src/highlevel/types/utils.ts index b7239235..02d13044 100644 --- a/packages/core/src/highlevel/types/utils.ts +++ b/packages/core/src/highlevel/types/utils.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { MaybeAsync } from '../../types/utils.js' +import { MaybePromise } from '../../types/utils.js' -export type MaybeDynamic = MaybeAsync | (() => MaybeAsync) +export type MaybeDynamic = MaybePromise | (() => MaybePromise) export type ArrayWithTotal = T[] & { total: number } export type ArrayPaginated = T[] & { total: number; next?: Offset } diff --git a/packages/core/src/highlevel/updates/manager.ts b/packages/core/src/highlevel/updates/manager.ts index 3dae3ad3..5f2771a2 100644 --- a/packages/core/src/highlevel/updates/manager.ts +++ b/packages/core/src/highlevel/updates/manager.ts @@ -2,7 +2,7 @@ import { tl } from '@mtcute/tl' import { MtArgumentError } from '../../types/errors.js' -import { assertNever, MaybeAsync } from '../../types/utils.js' +import { assertNever, MaybePromise } from '../../types/utils.js' import { AsyncLock, ConditionVariable, @@ -680,7 +680,7 @@ export class UpdatesManager { const channelId = toggleChannelIdMark(peerId.channelId) - const promises: MaybeAsync[] = [] + const promises: MaybePromise[] = [] function store(peer?: tl.TypePeer | number | number[]): void { if (!peer) return diff --git a/packages/core/src/network/transports/abstract.ts b/packages/core/src/network/transports/abstract.ts index 78306014..eaf70218 100644 --- a/packages/core/src/network/transports/abstract.ts +++ b/packages/core/src/network/transports/abstract.ts @@ -2,7 +2,7 @@ import EventEmitter from 'events' import { tl } from '@mtcute/tl' -import { MaybeAsync } from '../../types/index.js' +import { MaybePromise } from '../../types/index.js' import { BasicDcOption, ICryptoProvider, Logger } from '../../utils/index.js' /** Current state of the transport */ @@ -73,10 +73,10 @@ export type TransportFactory = () => ITelegramTransport */ export interface IPacketCodec { /** Initial tag of the codec. Will be sent immediately once connected. */ - tag(): MaybeAsync + tag(): MaybePromise /** Encodes and frames a single packet */ - encode(packet: Uint8Array): MaybeAsync + encode(packet: Uint8Array): MaybePromise /** Feed packet to the codec. Once packet is processed, codec is supposed to emit `packet` or `error` */ feed(data: Uint8Array): void diff --git a/packages/core/src/storage/driver.ts b/packages/core/src/storage/driver.ts index 66d8bd83..2358e01a 100644 --- a/packages/core/src/storage/driver.ts +++ b/packages/core/src/storage/driver.ts @@ -1,4 +1,4 @@ -import { MaybeAsync } from '../types/utils.js' +import { MaybePromise } from '../types/utils.js' import { Logger } from '../utils/logger.js' /** @@ -14,7 +14,7 @@ export interface IStorageDriver { * May be called more than once, handle this with care * (or use {@link BaseStorageDriver} that handles this for you) */ - load?(): MaybeAsync + load?(): MaybePromise /** * Save session to some external storage. * Should be used to commit pending changes in the session. @@ -24,14 +24,14 @@ export interface IStorageDriver { * It is safe to batch all changes and only commit them here, * unless stated otherwise in the method description */ - save?(): MaybeAsync + save?(): MaybePromise /** * Cleanup session and release all used resources. * * May be called more than once, handle this with care * (or use {@link BaseStorageDriver} that handles this for you) */ - destroy?(): MaybeAsync + destroy?(): MaybePromise /** * Setup the driver, passing the logger instance, @@ -45,9 +45,9 @@ export interface IStorageDriver { * and handling the lifecycle for you */ export abstract class BaseStorageDriver implements IStorageDriver { - abstract _load(): MaybeAsync - abstract _destroy(): MaybeAsync - abstract _save?(): MaybeAsync + abstract _load(): MaybePromise + abstract _destroy(): MaybePromise + abstract _save?(): MaybePromise private _loadedTimes = 0 private _destroyed = false @@ -84,7 +84,7 @@ export abstract class BaseStorageDriver implements IStorageDriver { } } - save(): MaybeAsync { + save(): MaybePromise { return this._save?.() } } diff --git a/packages/core/src/storage/repository/auth-keys.ts b/packages/core/src/storage/repository/auth-keys.ts index 654d5458..d8b9ea8a 100644 --- a/packages/core/src/storage/repository/auth-keys.ts +++ b/packages/core/src/storage/repository/auth-keys.ts @@ -1,4 +1,4 @@ -import { MaybeAsync } from '../../types/utils.js' +import { MaybePromise } from '../../types/utils.js' export interface IAuthKeysRepository { /** @@ -8,9 +8,9 @@ export interface IAuthKeysRepository { * * **MUST** be applied immediately, without batching */ - set(dc: number, key: Uint8Array | null): MaybeAsync + set(dc: number, key: Uint8Array | null): MaybePromise /** Get auth_key for the given DC */ - get(dc: number): MaybeAsync + get(dc: number): MaybePromise /** * Store temp_auth_key for the given DC and idx, @@ -20,13 +20,13 @@ export interface IAuthKeysRepository { * * **MUST** be applied immediately, without batching */ - setTemp(dc: number, idx: number, key: Uint8Array | null, expires: number): MaybeAsync + setTemp(dc: number, idx: number, key: Uint8Array | null, expires: number): MaybePromise /** * Given the DC id, idx and point in time (in seconds), * return the temp_auth_key that should be used for the next request * (such that `now < key.expires`), or `null` if no such key exists */ - getTemp(dc: number, idx: number, now: number): MaybeAsync + getTemp(dc: number, idx: number, now: number): MaybePromise /** * Delete all stored auth keys for the given DC, including @@ -34,12 +34,12 @@ export interface IAuthKeysRepository { * * **MUST** be applied immediately, without batching */ - deleteByDc(dc: number): MaybeAsync + deleteByDc(dc: number): MaybePromise /** * Delete all stored auth keys, including both permanent and temp keys * * **MUST** be applied immediately, without batching */ - deleteAll(): MaybeAsync + deleteAll(): MaybePromise } diff --git a/packages/core/src/storage/repository/key-value.ts b/packages/core/src/storage/repository/key-value.ts index a8ab6715..78d3421b 100644 --- a/packages/core/src/storage/repository/key-value.ts +++ b/packages/core/src/storage/repository/key-value.ts @@ -1,12 +1,12 @@ -import { MaybeAsync } from '../../types/utils.js' +import { MaybePromise } from '../../types/utils.js' export interface IKeyValueRepository { /** Set a key-value pair */ - set(key: string, value: Uint8Array): MaybeAsync + set(key: string, value: Uint8Array): MaybePromise /** Get a key-value pair */ - get(key: string): MaybeAsync + get(key: string): MaybePromise /** Delete a key-value pair */ - delete(key: string): MaybeAsync + delete(key: string): MaybePromise - deleteAll(): MaybeAsync + deleteAll(): MaybePromise } diff --git a/packages/core/src/types/utils.ts b/packages/core/src/types/utils.ts index 6eebe378..c831d251 100644 --- a/packages/core/src/types/utils.ts +++ b/packages/core/src/types/utils.ts @@ -1,4 +1,4 @@ -export type MaybeAsync = T | Promise +export type MaybePromise = T | Promise export type PartialExcept = Partial> & Pick export type PartialOnly = Partial> & Omit diff --git a/packages/core/src/utils/crypto/abstract.ts b/packages/core/src/utils/crypto/abstract.ts index 19af66f8..f0c4142a 100644 --- a/packages/core/src/utils/crypto/abstract.ts +++ b/packages/core/src/utils/crypto/abstract.ts @@ -1,4 +1,4 @@ -import { MaybeAsync } from '../../types/index.js' +import { MaybePromise } from '../../types/index.js' import { factorizePQSync } from './factorization.js' export interface IEncryptionScheme { @@ -12,7 +12,7 @@ export interface IAesCtr { } export interface ICryptoProvider { - initialize?(): MaybeAsync + initialize?(): MaybePromise sha1(data: Uint8Array): Uint8Array @@ -24,15 +24,15 @@ export interface ICryptoProvider { iterations: number, keylen?: number, // = 64 algo?: string, // sha1 or sha512 (default sha512) - ): MaybeAsync + ): MaybePromise - hmacSha256(data: Uint8Array, key: Uint8Array): MaybeAsync + hmacSha256(data: Uint8Array, key: Uint8Array): MaybePromise createAesCtr(key: Uint8Array, iv: Uint8Array, encrypt: boolean): IAesCtr createAesIge(key: Uint8Array, iv: Uint8Array): IEncryptionScheme - factorizePQ(pq: Uint8Array): MaybeAsync<[Uint8Array, Uint8Array]> + factorizePQ(pq: Uint8Array): MaybePromise<[Uint8Array, Uint8Array]> gzip(data: Uint8Array, maxSize: number): Uint8Array | null gunzip(data: Uint8Array): Uint8Array diff --git a/packages/core/src/utils/crypto/node.ts b/packages/core/src/utils/crypto/node.ts index f71e00a2..f63cf7fb 100644 --- a/packages/core/src/utils/crypto/node.ts +++ b/packages/core/src/utils/crypto/node.ts @@ -4,7 +4,7 @@ import { deflateSync, gunzipSync } from 'zlib' import { ige256Decrypt, ige256Encrypt, initAsync, InitInput } from '@mtcute/wasm' -import { MaybeAsync } from '../../types/index.js' +import { MaybePromise } from '../../types/index.js' import { BaseCryptoProvider, IAesCtr, ICryptoProvider, IEncryptionScheme } from './abstract.js' export abstract class BaseNodeCryptoProvider extends BaseCryptoProvider { @@ -24,7 +24,7 @@ export abstract class BaseNodeCryptoProvider extends BaseCryptoProvider { iterations: number, keylen = 64, algo = 'sha512', - ): MaybeAsync { + ): MaybePromise { return new Promise((resolve, reject) => pbkdf2(password, salt, iterations, keylen, algo, (err: Error | null, buf: Uint8Array) => err !== null ? reject(err) : resolve(buf), diff --git a/packages/dispatcher/src/context/callback-query.ts b/packages/dispatcher/src/context/callback-query.ts index 72202071..b305a51d 100644 --- a/packages/dispatcher/src/context/callback-query.ts +++ b/packages/dispatcher/src/context/callback-query.ts @@ -1,4 +1,4 @@ -import { CallbackQuery, InlineCallbackQuery, MaybeAsync, Message, TelegramClient } from '@mtcute/core' +import { CallbackQuery, InlineCallbackQuery, MaybePromise, Message, TelegramClient } from '@mtcute/core' import { UpdateContext } from './base.js' @@ -46,7 +46,7 @@ export class CallbackQueryContext extends CallbackQuery implements UpdateContext /** * Shortcut for getting the message and editing it. */ - async editMessageWith(handler: (msg: Message) => MaybeAsync[0]>) { + async editMessageWith(handler: (msg: Message) => MaybePromise[0]>) { const msg = await this.getMessage() if (!msg) return diff --git a/packages/dispatcher/src/dispatcher.ts b/packages/dispatcher/src/dispatcher.ts index 0c30704f..cc773ee5 100644 --- a/packages/dispatcher/src/dispatcher.ts +++ b/packages/dispatcher/src/dispatcher.ts @@ -12,7 +12,7 @@ import { DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, - MaybeAsync, + MaybePromise, MtArgumentError, ParsedUpdate, PeersIndex, @@ -66,12 +66,7 @@ import { } from './handler.js' // end-codegen-imports import { PropagationAction } from './propagation.js' -import { - defaultStateKeyDelegate, - IStateStorageProvider, - StateKeyDelegate, - UpdateState, -} from './state/index.js' +import { defaultStateKeyDelegate, IStateStorageProvider, StateKeyDelegate, UpdateState } from './state/index.js' import { StateService } from './state/service.js' export interface DispatcherParams { @@ -121,18 +116,18 @@ export class Dispatcher { err: Error, update: ParsedUpdate & T, state?: UpdateState, - ) => MaybeAsync + ) => MaybePromise private _preUpdateHandler?: ( update: ParsedUpdate & T, state?: UpdateState, - ) => MaybeAsync + ) => MaybePromise private _postUpdateHandler?: ( handled: boolean, update: ParsedUpdate & T, state?: UpdateState, - ) => MaybeAsync + ) => MaybePromise protected constructor(client?: TelegramClient, params?: DispatcherParams) { this.dispatchRawUpdate = this.dispatchRawUpdate.bind(this) @@ -146,7 +141,7 @@ export class Dispatcher { if (storage) { this._storage = new StateService(storage) - this._stateKeyDelegate = (key ?? defaultStateKeyDelegate) + this._stateKeyDelegate = key ?? defaultStateKeyDelegate } } else { // child dispatcher without client @@ -597,7 +592,7 @@ export class Dispatcher { * @param handler Error handler */ onError( - handler: ((err: Error, update: ParsedUpdate & T, state?: UpdateState) => MaybeAsync) | null, + handler: ((err: Error, update: ParsedUpdate & T, state?: UpdateState) => MaybePromise) | null, ): void { if (handler) this._errorHandler = handler else this._errorHandler = undefined @@ -617,7 +612,7 @@ export class Dispatcher { */ onPreUpdate( handler: - | ((update: ParsedUpdate & T, state?: UpdateState) => MaybeAsync) + | ((update: ParsedUpdate & T, state?: UpdateState) => MaybePromise) | null, ): void { if (handler) this._preUpdateHandler = handler @@ -637,7 +632,9 @@ export class Dispatcher { * @param handler Pre-update middleware */ onPostUpdate( - handler: ((handled: boolean, update: ParsedUpdate & T, state?: UpdateState) => MaybeAsync) | null, + handler: + | ((handled: boolean, update: ParsedUpdate & T, state?: UpdateState) => MaybePromise) + | null, ): void { if (handler) this._postUpdateHandler = handler else this._postUpdateHandler = undefined @@ -647,7 +644,7 @@ export class Dispatcher { * Set error handler that will propagate * the error to the parent dispatcher */ - propagateErrorToParent(err: Error, update: ParsedUpdate, state?: UpdateState): MaybeAsync { + propagateErrorToParent(err: Error, update: ParsedUpdate, state?: UpdateState): MaybePromise { if (!this.parent) { throw new MtArgumentError('This dispatcher is not a child') } @@ -912,7 +909,7 @@ export class Dispatcher { * @template S State type, defaults to dispatcher's state type. Only checked at compile-time */ getState(object: Parameters[0]): Promise> - getState(object: string | Parameters[0]): MaybeAsync> { + getState(object: string | Parameters[0]): MaybePromise> { if (!this._storage) { throw new MtArgumentError('Cannot use getUpdateState() filter without state storage') } diff --git a/packages/dispatcher/src/filters/bots.ts b/packages/dispatcher/src/filters/bots.ts index ff638a27..bf6f3d9a 100644 --- a/packages/dispatcher/src/filters/bots.ts +++ b/packages/dispatcher/src/filters/bots.ts @@ -1,4 +1,4 @@ -import { MaybeArray, MaybeAsync, Message } from '@mtcute/core' +import { MaybeArray, MaybePromise, Message } from '@mtcute/core' import { MessageContext } from '../context/message.js' import { chat } from './chat.js' @@ -51,7 +51,7 @@ export const command = ( const _prefixes = prefixes - const check = (msg: MessageContext): MaybeAsync => { + const check = (msg: MessageContext): MaybePromise => { if (msg.isMessageGroup) return check(msg.messages[0]) for (const pref of _prefixes) { diff --git a/packages/dispatcher/src/filters/group.ts b/packages/dispatcher/src/filters/group.ts index e0993eb2..06774ff4 100644 --- a/packages/dispatcher/src/filters/group.ts +++ b/packages/dispatcher/src/filters/group.ts @@ -1,4 +1,4 @@ -import { MaybeAsync, Message } from '@mtcute/core' +import { MaybePromise, Message } from '@mtcute/core' import { MessageContext } from '../context/message.js' import { Modify, UpdateFilter } from './types.js' @@ -26,7 +26,7 @@ export function every( const upds = ctx.messages const max = upds.length - const next = (): MaybeAsync => { + const next = (): MaybePromise => { if (i === max) return true const res = filter(upds[i++], state) @@ -67,7 +67,7 @@ export function some( const upds = ctx.messages const max = upds.length - const next = (): MaybeAsync => { + const next = (): MaybePromise => { if (i === max) return false const res = filter(upds[i++], state) diff --git a/packages/dispatcher/src/filters/logic.ts b/packages/dispatcher/src/filters/logic.ts index 1f08c155..f06c91f0 100644 --- a/packages/dispatcher/src/filters/logic.ts +++ b/packages/dispatcher/src/filters/logic.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ // ^^ will be looked into in MTQ-29 -import { MaybeAsync } from '@mtcute/core' +import { MaybePromise } from '@mtcute/core' import { ExtractBaseMany, ExtractMod, Invert, UnionToIntersection, UpdateFilter } from './types.js' @@ -160,7 +160,7 @@ export function and(...fns: UpdateFilter[]): UpdateFilter => { + const next = (): MaybePromise => { if (i === max) return true const res = fns[i++](upd, state) @@ -306,7 +306,7 @@ export function or(...fns: UpdateFilter[]): UpdateFilter => { + const next = (): MaybePromise => { if (i === max) return false const res = fns[i++](upd, state) diff --git a/packages/dispatcher/src/filters/state.ts b/packages/dispatcher/src/filters/state.ts index 5cc676c6..6cce030a 100644 --- a/packages/dispatcher/src/filters/state.ts +++ b/packages/dispatcher/src/filters/state.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { MaybeAsync } from '@mtcute/core' +import { MaybePromise } from '@mtcute/core' import { UpdateFilter } from './types.js' @@ -21,7 +21,7 @@ export const stateEmpty: UpdateFilter = async (upd, state) => { * @param predicate State predicate */ export const state = ( - predicate: (state: T) => MaybeAsync, + predicate: (state: T) => MaybePromise, // eslint-disable-next-line @typescript-eslint/ban-types ): UpdateFilter => { return async (upd, state) => { diff --git a/packages/dispatcher/src/filters/types.ts b/packages/dispatcher/src/filters/types.ts index e15755e9..85c723a7 100644 --- a/packages/dispatcher/src/filters/types.ts +++ b/packages/dispatcher/src/filters/types.ts @@ -2,7 +2,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ // ^^ will be looked into in MTQ-29 -import { MaybeAsync } from '@mtcute/core' +import { MaybePromise } from '@mtcute/core' import { UpdateState } from '../state/update-state.js' /** @@ -78,7 +78,7 @@ import { UpdateState } from '../state/update-state.js' export type UpdateFilter = ( update: Base, state?: UpdateState, -) => MaybeAsync +) => MaybePromise export type Modify = Omit & Mod export type Invert = { diff --git a/packages/dispatcher/src/handler.ts b/packages/dispatcher/src/handler.ts index 905205f8..a1229d4f 100644 --- a/packages/dispatcher/src/handler.ts +++ b/packages/dispatcher/src/handler.ts @@ -7,7 +7,7 @@ import { DeleteMessageUpdate, DeleteStoryUpdate, HistoryReadUpdate, - MaybeAsync, + MaybePromise, PeersIndex, PollUpdate, PollVoteUpdate, @@ -39,8 +39,8 @@ export interface BaseUpdateHandler { export type ParsedUpdateHandler = BaseUpdateHandler< Name, - (update: Update, state: State) => MaybeAsync, - (update: Update, state: State) => MaybeAsync + (update: Update, state: State) => MaybePromise, + (update: Update, state: State) => MaybePromise > export type RawUpdateHandler = BaseUpdateHandler< @@ -49,8 +49,8 @@ export type RawUpdateHandler = BaseUpdateHandler< client: TelegramClient, update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex, - ) => MaybeAsync, - (client: TelegramClient, update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex) => MaybeAsync + ) => MaybePromise, + (client: TelegramClient, update: tl.TypeUpdate | tl.TypeMessage, peers: PeersIndex) => MaybePromise > // begin-codegen diff --git a/packages/dispatcher/src/state/key.ts b/packages/dispatcher/src/state/key.ts index 1423e686..713c51d9 100644 --- a/packages/dispatcher/src/state/key.ts +++ b/packages/dispatcher/src/state/key.ts @@ -1,4 +1,4 @@ -import { assertNever, MaybeAsync, Peer } from '@mtcute/core' +import { assertNever, MaybePromise, Peer } from '@mtcute/core' import { CallbackQueryContext, MessageContext } from '../context/index.js' @@ -10,7 +10,7 @@ import { CallbackQueryContext, MessageContext } from '../context/index.js' * @param msg Message or callback from which to derive the key * @param scene Current scene UID, or `null` if none */ -export type StateKeyDelegate = (upd: MessageContext | CallbackQueryContext | Peer) => MaybeAsync +export type StateKeyDelegate = (upd: MessageContext | CallbackQueryContext | Peer) => MaybePromise /** * Default state key delegate. diff --git a/packages/dispatcher/src/state/providers/memory.ts b/packages/dispatcher/src/state/providers/memory.ts index 673498d8..65dd3928 100644 --- a/packages/dispatcher/src/state/providers/memory.ts +++ b/packages/dispatcher/src/state/providers/memory.ts @@ -1,4 +1,4 @@ -import { MaybeAsync, MemoryStorageDriver } from '@mtcute/core' +import { MaybePromise, MemoryStorageDriver } from '@mtcute/core' import { IStateStorageProvider } from '../provider.js' import { IStateRepository } from '../repository.js' @@ -91,15 +91,13 @@ class MemoryStateRepository implements IStateRepository { return [item.remaining, item.reset] } - resetRateLimit(key: string): MaybeAsync { + resetRateLimit(key: string): MaybePromise { this.rl.delete(key) } } export class MemoryStateStorage implements IStateStorageProvider { - constructor( - readonly driver: MemoryStorageDriver = new MemoryStorageDriver(), - ) {} + constructor(readonly driver: MemoryStorageDriver = new MemoryStorageDriver()) {} readonly state = new MemoryStateRepository(this.driver) } diff --git a/packages/dispatcher/src/state/providers/sqlite.ts b/packages/dispatcher/src/state/providers/sqlite.ts index eda52c37..e7361893 100644 --- a/packages/dispatcher/src/state/providers/sqlite.ts +++ b/packages/dispatcher/src/state/providers/sqlite.ts @@ -1,4 +1,4 @@ -import { MaybeAsync } from '@mtcute/core' +import { MaybePromise } from '@mtcute/core' import type { SqliteStorage, SqliteStorageDriver, Statement } from '@mtcute/sqlite' import { IStateStorageProvider } from '../provider.js' @@ -46,12 +46,12 @@ class SqliteStateRepository implements IStateRepository { } private _setState!: Statement - setState(key: string, state: string, ttl?: number | undefined): MaybeAsync { + setState(key: string, state: string, ttl?: number | undefined): MaybePromise { this._setState.run(key, state, ttl ? Date.now() + ttl * 1000 : undefined) } private _getState!: Statement - getState(key: string, now: number): MaybeAsync { + getState(key: string, now: number): MaybePromise { const res_ = this._getState.get(key) if (!res_) return null const res = res_ as StateDto @@ -66,13 +66,13 @@ class SqliteStateRepository implements IStateRepository { } private _deleteState!: Statement - deleteState(key: string): MaybeAsync { + deleteState(key: string): MaybePromise { this._deleteState.run(key) } private _deleteOldState!: Statement private _deleteOldRl!: Statement - vacuum(now: number): MaybeAsync { + vacuum(now: number): MaybePromise { this._deleteOldState.run(now) this._deleteOldRl.run(now) } @@ -107,7 +107,7 @@ class SqliteStateRepository implements IStateRepository { return [val.remaining, val.reset] } - resetRateLimit(key: string): MaybeAsync { + resetRateLimit(key: string): MaybePromise { this._deleteRl.run(key) } } diff --git a/packages/dispatcher/src/state/repository.ts b/packages/dispatcher/src/state/repository.ts index d82d9628..d4b395f4 100644 --- a/packages/dispatcher/src/state/repository.ts +++ b/packages/dispatcher/src/state/repository.ts @@ -1,4 +1,4 @@ -import { MaybeAsync } from '@mtcute/core' +import { MaybePromise } from '@mtcute/core' /** * Interface for FSM storage for the dispatcher. @@ -19,7 +19,7 @@ export interface IStateRepository { * * @param key Key of the state, as defined by {@link StateKeyDelegate} */ - getState(key: string, now: number): MaybeAsync + getState(key: string, now: number): MaybePromise /** * Save state to the storage @@ -28,21 +28,21 @@ export interface IStateRepository { * @param state String representing the state * @param ttl TTL for the state, in seconds */ - setState(key: string, state: string, ttl?: number): MaybeAsync + setState(key: string, state: string, ttl?: number): MaybePromise /** * Delete state from the storage * * @param key Key of the state, as defined by {@link StateKeyDelegate} */ - deleteState(key: string): MaybeAsync + deleteState(key: string): MaybePromise /** * Clean up expired states and rate limits. * * @param now Current unix time in ms */ - vacuum(now: number): MaybeAsync + vacuum(now: number): MaybePromise /** * Get information about a rate limit. @@ -57,12 +57,12 @@ export interface IStateRepository { * @returns Tuple containing the number of remaining and * unix time in ms when the user can try again */ - getRateLimit(key: string, now: number, limit: number, window: number): MaybeAsync<[number, number]> + getRateLimit(key: string, now: number, limit: number, window: number): MaybePromise<[number, number]> /** * Reset a rate limit. * * @param key Key of the rate limit */ - resetRateLimit(key: string): MaybeAsync + resetRateLimit(key: string): MaybePromise } diff --git a/packages/dispatcher/src/wizard.ts b/packages/dispatcher/src/wizard.ts index eaeae547..2cf864ad 100644 --- a/packages/dispatcher/src/wizard.ts +++ b/packages/dispatcher/src/wizard.ts @@ -1,4 +1,4 @@ -import { MaybeAsync } from '@mtcute/core' +import { MaybePromise } from '@mtcute/core' import { MessageContext } from './context/message.js' import { Dispatcher } from './dispatcher.js' @@ -94,7 +94,7 @@ export class WizardScene extends Dispatcher, - ) => MaybeAsync, + ) => MaybePromise, ): void { const step = this._steps++ diff --git a/packages/test/src/client.ts b/packages/test/src/client.ts index a2913fa6..6c2ab281 100644 --- a/packages/test/src/client.ts +++ b/packages/test/src/client.ts @@ -1,4 +1,11 @@ -import { BaseTelegramClient, BaseTelegramClientOptions, MaybeAsync, MustEqual, RpcCallOptions, tl } from '@mtcute/core' +import { + BaseTelegramClient, + BaseTelegramClientOptions, + MaybePromise, + MustEqual, + RpcCallOptions, + tl, +} from '@mtcute/core' import { StubMemoryTelegramStorage } from './storage.js' import { StubTelegramTransport } from './transport.js' @@ -174,7 +181,7 @@ export class StubTelegramClient extends BaseTelegramClient { respondWith< T extends tl.RpcMethod['_'], - Fn extends(data: tl.FindByName) => MaybeAsync, + Fn extends(data: tl.FindByName) => MaybePromise, >(method: T, response: Fn): Fn { // eslint-disable-next-line this._responders.set(method, response as any) @@ -280,7 +287,7 @@ export class StubTelegramClient extends BaseTelegramClient { // helpers // - async with(fn: () => MaybeAsync): Promise { + async with(fn: () => MaybePromise): Promise { await this.connect() let error: unknown