@mtcute/core 0.13.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/highlevel/base.d.ts +1 -0
- package/cjs/highlevel/base.js +3 -0
- package/cjs/highlevel/base.js.map +1 -1
- package/cjs/highlevel/client.d.ts +17 -5
- package/cjs/highlevel/client.js +3 -0
- package/cjs/highlevel/client.js.map +1 -1
- package/cjs/highlevel/client.types.d.ts +1 -0
- package/cjs/highlevel/client.types.js.map +1 -1
- package/cjs/highlevel/methods/_init.js +3 -0
- package/cjs/highlevel/methods/_init.js.map +1 -1
- package/cjs/highlevel/methods/auth/log-out.d.ts +8 -1
- package/cjs/highlevel/methods/auth/log-out.js +4 -2
- package/cjs/highlevel/methods/auth/log-out.js.map +1 -1
- package/cjs/highlevel/methods/auth/send-code.d.ts +5 -0
- package/cjs/highlevel/methods/auth/send-code.js +5 -1
- package/cjs/highlevel/methods/auth/send-code.js.map +1 -1
- package/cjs/highlevel/methods/auth/start.d.ts +5 -0
- package/cjs/highlevel/methods/auth/start.js +81 -53
- package/cjs/highlevel/methods/auth/start.js.map +1 -1
- package/cjs/highlevel/methods/chats/delete-history.d.ts +2 -4
- package/cjs/highlevel/methods/chats/delete-history.js.map +1 -1
- package/cjs/highlevel/methods/chats/kick-chat-member.js +1 -1
- package/cjs/highlevel/methods/chats/kick-chat-member.js.map +1 -1
- package/cjs/highlevel/methods/chats/open-chat.d.ts +4 -3
- package/cjs/highlevel/methods/chats/open-chat.js +4 -3
- package/cjs/highlevel/methods/chats/open-chat.js.map +1 -1
- package/cjs/highlevel/methods/messages/find-in-update.js +4 -2
- package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/cjs/highlevel/methods.d.ts +1 -0
- package/cjs/highlevel/methods.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/index.d.ts +3 -2
- package/cjs/highlevel/types/stories/interactive/index.js +5 -1
- package/cjs/highlevel/types/stories/interactive/index.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/input.d.ts +1 -0
- package/cjs/highlevel/types/stories/interactive/input.js +7 -0
- package/cjs/highlevel/types/stories/interactive/input.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/url.d.ts +11 -0
- package/cjs/highlevel/types/stories/interactive/url.js +20 -0
- package/cjs/highlevel/types/stories/interactive/url.js.map +1 -0
- package/cjs/highlevel/types/updates/callback-query.d.ts +16 -2
- package/cjs/highlevel/types/updates/callback-query.js +31 -1
- package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
- package/cjs/highlevel/types/updates/index.d.ts +5 -2
- package/cjs/highlevel/types/updates/index.js +2 -1
- package/cjs/highlevel/types/updates/index.js.map +1 -1
- package/cjs/highlevel/types/updates/parse-update.js +2 -0
- package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
- package/cjs/highlevel/updates/manager.d.ts +1 -0
- package/cjs/highlevel/updates/manager.js +38 -10
- package/cjs/highlevel/updates/manager.js.map +1 -1
- package/cjs/highlevel/updates/types.d.ts +36 -1
- package/cjs/highlevel/updates/types.js.map +1 -1
- package/cjs/highlevel/worker/port.d.ts +2 -0
- package/cjs/highlevel/worker/port.js +5 -0
- package/cjs/highlevel/worker/port.js.map +1 -1
- package/cjs/highlevel/worker/protocol.d.ts +2 -0
- package/cjs/highlevel/worker/protocol.js.map +1 -1
- package/cjs/highlevel/worker/worker.js +1 -0
- package/cjs/highlevel/worker/worker.js.map +1 -1
- package/cjs/network/client.d.ts +2 -0
- package/cjs/network/client.js +9 -1
- package/cjs/network/client.js.map +1 -1
- package/cjs/network/mtproto-session.js +2 -0
- package/cjs/network/mtproto-session.js.map +1 -1
- package/cjs/network/network-manager.d.ts +9 -2
- package/cjs/network/network-manager.js +27 -13
- package/cjs/network/network-manager.js.map +1 -1
- package/cjs/network/session-connection.js +12 -3
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/storage/sqlite/repository/peers.d.ts +2 -0
- package/cjs/storage/sqlite/repository/peers.js +14 -0
- package/cjs/storage/sqlite/repository/peers.js.map +1 -1
- package/cjs/utils/misc-utils.d.ts +1 -0
- package/cjs/utils/misc-utils.js +17 -1
- package/cjs/utils/misc-utils.js.map +1 -1
- package/esm/highlevel/base.d.ts +1 -0
- package/esm/highlevel/base.js +3 -0
- package/esm/highlevel/base.js.map +1 -1
- package/esm/highlevel/client.d.ts +17 -5
- package/esm/highlevel/client.js +3 -0
- package/esm/highlevel/client.js.map +1 -1
- package/esm/highlevel/client.types.d.ts +1 -0
- package/esm/highlevel/client.types.js.map +1 -1
- package/esm/highlevel/methods/_init.js +3 -0
- package/esm/highlevel/methods/_init.js.map +1 -1
- package/esm/highlevel/methods/auth/log-out.d.ts +8 -1
- package/esm/highlevel/methods/auth/log-out.js +4 -2
- package/esm/highlevel/methods/auth/log-out.js.map +1 -1
- package/esm/highlevel/methods/auth/send-code.d.ts +5 -0
- package/esm/highlevel/methods/auth/send-code.js +5 -1
- package/esm/highlevel/methods/auth/send-code.js.map +1 -1
- package/esm/highlevel/methods/auth/start.d.ts +5 -0
- package/esm/highlevel/methods/auth/start.js +82 -54
- package/esm/highlevel/methods/auth/start.js.map +1 -1
- package/esm/highlevel/methods/chats/delete-history.d.ts +2 -4
- package/esm/highlevel/methods/chats/delete-history.js.map +1 -1
- package/esm/highlevel/methods/chats/kick-chat-member.js +2 -2
- package/esm/highlevel/methods/chats/kick-chat-member.js.map +1 -1
- package/esm/highlevel/methods/chats/open-chat.d.ts +4 -3
- package/esm/highlevel/methods/chats/open-chat.js +4 -3
- package/esm/highlevel/methods/chats/open-chat.js.map +1 -1
- package/esm/highlevel/methods/messages/find-in-update.js +4 -2
- package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/esm/highlevel/methods.d.ts +1 -0
- package/esm/highlevel/methods.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/index.d.ts +3 -2
- package/esm/highlevel/types/stories/interactive/index.js +4 -1
- package/esm/highlevel/types/stories/interactive/index.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/input.d.ts +1 -0
- package/esm/highlevel/types/stories/interactive/input.js +7 -0
- package/esm/highlevel/types/stories/interactive/input.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/url.d.ts +11 -0
- package/esm/highlevel/types/stories/interactive/url.js +16 -0
- package/esm/highlevel/types/stories/interactive/url.js.map +1 -0
- package/esm/highlevel/types/updates/callback-query.d.ts +16 -2
- package/esm/highlevel/types/updates/callback-query.js +30 -0
- package/esm/highlevel/types/updates/callback-query.js.map +1 -1
- package/esm/highlevel/types/updates/index.d.ts +5 -2
- package/esm/highlevel/types/updates/index.js +2 -2
- package/esm/highlevel/types/updates/index.js.map +1 -1
- package/esm/highlevel/types/updates/parse-update.js +3 -1
- package/esm/highlevel/types/updates/parse-update.js.map +1 -1
- package/esm/highlevel/updates/manager.d.ts +1 -0
- package/esm/highlevel/updates/manager.js +38 -10
- package/esm/highlevel/updates/manager.js.map +1 -1
- package/esm/highlevel/updates/types.d.ts +36 -1
- package/esm/highlevel/updates/types.js.map +1 -1
- package/esm/highlevel/worker/port.d.ts +2 -0
- package/esm/highlevel/worker/port.js +5 -0
- package/esm/highlevel/worker/port.js.map +1 -1
- package/esm/highlevel/worker/protocol.d.ts +2 -0
- package/esm/highlevel/worker/protocol.js.map +1 -1
- package/esm/highlevel/worker/worker.js +1 -0
- package/esm/highlevel/worker/worker.js.map +1 -1
- package/esm/network/client.d.ts +2 -0
- package/esm/network/client.js +9 -1
- package/esm/network/client.js.map +1 -1
- package/esm/network/mtproto-session.js +2 -0
- package/esm/network/mtproto-session.js.map +1 -1
- package/esm/network/network-manager.d.ts +9 -2
- package/esm/network/network-manager.js +28 -14
- package/esm/network/network-manager.js.map +1 -1
- package/esm/network/session-connection.js +12 -3
- package/esm/network/session-connection.js.map +1 -1
- package/esm/storage/sqlite/repository/peers.d.ts +2 -0
- package/esm/storage/sqlite/repository/peers.js +14 -0
- package/esm/storage/sqlite/repository/peers.js.map +1 -1
- package/esm/utils/misc-utils.d.ts +1 -0
- package/esm/utils/misc-utils.js +15 -0
- package/esm/utils/misc-utils.js.map +1 -1
- package/package.json +4 -4
|
@@ -23,6 +23,7 @@ export interface ITelegramClient {
|
|
|
23
23
|
readonly log: Logger;
|
|
24
24
|
readonly storage: PublicPart<TelegramStorageManager>;
|
|
25
25
|
readonly appConfig: PublicPart<AppConfigManager>;
|
|
26
|
+
readonly stopSignal: AbortSignal;
|
|
26
27
|
prepare(): Promise<void>;
|
|
27
28
|
connect(): Promise<void>;
|
|
28
29
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.types.js","sourceRoot":"","sources":["../../../src/highlevel/client.types.ts"],"names":[],"mappings":"","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport type { ConnectionKind, RpcCallOptions } from '../network/index.js'\nimport type { MustEqual, PublicPart } from '../types/utils.js'\nimport type { Logger } from '../utils/logger.js'\nimport type { AppConfigManager } from './managers/app-config-manager.js'\nimport type { TelegramStorageManager } from './storage/storage.js'\nimport type { RawUpdateHandler } from './updates/types.js'\nimport type { StringSessionData } from './utils/string-session.js'\n\n/**\n * Connection state of the client\n *\n * - `offline` - not connected (only emitted when {@link ICorePlatform.onNetworkChanged} callback\n * is called with `false`)\n * - `connecting` - currently connecting. All requests will be queued until the connection is established\n * - `updating` - connected and is currently updating the state (i.e. downloading missing updates).\n * At this point client is already fully operational, but some updates may be missing.\n * Is only emitted when updates manager is enabled.\n * - `connected` - connected and ready to send requests. When updates manager is enabled, this state\n * may be emitted before `updating` state\n */\nexport type ConnectionState = 'offline' | 'connecting' | 'updating' | 'connected'\n\n// NB: when adding new methods, don't forget to add them to:\n// - worker/port.ts\n// - generate-client script\n\nexport interface ITelegramClient {\n readonly log: Logger\n readonly storage: PublicPart<TelegramStorageManager>\n readonly appConfig: PublicPart<AppConfigManager>\n\n prepare(): Promise<void>\n connect(): Promise<void>\n close(): Promise<void>\n notifyLoggedIn(auth: tl.auth.TypeAuthorization | tl.RawUser): Promise<tl.RawUser>\n notifyLoggedOut(): Promise<void>\n notifyChannelOpened(channelId: number, pts?: number): Promise<boolean>\n notifyChannelClosed(channelId: number): Promise<boolean>\n startUpdatesLoop(): Promise<void>\n stopUpdatesLoop(): Promise<void>\n call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]>\n importSession(session: string | StringSessionData, force?: boolean): Promise<void>\n exportSession(): Promise<string>\n onError(handler: (err: unknown) => void): void\n emitError(err: unknown): void\n handleClientUpdate(updates: tl.TypeUpdates, noDispatch?: boolean): void\n\n onServerUpdate(handler: (update: tl.TypeUpdates) => void): void\n onUpdate(handler: RawUpdateHandler): void\n onConnectionState(handler: (state: ConnectionState) => void): void\n\n getApiCrenetials(): Promise<{ id: number; hash: string }>\n // todo - this is only used for file dl/ul, which should probably be moved\n // to the client to allow moving the thing to worker\n // or at least load this once at startup (and then these methods can be made sync)\n getPoolSize(kind: ConnectionKind, dcId?: number): Promise<number>\n getPrimaryDcId(): Promise<number>\n\n computeSrpParams(request: tl.account.RawPassword, password: string): Promise<tl.RawInputCheckPasswordSRP>\n computeNewPasswordHash(algo: tl.TypePasswordKdfAlgo, password: string): Promise<Uint8Array>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"client.types.js","sourceRoot":"","sources":["../../../src/highlevel/client.types.ts"],"names":[],"mappings":"","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport type { ConnectionKind, RpcCallOptions } from '../network/index.js'\nimport type { MustEqual, PublicPart } from '../types/utils.js'\nimport type { Logger } from '../utils/logger.js'\nimport type { AppConfigManager } from './managers/app-config-manager.js'\nimport type { TelegramStorageManager } from './storage/storage.js'\nimport type { RawUpdateHandler } from './updates/types.js'\nimport type { StringSessionData } from './utils/string-session.js'\n\n/**\n * Connection state of the client\n *\n * - `offline` - not connected (only emitted when {@link ICorePlatform.onNetworkChanged} callback\n * is called with `false`)\n * - `connecting` - currently connecting. All requests will be queued until the connection is established\n * - `updating` - connected and is currently updating the state (i.e. downloading missing updates).\n * At this point client is already fully operational, but some updates may be missing.\n * Is only emitted when updates manager is enabled.\n * - `connected` - connected and ready to send requests. When updates manager is enabled, this state\n * may be emitted before `updating` state\n */\nexport type ConnectionState = 'offline' | 'connecting' | 'updating' | 'connected'\n\n// NB: when adding new methods, don't forget to add them to:\n// - worker/port.ts\n// - generate-client script\n\nexport interface ITelegramClient {\n readonly log: Logger\n readonly storage: PublicPart<TelegramStorageManager>\n readonly appConfig: PublicPart<AppConfigManager>\n readonly stopSignal: AbortSignal\n\n prepare(): Promise<void>\n connect(): Promise<void>\n close(): Promise<void>\n notifyLoggedIn(auth: tl.auth.TypeAuthorization | tl.RawUser): Promise<tl.RawUser>\n notifyLoggedOut(): Promise<void>\n notifyChannelOpened(channelId: number, pts?: number): Promise<boolean>\n notifyChannelClosed(channelId: number): Promise<boolean>\n startUpdatesLoop(): Promise<void>\n stopUpdatesLoop(): Promise<void>\n call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]>\n importSession(session: string | StringSessionData, force?: boolean): Promise<void>\n exportSession(): Promise<string>\n onError(handler: (err: unknown) => void): void\n emitError(err: unknown): void\n handleClientUpdate(updates: tl.TypeUpdates, noDispatch?: boolean): void\n\n onServerUpdate(handler: (update: tl.TypeUpdates) => void): void\n onUpdate(handler: RawUpdateHandler): void\n onConnectionState(handler: (state: ConnectionState) => void): void\n\n getApiCrenetials(): Promise<{ id: number; hash: string }>\n // todo - this is only used for file dl/ul, which should probably be moved\n // to the client to allow moving the thing to worker\n // or at least load this once at startup (and then these methods can be made sync)\n getPoolSize(kind: ConnectionKind, dcId?: number): Promise<number>\n getPrimaryDcId(): Promise<number>\n\n computeSrpParams(request: tl.account.RawPassword, password: string): Promise<tl.RawInputCheckPasswordSRP>\n computeNewPasswordHash(algo: tl.TypePasswordKdfAlgo, password: string): Promise<Uint8Array>\n}\n"]}
|
|
@@ -24,6 +24,9 @@ function _initializeClient(opts) {
|
|
|
24
24
|
this.log = this._client.log;
|
|
25
25
|
// @ts-expect-error codegen
|
|
26
26
|
this.storage = this._client.storage;
|
|
27
|
+
Object.defineProperty(this, 'stopSignal', {
|
|
28
|
+
get: () => this._client.stopSignal,
|
|
29
|
+
});
|
|
27
30
|
if (!opts.disableUpdates) {
|
|
28
31
|
const skipConversationUpdates = opts.skipConversationUpdates ?? true;
|
|
29
32
|
const { messageGroupingInterval } = opts.updates ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_init.js","sourceRoot":"","sources":["../../../../src/highlevel/methods/_init.ts"],"names":[],"mappings":";AAAA,sDAAsD;;AAEtD,QAAQ;AACR,mDAAsE;AACtE,wCAA0E;AAK1E,QAAQ;AACR,8DAAuD;AACvD,QAAQ;AACR,oDAAyF;AAmCzF,cAAc;AACd,gBAAgB;AAChB,SAAS,iBAAiB,CAAuB,IAA2B;IACxE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;IAC9B,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvF,MAAM,IAAI,6BAAkB,CACxB,+EAA+E,CAClF,CAAA;QACL,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,4BAAkB,CAAC,IAAiC,CAAC,CAAA;IAC5E,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;IAC3B,2BAA2B;IAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"_init.js","sourceRoot":"","sources":["../../../../src/highlevel/methods/_init.ts"],"names":[],"mappings":";AAAA,sDAAsD;;AAEtD,QAAQ;AACR,mDAAsE;AACtE,wCAA0E;AAK1E,QAAQ;AACR,8DAAuD;AACvD,QAAQ;AACR,oDAAyF;AAmCzF,cAAc;AACd,gBAAgB;AAChB,SAAS,iBAAiB,CAAuB,IAA2B;IACxE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;IAC9B,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvF,MAAM,IAAI,6BAAkB,CACxB,+EAA+E,CAClF,CAAA;QACL,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,4BAAkB,CAAC,IAAiC,CAAC,CAAA;IAC5E,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;IAC3B,2BAA2B;IAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;IACnC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE;QACtC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;KACrC,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAA;QACpE,MAAM,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;QAEtD,IAAI,CAAC,OAAO,CAAC,QAAQ,CACjB,IAAA,mCAAuB,EAAC;YACpB,uBAAuB;YACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,8BAAY,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,uBAAuB;oBAAE,OAAM;gBAE9E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YACvC,CAAC;YACD,WAAW,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;YAC1C,CAAC;SACJ,CAAC,CACL,CAAA;IACL,CAAC;AACL,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\n// @copy\nimport { MtUnsupportedError, PartialOnly } from '../../types/index.js'\nimport { BaseTelegramClient, BaseTelegramClientOptions } from '../base.js'\nimport { TelegramClient } from '../client.js'\nimport { ITelegramClient } from '../client.types.js'\n// @copy\nimport { ITelegramStorageProvider } from '../storage/provider.js'\n// @copy\nimport { Conversation } from '../types/conversation.js'\n// @copy\nimport { makeParsedUpdateHandler, ParsedUpdateHandlerParams } from '../updates/parsed.js'\n\n// @copy\ntype TelegramClientOptions = (\n | (PartialOnly<Omit<BaseTelegramClientOptions, 'storage'>, 'transport' | 'crypto'> & {\n /**\n * Storage to use for this client.\n *\n * If a string is passed, it will be used as\n * a name for the default platform-specific storage provider to use.\n *\n * @default `\"client.session\"`\n */\n storage?: string | ITelegramStorageProvider\n })\n | { client: ITelegramClient }\n) & {\n /**\n * If true, all API calls will be wrapped with `tl.invokeWithoutUpdates`,\n * effectively disabling the server-sent events for the clients.\n * May be useful in some cases.\n *\n * @default false\n */\n disableUpdates?: boolean\n updates?: Omit<ParsedUpdateHandlerParams, 'onUpdate'>\n /**\n * If `true`, the updates that were handled by some {@link Conversation}\n * will not be dispatched any further.\n *\n * @default true\n */\n skipConversationUpdates?: boolean\n}\n\n// @initialize\n/** @internal */\nfunction _initializeClient(this: TelegramClient, opts: TelegramClientOptions) {\n if ('client' in opts) {\n this._client = opts.client\n } else {\n if (!opts.storage || typeof opts.storage === 'string' || !opts.transport || !opts.crypto) {\n throw new MtUnsupportedError(\n 'You need to explicitly provide storage, transport and crypto for @mtcute/core',\n )\n }\n\n this._client = new BaseTelegramClient(opts as BaseTelegramClientOptions)\n }\n\n // @ts-expect-error codegen\n this.log = this._client.log\n // @ts-expect-error codegen\n this.storage = this._client.storage\n Object.defineProperty(this, 'stopSignal', {\n get: () => this._client.stopSignal,\n })\n\n if (!opts.disableUpdates) {\n const skipConversationUpdates = opts.skipConversationUpdates ?? true\n const { messageGroupingInterval } = opts.updates ?? {}\n\n this._client.onUpdate(\n makeParsedUpdateHandler({\n messageGroupingInterval,\n onUpdate: (update) => {\n if (Conversation.handleUpdate(this, update) && skipConversationUpdates) return\n\n this.emit('update', update)\n this.emit(update.name, update.data)\n },\n onRawUpdate: (update, peers) => {\n this.emit('raw_update', update, peers)\n },\n }),\n )\n }\n}\n"]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { ITelegramClient } from '../../client.types.js';
|
|
2
|
+
export interface LogOutResult {
|
|
3
|
+
/**
|
|
4
|
+
* Future auth token returned by the server (if any), which can then be passed to
|
|
5
|
+
* {@link start} and {@link sendCode} methods to avoid sending the code again.
|
|
6
|
+
*/
|
|
7
|
+
futureAuthToken?: Uint8Array;
|
|
8
|
+
}
|
|
2
9
|
/**
|
|
3
10
|
* Log out from Telegram account and optionally reset the session storage.
|
|
4
11
|
*
|
|
@@ -7,4 +14,4 @@ import { ITelegramClient } from '../../client.types.js';
|
|
|
7
14
|
*
|
|
8
15
|
* @returns On success, `true` is returned
|
|
9
16
|
*/
|
|
10
|
-
export declare function logOut(client: ITelegramClient): Promise<
|
|
17
|
+
export declare function logOut(client: ITelegramClient): Promise<LogOutResult>;
|
|
@@ -10,9 +10,11 @@ exports.logOut = void 0;
|
|
|
10
10
|
* @returns On success, `true` is returned
|
|
11
11
|
*/
|
|
12
12
|
async function logOut(client) {
|
|
13
|
-
await client.call({ _: 'auth.logOut' });
|
|
13
|
+
const res = await client.call({ _: 'auth.logOut' });
|
|
14
14
|
await client.notifyLoggedOut();
|
|
15
|
-
return
|
|
15
|
+
return {
|
|
16
|
+
futureAuthToken: res.futureAuthToken,
|
|
17
|
+
};
|
|
16
18
|
}
|
|
17
19
|
exports.logOut = logOut;
|
|
18
20
|
//# sourceMappingURL=log-out.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-out.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/log-out.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"log-out.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/log-out.ts"],"names":[],"mappings":";;;AAWA;;;;;;;GAOG;AACI,KAAK,UAAU,MAAM,CAAC,MAAuB;IAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAA;IACnD,MAAM,MAAM,CAAC,eAAe,EAAE,CAAA;IAE9B,OAAO;QACH,eAAe,EAAE,GAAG,CAAC,eAAe;KACvC,CAAA;AACL,CAAC;AAPD,wBAOC","sourcesContent":["import { ITelegramClient } from '../../client.types.js'\n\n// @exported\nexport interface LogOutResult {\n /**\n * Future auth token returned by the server (if any), which can then be passed to\n * {@link start} and {@link sendCode} methods to avoid sending the code again.\n */\n futureAuthToken?: Uint8Array\n}\n\n/**\n * Log out from Telegram account and optionally reset the session storage.\n *\n * When you log out, you can immediately log back in using\n * the same {@link TelegramClient} instance.\n *\n * @returns On success, `true` is returned\n */\nexport async function logOut(client: ITelegramClient): Promise<LogOutResult> {\n const res = await client.call({ _: 'auth.logOut' })\n await client.notifyLoggedOut()\n\n return {\n futureAuthToken: res.futureAuthToken,\n }\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { tl } from '@mtcute/tl';
|
|
1
2
|
import { ITelegramClient } from '../../client.types.js';
|
|
2
3
|
import { SentCode } from '../../types/auth/sent-code.js';
|
|
3
4
|
/**
|
|
@@ -8,4 +9,8 @@ import { SentCode } from '../../types/auth/sent-code.js';
|
|
|
8
9
|
export declare function sendCode(client: ITelegramClient, params: {
|
|
9
10
|
/** Phone number in international format */
|
|
10
11
|
phone: string;
|
|
12
|
+
/** Saved future auth tokens, if any */
|
|
13
|
+
futureAuthTokens?: Uint8Array[];
|
|
14
|
+
/** Additional code settings to pass to the server */
|
|
15
|
+
codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>;
|
|
11
16
|
}): Promise<SentCode>;
|
|
@@ -17,7 +17,11 @@ async function sendCode(client, params) {
|
|
|
17
17
|
phoneNumber: phone,
|
|
18
18
|
apiId: id,
|
|
19
19
|
apiHash: hash,
|
|
20
|
-
settings: {
|
|
20
|
+
settings: {
|
|
21
|
+
_: 'codeSettings',
|
|
22
|
+
logoutTokens: params.futureAuthTokens,
|
|
23
|
+
...params.codeSettings,
|
|
24
|
+
},
|
|
21
25
|
});
|
|
22
26
|
(0, type_assertions_js_1.assertTypeIs)('sendCode', res, 'auth.sentCode');
|
|
23
27
|
return new sent_code_js_1.SentCode(res);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-code.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/send-code.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"send-code.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/send-code.ts"],"names":[],"mappings":";;;AAEA,0EAAgE;AAEhE,gEAAwD;AACxD,6DAAgE;AAEhE;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAC1B,MAAuB,EACvB,MASC;IAED,MAAM,KAAK,GAAG,IAAA,oCAAoB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAEhD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAA;IAEpD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,eAAe;QAClB,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE;YACN,CAAC,EAAE,cAAc;YACjB,YAAY,EAAE,MAAM,CAAC,gBAAgB;YACrC,GAAG,MAAM,CAAC,YAAY;SACzB;KACJ,CAAC,CAAA;IAEF,IAAA,iCAAY,EAAC,UAAU,EAAE,GAAG,EAAE,eAAe,CAAC,CAAA;IAE9C,OAAO,IAAI,uBAAQ,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC;AAhCD,4BAgCC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { SentCode } from '../../types/auth/sent-code.js'\nimport { normalizePhoneNumber } from '../../utils/misc-utils.js'\n\n/**\n * Send the confirmation code to the given phone number\n *\n * @returns An object containing information about the sent confirmation code\n */\nexport async function sendCode(\n client: ITelegramClient,\n params: {\n /** Phone number in international format */\n phone: string\n\n /** Saved future auth tokens, if any */\n futureAuthTokens?: Uint8Array[]\n\n /** Additional code settings to pass to the server */\n codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>\n },\n): Promise<SentCode> {\n const phone = normalizePhoneNumber(params.phone)\n\n const { id, hash } = await client.getApiCrenetials()\n\n const res = await client.call({\n _: 'auth.sendCode',\n phoneNumber: phone,\n apiId: id,\n apiHash: hash,\n settings: {\n _: 'codeSettings',\n logoutTokens: params.futureAuthTokens,\n ...params.codeSettings,\n },\n })\n\n assertTypeIs('sendCode', res, 'auth.sentCode')\n\n return new SentCode(res)\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { tl } from '@mtcute/tl';
|
|
1
2
|
import { MaybePromise } from '../../../types/utils.js';
|
|
2
3
|
import { ITelegramClient } from '../../client.types.js';
|
|
3
4
|
import { SentCode } from '../../types/auth/sent-code.js';
|
|
@@ -71,4 +72,8 @@ export declare function start(client: ITelegramClient, params: {
|
|
|
71
72
|
* @default `console.log`.
|
|
72
73
|
*/
|
|
73
74
|
codeSentCallback?: (code: SentCode) => MaybePromise<void>;
|
|
75
|
+
/** Saved future auth tokens, if any */
|
|
76
|
+
futureAuthTokens?: Uint8Array[];
|
|
77
|
+
/** Additional code settings to pass to the server */
|
|
78
|
+
codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>;
|
|
74
79
|
}): Promise<User>;
|
|
@@ -29,6 +29,9 @@ async function start(client, params) {
|
|
|
29
29
|
if (params.session) {
|
|
30
30
|
await client.importSession(params.session, params.sessionForce);
|
|
31
31
|
}
|
|
32
|
+
let has2fa = false;
|
|
33
|
+
let sentCode;
|
|
34
|
+
let phone = null;
|
|
32
35
|
try {
|
|
33
36
|
const me = await (0, get_me_js_1.getMe)(client);
|
|
34
37
|
// user is already authorized
|
|
@@ -37,71 +40,96 @@ async function start(client, params) {
|
|
|
37
40
|
return me;
|
|
38
41
|
}
|
|
39
42
|
catch (e) {
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
let phone = params.phone ? await (0, misc_utils_js_1.resolveMaybeDynamic)(params.phone) : null;
|
|
47
|
-
if (phone) {
|
|
48
|
-
phone = (0, misc_utils_js_1.normalizePhoneNumber)(phone);
|
|
49
|
-
if (!params.code) {
|
|
50
|
-
throw new errors_js_1.MtArgumentError('You must pass `code` to use `phone`');
|
|
43
|
+
if (tl_1.tl.RpcError.is(e)) {
|
|
44
|
+
if (e.text === 'SESSION_PASSWORD_NEEDED')
|
|
45
|
+
has2fa = true;
|
|
46
|
+
else if (e.text !== 'AUTH_KEY_UNREGISTERED')
|
|
47
|
+
throw e;
|
|
51
48
|
}
|
|
52
49
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (!botToken) {
|
|
56
|
-
throw new errors_js_1.MtArgumentError('
|
|
50
|
+
// if has2fa == true, then we are half-logged in, but need to enter password
|
|
51
|
+
if (!has2fa) {
|
|
52
|
+
if (!params.phone && !params.botToken) {
|
|
53
|
+
throw new errors_js_1.MtArgumentError('Neither phone nor bot token were provided');
|
|
54
|
+
}
|
|
55
|
+
phone = params.phone ? await (0, misc_utils_js_1.resolveMaybeDynamic)(params.phone) : null;
|
|
56
|
+
if (phone) {
|
|
57
|
+
phone = (0, misc_utils_js_1.normalizePhoneNumber)(phone);
|
|
58
|
+
if (!params.code) {
|
|
59
|
+
throw new errors_js_1.MtArgumentError('You must pass `code` to use `phone`');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const botToken = params.botToken ? await (0, misc_utils_js_1.resolveMaybeDynamic)(params.botToken) : null;
|
|
64
|
+
if (!botToken) {
|
|
65
|
+
throw new errors_js_1.MtArgumentError('Either bot token or phone number must be provided');
|
|
66
|
+
}
|
|
67
|
+
return await (0, sign_in_bot_js_1.signInBot)(client, botToken);
|
|
57
68
|
}
|
|
58
|
-
return await (0, sign_in_bot_js_1.signInBot)(client, botToken);
|
|
59
|
-
}
|
|
60
|
-
let sentCode = await (0, send_code_js_1.sendCode)(client, { phone });
|
|
61
|
-
if (params.forceSms && sentCode.type === 'app') {
|
|
62
|
-
sentCode = await (0, resend_code_js_1.resendCode)(client, { phone, phoneCodeHash: sentCode.phoneCodeHash });
|
|
63
|
-
}
|
|
64
|
-
if (params.codeSentCallback) {
|
|
65
|
-
await params.codeSentCallback(sentCode);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
console.log(`The confirmation code has been sent via ${sentCode.type}.`);
|
|
69
|
-
}
|
|
70
|
-
let has2fa = false;
|
|
71
|
-
for (;;) {
|
|
72
|
-
const code = await (0, misc_utils_js_1.resolveMaybeDynamic)(params.code);
|
|
73
|
-
if (!code)
|
|
74
|
-
throw new tl_1.tl.RpcError(400, 'PHONE_CODE_EMPTY');
|
|
75
69
|
try {
|
|
76
|
-
|
|
70
|
+
sentCode = await (0, send_code_js_1.sendCode)(client, {
|
|
71
|
+
phone,
|
|
72
|
+
futureAuthTokens: params.futureAuthTokens,
|
|
73
|
+
codeSettings: params.codeSettings,
|
|
74
|
+
});
|
|
77
75
|
}
|
|
78
76
|
catch (e) {
|
|
79
|
-
if (
|
|
80
|
-
throw e;
|
|
81
|
-
if (e.is('SESSION_PASSWORD_NEEDED')) {
|
|
77
|
+
if (tl_1.tl.RpcError.is(e, 'SESSION_PASSWORD_NEEDED')) {
|
|
82
78
|
has2fa = true;
|
|
83
|
-
break;
|
|
84
79
|
}
|
|
85
|
-
else
|
|
86
|
-
e
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
80
|
+
else {
|
|
81
|
+
throw e;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (sentCode) {
|
|
86
|
+
if (params.forceSms && (sentCode.type === 'app' || sentCode.type === 'email')) {
|
|
87
|
+
sentCode = await (0, resend_code_js_1.resendCode)(client, { phone: phone, phoneCodeHash: sentCode.phoneCodeHash });
|
|
88
|
+
}
|
|
89
|
+
if (params.codeSentCallback) {
|
|
90
|
+
await params.codeSentCallback(sentCode);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (sentCode.type === 'email_required') {
|
|
94
|
+
throw new errors_js_1.MtcuteError('Email login setup is required to sign in');
|
|
95
|
+
}
|
|
96
|
+
console.log(`The confirmation code has been sent via ${sentCode.type}.`);
|
|
97
|
+
}
|
|
98
|
+
for (;;) {
|
|
99
|
+
const code = await (0, misc_utils_js_1.resolveMaybeDynamic)(params.code);
|
|
100
|
+
if (!code)
|
|
101
|
+
throw new tl_1.tl.RpcError(400, 'PHONE_CODE_EMPTY');
|
|
102
|
+
try {
|
|
103
|
+
return await (0, sign_in_js_1.signIn)(client, { phone: phone, phoneCodeHash: sentCode.phoneCodeHash, phoneCode: code });
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
if (!tl_1.tl.RpcError.is(e))
|
|
107
|
+
throw e;
|
|
108
|
+
if (e.is('SESSION_PASSWORD_NEEDED')) {
|
|
109
|
+
has2fa = true;
|
|
110
|
+
break;
|
|
94
111
|
}
|
|
95
|
-
else
|
|
96
|
-
|
|
112
|
+
else if (e.is('PHONE_CODE_EMPTY') ||
|
|
113
|
+
e.is('PHONE_CODE_EXPIRED') ||
|
|
114
|
+
e.is('PHONE_CODE_INVALID') ||
|
|
115
|
+
e.is('PHONE_CODE_HASH_EMPTY')) {
|
|
116
|
+
if (typeof params.code !== 'function') {
|
|
117
|
+
throw new errors_js_1.MtArgumentError('Provided code was invalid');
|
|
118
|
+
}
|
|
119
|
+
if (params.invalidCodeCallback) {
|
|
120
|
+
await params.invalidCodeCallback('code');
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.log('Invalid code. Please try again');
|
|
124
|
+
}
|
|
125
|
+
continue;
|
|
97
126
|
}
|
|
98
|
-
|
|
127
|
+
else
|
|
128
|
+
throw e;
|
|
99
129
|
}
|
|
100
|
-
|
|
101
|
-
|
|
130
|
+
// if there was no error, code was valid, so it's either 2fa or signup
|
|
131
|
+
break;
|
|
102
132
|
}
|
|
103
|
-
// if there was no error, code was valid, so it's either 2fa or signup
|
|
104
|
-
break;
|
|
105
133
|
}
|
|
106
134
|
if (has2fa) {
|
|
107
135
|
if (!params.password) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/start.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport { tl } from '@mtcute/tl'\n\nimport { MtArgumentError } from '../../../types/errors.js'\nimport { MaybePromise } from '../../../types/utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { SentCode } from '../../types/auth/sent-code.js'\nimport { User } from '../../types/peers/user.js'\nimport { MaybeDynamic } from '../../types/utils.js'\nimport { normalizePhoneNumber, resolveMaybeDynamic } from '../../utils/misc-utils.js'\nimport { StringSessionData } from '../../utils/string-session.js'\nimport { getMe } from '../users/get-me.js'\nimport { checkPassword } from './check-password.js'\nimport { resendCode } from './resend-code.js'\nimport { sendCode } from './send-code.js'\nimport { signIn } from './sign-in.js'\nimport { signInBot } from './sign-in-bot.js'\n\n// @available=both\n/**\n * Start the client in an interactive and declarative manner,\n * by providing callbacks for authorization details.\n *\n * This method handles both login and sign up, and also handles 2FV\n *\n * All parameters are `MaybeDynamic<T>`, meaning you\n * can either supply `T`, or a function that returns `MaybePromise<T>`\n *\n * This method is intended for simple and fast use in automated\n * scripts and bots. If you are developing a custom client,\n * you'll probably need to use other auth methods.\n */\nexport async function start(\n client: ITelegramClient,\n params: {\n /**\n * String session exported using {@link TelegramClient.exportSession}.\n *\n * This simply calls {@link TelegramClient.importSession} before anything else.\n *\n * Note that passed session will be ignored in case storage already\n * contains authorization.\n */\n session?: string | StringSessionData\n\n /**\n * Whether to overwrite existing session.\n */\n sessionForce?: boolean\n\n /**\n * Phone number of the account.\n * If account does not exist, it will be created\n */\n phone?: MaybeDynamic<string>\n\n /**\n * Bot token to use. Ignored if `phone` is supplied.\n */\n botToken?: MaybeDynamic<string>\n\n /**\n * 2FA password. Ignored if `botToken` is supplied\n */\n password?: MaybeDynamic<string>\n\n /**\n * Code sent to the phone (either sms, call, flash call or other).\n * Ignored if `botToken` is supplied, must be present if `phone` is supplied.\n */\n code?: MaybeDynamic<string>\n\n /**\n * If passed, this function will be called if provided code or 2FA password\n * was invalid. New code/password will be requested later.\n *\n * If provided `code`/`password` is a constant string, providing an\n * invalid one will interrupt authorization flow.\n */\n invalidCodeCallback?: (type: 'code' | 'password') => MaybePromise<void>\n\n /**\n * Whether to force code delivery through SMS\n */\n forceSms?: boolean\n\n /**\n * Custom method that is called when a code is sent. Can be used\n * to show a GUI alert of some kind.\n *\n * This method is called *before* {@link start.params.code}.\n *\n * @param code\n * @default `console.log`.\n */\n codeSentCallback?: (code: SentCode) => MaybePromise<void>\n },\n): Promise<User> {\n if (params.session) {\n await client.importSession(params.session, params.sessionForce)\n }\n\n try {\n const me = await getMe(client)\n\n // user is already authorized\n\n client.log.info('Logged in as %s (ID: %s, username: %s, bot: %s)', me.displayName, me.id, me.username, me.isBot)\n\n await client.notifyLoggedIn(me.raw)\n\n return me\n } catch (e) {\n if (!tl.RpcError.is(e, 'AUTH_KEY_UNREGISTERED')) throw e\n }\n\n if (!params.phone && !params.botToken) {\n throw new MtArgumentError('Neither phone nor bot token were provided')\n }\n\n let phone = params.phone ? await resolveMaybeDynamic(params.phone) : null\n\n if (phone) {\n phone = normalizePhoneNumber(phone)\n\n if (!params.code) {\n throw new MtArgumentError('You must pass `code` to use `phone`')\n }\n } else {\n const botToken = params.botToken ? await resolveMaybeDynamic(params.botToken) : null\n\n if (!botToken) {\n throw new MtArgumentError('Either bot token or phone number must be provided')\n }\n\n return await signInBot(client, botToken)\n }\n\n let sentCode = await sendCode(client, { phone })\n\n if (params.forceSms && sentCode.type === 'app') {\n sentCode = await resendCode(client, { phone, phoneCodeHash: sentCode.phoneCodeHash })\n }\n\n if (params.codeSentCallback) {\n await params.codeSentCallback(sentCode)\n } else {\n console.log(`The confirmation code has been sent via ${sentCode.type}.`)\n }\n\n let has2fa = false\n\n for (;;) {\n const code = await resolveMaybeDynamic(params.code)\n if (!code) throw new tl.RpcError(400, 'PHONE_CODE_EMPTY')\n\n try {\n return await signIn(client, { phone, phoneCodeHash: sentCode.phoneCodeHash, phoneCode: code })\n } catch (e) {\n if (!tl.RpcError.is(e)) throw e\n\n if (e.is('SESSION_PASSWORD_NEEDED')) {\n has2fa = true\n break\n } else if (\n e.is('PHONE_CODE_EMPTY') ||\n e.is('PHONE_CODE_EXPIRED') ||\n e.is('PHONE_CODE_INVALID') ||\n e.is('PHONE_CODE_HASH_EMPTY')\n ) {\n if (typeof params.code !== 'function') {\n throw new MtArgumentError('Provided code was invalid')\n }\n\n if (params.invalidCodeCallback) {\n await params.invalidCodeCallback('code')\n } else {\n console.log('Invalid code. Please try again')\n }\n\n continue\n } else throw e\n }\n\n // if there was no error, code was valid, so it's either 2fa or signup\n break\n }\n\n if (has2fa) {\n if (!params.password) {\n throw new MtArgumentError('2FA is enabled, but `password` was not provided.')\n }\n\n for (;;) {\n const password = await resolveMaybeDynamic(params.password)\n\n try {\n return await checkPassword(client, password)\n } catch (e) {\n if (typeof params.password !== 'function') {\n throw new MtArgumentError('Provided password was invalid')\n }\n\n if (tl.RpcError.is(e, 'PASSWORD_HASH_INVALID')) {\n if (params.invalidCodeCallback) {\n await params.invalidCodeCallback('password')\n } else {\n console.log('Invalid password. Please try again')\n }\n continue\n } else throw e\n }\n }\n }\n\n throw new MtArgumentError('Failed to log in with provided credentials')\n}\n"]}
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/start.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport { tl } from '@mtcute/tl'\n\nimport { MtArgumentError, MtcuteError } from '../../../types/errors.js'\nimport { MaybePromise } from '../../../types/utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { SentCode } from '../../types/auth/sent-code.js'\nimport { User } from '../../types/peers/user.js'\nimport { MaybeDynamic } from '../../types/utils.js'\nimport { normalizePhoneNumber, resolveMaybeDynamic } from '../../utils/misc-utils.js'\nimport { StringSessionData } from '../../utils/string-session.js'\nimport { getMe } from '../users/get-me.js'\nimport { checkPassword } from './check-password.js'\nimport { resendCode } from './resend-code.js'\nimport { sendCode } from './send-code.js'\nimport { signIn } from './sign-in.js'\nimport { signInBot } from './sign-in-bot.js'\n\n// @available=both\n/**\n * Start the client in an interactive and declarative manner,\n * by providing callbacks for authorization details.\n *\n * This method handles both login and sign up, and also handles 2FV\n *\n * All parameters are `MaybeDynamic<T>`, meaning you\n * can either supply `T`, or a function that returns `MaybePromise<T>`\n *\n * This method is intended for simple and fast use in automated\n * scripts and bots. If you are developing a custom client,\n * you'll probably need to use other auth methods.\n */\nexport async function start(\n client: ITelegramClient,\n params: {\n /**\n * String session exported using {@link TelegramClient.exportSession}.\n *\n * This simply calls {@link TelegramClient.importSession} before anything else.\n *\n * Note that passed session will be ignored in case storage already\n * contains authorization.\n */\n session?: string | StringSessionData\n\n /**\n * Whether to overwrite existing session.\n */\n sessionForce?: boolean\n\n /**\n * Phone number of the account.\n * If account does not exist, it will be created\n */\n phone?: MaybeDynamic<string>\n\n /**\n * Bot token to use. Ignored if `phone` is supplied.\n */\n botToken?: MaybeDynamic<string>\n\n /**\n * 2FA password. Ignored if `botToken` is supplied\n */\n password?: MaybeDynamic<string>\n\n /**\n * Code sent to the phone (either sms, call, flash call or other).\n * Ignored if `botToken` is supplied, must be present if `phone` is supplied.\n */\n code?: MaybeDynamic<string>\n\n /**\n * If passed, this function will be called if provided code or 2FA password\n * was invalid. New code/password will be requested later.\n *\n * If provided `code`/`password` is a constant string, providing an\n * invalid one will interrupt authorization flow.\n */\n invalidCodeCallback?: (type: 'code' | 'password') => MaybePromise<void>\n\n /**\n * Whether to force code delivery through SMS\n */\n forceSms?: boolean\n\n /**\n * Custom method that is called when a code is sent. Can be used\n * to show a GUI alert of some kind.\n *\n * This method is called *before* {@link start.params.code}.\n *\n * @param code\n * @default `console.log`.\n */\n codeSentCallback?: (code: SentCode) => MaybePromise<void>\n\n /** Saved future auth tokens, if any */\n futureAuthTokens?: Uint8Array[]\n\n /** Additional code settings to pass to the server */\n codeSettings?: Omit<tl.RawCodeSettings, '_' | 'logoutTokens'>\n },\n): Promise<User> {\n if (params.session) {\n await client.importSession(params.session, params.sessionForce)\n }\n\n let has2fa = false\n let sentCode: SentCode | undefined\n let phone: string | null = null\n\n try {\n const me = await getMe(client)\n\n // user is already authorized\n\n client.log.info('Logged in as %s (ID: %s, username: %s, bot: %s)', me.displayName, me.id, me.username, me.isBot)\n\n await client.notifyLoggedIn(me.raw)\n\n return me\n } catch (e) {\n if (tl.RpcError.is(e)) {\n if (e.text === 'SESSION_PASSWORD_NEEDED') has2fa = true\n else if (e.text !== 'AUTH_KEY_UNREGISTERED') throw e\n }\n }\n\n // if has2fa == true, then we are half-logged in, but need to enter password\n if (!has2fa) {\n if (!params.phone && !params.botToken) {\n throw new MtArgumentError('Neither phone nor bot token were provided')\n }\n\n phone = params.phone ? await resolveMaybeDynamic(params.phone) : null\n\n if (phone) {\n phone = normalizePhoneNumber(phone)\n\n if (!params.code) {\n throw new MtArgumentError('You must pass `code` to use `phone`')\n }\n } else {\n const botToken = params.botToken ? await resolveMaybeDynamic(params.botToken) : null\n\n if (!botToken) {\n throw new MtArgumentError('Either bot token or phone number must be provided')\n }\n\n return await signInBot(client, botToken)\n }\n\n try {\n sentCode = await sendCode(client, {\n phone,\n futureAuthTokens: params.futureAuthTokens,\n codeSettings: params.codeSettings,\n })\n } catch (e) {\n if (tl.RpcError.is(e, 'SESSION_PASSWORD_NEEDED')) {\n has2fa = true\n } else {\n throw e\n }\n }\n }\n\n if (sentCode) {\n if (params.forceSms && (sentCode.type === 'app' || sentCode.type === 'email')) {\n sentCode = await resendCode(client, { phone: phone!, phoneCodeHash: sentCode.phoneCodeHash })\n }\n\n if (params.codeSentCallback) {\n await params.codeSentCallback(sentCode)\n } else {\n if (sentCode.type === 'email_required') {\n throw new MtcuteError('Email login setup is required to sign in')\n }\n\n console.log(`The confirmation code has been sent via ${sentCode.type}.`)\n }\n\n for (;;) {\n const code = await resolveMaybeDynamic(params.code)\n if (!code) throw new tl.RpcError(400, 'PHONE_CODE_EMPTY')\n\n try {\n return await signIn(client, { phone: phone!, phoneCodeHash: sentCode.phoneCodeHash, phoneCode: code })\n } catch (e) {\n if (!tl.RpcError.is(e)) throw e\n\n if (e.is('SESSION_PASSWORD_NEEDED')) {\n has2fa = true\n break\n } else if (\n e.is('PHONE_CODE_EMPTY') ||\n e.is('PHONE_CODE_EXPIRED') ||\n e.is('PHONE_CODE_INVALID') ||\n e.is('PHONE_CODE_HASH_EMPTY')\n ) {\n if (typeof params.code !== 'function') {\n throw new MtArgumentError('Provided code was invalid')\n }\n\n if (params.invalidCodeCallback) {\n await params.invalidCodeCallback('code')\n } else {\n console.log('Invalid code. Please try again')\n }\n\n continue\n } else throw e\n }\n\n // if there was no error, code was valid, so it's either 2fa or signup\n break\n }\n }\n\n if (has2fa) {\n if (!params.password) {\n throw new MtArgumentError('2FA is enabled, but `password` was not provided.')\n }\n\n for (;;) {\n const password = await resolveMaybeDynamic(params.password)\n\n try {\n return await checkPassword(client, password)\n } catch (e) {\n if (typeof params.password !== 'function') {\n throw new MtArgumentError('Provided password was invalid')\n }\n\n if (tl.RpcError.is(e, 'PASSWORD_HASH_INVALID')) {\n if (params.invalidCodeCallback) {\n await params.invalidCodeCallback('password')\n } else {\n console.log('Invalid password. Please try again')\n }\n continue\n } else throw e\n }\n }\n }\n\n throw new MtArgumentError('Failed to log in with provided credentials')\n}\n"]}
|
|
@@ -6,11 +6,9 @@ import { InputPeerLike } from '../../types/index.js';
|
|
|
6
6
|
export declare function deleteHistory(client: ITelegramClient, chat: InputPeerLike, params?: {
|
|
7
7
|
/**
|
|
8
8
|
* Deletion mode. Can be:
|
|
9
|
-
* - `delete`: delete messages (only for yourself)
|
|
10
|
-
* - `clear`: delete messages (only for yourself)
|
|
9
|
+
* - `delete`: delete messages (only for yourself) AND the dialog itself
|
|
10
|
+
* - `clear`: delete messages (only for yourself), but keep the dialog in the list
|
|
11
11
|
* - `revoke`: delete messages for all users
|
|
12
|
-
* - I'm not sure what's the difference between `delete` and `clear`,
|
|
13
|
-
* but they are in fact different flags in TL object.
|
|
14
12
|
*
|
|
15
13
|
* @default 'delete'
|
|
16
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-history.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/delete-history.ts"],"names":[],"mappings":";;;AAEA,qDAA0D;AAC1D,6DAA8D;AAC9D,8DAAsD;AAEtD;;GAEG;AACI,KAAK,UAAU,aAAa,CAC/B,MAAuB,EACvB,IAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"delete-history.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/delete-history.ts"],"names":[],"mappings":";;;AAEA,qDAA0D;AAC1D,6DAA8D;AAC9D,8DAAsD;AAEtD;;GAEG;AACI,KAAK,UAAU,aAAa,CAC/B,MAAuB,EACvB,IAAmB,EACnB,MAiBC;IAED,MAAM,EAAE,IAAI,GAAG,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEnD,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAW,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAE5C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,wBAAwB;QAC3B,SAAS,EAAE,IAAI,KAAK,OAAO;QAC3B,MAAM,EAAE,IAAI,KAAK,QAAQ;QACzB,IAAI;QACJ,KAAK;KACR,CAAC,CAAA;IAEF,IAAI,IAAA,kCAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,kBAAkB,CAAC,IAAA,4BAAiB,EAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IACvF,CAAC;SAAM,CAAC;QACJ,MAAM,CAAC,kBAAkB,CAAC,IAAA,4BAAiB,EAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvE,CAAC;AACL,CAAC;AAvCD,sCAuCC","sourcesContent":["import { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike } from '../../types/index.js'\nimport { createDummyUpdate } from '../../updates/utils.js'\nimport { isInputPeerChannel } from '../../utils/peer-utils.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\n\n/**\n * Delete communication history (for private chats and legacy groups)\n */\nexport async function deleteHistory(\n client: ITelegramClient,\n chat: InputPeerLike,\n params?: {\n /**\n * Deletion mode. Can be:\n * - `delete`: delete messages (only for yourself) AND the dialog itself\n * - `clear`: delete messages (only for yourself), but keep the dialog in the list\n * - `revoke`: delete messages for all users\n *\n * @default 'delete'\n */\n mode: 'delete' | 'clear' | 'revoke'\n\n /**\n * Maximum ID of message to delete.\n *\n * @default 0, i.e. remove all messages\n */\n maxId?: number\n },\n): Promise<void> {\n const { mode = 'delete', maxId = 0 } = params ?? {}\n\n const peer = await resolvePeer(client, chat)\n\n const res = await client.call({\n _: 'messages.deleteHistory',\n justClear: mode === 'clear',\n revoke: mode === 'revoke',\n peer,\n maxId,\n })\n\n if (isInputPeerChannel(peer)) {\n client.handleClientUpdate(createDummyUpdate(res.pts, res.ptsCount, peer.channelId))\n } else {\n client.handleClientUpdate(createDummyUpdate(res.pts, res.ptsCount))\n }\n}\n"]}
|
|
@@ -21,7 +21,7 @@ async function kickChatMember(client, params) {
|
|
|
21
21
|
// not needed in case this is a legacy group
|
|
22
22
|
if ((0, peer_utils_js_1.isInputPeerChannel)(chat)) {
|
|
23
23
|
// i fucking love telegram serverside race conditions
|
|
24
|
-
await (0, misc_utils_js_1.
|
|
24
|
+
await (0, misc_utils_js_1.sleepWithAbort)(1000, client.stopSignal);
|
|
25
25
|
await (0, unban_chat_member_js_1.unbanChatMember)(client, { chatId: chat, participantId: user });
|
|
26
26
|
}
|
|
27
27
|
return msg;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kick-chat-member.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/kick-chat-member.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"kick-chat-member.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/kick-chat-member.ts"],"names":[],"mappings":";;;AAAA,gEAA6D;AAG7D,6DAA8D;AAC9D,8DAAsD;AACtD,6DAAoD;AACpD,iEAAwD;AAExD;;;;;;GAMG;AACI,KAAK,UAAU,cAAc,CAChC,MAAuB,EACvB,MAKC;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAEjC,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAW,EAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAW,EAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9C,MAAM,GAAG,GAAG,MAAM,IAAA,kCAAa,EAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAE9E,4CAA4C;IAC5C,IAAI,IAAA,kCAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,qDAAqD;QACrD,MAAM,IAAA,8BAAc,EAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAC7C,MAAM,IAAA,sCAAe,EAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAxBD,wCAwBC","sourcesContent":["import { sleepWithAbort } from '../../../utils/misc-utils.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike, Message } from '../../types/index.js'\nimport { isInputPeerChannel } from '../../utils/peer-utils.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\nimport { banChatMember } from './ban-chat-member.js'\nimport { unbanChatMember } from './unban-chat-member.js'\n\n/**\n * Kick a user from a chat.\n *\n * This effectively bans a user and immediately unbans them.\n *\n * @returns Service message about removed user, if one was generated.\n */\nexport async function kickChatMember(\n client: ITelegramClient,\n params: {\n /** Chat ID */\n chatId: InputPeerLike\n /** User ID */\n userId: InputPeerLike\n },\n): Promise<Message | null> {\n const { chatId, userId } = params\n\n const chat = await resolvePeer(client, chatId)\n const user = await resolvePeer(client, userId)\n\n const msg = await banChatMember(client, { chatId: chat, participantId: user })\n\n // not needed in case this is a legacy group\n if (isInputPeerChannel(chat)) {\n // i fucking love telegram serverside race conditions\n await sleepWithAbort(1000, client.stopSignal)\n await unbanChatMember(client, { chatId: chat, participantId: user })\n }\n\n return msg\n}\n"]}
|
|
@@ -6,9 +6,10 @@ import { InputPeerLike } from '../../types/peers/index.js';
|
|
|
6
6
|
* Some library logic depends on this, for example, the library will
|
|
7
7
|
* periodically ping the server to keep the updates flowing.
|
|
8
8
|
*
|
|
9
|
-
* > **Warning**: Opening a chat with `openChat` method will make the library make additional requests
|
|
10
|
-
* > Which means that you should **avoid opening more than 5-10 chats at once**,
|
|
11
|
-
* > server-side limits and you might start getting transport errors
|
|
9
|
+
* > **Warning**: Opening a chat with `openChat` method will make the library make additional requests
|
|
10
|
+
* > every so often. Which means that you should **avoid opening more than 5-10 chats at once**,
|
|
11
|
+
* > as it will probably trigger server-side limits and you might start getting transport errors
|
|
12
|
+
* > or even get banned.
|
|
12
13
|
*
|
|
13
14
|
* @param chat Chat to open
|
|
14
15
|
*/
|
|
@@ -10,9 +10,10 @@ const resolve_peer_js_1 = require("../users/resolve-peer.js");
|
|
|
10
10
|
* Some library logic depends on this, for example, the library will
|
|
11
11
|
* periodically ping the server to keep the updates flowing.
|
|
12
12
|
*
|
|
13
|
-
* > **Warning**: Opening a chat with `openChat` method will make the library make additional requests
|
|
14
|
-
* > Which means that you should **avoid opening more than 5-10 chats at once**,
|
|
15
|
-
* > server-side limits and you might start getting transport errors
|
|
13
|
+
* > **Warning**: Opening a chat with `openChat` method will make the library make additional requests
|
|
14
|
+
* > every so often. Which means that you should **avoid opening more than 5-10 chats at once**,
|
|
15
|
+
* > as it will probably trigger server-side limits and you might start getting transport errors
|
|
16
|
+
* > or even get banned.
|
|
16
17
|
*
|
|
17
18
|
* @param chat Chat to open
|
|
18
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-chat.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/open-chat.ts"],"names":[],"mappings":";;;AAEA,6DAA8D;AAC9D,wEAA+D;AAC/D,8DAAsD;AAEtD
|
|
1
|
+
{"version":3,"file":"open-chat.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/chats/open-chat.ts"],"names":[],"mappings":";;;AAEA,6DAA8D;AAC9D,wEAA+D;AAC/D,8DAAsD;AAEtD;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,QAAQ,CAAC,MAAuB,EAAE,IAAmB;IACvE,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAW,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAE5C,IAAI,IAAA,kCAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAA,oCAAc,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEnD,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACpE,CAAC;IAED,6DAA6D;IAC7D,4EAA4E;AAChF,CAAC;AAXD,4BAWC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,SAAS,CAAC,MAAuB,EAAE,IAAmB;IACxE,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAW,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAE5C,IAAI,IAAA,kCAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IAED,6DAA6D;IAC7D,4EAA4E;AAChF,CAAC;AATD,8BASC","sourcesContent":["import { ITelegramClient } from '../../client.types.js'\nimport { InputPeerLike } from '../../types/peers/index.js'\nimport { isInputPeerChannel } from '../../utils/peer-utils.js'\nimport { getPeerDialogs } from '../dialogs/get-peer-dialogs.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\n\n/**\n * Inform the library that the user has opened a chat.\n *\n * Some library logic depends on this, for example, the library will\n * periodically ping the server to keep the updates flowing.\n *\n * > **Warning**: Opening a chat with `openChat` method will make the library make additional requests\n * > every so often. Which means that you should **avoid opening more than 5-10 chats at once**,\n * > as it will probably trigger server-side limits and you might start getting transport errors\n * > or even get banned.\n *\n * @param chat Chat to open\n */\nexport async function openChat(client: ITelegramClient, chat: InputPeerLike): Promise<void> {\n const peer = await resolvePeer(client, chat)\n\n if (isInputPeerChannel(peer)) {\n const [dialog] = await getPeerDialogs(client, peer)\n\n await client.notifyChannelOpened(peer.channelId, dialog.raw.pts)\n }\n\n // todo: once we have proper dialogs/peers db, we should also\n // update full info here and fetch auxillary info (like channel members etc)\n}\n\n/**\n * Inform the library that the user has closed a chat.\n * Un-does the effect of {@link openChat}.\n *\n * Some library logic depends on this, for example, the library will\n * periodically ping the server to keep the updates flowing.\n *\n * @param chat Chat to open\n */\nexport async function closeChat(client: ITelegramClient, chat: InputPeerLike): Promise<void> {\n const peer = await resolvePeer(client, chat)\n\n if (isInputPeerChannel(peer)) {\n await client.notifyChannelClosed(peer.channelId)\n }\n\n // todo: once we have proper dialogs/peers db, we should also\n // update full info here and fetch auxillary info (like channel members etc)\n}\n"]}
|
|
@@ -19,9 +19,11 @@ function _findMessageInUpdate(client, res, isEdit = false, noDispatch = true, al
|
|
|
19
19
|
continue;
|
|
20
20
|
}
|
|
21
21
|
if (isEdit) {
|
|
22
|
-
if (!(u._ === 'updateEditMessage' ||
|
|
22
|
+
if (!((u._ === 'updateEditMessage' ||
|
|
23
23
|
u._ === 'updateEditChannelMessage' ||
|
|
24
|
-
u._ === 'updateBotEditBusinessMessage'
|
|
24
|
+
u._ === 'updateBotEditBusinessMessage' ||
|
|
25
|
+
u._ === 'updateBotNewBusinessMessage') // for whatever reason
|
|
26
|
+
)) {
|
|
25
27
|
continue;
|
|
26
28
|
}
|
|
27
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-in-update.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/find-in-update.ts"],"names":[],"mappings":";;;AAGA,wDAA+D;AAE/D,4DAAuD;AACvD,yDAAuD;AACvD,qDAA6D;AA2B7D;;;GAGG;AACH,SAAgB,oBAAoB,CAChC,MAAuB,EACvB,GAAmB,EACnB,MAAM,GAAG,KAAK,EACd,UAAU,GAAG,IAAI,EACjB,SAAS,GAAG,KAAK,EACjB,QAAkB;IAElB,IAAA,+BAAoB,EAAC,sBAAsB,EAAE,GAAG,CAAC,CAAA;IAEjD,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAE1C,IAAI,YAAY,GAAG,CAAC,CAAA;IAEpB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,YAAY,GAAG,CAAC,CAAC,EAAE,CAAA;YACnB,SAAQ;QACZ,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,IACI,CAAC,CACG,CAAC,CAAC,CAAC,KAAK,mBAAmB;gBAC3B,CAAC,CAAC,CAAC,KAAK,0BAA0B;gBAClC,CAAC,CAAC,CAAC,KAAK,8BAA8B,
|
|
1
|
+
{"version":3,"file":"find-in-update.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/find-in-update.ts"],"names":[],"mappings":";;;AAGA,wDAA+D;AAE/D,4DAAuD;AACvD,yDAAuD;AACvD,qDAA6D;AA2B7D;;;GAGG;AACH,SAAgB,oBAAoB,CAChC,MAAuB,EACvB,GAAmB,EACnB,MAAM,GAAG,KAAK,EACd,UAAU,GAAG,IAAI,EACjB,SAAS,GAAG,KAAK,EACjB,QAAkB;IAElB,IAAA,+BAAoB,EAAC,sBAAsB,EAAE,GAAG,CAAC,CAAA;IAEjD,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAE1C,IAAI,YAAY,GAAG,CAAC,CAAA;IAEpB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,YAAY,GAAG,CAAC,CAAC,EAAE,CAAA;YACnB,SAAQ;QACZ,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,IACI,CAAC,CACG,CACI,CAAC,CAAC,CAAC,KAAK,mBAAmB;gBAC3B,CAAC,CAAC,CAAC,KAAK,0BAA0B;gBAClC,CAAC,CAAC,CAAC,KAAK,8BAA8B;gBACtC,CAAC,CAAC,CAAC,KAAK,6BAA6B,CACxC,CAAC,sBAAsB;aAC3B,EACH,CAAC;gBACC,SAAQ;YACZ,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IACI,CAAC,CACG,CAAC,CAAC,CAAC,KAAK,kBAAkB;gBAC1B,CAAC,CAAC,CAAC,KAAK,yBAAyB;gBACjC,CAAC,CAAC,CAAC,KAAK,2BAA2B;gBACnC,CAAC,CAAC,CAAC,KAAK,yBAAyB;gBACjC,CAAC,CAAC,CAAC,KAAK,6BAA6B,CACxC,EACH,CAAC;gBACC,SAAQ;YACZ,CAAC;QACL,CAAC;QAED,qEAAqE;QACrE,uDAAuD;QACvD,iEAAiE;QACjE,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,YAAY;YAAE,SAAQ;QAEjE,MAAM,KAAK,GAAG,qBAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAElC,OAAO,IAAI,kBAAO,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,2BAA2B,CAAC,CAAA;IAC7E,CAAC;IAED,IAAI,SAAS;QAAE,OAAO,IAAI,CAAA;IAE1B,MAAM,IAAI,gCAAoB,CAC1B,+BAA+B,EAC/B,wEAAwE,EACxE,MAAM,CACT,CAAA;AACL,CAAC;AAhED,oDAgEC","sourcesContent":["/* eslint-disable max-params,no-lonely-if */\nimport { tl } from '@mtcute/tl'\n\nimport { MtTypeAssertionError } from '../../../types/errors.js'\nimport { ITelegramClient } from '../../client.types.js'\nimport { Message } from '../../types/messages/index.js'\nimport { PeersIndex } from '../../types/peers/index.js'\nimport { assertIsUpdatesGroup } from '../../updates/utils.js'\n\n/**\n * @internal\n * @noemit\n */\nexport function _findMessageInUpdate(\n client: ITelegramClient,\n res: tl.TypeUpdates,\n isEdit?: boolean,\n noDispatch?: boolean,\n allowNull?: false,\n randomId?: tl.Long,\n): Message\n/**\n * @internal\n * @noemit\n */\nexport function _findMessageInUpdate(\n client: ITelegramClient,\n res: tl.TypeUpdates,\n isEdit?: boolean,\n noDispatch?: boolean,\n allowNull?: true,\n randomId?: tl.Long,\n): Message | null\n\n/**\n * @internal\n * @noemit\n */\nexport function _findMessageInUpdate(\n client: ITelegramClient,\n res: tl.TypeUpdates,\n isEdit = false,\n noDispatch = true,\n allowNull = false,\n randomId?: tl.Long,\n): Message | null {\n assertIsUpdatesGroup('_findMessageInUpdate', res)\n\n client.handleClientUpdate(res, noDispatch)\n\n let ourMessageId = 0\n\n for (const u of res.updates) {\n if (randomId && u._ === 'updateMessageID' && u.randomId.eq(randomId)) {\n ourMessageId = u.id\n continue\n }\n\n if (isEdit) {\n if (\n !(\n (\n u._ === 'updateEditMessage' ||\n u._ === 'updateEditChannelMessage' ||\n u._ === 'updateBotEditBusinessMessage' ||\n u._ === 'updateBotNewBusinessMessage'\n ) // for whatever reason\n )\n ) {\n continue\n }\n } else {\n if (\n !(\n u._ === 'updateNewMessage' ||\n u._ === 'updateNewChannelMessage' ||\n u._ === 'updateNewScheduledMessage' ||\n u._ === 'updateQuickReplyMessage' ||\n u._ === 'updateBotNewBusinessMessage'\n )\n ) {\n continue\n }\n }\n\n // this *may* break if updateMessageID comes after the message update\n // but it's unlikely and is not worth the effort to fix\n // we should eventually move to properly handling updateMessageID\n if (ourMessageId !== 0 && u.message.id !== ourMessageId) continue\n\n const peers = PeersIndex.from(res)\n\n return new Message(u.message, peers, u._ === 'updateNewScheduledMessage')\n }\n\n if (allowNull) return null\n\n throw new MtTypeAssertionError(\n '_findInUpdate (@ .updates[*])',\n 'updateNewMessage | updateNewChannelMessage | updateNewScheduledMessage',\n 'none',\n )\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { checkPassword } from './methods/auth/check-password.js';
|
|
2
2
|
export { getPasswordHint } from './methods/auth/get-password-hint.js';
|
|
3
|
+
export type { LogOutResult } from './methods/auth/log-out.js';
|
|
3
4
|
export { logOut } from './methods/auth/log-out.js';
|
|
4
5
|
export { recoverPassword } from './methods/auth/recover-password.js';
|
|
5
6
|
export { resendCode } from './methods/auth/resend-code.js';
|