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