@mtcute/core 0.15.0 → 0.15.2
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.js +18 -0
- package/cjs/highlevel/base.js.map +1 -1
- package/cjs/highlevel/client.d.ts +5 -0
- package/cjs/highlevel/client.js.map +1 -1
- package/cjs/highlevel/methods/auth/sign-in-qr.d.ts +5 -0
- package/cjs/highlevel/methods/auth/sign-in-qr.js +2 -1
- package/cjs/highlevel/methods/auth/sign-in-qr.js.map +1 -1
- package/cjs/highlevel/methods/messages/edit-inline-message.js +1 -1
- package/cjs/highlevel/methods/messages/edit-inline-message.js.map +1 -1
- package/cjs/highlevel/methods/messages/edit-message.js +1 -1
- package/cjs/highlevel/methods/messages/edit-message.js.map +1 -1
- package/cjs/highlevel/worker/invoker.d.ts +1 -0
- package/cjs/highlevel/worker/invoker.js +13 -1
- package/cjs/highlevel/worker/invoker.js.map +1 -1
- package/cjs/highlevel/worker/port.d.ts +9 -6
- package/cjs/highlevel/worker/port.js +7 -2
- package/cjs/highlevel/worker/port.js.map +1 -1
- package/cjs/highlevel/worker/protocol.d.ts +4 -0
- package/cjs/highlevel/worker/protocol.js.map +1 -1
- package/cjs/highlevel/worker/worker.d.ts +1 -0
- package/cjs/highlevel/worker/worker.js +27 -1
- package/cjs/highlevel/worker/worker.js.map +1 -1
- package/cjs/network/client.d.ts +2 -16
- package/cjs/network/client.js +7 -5
- package/cjs/network/client.js.map +1 -1
- package/cjs/network/multi-session-connection.d.ts +2 -2
- package/cjs/network/multi-session-connection.js +2 -2
- package/cjs/network/multi-session-connection.js.map +1 -1
- package/cjs/network/network-manager.d.ts +2 -2
- package/cjs/network/network-manager.js +65 -51
- package/cjs/network/network-manager.js.map +1 -1
- package/cjs/network/session-connection.d.ts +1 -2
- package/cjs/network/session-connection.js +7 -26
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/utils/type-assertions.d.ts +1 -0
- package/cjs/utils/type-assertions.js +5 -1
- package/cjs/utils/type-assertions.js.map +1 -1
- package/esm/highlevel/base.js +19 -1
- package/esm/highlevel/base.js.map +1 -1
- package/esm/highlevel/client.d.ts +5 -0
- package/esm/highlevel/client.js.map +1 -1
- package/esm/highlevel/methods/auth/sign-in-qr.d.ts +5 -0
- package/esm/highlevel/methods/auth/sign-in-qr.js +2 -1
- package/esm/highlevel/methods/auth/sign-in-qr.js.map +1 -1
- package/esm/highlevel/methods/messages/edit-inline-message.js +1 -1
- package/esm/highlevel/methods/messages/edit-inline-message.js.map +1 -1
- package/esm/highlevel/methods/messages/edit-message.js +1 -1
- package/esm/highlevel/methods/messages/edit-message.js.map +1 -1
- package/esm/highlevel/worker/invoker.d.ts +1 -0
- package/esm/highlevel/worker/invoker.js +13 -1
- package/esm/highlevel/worker/invoker.js.map +1 -1
- package/esm/highlevel/worker/port.d.ts +9 -6
- package/esm/highlevel/worker/port.js +7 -2
- package/esm/highlevel/worker/port.js.map +1 -1
- package/esm/highlevel/worker/protocol.d.ts +4 -0
- package/esm/highlevel/worker/protocol.js.map +1 -1
- package/esm/highlevel/worker/worker.d.ts +1 -0
- package/esm/highlevel/worker/worker.js +27 -1
- package/esm/highlevel/worker/worker.js.map +1 -1
- package/esm/network/client.d.ts +2 -16
- package/esm/network/client.js +8 -6
- package/esm/network/client.js.map +1 -1
- package/esm/network/multi-session-connection.d.ts +2 -2
- package/esm/network/multi-session-connection.js +2 -2
- package/esm/network/multi-session-connection.js.map +1 -1
- package/esm/network/network-manager.d.ts +2 -2
- package/esm/network/network-manager.js +66 -52
- package/esm/network/network-manager.js.map +1 -1
- package/esm/network/session-connection.d.ts +1 -2
- package/esm/network/session-connection.js +7 -26
- package/esm/network/session-connection.js.map +1 -1
- package/esm/utils/type-assertions.d.ts +1 -0
- package/esm/utils/type-assertions.js +3 -0
- package/esm/utils/type-assertions.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,6 +14,11 @@ export declare function signInQr(client: ITelegramClient, params: {
|
|
|
14
14
|
* The app is expected to display `url` as a QR code to the user
|
|
15
15
|
*/
|
|
16
16
|
onUrlUpdated: (url: string, expires: Date) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Function that will be called when the user has scanned the QR code
|
|
19
|
+
* (i.e. when `updateLoginToken` is received), and the library is finalizing the auth
|
|
20
|
+
*/
|
|
21
|
+
onQrScanned?: () => void;
|
|
17
22
|
/** Password for 2FA */
|
|
18
23
|
password?: MaybeDynamic<string>;
|
|
19
24
|
/**
|
|
@@ -17,7 +17,7 @@ const check_password_js_1 = require("./check-password.js");
|
|
|
17
17
|
* returning the authorized user.
|
|
18
18
|
*/
|
|
19
19
|
async function signInQr(client, params) {
|
|
20
|
-
const { onUrlUpdated, abortSignal } = params;
|
|
20
|
+
const { onUrlUpdated, abortSignal, onQrScanned } = params;
|
|
21
21
|
let waiter;
|
|
22
22
|
// crutch – we need to wait for the updateLoginToken update.
|
|
23
23
|
// we replace the server update handler temporarily because:
|
|
@@ -28,6 +28,7 @@ async function signInQr(client, params) {
|
|
|
28
28
|
const originalHandler = client.getServerUpdateHandler();
|
|
29
29
|
const onUpdate = (upd) => {
|
|
30
30
|
if (upd._ === 'updateShort' && upd.update._ === 'updateLoginToken') {
|
|
31
|
+
onQrScanned?.();
|
|
31
32
|
waiter?.resolve();
|
|
32
33
|
client.onServerUpdate(originalHandler);
|
|
33
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign-in-qr.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/sign-in-qr.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getPlatform } from '../../../platform.js'\nimport { MaybePromise } from '../../../types/utils.js'\nimport { ControllablePromise, createControllablePromise } from '../../../utils/controllable-promise.js'\nimport { sleepWithAbort } from '../../../utils/misc-utils.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { ITelegramClient, ServerUpdateHandler } from '../../client.types.js'\nimport { MaybeDynamic, User } from '../../types/index.js'\nimport { resolveMaybeDynamic } from '../../utils/misc-utils.js'\nimport { checkPassword } from './check-password.js'\n\n// @available=user\n/**\n * Execute the [QR login flow](https://core.telegram.org/api/qr-login).\n *\n * This method will resolve once the authorization is complete,\n * returning the authorized user.\n */\nexport async function signInQr(\n client: ITelegramClient,\n params: {\n /**\n * Function that will be called whenever the login URL is changed.\n *\n * The app is expected to display `url` as a QR code to the user\n */\n onUrlUpdated: (url: string, expires: Date) => void\n\n /** Password for 2FA */\n password?: MaybeDynamic<string>\n\n /**\n * Function that will be called after the server has rejected the password.\n *\n * Note that in case {@link password} is not a function,\n * this callback will never be called, and an error will be thrown instead.\n */\n invalidPasswordCallback?: () => MaybePromise<void>\n\n /** Abort signal */\n abortSignal?: AbortSignal\n },\n): Promise<User> {\n const { onUrlUpdated, abortSignal } = params\n\n let waiter: ControllablePromise<void> | undefined\n\n // crutch – we need to wait for the updateLoginToken update.\n // we replace the server update handler temporarily because:\n // - updates manager may be disabled, in which case `onUpdate` will never be called\n // - even if the updates manager is enabled, it won't start until we're logged in\n //\n // todo: how can we make this more clean?\n const originalHandler = client.getServerUpdateHandler()\n\n const onUpdate: ServerUpdateHandler = (upd) => {\n if (upd._ === 'updateShort' && upd.update._ === 'updateLoginToken') {\n waiter?.resolve()\n client.onServerUpdate(originalHandler)\n }\n }\n\n client.onServerUpdate(onUpdate)\n\n abortSignal?.addEventListener('abort', () => {\n client.onServerUpdate(originalHandler)\n waiter?.reject(abortSignal.reason)\n })\n\n async function handle2fa(input: MaybeDynamic<string>) {\n const isDynamic = typeof input === 'function'\n\n while (true) {\n const password = await resolveMaybeDynamic(input)\n\n try {\n return await checkPassword(client, password)\n } catch (e) {\n if (tl.RpcError.is(e, 'PASSWORD_HASH_INVALID')) {\n if (!isDynamic) {\n throw e\n }\n\n if (params.invalidPasswordCallback) {\n await params.invalidPasswordCallback?.()\n } else {\n // eslint-disable-next-line no-console\n console.log('Invalid password. Please try again')\n }\n continue\n }\n\n throw e\n }\n }\n }\n\n try {\n const { id, hash } = await client.getApiCrenetials()\n const platform = getPlatform()\n\n loop: while (true) {\n let res: tl.auth.TypeLoginToken\n\n try {\n res = await client.call(\n {\n _: 'auth.exportLoginToken',\n apiId: id,\n apiHash: hash,\n exceptIds: [],\n },\n { abortSignal },\n )\n } catch (e) {\n if (tl.RpcError.is(e, 'SESSION_PASSWORD_NEEDED') && params.password) {\n return handle2fa(params.password)\n }\n\n throw e\n }\n\n switch (res._) {\n case 'auth.loginToken':\n onUrlUpdated(\n `tg://login?token=${platform.base64Encode(res.token, true)}`,\n new Date(res.expires * 1000),\n )\n\n waiter = createControllablePromise()\n await Promise.race([waiter, sleepWithAbort(res.expires * 1000 - Date.now(), client.stopSignal)])\n break\n case 'auth.loginTokenMigrateTo': {\n await client.changePrimaryDc(res.dcId)\n\n let res2: tl.auth.TypeLoginToken\n\n try {\n res2 = await client.call(\n {\n _: 'auth.importLoginToken',\n token: res.token,\n },\n { abortSignal },\n )\n } catch (e) {\n if (tl.RpcError.is(e, 'SESSION_PASSWORD_NEEDED') && params.password) {\n return handle2fa(params.password)\n }\n\n throw e\n }\n\n assertTypeIs('auth.importLoginToken', res2, 'auth.loginTokenSuccess')\n break loop\n }\n case 'auth.loginTokenSuccess':\n break loop\n }\n }\n\n const [self] = await client.call(\n {\n _: 'users.getUsers',\n id: [{ _: 'inputUserSelf' }],\n },\n { abortSignal },\n )\n assertTypeIs('users.getUsers', self, 'user')\n\n await client.notifyLoggedIn(self)\n\n return new User(self)\n } finally {\n client.onServerUpdate(originalHandler)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sign-in-qr.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/auth/sign-in-qr.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getPlatform } from '../../../platform.js'\nimport { MaybePromise } from '../../../types/utils.js'\nimport { ControllablePromise, createControllablePromise } from '../../../utils/controllable-promise.js'\nimport { sleepWithAbort } from '../../../utils/misc-utils.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { ITelegramClient, ServerUpdateHandler } from '../../client.types.js'\nimport { MaybeDynamic, User } from '../../types/index.js'\nimport { resolveMaybeDynamic } from '../../utils/misc-utils.js'\nimport { checkPassword } from './check-password.js'\n\n// @available=user\n/**\n * Execute the [QR login flow](https://core.telegram.org/api/qr-login).\n *\n * This method will resolve once the authorization is complete,\n * returning the authorized user.\n */\nexport async function signInQr(\n client: ITelegramClient,\n params: {\n /**\n * Function that will be called whenever the login URL is changed.\n *\n * The app is expected to display `url` as a QR code to the user\n */\n onUrlUpdated: (url: string, expires: Date) => void\n\n /**\n * Function that will be called when the user has scanned the QR code\n * (i.e. when `updateLoginToken` is received), and the library is finalizing the auth\n */\n onQrScanned?: () => void\n\n /** Password for 2FA */\n password?: MaybeDynamic<string>\n\n /**\n * Function that will be called after the server has rejected the password.\n *\n * Note that in case {@link password} is not a function,\n * this callback will never be called, and an error will be thrown instead.\n */\n invalidPasswordCallback?: () => MaybePromise<void>\n\n /** Abort signal */\n abortSignal?: AbortSignal\n },\n): Promise<User> {\n const { onUrlUpdated, abortSignal, onQrScanned } = params\n\n let waiter: ControllablePromise<void> | undefined\n\n // crutch – we need to wait for the updateLoginToken update.\n // we replace the server update handler temporarily because:\n // - updates manager may be disabled, in which case `onUpdate` will never be called\n // - even if the updates manager is enabled, it won't start until we're logged in\n //\n // todo: how can we make this more clean?\n const originalHandler = client.getServerUpdateHandler()\n\n const onUpdate: ServerUpdateHandler = (upd) => {\n if (upd._ === 'updateShort' && upd.update._ === 'updateLoginToken') {\n onQrScanned?.()\n waiter?.resolve()\n client.onServerUpdate(originalHandler)\n }\n }\n\n client.onServerUpdate(onUpdate)\n\n abortSignal?.addEventListener('abort', () => {\n client.onServerUpdate(originalHandler)\n waiter?.reject(abortSignal.reason)\n })\n\n async function handle2fa(input: MaybeDynamic<string>) {\n const isDynamic = typeof input === 'function'\n\n while (true) {\n const password = await resolveMaybeDynamic(input)\n\n try {\n return await checkPassword(client, password)\n } catch (e) {\n if (tl.RpcError.is(e, 'PASSWORD_HASH_INVALID')) {\n if (!isDynamic) {\n throw e\n }\n\n if (params.invalidPasswordCallback) {\n await params.invalidPasswordCallback?.()\n } else {\n // eslint-disable-next-line no-console\n console.log('Invalid password. Please try again')\n }\n continue\n }\n\n throw e\n }\n }\n }\n\n try {\n const { id, hash } = await client.getApiCrenetials()\n const platform = getPlatform()\n\n loop: while (true) {\n let res: tl.auth.TypeLoginToken\n\n try {\n res = await client.call(\n {\n _: 'auth.exportLoginToken',\n apiId: id,\n apiHash: hash,\n exceptIds: [],\n },\n { abortSignal },\n )\n } catch (e) {\n if (tl.RpcError.is(e, 'SESSION_PASSWORD_NEEDED') && params.password) {\n return handle2fa(params.password)\n }\n\n throw e\n }\n\n switch (res._) {\n case 'auth.loginToken':\n onUrlUpdated(\n `tg://login?token=${platform.base64Encode(res.token, true)}`,\n new Date(res.expires * 1000),\n )\n\n waiter = createControllablePromise()\n await Promise.race([waiter, sleepWithAbort(res.expires * 1000 - Date.now(), client.stopSignal)])\n break\n case 'auth.loginTokenMigrateTo': {\n await client.changePrimaryDc(res.dcId)\n\n let res2: tl.auth.TypeLoginToken\n\n try {\n res2 = await client.call(\n {\n _: 'auth.importLoginToken',\n token: res.token,\n },\n { abortSignal },\n )\n } catch (e) {\n if (tl.RpcError.is(e, 'SESSION_PASSWORD_NEEDED') && params.password) {\n return handle2fa(params.password)\n }\n\n throw e\n }\n\n assertTypeIs('auth.importLoginToken', res2, 'auth.loginTokenSuccess')\n break loop\n }\n case 'auth.loginTokenSuccess':\n break loop\n }\n }\n\n const [self] = await client.call(\n {\n _: 'users.getUsers',\n id: [{ _: 'inputUserSelf' }],\n },\n { abortSignal },\n )\n assertTypeIs('users.getUsers', self, 'user')\n\n await client.notifyLoggedIn(self)\n\n return new User(self)\n } finally {\n client.onServerUpdate(originalHandler)\n }\n}\n"]}
|
|
@@ -27,7 +27,7 @@ async function editInlineMessage(client, params) {
|
|
|
27
27
|
[content, entities] = await (0, normalize_text_js_1._normalizeInputText)(client, params.media.caption);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
else if (params.text) {
|
|
30
|
+
else if (params.text !== undefined) {
|
|
31
31
|
[content, entities] = await (0, normalize_text_js_1._normalizeInputText)(client, params.text);
|
|
32
32
|
}
|
|
33
33
|
let retries = 3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-inline-message.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/edit-inline-message.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAG/B,mDAA0F;AAC1F,iEAA+D;AAC/D,gFAAwE;AACxE,iEAA+D;AAE/D;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CACnC,MAAuB,EACvB,MA6CC;IAED,IAAI,OAAO,GAAuB,SAAS,CAAA;IAC3C,IAAI,QAA4C,CAAA;IAChD,IAAI,KAAK,GAAkC,SAAS,CAAA;IAEpD,MAAM,EAAE,GAAG,IAAA,mCAAiB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAE9C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,GAAG,MAAM,IAAA,+CAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAEtE,wEAAwE;QACxE,+EAA+E;QAC/E,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,uCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjF,CAAC;IACL,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"edit-inline-message.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/edit-inline-message.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAG/B,mDAA0F;AAC1F,iEAA+D;AAC/D,gFAAwE;AACxE,iEAA+D;AAE/D;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CACnC,MAAuB,EACvB,MA6CC;IAED,IAAI,OAAO,GAAuB,SAAS,CAAA;IAC3C,IAAI,QAA4C,CAAA;IAChD,IAAI,KAAK,GAAkC,SAAS,CAAA;IAEpD,MAAM,EAAE,GAAG,IAAA,mCAAiB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAE9C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,GAAG,MAAM,IAAA,+CAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAEtE,wEAAwE;QACxE,+EAA+E;QAC/E,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,uCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjF,CAAC;IACL,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnC,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,uCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACxE,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,OAAO,OAAO,EAAE,EAAE,CAAC;QACf,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,IAAI,CACb;gBACI,CAAC,EAAE,+BAA+B;gBAClC,EAAE;gBACF,SAAS,EAAE,MAAM,CAAC,iBAAiB;gBACnC,WAAW,EAAE,sBAAW,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;gBACzD,OAAO,EAAE,OAAO;gBAChB,QAAQ;gBACR,KAAK;gBACL,WAAW,EAAE,MAAM,CAAC,WAAW;aAClC,EACD,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CACpB,CAAA;YAED,OAAM;QACV,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,OAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,CAAC;gBACnC,SAAQ;YACZ,CAAC;YAED,MAAM,CAAC,CAAA;QACX,CAAC;IACL,CAAC;AACL,CAAC;AA9FD,8CA8FC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { ITelegramClient } from '../../client.types.js'\nimport { BotKeyboard, InputMediaLike, InputText, ReplyMarkup } from '../../types/index.js'\nimport { normalizeInlineId } from '../../utils/inline-utils.js'\nimport { _normalizeInputMedia } from '../files/normalize-input-media.js'\nimport { _normalizeInputText } from '../misc/normalize-text.js'\n\n/**\n * Edit sent inline message text, media and reply markup.\n *\n * @param messageId\n * Inline message ID, either as a TL object, or as a\n * TDLib and Bot API compatible string\n * @param params\n */\nexport async function editInlineMessage(\n client: ITelegramClient,\n params: {\n /**\n * Inline message ID, either as a TL object, or as a\n * TDLib and Bot API compatible string\n */\n messageId: tl.TypeInputBotInlineMessageID | string\n\n /**\n * New message text\n *\n * When `media` is passed, `media.caption` is used instead\n */\n text?: InputText\n\n /**\n * New message media\n */\n media?: InputMediaLike\n\n /**\n * Whether to disable links preview in this message\n */\n disableWebPreview?: boolean\n\n /**\n * Whether to invert media position.\n *\n * Currently only supported for web previews and makes the\n * client render the preview above the caption and not below.\n */\n invertMedia?: boolean\n\n /**\n * For bots: new reply markup.\n * If omitted, existing markup will be removed.\n */\n replyMarkup?: ReplyMarkup\n\n /**\n * For media, upload progress callback.\n *\n * @param uploaded Number of bytes uploaded\n * @param total Total file size in bytes\n */\n progressCallback?: (uploaded: number, total: number) => void\n },\n): Promise<void> {\n let content: string | undefined = undefined\n let entities: tl.TypeMessageEntity[] | undefined\n let media: tl.TypeInputMedia | undefined = undefined\n\n const id = normalizeInlineId(params.messageId)\n\n if (params.media) {\n media = await _normalizeInputMedia(client, params.media, params, true)\n\n // if there's no caption in input media (i.e. not present or undefined),\n // user wants to keep current caption, thus `content` needs to stay `undefined`\n if ('caption' in params.media && params.media.caption !== undefined) {\n [content, entities] = await _normalizeInputText(client, params.media.caption)\n }\n } else if (params.text !== undefined) {\n [content, entities] = await _normalizeInputText(client, params.text)\n }\n\n let retries = 3\n\n while (retries--) {\n try {\n await client.call(\n {\n _: 'messages.editInlineBotMessage',\n id,\n noWebpage: params.disableWebPreview,\n replyMarkup: BotKeyboard._convertToTl(params.replyMarkup),\n message: content,\n entities,\n media,\n invertMedia: params.invertMedia,\n },\n { dcId: id.dcId },\n )\n\n return\n } catch (e) {\n if (tl.RpcError.is(e, 'MEDIA_EMPTY')) {\n continue\n }\n\n throw e\n }\n }\n}\n"]}
|
|
@@ -27,7 +27,7 @@ async function editMessage(client, params) {
|
|
|
27
27
|
[content, entities] = await (0, normalize_text_js_1._normalizeInputText)(client, params.media.caption);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
if (params.text) {
|
|
30
|
+
if (params.text !== undefined) {
|
|
31
31
|
[content, entities] = await (0, normalize_text_js_1._normalizeInputText)(client, params.text);
|
|
32
32
|
}
|
|
33
33
|
const res = await (0, _business_connection_js_1._maybeInvokeWithBusinessConnection)(client, params.businessConnectionId, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-message.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/edit-message.ts"],"names":[],"mappings":";;;AAGA,mDAQ6B;AAC7B,gFAAwE;AACxE,iEAA+D;AAC/D,8DAAsD;AACtD,uEAA8E;AAC9E,2DAA0D;AAE1D;;;;;;GAMG;AACI,KAAK,UAAU,WAAW,CAC7B,MAAuB,EACvB,MAqDC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAA;IAC3D,IAAI,OAAO,GAAuB,SAAS,CAAA;IAC3C,IAAI,QAA4C,CAAA;IAChD,IAAI,KAAK,GAAkC,SAAS,CAAA;IAEpD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,GAAG,MAAM,IAAA,+CAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEhE,wEAAwE;QACxE,+EAA+E;QAC/E,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,uCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjF,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"edit-message.js","sourceRoot":"","sources":["../../../../../src/highlevel/methods/messages/edit-message.ts"],"names":[],"mappings":";;;AAGA,mDAQ6B;AAC7B,gFAAwE;AACxE,iEAA+D;AAC/D,8DAAsD;AACtD,uEAA8E;AAC9E,2DAA0D;AAE1D;;;;;;GAMG;AACI,KAAK,UAAU,WAAW,CAC7B,MAAuB,EACvB,MAqDC;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,kCAAuB,EAAC,MAAM,CAAC,CAAA;IAC3D,IAAI,OAAO,GAAuB,SAAS,CAAA;IAC3C,IAAI,QAA4C,CAAA;IAChD,IAAI,KAAK,GAAkC,SAAS,CAAA;IAEpD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,GAAG,MAAM,IAAA,+CAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEhE,wEAAwE;QACxE,+EAA+E;QAC/E,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,uCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjF,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,uCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACxE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,IAAA,4DAAkC,EAAC,MAAM,EAAE,MAAM,CAAC,oBAAoB,EAAE;QACtF,CAAC,EAAE,sBAAsB;QACzB,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,MAAM,IAAA,6BAAW,EAAC,MAAM,EAAE,MAAM,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC,iBAAiB;QACnC,WAAW,EAAE,sBAAW,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;QACzD,OAAO,EAAE,OAAO;QAChB,QAAQ;QACR,KAAK;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;KAClC,CAAC,CAAA;IAEF,OAAO,IAAA,wCAAoB,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;AAC1E,CAAC;AAzFD,kCAyFC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { ITelegramClient } from '../../client.types.js'\nimport {\n BotKeyboard,\n InputMediaLike,\n InputMessageId,\n InputText,\n Message,\n normalizeInputMessageId,\n ReplyMarkup,\n} from '../../types/index.js'\nimport { _normalizeInputMedia } from '../files/normalize-input-media.js'\nimport { _normalizeInputText } from '../misc/normalize-text.js'\nimport { resolvePeer } from '../users/resolve-peer.js'\nimport { _maybeInvokeWithBusinessConnection } from './_business-connection.js'\nimport { _findMessageInUpdate } from './find-in-update.js'\n\n/**\n * Edit message text, media, reply markup and schedule date.\n *\n * @param chatId ID of the chat, its username, phone or `\"me\"` or `\"self\"`\n * @param message Message or its ID\n * @param params\n */\nexport async function editMessage(\n client: ITelegramClient,\n params: InputMessageId & {\n /**\n * New message text\n *\n * When `media` is passed, `media.caption` is used instead\n */\n text?: InputText\n\n /**\n * New message media\n */\n media?: InputMediaLike\n\n /**\n * Whether to disable links preview in this message\n */\n disableWebPreview?: boolean\n\n /**\n * For bots: new reply markup.\n * If omitted, existing markup will be removed.\n */\n replyMarkup?: ReplyMarkup\n\n /**\n * To re-schedule a message: new schedule date.\n * When passing a number, a UNIX time in ms is expected.\n */\n scheduleDate?: Date | number\n\n /**\n * For media, upload progress callback.\n *\n * @param uploaded Number of bytes uploaded\n * @param total Total file size in bytes\n */\n progressCallback?: (uploaded: number, total: number) => void\n\n /**\n * Whether to dispatch the edit message event\n * to the client's update handler.\n */\n shouldDispatch?: true\n\n /**\n * Whether to invert media position.\n *\n * Currently only supported for web previews and makes the\n * client render the preview above the caption and not below.\n */\n invertMedia?: boolean\n\n businessConnectionId?: string\n },\n): Promise<Message> {\n const { chatId, message } = normalizeInputMessageId(params)\n let content: string | undefined = undefined\n let entities: tl.TypeMessageEntity[] | undefined\n let media: tl.TypeInputMedia | undefined = undefined\n\n if (params.media) {\n media = await _normalizeInputMedia(client, params.media, params)\n\n // if there's no caption in input media (i.e. not present or undefined),\n // user wants to keep current caption, thus `content` needs to stay `undefined`\n if ('caption' in params.media && params.media.caption !== undefined) {\n [content, entities] = await _normalizeInputText(client, params.media.caption)\n }\n }\n\n if (params.text !== undefined) {\n [content, entities] = await _normalizeInputText(client, params.text)\n }\n\n const res = await _maybeInvokeWithBusinessConnection(client, params.businessConnectionId, {\n _: 'messages.editMessage',\n id: message,\n peer: await resolvePeer(client, chatId),\n noWebpage: params.disableWebPreview,\n replyMarkup: BotKeyboard._convertToTl(params.replyMarkup),\n message: content,\n entities,\n media,\n invertMedia: params.invertMedia,\n })\n\n return _findMessageInUpdate(client, res, true, !params.shouldDispatch)\n}\n"]}
|
|
@@ -10,6 +10,7 @@ export declare class WorkerInvoker {
|
|
|
10
10
|
private _invoke;
|
|
11
11
|
invoke(target: InvokeTarget, method: string, args: unknown[]): Promise<unknown>;
|
|
12
12
|
invokeVoid(target: InvokeTarget, method: string, args: unknown[]): void;
|
|
13
|
+
invokeWithAbort(target: InvokeTarget, method: string, args: unknown[], abortSignal: AbortSignal): Promise<unknown>;
|
|
13
14
|
handleResult(msg: Extract<WorkerOutboundMessage, {
|
|
14
15
|
type: 'result';
|
|
15
16
|
}>): void;
|
|
@@ -10,7 +10,7 @@ class WorkerInvoker {
|
|
|
10
10
|
}
|
|
11
11
|
_nextId = 0;
|
|
12
12
|
_pending = new Map();
|
|
13
|
-
_invoke(target, method, args, isVoid) {
|
|
13
|
+
_invoke(target, method, args, isVoid, abortSignal) {
|
|
14
14
|
const id = this._nextId++;
|
|
15
15
|
this.send({
|
|
16
16
|
type: 'invoke',
|
|
@@ -19,6 +19,13 @@ class WorkerInvoker {
|
|
|
19
19
|
method,
|
|
20
20
|
args,
|
|
21
21
|
void: isVoid,
|
|
22
|
+
withAbort: Boolean(abortSignal),
|
|
23
|
+
});
|
|
24
|
+
abortSignal?.addEventListener('abort', () => {
|
|
25
|
+
this.send({
|
|
26
|
+
type: 'abort',
|
|
27
|
+
id,
|
|
28
|
+
});
|
|
22
29
|
});
|
|
23
30
|
if (!isVoid) {
|
|
24
31
|
const promise = (0, controllable_promise_js_1.createControllablePromise)();
|
|
@@ -33,6 +40,11 @@ class WorkerInvoker {
|
|
|
33
40
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
34
41
|
this._invoke(target, method, args, true);
|
|
35
42
|
}
|
|
43
|
+
invokeWithAbort(target, method, args, abortSignal) {
|
|
44
|
+
if (abortSignal.aborted)
|
|
45
|
+
return Promise.reject(abortSignal.reason);
|
|
46
|
+
return this._invoke(target, method, args, false, abortSignal);
|
|
47
|
+
}
|
|
36
48
|
handleResult(msg) {
|
|
37
49
|
const promise = this._pending.get(msg.id);
|
|
38
50
|
if (!promise)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoker.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/invoker.ts"],"names":[],"mappings":";;;AAAA,iFAAoG;AACpG,2CAA8C;AAK9C,MAAa,aAAa;IACF;IAApB,YAAoB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5B,OAAO,GAAG,CAAC,CAAA;IACX,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAA;IAEjD,OAAO,CAAC,MAAoB,EAAE,MAAc,EAAE,IAAe,EAAE,MAAe;
|
|
1
|
+
{"version":3,"file":"invoker.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/invoker.ts"],"names":[],"mappings":";;;AAAA,iFAAoG;AACpG,2CAA8C;AAK9C,MAAa,aAAa;IACF;IAApB,YAAoB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5B,OAAO,GAAG,CAAC,CAAA;IACX,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAA;IAEjD,OAAO,CAAC,MAAoB,EAAE,MAAc,EAAE,IAAe,EAAE,MAAe,EAAE,WAAyB;QAC7G,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAEzB,IAAI,CAAC,IAAI,CAAC;YACN,IAAI,EAAE,QAAQ;YACd,EAAE;YACF,MAAM;YACN,MAAM;YACN,IAAI;YACJ,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;SAClC,CAAC,CAAA;QAEF,WAAW,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC;gBACN,IAAI,EAAE,OAAO;gBACb,EAAE;aACL,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,IAAA,mDAAyB,GAAE,CAAA;YAE3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAE9B,OAAO,OAAO,CAAA;QAClB,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAoB,EAAE,MAAc,EAAE,IAAe;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAqB,CAAA;IACxE,CAAC;IAED,UAAU,CAAC,MAAoB,EAAE,MAAc,EAAE,IAAe;QAC5D,mEAAmE;QACnE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5C,CAAC;IAED,eAAe,CAAC,MAAoB,EAAE,MAAc,EAAE,IAAe,EAAE,WAAwB;QAC3F,IAAI,WAAW,CAAC,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAElE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAqB,CAAA;IACrF,CAAC;IAED,YAAY,CAAC,GAAuD;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACzC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,IAAA,4BAAgB,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/C,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC/B,CAAC;IACL,CAAC;IAED,UAAU,CAAI,MAAoB;QAC9B,OAAO,CAAoB,MAAS,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE;YACpD,IAAI,EAAE,CAAA;YAEN,IAAI,MAAM,EAAE,CAAC;gBACT,EAAE,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAgB,EAAE,IAAI,CAAC,CAAA;YAChF,CAAC;iBAAM,CAAC;gBACJ,EAAE,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAgB,EAAE,IAAI,CAAC,CAAA;YAC5E,CAAC;YAED,OAAO,EAAU,CAAA;QACrB,CAAC,CAAA;IACL,CAAC;CACJ;AA1ED,sCA0EC","sourcesContent":["import { ControllablePromise, createControllablePromise } from '../../utils/controllable-promise.js'\nimport { deserializeError } from './errors.js'\nimport { SendFn, WorkerInboundMessage, WorkerOutboundMessage } from './protocol.js'\n\nexport type InvokeTarget = Extract<WorkerInboundMessage, { type: 'invoke' }>['target']\n\nexport class WorkerInvoker {\n constructor(private send: SendFn) {}\n\n private _nextId = 0\n private _pending = new Map<number, ControllablePromise>()\n\n private _invoke(target: InvokeTarget, method: string, args: unknown[], isVoid: boolean, abortSignal?: AbortSignal) {\n const id = this._nextId++\n\n this.send({\n type: 'invoke',\n id,\n target,\n method,\n args,\n void: isVoid,\n withAbort: Boolean(abortSignal),\n })\n\n abortSignal?.addEventListener('abort', () => {\n this.send({\n type: 'abort',\n id,\n })\n })\n\n if (!isVoid) {\n const promise = createControllablePromise()\n\n this._pending.set(id, promise)\n\n return promise\n }\n }\n\n invoke(target: InvokeTarget, method: string, args: unknown[]): Promise<unknown> {\n return this._invoke(target, method, args, false) as Promise<unknown>\n }\n\n invokeVoid(target: InvokeTarget, method: string, args: unknown[]): void {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._invoke(target, method, args, true)\n }\n\n invokeWithAbort(target: InvokeTarget, method: string, args: unknown[], abortSignal: AbortSignal): Promise<unknown> {\n if (abortSignal.aborted) return Promise.reject(abortSignal.reason)\n\n return this._invoke(target, method, args, false, abortSignal) as Promise<unknown>\n }\n\n handleResult(msg: Extract<WorkerOutboundMessage, { type: 'result' }>) {\n const promise = this._pending.get(msg.id)\n if (!promise) return\n\n if (msg.error) {\n promise.reject(deserializeError(msg.error))\n } else {\n promise.resolve(msg.result)\n }\n }\n\n makeBinder<T>(target: InvokeTarget) {\n return <K extends keyof T>(method: K, isVoid = false) => {\n let fn\n\n if (isVoid) {\n fn = (...args: unknown[]) => this.invokeVoid(target, method as string, args)\n } else {\n fn = (...args: unknown[]) => this.invoke(target, method as string, args)\n }\n\n return fn as T[K]\n }\n }\n}\n"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { tl } from '@mtcute/tl';
|
|
2
|
+
import { RpcCallOptions } from '../../network/network-manager.js';
|
|
3
|
+
import { MustEqual } from '../../types/utils.js';
|
|
1
4
|
import { LogManager } from '../../utils/logger.js';
|
|
2
5
|
import { ConnectionState, ITelegramClient, ServerUpdateHandler } from '../client.types.js';
|
|
3
6
|
import { RawUpdateHandler } from '../updates/types.js';
|
|
@@ -17,28 +20,28 @@ export declare abstract class TelegramWorkerPort<Custom extends WorkerCustomMeth
|
|
|
17
20
|
readonly prepare: () => Promise<void>;
|
|
18
21
|
private _connect;
|
|
19
22
|
readonly close: () => Promise<void>;
|
|
20
|
-
readonly notifyLoggedIn: (auth:
|
|
23
|
+
readonly notifyLoggedIn: (auth: tl.RawUser | tl.auth.TypeAuthorization) => Promise<tl.RawUser>;
|
|
21
24
|
readonly notifyLoggedOut: () => Promise<void>;
|
|
22
25
|
readonly notifyChannelOpened: (channelId: number, pts?: number | undefined) => Promise<boolean>;
|
|
23
26
|
readonly notifyChannelClosed: (channelId: number) => Promise<boolean>;
|
|
24
|
-
readonly call: <T extends import("@mtcute/tl").tl.RpcMethod>(message: import("../../index.js").MustEqual<T, import("@mtcute/tl").tl.RpcMethod>, params?: import("../../index.js").RpcCallOptions | undefined) => Promise<import("@mtcute/tl").tl.RpcCallReturn[T["_"]]>;
|
|
25
27
|
readonly importSession: (session: string | import("../utils/string-session.js").StringSessionData, force?: boolean | undefined) => Promise<void>;
|
|
26
28
|
readonly exportSession: () => Promise<string>;
|
|
27
|
-
readonly handleClientUpdate: (updates:
|
|
29
|
+
readonly handleClientUpdate: (updates: tl.TypeUpdates, noDispatch?: boolean | undefined) => void;
|
|
28
30
|
readonly getApiCrenetials: () => Promise<{
|
|
29
31
|
id: number;
|
|
30
32
|
hash: string;
|
|
31
33
|
}>;
|
|
32
|
-
readonly getPoolSize: (kind: import("../../
|
|
34
|
+
readonly getPoolSize: (kind: import("../../network/network-manager.js").ConnectionKind, dcId?: number | undefined) => Promise<number>;
|
|
33
35
|
readonly getPrimaryDcId: () => Promise<number>;
|
|
34
36
|
readonly changePrimaryDc: (newDc: number) => Promise<void>;
|
|
35
|
-
readonly computeSrpParams: (request:
|
|
36
|
-
readonly computeNewPasswordHash: (algo:
|
|
37
|
+
readonly computeSrpParams: (request: tl.account.RawPassword, password: string) => Promise<tl.RawInputCheckPasswordSRP>;
|
|
38
|
+
readonly computeNewPasswordHash: (algo: tl.TypePasswordKdfAlgo, password: string) => Promise<Uint8Array>;
|
|
37
39
|
readonly startUpdatesLoop: () => Promise<void>;
|
|
38
40
|
readonly stopUpdatesLoop: () => Promise<void>;
|
|
39
41
|
private _abortController;
|
|
40
42
|
readonly stopSignal: AbortSignal;
|
|
41
43
|
constructor(options: TelegramWorkerPortOptions);
|
|
44
|
+
call<T extends tl.RpcMethod>(message: MustEqual<T, tl.RpcMethod>, params?: RpcCallOptions): Promise<tl.RpcCallReturn[T['_']]>;
|
|
42
45
|
abstract connectToWorker(worker: SomeWorker, handler: ClientMessageHandler): [SendFn, () => void];
|
|
43
46
|
private _serverUpdatesHandler;
|
|
44
47
|
onServerUpdate(handler: ServerUpdateHandler): void;
|
|
@@ -21,7 +21,6 @@ class TelegramWorkerPort {
|
|
|
21
21
|
notifyLoggedOut;
|
|
22
22
|
notifyChannelOpened;
|
|
23
23
|
notifyChannelClosed;
|
|
24
|
-
call;
|
|
25
24
|
importSession;
|
|
26
25
|
exportSession;
|
|
27
26
|
handleClientUpdate;
|
|
@@ -50,7 +49,6 @@ class TelegramWorkerPort {
|
|
|
50
49
|
this.notifyLoggedOut = bind('notifyLoggedOut');
|
|
51
50
|
this.notifyChannelOpened = bind('notifyChannelOpened');
|
|
52
51
|
this.notifyChannelClosed = bind('notifyChannelClosed');
|
|
53
|
-
this.call = bind('call');
|
|
54
52
|
this.importSession = bind('importSession');
|
|
55
53
|
this.exportSession = bind('exportSession');
|
|
56
54
|
this.handleClientUpdate = bind('handleClientUpdate', true);
|
|
@@ -63,6 +61,13 @@ class TelegramWorkerPort {
|
|
|
63
61
|
this.startUpdatesLoop = bind('startUpdatesLoop');
|
|
64
62
|
this.stopUpdatesLoop = bind('stopUpdatesLoop');
|
|
65
63
|
}
|
|
64
|
+
call(message, params) {
|
|
65
|
+
if (params?.abortSignal) {
|
|
66
|
+
const { abortSignal, ...rest } = params;
|
|
67
|
+
return this._invoker.invokeWithAbort('client', 'call', [message, rest], abortSignal);
|
|
68
|
+
}
|
|
69
|
+
return this._invoker.invoke('client', 'call', [message, params]);
|
|
70
|
+
}
|
|
66
71
|
_serverUpdatesHandler = () => { };
|
|
67
72
|
onServerUpdate(handler) {
|
|
68
73
|
this._serverUpdatesHandler = handler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/port.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogManager } from '../../utils/logger.js'\nimport { ConnectionState, ITelegramClient, ServerUpdateHandler } from '../client.types.js'\nimport { PeersIndex } from '../types/peers/peers-index.js'\nimport { RawUpdateHandler } from '../updates/types.js'\nimport { AppConfigManagerProxy } from './app-config.js'\nimport { WorkerInvoker } from './invoker.js'\nimport { ClientMessageHandler, SendFn, SomeWorker, WorkerCustomMethods } from './protocol.js'\nimport { TelegramStorageProxy } from './storage.js'\n\nexport interface TelegramWorkerPortOptions {\n worker: SomeWorker\n}\n\nexport abstract class TelegramWorkerPort<Custom extends WorkerCustomMethods> implements ITelegramClient {\n readonly log\n\n private _connection\n private _invoker\n\n readonly storage\n readonly appConfig\n\n // bound methods\n readonly prepare\n private _connect\n readonly close\n readonly notifyLoggedIn\n readonly notifyLoggedOut\n readonly notifyChannelOpened\n readonly notifyChannelClosed\n readonly call\n readonly importSession\n readonly exportSession\n readonly handleClientUpdate\n readonly getApiCrenetials\n readonly getPoolSize\n readonly getPrimaryDcId\n readonly changePrimaryDc\n readonly computeSrpParams\n readonly computeNewPasswordHash\n readonly startUpdatesLoop\n readonly stopUpdatesLoop\n\n private _abortController = new AbortController()\n readonly stopSignal = this._abortController.signal\n\n constructor(readonly options: TelegramWorkerPortOptions) {\n this.log = new LogManager('worker')\n\n this._connection = this.connectToWorker(this.options.worker, this._onMessage)\n this._invoker = new WorkerInvoker(this._connection[0])\n\n this.storage = new TelegramStorageProxy(this._invoker)\n this.appConfig = new AppConfigManagerProxy(this._invoker)\n\n const bind = this._invoker.makeBinder<ITelegramClient>('client')\n\n this.prepare = bind('prepare')\n this._connect = bind('connect')\n\n this.close = bind('close')\n this.notifyLoggedIn = bind('notifyLoggedIn')\n this.notifyLoggedOut = bind('notifyLoggedOut')\n this.notifyChannelOpened = bind('notifyChannelOpened')\n this.notifyChannelClosed = bind('notifyChannelClosed')\n this.call = bind('call')\n this.importSession = bind('importSession')\n this.exportSession = bind('exportSession')\n this.handleClientUpdate = bind('handleClientUpdate', true)\n this.getApiCrenetials = bind('getApiCrenetials')\n this.getPoolSize = bind('getPoolSize')\n this.getPrimaryDcId = bind('getPrimaryDcId')\n this.changePrimaryDc = bind('changePrimaryDc')\n this.computeSrpParams = bind('computeSrpParams')\n this.computeNewPasswordHash = bind('computeNewPasswordHash')\n this.startUpdatesLoop = bind('startUpdatesLoop')\n this.stopUpdatesLoop = bind('stopUpdatesLoop')\n }\n\n abstract connectToWorker(worker: SomeWorker, handler: ClientMessageHandler): [SendFn, () => void]\n\n private _serverUpdatesHandler: ServerUpdateHandler = () => {}\n onServerUpdate(handler: ServerUpdateHandler): void {\n this._serverUpdatesHandler = handler\n }\n\n getServerUpdateHandler(): ServerUpdateHandler {\n return this._serverUpdatesHandler\n }\n\n private _errorHandler: (err: unknown) => void = () => {}\n onError(handler: (err: unknown) => void): void {\n this._errorHandler = handler\n }\n emitError(err: unknown): void {\n this._errorHandler(err)\n }\n\n private _updateHandler: RawUpdateHandler = () => {}\n onUpdate(handler: RawUpdateHandler): void {\n this._updateHandler = handler\n }\n\n private _connectionStateHandler: (state: ConnectionState) => void = () => {}\n onConnectionState(handler: (state: ConnectionState) => void): void {\n this._connectionStateHandler = handler\n }\n\n private _onMessage: ClientMessageHandler = (message) => {\n switch (message.type) {\n case 'log':\n this.log.handler(message.color, message.level, message.tag, message.fmt, message.args)\n break\n case 'server_update':\n this._serverUpdatesHandler(message.update)\n break\n case 'conn_state':\n this._connectionStateHandler(message.state)\n break\n case 'update': {\n const peers = new PeersIndex(message.users, message.chats)\n peers.hasMin = message.hasMin\n this._updateHandler(message.update, peers)\n break\n }\n case 'result':\n this._invoker.handleResult(message)\n break\n case 'error':\n this.emitError(message.error)\n break\n case 'stop':\n this._abortController.abort()\n break\n }\n }\n\n private _destroyed = false\n destroy(terminate = false): void {\n if (this._destroyed) return\n this._connection[1]()\n this._destroyed = true\n\n if (terminate && 'terminate' in this.options.worker) {\n Promise.resolve(this.options.worker.terminate()).catch(() => {})\n }\n }\n\n invokeCustom<T extends keyof Custom>(method: T, ...args: Parameters<Custom[T]>): Promise<ReturnType<Custom[T]>> {\n return this._invoker.invoke('custom', method as string, args) as Promise<ReturnType<Custom[T]>>\n }\n\n async connect(): Promise<void> {\n await this._connect()\n await this.storage.self.fetch() // force cache self locally\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/port.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { RpcCallOptions } from '../../network/network-manager.js'\nimport { MustEqual } from '../../types/utils.js'\nimport { LogManager } from '../../utils/logger.js'\nimport { ConnectionState, ITelegramClient, ServerUpdateHandler } from '../client.types.js'\nimport { PeersIndex } from '../types/peers/peers-index.js'\nimport { RawUpdateHandler } from '../updates/types.js'\nimport { AppConfigManagerProxy } from './app-config.js'\nimport { WorkerInvoker } from './invoker.js'\nimport { ClientMessageHandler, SendFn, SomeWorker, WorkerCustomMethods } from './protocol.js'\nimport { TelegramStorageProxy } from './storage.js'\n\nexport interface TelegramWorkerPortOptions {\n worker: SomeWorker\n}\n\nexport abstract class TelegramWorkerPort<Custom extends WorkerCustomMethods> implements ITelegramClient {\n readonly log\n\n private _connection\n private _invoker\n\n readonly storage\n readonly appConfig\n\n // bound methods\n readonly prepare\n private _connect\n readonly close\n readonly notifyLoggedIn\n readonly notifyLoggedOut\n readonly notifyChannelOpened\n readonly notifyChannelClosed\n readonly importSession\n readonly exportSession\n readonly handleClientUpdate\n readonly getApiCrenetials\n readonly getPoolSize\n readonly getPrimaryDcId\n readonly changePrimaryDc\n readonly computeSrpParams\n readonly computeNewPasswordHash\n readonly startUpdatesLoop\n readonly stopUpdatesLoop\n\n private _abortController = new AbortController()\n readonly stopSignal = this._abortController.signal\n\n constructor(readonly options: TelegramWorkerPortOptions) {\n this.log = new LogManager('worker')\n\n this._connection = this.connectToWorker(this.options.worker, this._onMessage)\n this._invoker = new WorkerInvoker(this._connection[0])\n\n this.storage = new TelegramStorageProxy(this._invoker)\n this.appConfig = new AppConfigManagerProxy(this._invoker)\n\n const bind = this._invoker.makeBinder<ITelegramClient>('client')\n\n this.prepare = bind('prepare')\n this._connect = bind('connect')\n\n this.close = bind('close')\n this.notifyLoggedIn = bind('notifyLoggedIn')\n this.notifyLoggedOut = bind('notifyLoggedOut')\n this.notifyChannelOpened = bind('notifyChannelOpened')\n this.notifyChannelClosed = bind('notifyChannelClosed')\n this.importSession = bind('importSession')\n this.exportSession = bind('exportSession')\n this.handleClientUpdate = bind('handleClientUpdate', true)\n this.getApiCrenetials = bind('getApiCrenetials')\n this.getPoolSize = bind('getPoolSize')\n this.getPrimaryDcId = bind('getPrimaryDcId')\n this.changePrimaryDc = bind('changePrimaryDc')\n this.computeSrpParams = bind('computeSrpParams')\n this.computeNewPasswordHash = bind('computeNewPasswordHash')\n this.startUpdatesLoop = bind('startUpdatesLoop')\n this.stopUpdatesLoop = bind('stopUpdatesLoop')\n }\n\n call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (params?.abortSignal) {\n const { abortSignal, ...rest } = params\n\n return this._invoker.invokeWithAbort('client', 'call', [message, rest], abortSignal) as Promise<\n tl.RpcCallReturn[T['_']]\n >\n }\n\n return this._invoker.invoke('client', 'call', [message, params]) as Promise<tl.RpcCallReturn[T['_']]>\n }\n\n abstract connectToWorker(worker: SomeWorker, handler: ClientMessageHandler): [SendFn, () => void]\n\n private _serverUpdatesHandler: ServerUpdateHandler = () => {}\n onServerUpdate(handler: ServerUpdateHandler): void {\n this._serverUpdatesHandler = handler\n }\n\n getServerUpdateHandler(): ServerUpdateHandler {\n return this._serverUpdatesHandler\n }\n\n private _errorHandler: (err: unknown) => void = () => {}\n onError(handler: (err: unknown) => void): void {\n this._errorHandler = handler\n }\n emitError(err: unknown): void {\n this._errorHandler(err)\n }\n\n private _updateHandler: RawUpdateHandler = () => {}\n onUpdate(handler: RawUpdateHandler): void {\n this._updateHandler = handler\n }\n\n private _connectionStateHandler: (state: ConnectionState) => void = () => {}\n onConnectionState(handler: (state: ConnectionState) => void): void {\n this._connectionStateHandler = handler\n }\n\n private _onMessage: ClientMessageHandler = (message) => {\n switch (message.type) {\n case 'log':\n this.log.handler(message.color, message.level, message.tag, message.fmt, message.args)\n break\n case 'server_update':\n this._serverUpdatesHandler(message.update)\n break\n case 'conn_state':\n this._connectionStateHandler(message.state)\n break\n case 'update': {\n const peers = new PeersIndex(message.users, message.chats)\n peers.hasMin = message.hasMin\n this._updateHandler(message.update, peers)\n break\n }\n case 'result':\n this._invoker.handleResult(message)\n break\n case 'error':\n this.emitError(message.error)\n break\n case 'stop':\n this._abortController.abort()\n break\n }\n }\n\n private _destroyed = false\n destroy(terminate = false): void {\n if (this._destroyed) return\n this._connection[1]()\n this._destroyed = true\n\n if (terminate && 'terminate' in this.options.worker) {\n Promise.resolve(this.options.worker.terminate()).catch(() => {})\n }\n }\n\n invokeCustom<T extends keyof Custom>(method: T, ...args: Parameters<Custom[T]>): Promise<ReturnType<Custom[T]>> {\n return this._invoker.invoke('custom', method as string, args) as Promise<ReturnType<Custom[T]>>\n }\n\n async connect(): Promise<void> {\n await this._connect()\n await this.storage.self.fetch() // force cache self locally\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/protocol.ts"],"names":[],"mappings":"","sourcesContent":["import type { Worker as NodeWorker } from 'node:worker_threads'\n\nimport { tl } from '@mtcute/tl'\n\nimport { ConnectionState } from '../client.types.js'\nimport { SerializedError } from './errors.js'\n\nexport type WorkerInboundMessage
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/protocol.ts"],"names":[],"mappings":"","sourcesContent":["import type { Worker as NodeWorker } from 'node:worker_threads'\n\nimport { tl } from '@mtcute/tl'\n\nimport { ConnectionState } from '../client.types.js'\nimport { SerializedError } from './errors.js'\n\nexport type WorkerInboundMessage =\n | {\n type: 'invoke'\n id: number\n target: 'custom' | 'client' | 'storage' | 'storage-self' | 'storage-peers' | 'app-config'\n method: string\n args: unknown[]\n void: boolean\n withAbort: boolean\n }\n | {\n type: 'abort'\n id: number\n }\n\nexport type WorkerOutboundMessage =\n | { type: 'server_update'; update: tl.TypeUpdates }\n | {\n type: 'update'\n update: tl.TypeUpdate\n users: Map<number, tl.TypeUser>\n chats: Map<number, tl.TypeChat>\n hasMin: boolean\n }\n | { type: 'error'; error: unknown }\n | { type: 'stop' }\n | { type: 'conn_state'; state: ConnectionState }\n | {\n type: 'log'\n color: number\n level: number\n tag: string\n fmt: string\n args: unknown[]\n }\n | {\n type: 'result'\n id: number\n result?: unknown\n error?: SerializedError\n }\n\nexport type SomeWorker = NodeWorker | Worker | SharedWorker\n\nexport type SendFn = (message: WorkerInboundMessage) => void\nexport type ClientMessageHandler = (message: WorkerOutboundMessage) => void\n\nexport type RespondFn = (message: WorkerOutboundMessage) => void\nexport type WorkerMessageHandler = (message: WorkerInboundMessage, respond: RespondFn) => void\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WorkerCustomMethods = Record<string, (...args: any[]) => Promise<any>>\n"]}
|
|
@@ -9,6 +9,7 @@ export declare abstract class TelegramWorker<T extends WorkerCustomMethods> {
|
|
|
9
9
|
readonly client: BaseTelegramClient;
|
|
10
10
|
readonly broadcast: RespondFn;
|
|
11
11
|
abstract registerWorker(handler: WorkerMessageHandler): RespondFn;
|
|
12
|
+
readonly pendingAborts: Map<number, AbortController>;
|
|
12
13
|
constructor(params: TelegramWorkerOptions<T>);
|
|
13
14
|
private onInvoke;
|
|
14
15
|
}
|
|
@@ -6,6 +6,7 @@ class TelegramWorker {
|
|
|
6
6
|
params;
|
|
7
7
|
client;
|
|
8
8
|
broadcast;
|
|
9
|
+
pendingAborts = new Map();
|
|
9
10
|
constructor(params) {
|
|
10
11
|
this.params = params;
|
|
11
12
|
this.broadcast = this.registerWorker((message, respond) => {
|
|
@@ -13,6 +14,13 @@ class TelegramWorker {
|
|
|
13
14
|
case 'invoke':
|
|
14
15
|
this.onInvoke(message, respond);
|
|
15
16
|
break;
|
|
17
|
+
case 'abort': {
|
|
18
|
+
const abort = this.pendingAborts.get(message.id);
|
|
19
|
+
if (abort) {
|
|
20
|
+
abort.abort();
|
|
21
|
+
this.pendingAborts.delete(message.id);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
16
24
|
}
|
|
17
25
|
});
|
|
18
26
|
const client = params.client;
|
|
@@ -91,9 +99,24 @@ class TelegramWorker {
|
|
|
91
99
|
});
|
|
92
100
|
return;
|
|
93
101
|
}
|
|
102
|
+
let args = msg.args;
|
|
103
|
+
if (msg.target === 'client' && msg.method === 'call' && msg.withAbort) {
|
|
104
|
+
const abort = new AbortController();
|
|
105
|
+
this.pendingAborts.set(msg.id, abort);
|
|
106
|
+
args = [
|
|
107
|
+
args[0],
|
|
108
|
+
{
|
|
109
|
+
...args[1],
|
|
110
|
+
abortSignal: abort.signal,
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
}
|
|
94
114
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
95
|
-
Promise.resolve(method.apply(target,
|
|
115
|
+
Promise.resolve(method.apply(target, args))
|
|
96
116
|
.then((res) => {
|
|
117
|
+
if (msg.withAbort) {
|
|
118
|
+
this.pendingAborts.delete(msg.id);
|
|
119
|
+
}
|
|
97
120
|
if (msg.void)
|
|
98
121
|
return;
|
|
99
122
|
respond({
|
|
@@ -103,6 +126,9 @@ class TelegramWorker {
|
|
|
103
126
|
});
|
|
104
127
|
})
|
|
105
128
|
.catch((err) => {
|
|
129
|
+
if (msg.withAbort) {
|
|
130
|
+
this.pendingAborts.delete(msg.id);
|
|
131
|
+
}
|
|
106
132
|
respond({
|
|
107
133
|
type: 'result',
|
|
108
134
|
id: msg.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/worker.ts"],"names":[],"mappings":";;;AACA,2CAA4C;AAQ5C,MAAsB,cAAc;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/highlevel/worker/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseTelegramClient } from '../base.js'\nimport { serializeError } from './errors.js'\nimport { RespondFn, WorkerCustomMethods, WorkerInboundMessage, WorkerMessageHandler } from './protocol.js'\n\nexport interface TelegramWorkerOptions<T extends WorkerCustomMethods> {\n client: BaseTelegramClient\n customMethods?: T\n}\n\nexport abstract class TelegramWorker<T extends WorkerCustomMethods> {\n readonly client: BaseTelegramClient\n readonly broadcast: RespondFn\n\n abstract registerWorker(handler: WorkerMessageHandler): RespondFn\n\n readonly pendingAborts = new Map<number, AbortController>()\n\n constructor(readonly params: TelegramWorkerOptions<T>) {\n this.broadcast = this.registerWorker((message, respond) => {\n switch (message.type) {\n case 'invoke':\n this.onInvoke(message, respond)\n break\n case 'abort': {\n const abort = this.pendingAborts.get(message.id)\n\n if (abort) {\n abort.abort()\n this.pendingAborts.delete(message.id)\n }\n }\n }\n })\n\n const client = params.client\n this.client = client\n\n client.log.mgr.handler = (color, level, tag, fmt, args) =>\n this.broadcast({\n type: 'log',\n color,\n level,\n tag,\n fmt,\n args,\n })\n client.onError((err) =>\n this.broadcast({\n type: 'error',\n error: err,\n }),\n )\n client.onConnectionState((state) =>\n this.broadcast({\n type: 'conn_state',\n state,\n }),\n )\n client.stopSignal.addEventListener('abort', () => this.broadcast({ type: 'stop' }))\n\n if (client.updates) {\n client.onUpdate((update, peers) =>\n this.broadcast({\n type: 'update',\n update,\n users: peers.users,\n chats: peers.chats,\n hasMin: peers.hasMin,\n }),\n )\n } else {\n client.onServerUpdate((update) =>\n this.broadcast({\n type: 'server_update',\n update,\n }),\n )\n }\n }\n\n private onInvoke(msg: Extract<WorkerInboundMessage, { type: 'invoke' }>, respond: RespondFn) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let target: any\n\n switch (msg.target) {\n case 'custom':\n target = this.params.customMethods\n break\n case 'client':\n target = this.client\n break\n case 'storage':\n target = this.client.storage\n break\n case 'storage-self':\n target = this.client.storage.self\n break\n case 'storage-peers':\n target = this.client.storage.peers\n break\n case 'app-config':\n target = this.client.appConfig\n break\n\n default: {\n respond({\n type: 'result',\n id: msg.id,\n error: new Error(`Unknown target ${msg.target}`),\n })\n\n return\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const method = target[msg.method]\n\n if (!method) {\n respond({\n type: 'result',\n id: msg.id,\n error: new Error(`Method ${msg.method} not found on ${msg.target}`),\n })\n\n return\n }\n\n let args = msg.args\n\n if (msg.target === 'client' && msg.method === 'call' && msg.withAbort) {\n const abort = new AbortController()\n this.pendingAborts.set(msg.id, abort)\n\n args = [\n args[0],\n {\n ...(args[1] as object),\n abortSignal: abort.signal,\n },\n ]\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n Promise.resolve(method.apply(target, args))\n .then((res) => {\n if (msg.withAbort) {\n this.pendingAborts.delete(msg.id)\n }\n\n if (msg.void) return\n\n respond({\n type: 'result',\n id: msg.id,\n result: res,\n })\n })\n .catch((err) => {\n if (msg.withAbort) {\n this.pendingAborts.delete(msg.id)\n }\n\n respond({\n type: 'result',\n id: msg.id,\n error: serializeError(err),\n })\n })\n }\n}\n"]}
|
package/cjs/network/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import EventEmitter from 'events';
|
|
2
|
-
import { tl } from '@mtcute/tl';
|
|
2
|
+
import { mtp, tl } from '@mtcute/tl';
|
|
3
3
|
import { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime';
|
|
4
4
|
import { IMtStorageProvider } from '../storage/provider.js';
|
|
5
5
|
import { StorageManager, StorageManagerExtraOptions } from '../storage/storage.js';
|
|
@@ -111,19 +111,6 @@ export interface MtClientOptions {
|
|
|
111
111
|
* @default false
|
|
112
112
|
*/
|
|
113
113
|
enableErrorReporting?: boolean;
|
|
114
|
-
/**
|
|
115
|
-
* If true, RPC errors will have a stack trace of the initial `.call()`
|
|
116
|
-
* or `.sendForResult()` call position, which drastically improves
|
|
117
|
-
* debugging experience.<br>
|
|
118
|
-
* If false, they will have a stack trace of mtcute internals.
|
|
119
|
-
*
|
|
120
|
-
* Internally this creates a stack capture before every RPC call
|
|
121
|
-
* and stores it until the result is received. This might
|
|
122
|
-
* use a lot more memory than normal, thus can be disabled here.
|
|
123
|
-
*
|
|
124
|
-
* @default true
|
|
125
|
-
*/
|
|
126
|
-
niceStacks?: boolean;
|
|
127
114
|
/**
|
|
128
115
|
* Extra parameters for {@link NetworkManager}
|
|
129
116
|
*/
|
|
@@ -183,7 +170,6 @@ export declare class MtClient extends EventEmitter {
|
|
|
183
170
|
* loaded from session or changed by other means (like redirecting).
|
|
184
171
|
*/
|
|
185
172
|
_defaultDcs: DcOptions;
|
|
186
|
-
private _niceStacks;
|
|
187
173
|
/** TL layer used by the client */
|
|
188
174
|
readonly _layer: number;
|
|
189
175
|
/** TL readers map used by the client */
|
|
@@ -233,7 +219,7 @@ export declare class MtClient extends EventEmitter {
|
|
|
233
219
|
* @param message RPC method to call
|
|
234
220
|
* @param params Additional call parameters
|
|
235
221
|
*/
|
|
236
|
-
call<T extends tl.RpcMethod>(message: MustEqual<T, tl.RpcMethod>, params?: RpcCallOptions): Promise<tl.RpcCallReturn[T['_']]>;
|
|
222
|
+
call<T extends tl.RpcMethod>(message: MustEqual<T, tl.RpcMethod>, params?: RpcCallOptions): Promise<tl.RpcCallReturn[T['_']] | mtp.RawMt_rpc_error>;
|
|
237
223
|
/**
|
|
238
224
|
* Register an error handler for the client
|
|
239
225
|
*
|
package/cjs/network/client.js
CHANGED
|
@@ -35,14 +35,18 @@ class MtClient extends events_1.default {
|
|
|
35
35
|
* loaded from session or changed by other means (like redirecting).
|
|
36
36
|
*/
|
|
37
37
|
_defaultDcs;
|
|
38
|
-
_niceStacks;
|
|
39
38
|
/** TL layer used by the client */
|
|
40
39
|
_layer;
|
|
41
40
|
/** TL readers map used by the client */
|
|
42
41
|
_readerMap;
|
|
43
42
|
/** TL writers map used by the client */
|
|
44
43
|
_writerMap;
|
|
45
|
-
_config = new config_manager_js_1.ConfigManager(() =>
|
|
44
|
+
_config = new config_manager_js_1.ConfigManager(async () => {
|
|
45
|
+
const res = await this.call({ _: 'help.getConfig' });
|
|
46
|
+
if ((0, index_js_1.isTlRpcError)(res))
|
|
47
|
+
throw new Error(`Failed to get config: ${res.errorMessage}`);
|
|
48
|
+
return res;
|
|
49
|
+
});
|
|
46
50
|
_emitError;
|
|
47
51
|
log;
|
|
48
52
|
network;
|
|
@@ -67,7 +71,6 @@ class MtClient extends events_1.default {
|
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
this._defaultDcs = dc;
|
|
70
|
-
this._niceStacks = params.niceStacks ?? true;
|
|
71
74
|
this._layer = params.overrideLayer ?? tl_1.tl.LAYER;
|
|
72
75
|
this._readerMap = params.readerMap ?? reader_js_1.__tlReaderMap;
|
|
73
76
|
this._writerMap = params.writerMap ?? writer_js_1.__tlWriterMap;
|
|
@@ -174,9 +177,8 @@ class MtClient extends events_1.default {
|
|
|
174
177
|
* @param params Additional call parameters
|
|
175
178
|
*/
|
|
176
179
|
async call(message, params) {
|
|
177
|
-
const stack = this._niceStacks ? new Error().stack : undefined;
|
|
178
180
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
179
|
-
return this.network.call(message, params
|
|
181
|
+
return this.network.call(message, params);
|
|
180
182
|
}
|
|
181
183
|
/**
|
|
182
184
|
* Register an error handler for the client
|