@mtcute/core 0.7.2 → 0.8.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/README.md +26 -3
- package/cjs/highlevel/base.d.ts +3 -1
- package/cjs/highlevel/base.js +18 -0
- package/cjs/highlevel/base.js.map +1 -1
- package/cjs/highlevel/client.d.ts +23 -10
- package/cjs/highlevel/client.js +26 -19
- package/cjs/highlevel/client.js.map +1 -1
- package/cjs/highlevel/client.types.d.ts +14 -0
- package/cjs/highlevel/client.types.js.map +1 -1
- package/cjs/highlevel/index.d.ts +0 -2
- package/cjs/highlevel/index.js +0 -2
- package/cjs/highlevel/index.js.map +1 -1
- package/cjs/highlevel/methods/_imports.js.map +1 -1
- package/cjs/highlevel/methods/_init.js +4 -29
- package/cjs/highlevel/methods/_init.js.map +1 -1
- package/cjs/highlevel/methods/bots/get-callback-answer.js +2 -2
- package/cjs/highlevel/methods/bots/get-callback-answer.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/create-folder.js +1 -1
- package/cjs/highlevel/methods/dialogs/create-folder.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/edit-folder.js +1 -1
- package/cjs/highlevel/methods/dialogs/edit-folder.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/find-folder.js +1 -1
- package/cjs/highlevel/methods/dialogs/find-folder.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/get-folders.d.ts +1 -1
- package/cjs/highlevel/methods/dialogs/get-folders.js +1 -1
- package/cjs/highlevel/methods/dialogs/get-folders.js.map +1 -1
- package/cjs/highlevel/methods/files/download-file.d.ts +1 -10
- package/cjs/highlevel/methods/files/download-file.js +1 -32
- package/cjs/highlevel/methods/files/download-file.js.map +1 -1
- package/cjs/highlevel/methods/files/download-iterable.js +2 -1
- package/cjs/highlevel/methods/files/download-iterable.js.map +1 -1
- package/cjs/highlevel/methods/files/download-node-stream.js +4 -0
- package/cjs/highlevel/methods/files/download-node-stream.js.map +1 -0
- package/cjs/highlevel/methods/files/normalize-input-media.d.ts +1 -1
- package/cjs/highlevel/methods/files/normalize-input-media.js +2 -1
- package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
- package/cjs/highlevel/methods/files/upload-file.d.ts +0 -3
- package/cjs/highlevel/methods/files/upload-file.js +17 -13
- package/cjs/highlevel/methods/files/upload-file.js.map +1 -1
- package/cjs/highlevel/methods/messages/find-in-update.js +23 -8
- package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-media-group.d.ts +1 -1
- package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-media.d.ts +2 -2
- package/cjs/highlevel/methods/messages/send-media.js +5 -4
- package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-text.d.ts +1 -1
- package/cjs/highlevel/methods/messages/send-text.js +7 -6
- package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
- package/cjs/highlevel/methods/misc/with-params.d.ts +10 -0
- package/cjs/highlevel/methods/misc/with-params.js +32 -0
- package/cjs/highlevel/methods/misc/with-params.js.map +1 -0
- package/cjs/highlevel/methods.d.ts +13 -1
- package/cjs/highlevel/methods.js +4 -6
- package/cjs/highlevel/methods.js.map +1 -1
- package/cjs/highlevel/types/bots/command-scope/index.d.ts +10 -0
- package/cjs/highlevel/types/bots/command-scope/index.js +29 -0
- package/cjs/highlevel/types/bots/command-scope/index.js.map +1 -0
- package/cjs/highlevel/types/bots/command-scope/inner.d.ts +54 -0
- package/cjs/highlevel/types/bots/command-scope/inner.js +76 -0
- package/cjs/highlevel/types/bots/command-scope/inner.js.map +1 -0
- package/cjs/highlevel/types/bots/index.d.ts +4 -4
- package/cjs/highlevel/types/bots/index.js +4 -4
- package/cjs/highlevel/types/bots/index.js.map +1 -1
- package/cjs/highlevel/types/bots/inline-message/factories.d.ts +43 -0
- package/cjs/highlevel/types/bots/inline-message/factories.js +175 -0
- package/cjs/highlevel/types/bots/inline-message/factories.js.map +1 -0
- package/cjs/highlevel/types/bots/inline-message/index.d.ts +3 -0
- package/cjs/highlevel/types/bots/inline-message/index.js +33 -0
- package/cjs/highlevel/types/bots/inline-message/index.js.map +1 -0
- package/{esm/highlevel/types/bots/input/input-inline-message.d.ts → cjs/highlevel/types/bots/inline-message/types.d.ts} +2 -45
- package/cjs/highlevel/types/bots/inline-message/types.js +3 -0
- package/cjs/highlevel/types/bots/inline-message/types.js.map +1 -0
- package/cjs/highlevel/types/bots/inline-result/factories.d.ts +94 -0
- package/cjs/highlevel/types/bots/inline-result/factories.js +486 -0
- package/cjs/highlevel/types/bots/inline-result/factories.js.map +1 -0
- package/cjs/highlevel/types/bots/inline-result/index.d.ts +3 -0
- package/cjs/highlevel/types/bots/inline-result/index.js +33 -0
- package/cjs/highlevel/types/bots/inline-result/index.js.map +1 -0
- package/{esm/highlevel/types/bots/input/input-inline-result.d.ts → cjs/highlevel/types/bots/inline-result/types.d.ts} +1 -95
- package/cjs/highlevel/types/bots/inline-result/types.js +3 -0
- package/cjs/highlevel/types/bots/inline-result/types.js.map +1 -0
- package/cjs/highlevel/types/bots/{keyboard-builder.d.ts → keyboards/builder.d.ts} +1 -1
- package/cjs/highlevel/types/bots/{keyboard-builder.js → keyboards/builder.js} +1 -1
- package/cjs/highlevel/types/bots/keyboards/builder.js.map +1 -0
- package/cjs/highlevel/types/bots/keyboards/factories.d.ts +195 -0
- package/cjs/highlevel/types/bots/keyboards/factories.js +366 -0
- package/cjs/highlevel/types/bots/keyboards/factories.js.map +1 -0
- package/cjs/highlevel/types/bots/keyboards/index.d.ts +14 -0
- package/cjs/highlevel/types/bots/keyboards/index.js +33 -0
- package/cjs/highlevel/types/bots/keyboards/index.js.map +1 -0
- package/cjs/highlevel/types/bots/keyboards/types.d.ts +34 -0
- package/cjs/highlevel/types/bots/keyboards/types.js +3 -0
- package/cjs/highlevel/types/bots/keyboards/types.js.map +1 -0
- package/cjs/highlevel/types/media/document.js +3 -2
- package/cjs/highlevel/types/media/document.js.map +1 -1
- package/cjs/highlevel/types/media/index.d.ts +1 -1
- package/cjs/highlevel/types/media/index.js +1 -1
- package/cjs/highlevel/types/media/index.js.map +1 -1
- package/cjs/highlevel/types/media/input-media/factories.d.ts +141 -0
- package/cjs/highlevel/types/media/input-media/factories.js +250 -0
- package/cjs/highlevel/types/media/input-media/factories.js.map +1 -0
- package/cjs/highlevel/types/media/input-media/index.d.ts +3 -0
- package/cjs/highlevel/types/media/input-media/index.js +33 -0
- package/cjs/highlevel/types/media/input-media/index.js.map +1 -0
- package/cjs/highlevel/types/media/{input-media.d.ts → input-media/types.d.ts} +5 -145
- package/cjs/highlevel/types/media/input-media/types.js +3 -0
- package/cjs/highlevel/types/media/input-media/types.js.map +1 -0
- package/cjs/highlevel/types/media/thumbnail.js +5 -4
- package/cjs/highlevel/types/media/thumbnail.js.map +1 -1
- package/cjs/highlevel/types/messages/message.d.ts +1 -1
- package/cjs/highlevel/types/messages/message.js +3 -3
- package/cjs/highlevel/types/messages/message.js.map +1 -1
- package/cjs/highlevel/types/misc/index.d.ts +1 -1
- package/cjs/highlevel/types/misc/index.js +1 -1
- package/cjs/highlevel/types/misc/index.js.map +1 -1
- package/cjs/highlevel/types/misc/input-privacy-rule/allow.d.ts +22 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/allow.js +36 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/allow.js.map +1 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/bundle.d.ts +3 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/bundle.js +31 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/bundle.js.map +1 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/disallow.d.ts +20 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/disallow.js +32 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/disallow.js.map +1 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/index.d.ts +3 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/index.js +33 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/index.js.map +1 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/types.d.ts +11 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/types.js +3 -0
- package/cjs/highlevel/types/misc/input-privacy-rule/types.js.map +1 -0
- package/cjs/highlevel/types/peers/chat-photo.js +3 -2
- package/cjs/highlevel/types/peers/chat-photo.js.map +1 -1
- package/cjs/highlevel/types/updates/callback-query.js +2 -2
- package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
- package/cjs/highlevel/types/updates/user-status-update.js +1 -1
- package/cjs/highlevel/types/updates/user-status-update.js.map +1 -1
- package/cjs/highlevel/updates/manager.d.ts +5 -3
- package/cjs/highlevel/updates/manager.js +81 -67
- package/cjs/highlevel/updates/manager.js.map +1 -1
- package/cjs/highlevel/utils/convert-file-id.js +7 -6
- package/cjs/highlevel/utils/convert-file-id.js.map +1 -1
- package/cjs/highlevel/utils/file-utils.js +8 -4
- package/cjs/highlevel/utils/file-utils.js.map +1 -1
- package/cjs/highlevel/utils/inline-utils.js +3 -2
- package/cjs/highlevel/utils/inline-utils.js.map +1 -1
- package/cjs/highlevel/utils/inspectable.d.ts +1 -1
- package/cjs/highlevel/utils/inspectable.js +3 -2
- package/cjs/highlevel/utils/inspectable.js.map +1 -1
- package/cjs/highlevel/utils/memoize.d.ts +1 -1
- package/cjs/highlevel/utils/memoize.js +1 -0
- package/cjs/highlevel/utils/memoize.js.map +1 -1
- package/cjs/highlevel/utils/stream-utils.d.ts +0 -2
- package/cjs/highlevel/utils/stream-utils.js +1 -28
- package/cjs/highlevel/utils/stream-utils.js.map +1 -1
- package/cjs/highlevel/utils/string-session.js +3 -2
- package/cjs/highlevel/utils/string-session.js.map +1 -1
- package/cjs/highlevel/worker/index.d.ts +3 -0
- package/cjs/highlevel/{types/bots/input → worker}/index.js +3 -2
- package/cjs/highlevel/worker/index.js.map +1 -0
- package/cjs/highlevel/worker/port.d.ts +6 -3
- package/cjs/highlevel/worker/port.js +8 -2
- package/cjs/highlevel/worker/port.js.map +1 -1
- package/cjs/highlevel/worker/protocol.d.ts +5 -1
- package/cjs/highlevel/worker/protocol.js.map +1 -1
- package/cjs/highlevel/worker/worker.d.ts +11 -4
- package/cjs/highlevel/worker/worker.js +53 -49
- package/cjs/highlevel/worker/worker.js.map +1 -1
- package/cjs/network/authorization.js +1 -0
- package/cjs/network/authorization.js.map +1 -1
- package/cjs/network/client.d.ts +4 -4
- package/cjs/network/client.js +3 -1
- package/cjs/network/client.js.map +1 -1
- package/cjs/network/mtproto-session.d.ts +1 -0
- package/cjs/network/mtproto-session.js +7 -1
- package/cjs/network/mtproto-session.js.map +1 -1
- package/cjs/network/multi-session-connection.d.ts +1 -0
- package/cjs/network/multi-session-connection.js +6 -0
- package/cjs/network/multi-session-connection.js.map +1 -1
- package/cjs/network/network-manager.d.ts +5 -1
- package/cjs/network/network-manager.js +24 -15
- package/cjs/network/network-manager.js.map +1 -1
- package/cjs/network/persistent-connection.d.ts +3 -0
- package/cjs/network/persistent-connection.js +23 -1
- package/cjs/network/persistent-connection.js.map +1 -1
- package/cjs/network/session-connection.d.ts +2 -0
- package/cjs/network/session-connection.js +21 -7
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/network/transports/index.d.ts +0 -3
- package/cjs/network/transports/index.js +0 -4
- package/cjs/network/transports/index.js.map +1 -1
- package/cjs/platform.d.ts +18 -0
- package/cjs/platform.js +36 -0
- package/cjs/platform.js.map +1 -0
- package/cjs/storage/index.d.ts +1 -2
- package/cjs/storage/index.js +1 -2
- package/cjs/storage/index.js.map +1 -1
- package/{esm/storage/providers → cjs/storage}/memory/driver.d.ts +1 -1
- package/cjs/storage/memory/driver.js.map +1 -0
- package/{esm/storage/providers → cjs/storage}/memory/index.d.ts +2 -2
- package/cjs/storage/memory/index.js.map +1 -0
- package/cjs/storage/{providers/memory → memory}/repository/auth-keys.d.ts +1 -1
- package/cjs/storage/memory/repository/auth-keys.js.map +1 -0
- package/{esm/storage/providers → cjs/storage}/memory/repository/kv.d.ts +1 -1
- package/cjs/storage/memory/repository/kv.js.map +1 -0
- package/{esm/storage/providers → cjs/storage}/memory/repository/peers.d.ts +1 -1
- package/cjs/storage/memory/repository/peers.js.map +1 -0
- package/{esm/storage/providers → cjs/storage}/memory/repository/ref-messages.d.ts +1 -1
- package/cjs/storage/memory/repository/ref-messages.js.map +1 -0
- package/cjs/storage/storage.js +2 -1
- package/cjs/storage/storage.js.map +1 -1
- package/cjs/utils/binary/asn1-parser.js +3 -3
- package/cjs/utils/binary/asn1-parser.js.map +1 -1
- package/cjs/utils/crypto/abstract.d.ts +0 -1
- package/cjs/utils/crypto/abstract.js.map +1 -1
- package/cjs/utils/crypto/index.d.ts +0 -2
- package/cjs/utils/crypto/index.js +0 -3
- package/cjs/utils/crypto/index.js.map +1 -1
- package/cjs/utils/crypto/keys.js +5 -3
- package/cjs/utils/crypto/keys.js.map +1 -1
- package/cjs/utils/crypto/password.js +3 -3
- package/cjs/utils/crypto/password.js.map +1 -1
- package/cjs/utils/dcs.d.ts +4 -0
- package/cjs/utils/dcs.js +0 -4
- package/cjs/utils/dcs.js.map +1 -1
- package/cjs/utils/{platform/error-reporting.d.ts → error-reporting.d.ts} +1 -1
- package/cjs/utils/error-reporting.js.map +1 -0
- package/cjs/utils/index.d.ts +4 -1
- package/cjs/utils/index.js +6 -1
- package/cjs/utils/index.js.map +1 -1
- package/cjs/utils/links/common.js +1 -1
- package/cjs/utils/links/common.js.map +1 -1
- package/cjs/utils/logger.d.ts +1 -0
- package/cjs/utils/logger.js +9 -22
- package/cjs/utils/logger.js.map +1 -1
- package/esm/highlevel/base.d.ts +3 -1
- package/esm/highlevel/base.js +18 -0
- package/esm/highlevel/base.js.map +1 -1
- package/esm/highlevel/client.d.ts +23 -10
- package/esm/highlevel/client.js +12 -19
- package/esm/highlevel/client.js.map +1 -1
- package/esm/highlevel/client.types.d.ts +14 -0
- package/esm/highlevel/client.types.js.map +1 -1
- package/esm/highlevel/index.d.ts +0 -2
- package/esm/highlevel/index.js +0 -2
- package/esm/highlevel/index.js.map +1 -1
- package/esm/highlevel/methods/_imports.js.map +1 -1
- package/esm/highlevel/methods/_init.js +4 -29
- package/esm/highlevel/methods/_init.js.map +1 -1
- package/esm/highlevel/methods/bots/get-callback-answer.js +2 -2
- package/esm/highlevel/methods/bots/get-callback-answer.js.map +1 -1
- package/esm/highlevel/methods/dialogs/create-folder.js +1 -1
- package/esm/highlevel/methods/dialogs/create-folder.js.map +1 -1
- package/esm/highlevel/methods/dialogs/edit-folder.js +1 -1
- package/esm/highlevel/methods/dialogs/edit-folder.js.map +1 -1
- package/esm/highlevel/methods/dialogs/find-folder.js +1 -1
- package/esm/highlevel/methods/dialogs/find-folder.js.map +1 -1
- package/esm/highlevel/methods/dialogs/get-folders.d.ts +1 -1
- package/esm/highlevel/methods/dialogs/get-folders.js +1 -1
- package/esm/highlevel/methods/dialogs/get-folders.js.map +1 -1
- package/esm/highlevel/methods/files/download-file.d.ts +1 -10
- package/esm/highlevel/methods/files/download-file.js +2 -30
- package/esm/highlevel/methods/files/download-file.js.map +1 -1
- package/esm/highlevel/methods/files/download-iterable.js +2 -1
- package/esm/highlevel/methods/files/download-iterable.js.map +1 -1
- package/esm/highlevel/methods/files/download-node-stream.js +3 -0
- package/esm/highlevel/methods/files/download-node-stream.js.map +1 -0
- package/esm/highlevel/methods/files/normalize-input-media.d.ts +1 -1
- package/esm/highlevel/methods/files/normalize-input-media.js +2 -1
- package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
- package/esm/highlevel/methods/files/upload-file.d.ts +0 -3
- package/esm/highlevel/methods/files/upload-file.js +17 -13
- package/esm/highlevel/methods/files/upload-file.js.map +1 -1
- package/esm/highlevel/methods/messages/find-in-update.js +23 -8
- package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/esm/highlevel/methods/messages/send-media-group.d.ts +1 -1
- package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
- package/esm/highlevel/methods/messages/send-media.d.ts +2 -2
- package/esm/highlevel/methods/messages/send-media.js +4 -3
- package/esm/highlevel/methods/messages/send-media.js.map +1 -1
- package/esm/highlevel/methods/messages/send-text.d.ts +1 -1
- package/esm/highlevel/methods/messages/send-text.js +4 -3
- package/esm/highlevel/methods/messages/send-text.js.map +1 -1
- package/esm/highlevel/methods/misc/with-params.d.ts +10 -0
- package/esm/highlevel/methods/misc/with-params.js +28 -0
- package/esm/highlevel/methods/misc/with-params.js.map +1 -0
- package/esm/highlevel/methods.d.ts +13 -1
- package/esm/highlevel/methods.js +0 -1
- package/esm/highlevel/methods.js.map +1 -1
- package/esm/highlevel/types/auth/sent-code.js +4 -3
- package/esm/highlevel/types/bots/command-scope/index.d.ts +10 -0
- package/esm/highlevel/types/bots/command-scope/index.js +11 -0
- package/esm/highlevel/types/bots/command-scope/index.js.map +1 -0
- package/esm/highlevel/types/bots/command-scope/inner.d.ts +54 -0
- package/esm/highlevel/types/bots/command-scope/inner.js +69 -0
- package/esm/highlevel/types/bots/command-scope/inner.js.map +1 -0
- package/esm/highlevel/types/bots/game-high-score.js +5 -4
- package/esm/highlevel/types/bots/index.d.ts +4 -4
- package/esm/highlevel/types/bots/index.js +4 -4
- package/esm/highlevel/types/bots/index.js.map +1 -1
- package/esm/highlevel/types/bots/inline-message/factories.d.ts +43 -0
- package/esm/highlevel/types/bots/inline-message/factories.js +163 -0
- package/esm/highlevel/types/bots/inline-message/factories.js.map +1 -0
- package/esm/highlevel/types/bots/inline-message/index.d.ts +3 -0
- package/esm/highlevel/types/bots/inline-message/index.js +4 -0
- package/esm/highlevel/types/bots/inline-message/index.js.map +1 -0
- package/{cjs/highlevel/types/bots/input/input-inline-message.d.ts → esm/highlevel/types/bots/inline-message/types.d.ts} +2 -45
- package/esm/highlevel/types/bots/inline-message/types.js +2 -0
- package/esm/highlevel/types/bots/inline-message/types.js.map +1 -0
- package/esm/highlevel/types/bots/inline-result/factories.d.ts +94 -0
- package/esm/highlevel/types/bots/inline-result/factories.js +470 -0
- package/esm/highlevel/types/bots/inline-result/factories.js.map +1 -0
- package/esm/highlevel/types/bots/inline-result/index.d.ts +3 -0
- package/esm/highlevel/types/bots/inline-result/index.js +4 -0
- package/esm/highlevel/types/bots/inline-result/index.js.map +1 -0
- package/{cjs/highlevel/types/bots/input/input-inline-result.d.ts → esm/highlevel/types/bots/inline-result/types.d.ts} +1 -95
- package/esm/highlevel/types/bots/inline-result/types.js +2 -0
- package/esm/highlevel/types/bots/inline-result/types.js.map +1 -0
- package/esm/highlevel/types/bots/{keyboard-builder.d.ts → keyboards/builder.d.ts} +1 -1
- package/esm/highlevel/types/bots/{keyboard-builder.js → keyboards/builder.js} +1 -1
- package/esm/highlevel/types/bots/keyboards/builder.js.map +1 -0
- package/esm/highlevel/types/bots/keyboards/factories.d.ts +195 -0
- package/esm/highlevel/types/bots/keyboards/factories.js +341 -0
- package/esm/highlevel/types/bots/keyboards/factories.js.map +1 -0
- package/esm/highlevel/types/bots/keyboards/index.d.ts +14 -0
- package/esm/highlevel/types/bots/keyboards/index.js +15 -0
- package/esm/highlevel/types/bots/keyboards/index.js.map +1 -0
- package/esm/highlevel/types/bots/keyboards/types.d.ts +34 -0
- package/esm/highlevel/types/bots/keyboards/types.js +2 -0
- package/esm/highlevel/types/bots/keyboards/types.js.map +1 -0
- package/esm/highlevel/types/files/file-location.js +4 -3
- package/esm/highlevel/types/files/web-document.js +4 -3
- package/esm/highlevel/types/media/audio.js +5 -4
- package/esm/highlevel/types/media/contact.js +4 -3
- package/esm/highlevel/types/media/dice.js +4 -3
- package/esm/highlevel/types/media/document.js +8 -6
- package/esm/highlevel/types/media/document.js.map +1 -1
- package/esm/highlevel/types/media/game.js +5 -4
- package/esm/highlevel/types/media/index.d.ts +1 -1
- package/esm/highlevel/types/media/index.js +1 -1
- package/esm/highlevel/types/media/index.js.map +1 -1
- package/esm/highlevel/types/media/input-media/factories.d.ts +141 -0
- package/esm/highlevel/types/media/input-media/factories.js +228 -0
- package/esm/highlevel/types/media/input-media/factories.js.map +1 -0
- package/esm/highlevel/types/media/input-media/index.d.ts +3 -0
- package/esm/highlevel/types/media/input-media/index.js +4 -0
- package/esm/highlevel/types/media/input-media/index.js.map +1 -0
- package/esm/highlevel/types/media/{input-media.d.ts → input-media/types.d.ts} +5 -145
- package/esm/highlevel/types/media/input-media/types.js +2 -0
- package/esm/highlevel/types/media/input-media/types.js.map +1 -0
- package/esm/highlevel/types/media/invoice.js +9 -7
- package/esm/highlevel/types/media/location.js +7 -5
- package/esm/highlevel/types/media/photo.js +5 -4
- package/esm/highlevel/types/media/poll.js +5 -4
- package/esm/highlevel/types/media/sticker.js +5 -4
- package/esm/highlevel/types/media/story.js +4 -3
- package/esm/highlevel/types/media/thumbnail.js +10 -8
- package/esm/highlevel/types/media/thumbnail.js.map +1 -1
- package/esm/highlevel/types/media/venue.js +5 -4
- package/esm/highlevel/types/media/video.js +5 -4
- package/esm/highlevel/types/media/voice.js +5 -4
- package/esm/highlevel/types/media/web-page.js +5 -4
- package/esm/highlevel/types/messages/dialog.js +5 -4
- package/esm/highlevel/types/messages/draft-message.js +5 -4
- package/esm/highlevel/types/messages/message-entity.js +5 -4
- package/esm/highlevel/types/messages/message-forward.js +5 -4
- package/esm/highlevel/types/messages/message-reactions.js +5 -4
- package/esm/highlevel/types/messages/message-replies.js +5 -4
- package/esm/highlevel/types/messages/message.d.ts +1 -1
- package/esm/highlevel/types/messages/message.js +6 -5
- package/esm/highlevel/types/messages/message.js.map +1 -1
- package/esm/highlevel/types/messages/replied-message.js +5 -4
- package/esm/highlevel/types/misc/index.d.ts +1 -1
- package/esm/highlevel/types/misc/index.js +1 -1
- package/esm/highlevel/types/misc/index.js.map +1 -1
- package/esm/highlevel/types/misc/input-privacy-rule/allow.d.ts +22 -0
- package/esm/highlevel/types/misc/input-privacy-rule/allow.js +31 -0
- package/esm/highlevel/types/misc/input-privacy-rule/allow.js.map +1 -0
- package/esm/highlevel/types/misc/input-privacy-rule/bundle.d.ts +3 -0
- package/esm/highlevel/types/misc/input-privacy-rule/bundle.js +4 -0
- package/esm/highlevel/types/misc/input-privacy-rule/bundle.js.map +1 -0
- package/esm/highlevel/types/misc/input-privacy-rule/disallow.d.ts +20 -0
- package/esm/highlevel/types/misc/input-privacy-rule/disallow.js +27 -0
- package/esm/highlevel/types/misc/input-privacy-rule/disallow.js.map +1 -0
- package/esm/highlevel/types/misc/input-privacy-rule/index.d.ts +3 -0
- package/esm/highlevel/types/misc/input-privacy-rule/index.js +4 -0
- package/esm/highlevel/types/misc/input-privacy-rule/index.js.map +1 -0
- package/esm/highlevel/types/misc/input-privacy-rule/types.d.ts +11 -0
- package/esm/highlevel/types/misc/input-privacy-rule/types.js +2 -0
- package/esm/highlevel/types/misc/input-privacy-rule/types.js.map +1 -0
- package/esm/highlevel/types/misc/sticker-set.js +5 -4
- package/esm/highlevel/types/misc/takeout-session.js +4 -3
- package/esm/highlevel/types/peers/chat-colors.js +4 -3
- package/esm/highlevel/types/peers/chat-event/index.js +5 -4
- package/esm/highlevel/types/peers/chat-invite-link-member.js +5 -4
- package/esm/highlevel/types/peers/chat-invite-link.js +5 -4
- package/esm/highlevel/types/peers/chat-location.js +5 -4
- package/esm/highlevel/types/peers/chat-member.js +5 -4
- package/esm/highlevel/types/peers/chat-permissions.js +4 -3
- package/esm/highlevel/types/peers/chat-photo.js +12 -9
- package/esm/highlevel/types/peers/chat-photo.js.map +1 -1
- package/esm/highlevel/types/peers/chat-preview.js +5 -4
- package/esm/highlevel/types/peers/chat.js +5 -4
- package/esm/highlevel/types/peers/forum-topic.js +5 -4
- package/esm/highlevel/types/peers/user.js +5 -4
- package/esm/highlevel/types/premium/boost-slot.js +5 -4
- package/esm/highlevel/types/premium/boost-stats.js +4 -3
- package/esm/highlevel/types/premium/boost.js +5 -4
- package/esm/highlevel/types/reactions/emoji-status.js +4 -3
- package/esm/highlevel/types/reactions/peer-reaction.js +5 -4
- package/esm/highlevel/types/reactions/reaction-count.js +4 -3
- package/esm/highlevel/types/stories/all-stories.js +5 -4
- package/esm/highlevel/types/stories/interactive/channel-post.js +5 -4
- package/esm/highlevel/types/stories/interactive/location.js +5 -4
- package/esm/highlevel/types/stories/interactive/reaction.js +4 -3
- package/esm/highlevel/types/stories/interactive/venue.js +5 -4
- package/esm/highlevel/types/stories/peer-stories.js +5 -4
- package/esm/highlevel/types/stories/stealth-mode.js +4 -3
- package/esm/highlevel/types/stories/story-interactions.js +5 -4
- package/esm/highlevel/types/stories/story-viewer.js +9 -7
- package/esm/highlevel/types/stories/story.js +5 -4
- package/esm/highlevel/types/updates/bot-chat-join-request.js +5 -4
- package/esm/highlevel/types/updates/bot-reaction.js +9 -7
- package/esm/highlevel/types/updates/bot-stopped.js +5 -4
- package/esm/highlevel/types/updates/callback-query.js +11 -9
- package/esm/highlevel/types/updates/callback-query.js.map +1 -1
- package/esm/highlevel/types/updates/chat-join-request.js +5 -4
- package/esm/highlevel/types/updates/chat-member-update.js +5 -4
- package/esm/highlevel/types/updates/chosen-inline-result.js +5 -4
- package/esm/highlevel/types/updates/delete-message-update.js +4 -3
- package/esm/highlevel/types/updates/delete-story-update.js +5 -4
- package/esm/highlevel/types/updates/history-read-update.js +4 -3
- package/esm/highlevel/types/updates/inline-query.js +5 -4
- package/esm/highlevel/types/updates/poll-update.js +5 -4
- package/esm/highlevel/types/updates/poll-vote.js +5 -4
- package/esm/highlevel/types/updates/pre-checkout-query.js +5 -4
- package/esm/highlevel/types/updates/story-update.js +5 -4
- package/esm/highlevel/types/updates/user-status-update.js +5 -4
- package/esm/highlevel/types/updates/user-status-update.js.map +1 -1
- package/esm/highlevel/types/updates/user-typing-update.js +4 -3
- package/esm/highlevel/updates/manager.d.ts +5 -3
- package/esm/highlevel/updates/manager.js +81 -67
- package/esm/highlevel/updates/manager.js.map +1 -1
- package/esm/highlevel/utils/convert-file-id.js +7 -6
- package/esm/highlevel/utils/convert-file-id.js.map +1 -1
- package/esm/highlevel/utils/file-utils.js +8 -4
- package/esm/highlevel/utils/file-utils.js.map +1 -1
- package/esm/highlevel/utils/inline-utils.js +4 -3
- package/esm/highlevel/utils/inline-utils.js.map +1 -1
- package/esm/highlevel/utils/inspectable.d.ts +1 -1
- package/esm/highlevel/utils/inspectable.js +3 -2
- package/esm/highlevel/utils/inspectable.js.map +1 -1
- package/esm/highlevel/utils/memoize.d.ts +1 -1
- package/esm/highlevel/utils/memoize.js +1 -0
- package/esm/highlevel/utils/memoize.js.map +1 -1
- package/esm/highlevel/utils/stream-utils.d.ts +0 -2
- package/esm/highlevel/utils/stream-utils.js +0 -26
- package/esm/highlevel/utils/stream-utils.js.map +1 -1
- package/esm/highlevel/utils/string-session.js +4 -3
- package/esm/highlevel/utils/string-session.js.map +1 -1
- package/esm/highlevel/worker/index.d.ts +3 -0
- package/esm/highlevel/worker/index.js +4 -0
- package/esm/highlevel/worker/index.js.map +1 -0
- package/esm/highlevel/worker/port.d.ts +6 -3
- package/esm/highlevel/worker/port.js +8 -2
- package/esm/highlevel/worker/port.js.map +1 -1
- package/esm/highlevel/worker/protocol.d.ts +5 -1
- package/esm/highlevel/worker/protocol.js.map +1 -1
- package/esm/highlevel/worker/worker.d.ts +11 -4
- package/esm/highlevel/worker/worker.js +51 -47
- package/esm/highlevel/worker/worker.js.map +1 -1
- package/esm/network/authorization.js +1 -0
- package/esm/network/authorization.js.map +1 -1
- package/esm/network/client.d.ts +4 -4
- package/esm/network/client.js +4 -2
- package/esm/network/client.js.map +1 -1
- package/esm/network/mtproto-session.d.ts +1 -0
- package/esm/network/mtproto-session.js +7 -1
- package/esm/network/mtproto-session.js.map +1 -1
- package/esm/network/multi-session-connection.d.ts +1 -0
- package/esm/network/multi-session-connection.js +6 -0
- package/esm/network/multi-session-connection.js.map +1 -1
- package/esm/network/network-manager.d.ts +5 -1
- package/esm/network/network-manager.js +24 -15
- package/esm/network/network-manager.js.map +1 -1
- package/esm/network/persistent-connection.d.ts +3 -0
- package/esm/network/persistent-connection.js +23 -1
- package/esm/network/persistent-connection.js.map +1 -1
- package/esm/network/session-connection.d.ts +2 -0
- package/esm/network/session-connection.js +21 -7
- package/esm/network/session-connection.js.map +1 -1
- package/esm/network/transports/index.d.ts +0 -3
- package/esm/network/transports/index.js +0 -3
- package/esm/network/transports/index.js.map +1 -1
- package/esm/platform.d.ts +18 -0
- package/esm/platform.js +31 -0
- package/esm/platform.js.map +1 -0
- package/esm/storage/index.d.ts +1 -2
- package/esm/storage/index.js +1 -2
- package/esm/storage/index.js.map +1 -1
- package/{cjs/storage/providers → esm/storage}/memory/driver.d.ts +1 -1
- package/esm/storage/memory/driver.js.map +1 -0
- package/{cjs/storage/providers → esm/storage}/memory/index.d.ts +2 -2
- package/esm/storage/memory/index.js.map +1 -0
- package/esm/storage/{providers/memory → memory}/repository/auth-keys.d.ts +1 -1
- package/esm/storage/memory/repository/auth-keys.js.map +1 -0
- package/{cjs/storage/providers → esm/storage}/memory/repository/kv.d.ts +1 -1
- package/esm/storage/memory/repository/kv.js.map +1 -0
- package/{cjs/storage/providers → esm/storage}/memory/repository/peers.d.ts +1 -1
- package/esm/storage/memory/repository/peers.js.map +1 -0
- package/{cjs/storage/providers → esm/storage}/memory/repository/ref-messages.d.ts +1 -1
- package/esm/storage/memory/repository/ref-messages.js.map +1 -0
- package/esm/storage/storage.js +3 -2
- package/esm/storage/storage.js.map +1 -1
- package/esm/utils/binary/asn1-parser.js +3 -3
- package/esm/utils/binary/asn1-parser.js.map +1 -1
- package/esm/utils/crypto/abstract.d.ts +0 -1
- package/esm/utils/crypto/abstract.js.map +1 -1
- package/esm/utils/crypto/index.d.ts +0 -2
- package/esm/utils/crypto/index.js +0 -2
- package/esm/utils/crypto/index.js.map +1 -1
- package/esm/utils/crypto/keys.js +6 -4
- package/esm/utils/crypto/keys.js.map +1 -1
- package/esm/utils/crypto/password.js +3 -3
- package/esm/utils/crypto/password.js.map +1 -1
- package/esm/utils/dcs.d.ts +4 -0
- package/esm/utils/dcs.js +0 -4
- package/esm/utils/dcs.js.map +1 -1
- package/esm/utils/{platform/error-reporting.d.ts → error-reporting.d.ts} +1 -1
- package/esm/utils/error-reporting.js.map +1 -0
- package/esm/utils/index.d.ts +4 -1
- package/esm/utils/index.js +6 -1
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/links/common.js +1 -1
- package/esm/utils/links/common.js.map +1 -1
- package/esm/utils/logger.d.ts +1 -0
- package/esm/utils/logger.js +9 -22
- package/esm/utils/logger.js.map +1 -1
- package/package.json +24 -52
- package/cjs/highlevel/base.test.js +0 -14
- package/cjs/highlevel/base.test.js.map +0 -1
- package/cjs/highlevel/methods/files/_platform.js +0 -33
- package/cjs/highlevel/methods/files/_platform.js.map +0 -1
- package/cjs/highlevel/methods/files/_platform.web.d.ts +0 -1
- package/cjs/highlevel/methods/files/_platform.web.js +0 -26
- package/cjs/highlevel/methods/files/_platform.web.js.map +0 -1
- package/cjs/highlevel/methods/files/download-file.web.d.ts +0 -1
- package/cjs/highlevel/methods/files/download-file.web.js +0 -9
- package/cjs/highlevel/methods/files/download-file.web.js.map +0 -1
- package/cjs/highlevel/methods/messages/send-text.test.d.ts +0 -1
- package/cjs/highlevel/methods/messages/send-text.test.js +0 -140
- package/cjs/highlevel/methods/messages/send-text.test.js.map +0 -1
- package/cjs/highlevel/methods/users/get-users.test.d.ts +0 -1
- package/cjs/highlevel/methods/users/get-users.test.js +0 -33
- package/cjs/highlevel/methods/users/get-users.test.js.map +0 -1
- package/cjs/highlevel/methods/users/resolve-peer.test.d.ts +0 -1
- package/cjs/highlevel/methods/users/resolve-peer.test.js +0 -307
- package/cjs/highlevel/methods/users/resolve-peer.test.js.map +0 -1
- package/cjs/highlevel/types/bots/command-scope.d.ts +0 -63
- package/cjs/highlevel/types/bots/command-scope.js +0 -87
- package/cjs/highlevel/types/bots/command-scope.js.map +0 -1
- package/cjs/highlevel/types/bots/input/index.d.ts +0 -2
- package/cjs/highlevel/types/bots/input/index.js.map +0 -1
- package/cjs/highlevel/types/bots/input/input-inline-message.js +0 -179
- package/cjs/highlevel/types/bots/input/input-inline-message.js.map +0 -1
- package/cjs/highlevel/types/bots/input/input-inline-result.js +0 -490
- package/cjs/highlevel/types/bots/input/input-inline-result.js.map +0 -1
- package/cjs/highlevel/types/bots/keyboard-builder.js.map +0 -1
- package/cjs/highlevel/types/bots/keyboard-builder.test.d.ts +0 -1
- package/cjs/highlevel/types/bots/keyboard-builder.test.js +0 -162
- package/cjs/highlevel/types/bots/keyboard-builder.test.js.map +0 -1
- package/cjs/highlevel/types/bots/keyboards.d.ts +0 -239
- package/cjs/highlevel/types/bots/keyboards.js +0 -380
- package/cjs/highlevel/types/bots/keyboards.js.map +0 -1
- package/cjs/highlevel/types/bots/keyboards.test.d.ts +0 -1
- package/cjs/highlevel/types/bots/keyboards.test.js +0 -146
- package/cjs/highlevel/types/bots/keyboards.test.js.map +0 -1
- package/cjs/highlevel/types/media/input-media.js +0 -254
- package/cjs/highlevel/types/media/input-media.js.map +0 -1
- package/cjs/highlevel/types/misc/input-privacy-rule.d.ts +0 -63
- package/cjs/highlevel/types/misc/input-privacy-rule.js +0 -85
- package/cjs/highlevel/types/misc/input-privacy-rule.js.map +0 -1
- package/cjs/highlevel/types/peers/peers-index.test.d.ts +0 -1
- package/cjs/highlevel/types/peers/peers-index.test.js +0 -71
- package/cjs/highlevel/types/peers/peers-index.test.js.map +0 -1
- package/cjs/highlevel/types/peers/user.test.d.ts +0 -1
- package/cjs/highlevel/types/peers/user.test.js +0 -176
- package/cjs/highlevel/types/peers/user.test.js.map +0 -1
- package/cjs/highlevel/utils/file-type.test.d.ts +0 -1
- package/cjs/highlevel/utils/file-type.test.js +0 -64
- package/cjs/highlevel/utils/file-type.test.js.map +0 -1
- package/cjs/highlevel/utils/file-utils.test.d.ts +0 -1
- package/cjs/highlevel/utils/file-utils.test.js +0 -126
- package/cjs/highlevel/utils/file-utils.test.js.map +0 -1
- package/cjs/highlevel/utils/inline-utils.test.d.ts +0 -1
- package/cjs/highlevel/utils/inline-utils.test.js +0 -47
- package/cjs/highlevel/utils/inline-utils.test.js.map +0 -1
- package/cjs/highlevel/utils/inspectable.test.d.ts +0 -1
- package/cjs/highlevel/utils/inspectable.test.js +0 -97
- package/cjs/highlevel/utils/inspectable.test.js.map +0 -1
- package/cjs/highlevel/utils/memoize.test.d.ts +0 -1
- package/cjs/highlevel/utils/memoize.test.js +0 -60
- package/cjs/highlevel/utils/memoize.test.js.map +0 -1
- package/cjs/highlevel/utils/peer-utils.test.d.ts +0 -1
- package/cjs/highlevel/utils/peer-utils.test.js +0 -109
- package/cjs/highlevel/utils/peer-utils.test.js.map +0 -1
- package/cjs/highlevel/utils/platform/storage.d.ts +0 -1
- package/cjs/highlevel/utils/platform/storage.js +0 -10
- package/cjs/highlevel/utils/platform/storage.js.map +0 -1
- package/cjs/highlevel/utils/platform/storage.web.d.ts +0 -1
- package/cjs/highlevel/utils/platform/storage.web.js +0 -14
- package/cjs/highlevel/utils/platform/storage.web.js.map +0 -1
- package/cjs/highlevel/utils/query-batcher.test.d.ts +0 -1
- package/cjs/highlevel/utils/query-batcher.test.js +0 -502
- package/cjs/highlevel/utils/query-batcher.test.js.map +0 -1
- package/cjs/highlevel/utils/stream-utils.test.d.ts +0 -1
- package/cjs/highlevel/utils/stream-utils.test.js +0 -98
- package/cjs/highlevel/utils/stream-utils.test.js.map +0 -1
- package/cjs/highlevel/utils/string-session.test.d.ts +0 -1
- package/cjs/highlevel/utils/string-session.test.js +0 -198
- package/cjs/highlevel/utils/string-session.test.js.map +0 -1
- package/cjs/highlevel/utils/voice-utils.test.d.ts +0 -1
- package/cjs/highlevel/utils/voice-utils.test.js +0 -28
- package/cjs/highlevel/utils/voice-utils.test.js.map +0 -1
- package/cjs/highlevel/worker/platform/connect.d.ts +0 -2
- package/cjs/highlevel/worker/platform/connect.js +0 -19
- package/cjs/highlevel/worker/platform/connect.js.map +0 -1
- package/cjs/highlevel/worker/platform/connect.web.d.ts +0 -2
- package/cjs/highlevel/worker/platform/connect.web.js +0 -51
- package/cjs/highlevel/worker/platform/connect.web.js.map +0 -1
- package/cjs/highlevel/worker/platform/register.d.ts +0 -2
- package/cjs/highlevel/worker/platform/register.js +0 -20
- package/cjs/highlevel/worker/platform/register.js.map +0 -1
- package/cjs/highlevel/worker/platform/register.web.d.ts +0 -2
- package/cjs/highlevel/worker/platform/register.web.js +0 -64
- package/cjs/highlevel/worker/platform/register.web.js.map +0 -1
- package/cjs/network/auth-key.test.d.ts +0 -1
- package/cjs/network/auth-key.test.js +0 -111
- package/cjs/network/auth-key.test.js.map +0 -1
- package/cjs/network/config-manager.test.d.ts +0 -1
- package/cjs/network/config-manager.test.js +0 -174
- package/cjs/network/config-manager.test.js.map +0 -1
- package/cjs/network/persistent-connection.test.d.ts +0 -1
- package/cjs/network/persistent-connection.test.js +0 -157
- package/cjs/network/persistent-connection.test.js.map +0 -1
- package/cjs/network/transports/intermediate.test.d.ts +0 -1
- package/cjs/network/transports/intermediate.test.js +0 -84
- package/cjs/network/transports/intermediate.test.js.map +0 -1
- package/cjs/network/transports/obfuscated.test.d.ts +0 -1
- package/cjs/network/transports/obfuscated.test.js +0 -131
- package/cjs/network/transports/obfuscated.test.js.map +0 -1
- package/cjs/network/transports/tcp.d.ts +0 -32
- package/cjs/network/transports/tcp.js +0 -130
- package/cjs/network/transports/tcp.js.map +0 -1
- package/cjs/network/transports/tcp.test.d.ts +0 -1
- package/cjs/network/transports/tcp.test.js +0 -103
- package/cjs/network/transports/tcp.test.js.map +0 -1
- package/cjs/network/transports/websocket.d.ts +0 -46
- package/cjs/network/transports/websocket.js +0 -124
- package/cjs/network/transports/websocket.js.map +0 -1
- package/cjs/network/transports/websocket.test.d.ts +0 -1
- package/cjs/network/transports/websocket.test.js +0 -91
- package/cjs/network/transports/websocket.test.js.map +0 -1
- package/cjs/storage/providers/idb/driver.d.ts +0 -18
- package/cjs/storage/providers/idb/driver.js +0 -138
- package/cjs/storage/providers/idb/driver.js.map +0 -1
- package/cjs/storage/providers/idb/idb.test.d.ts +0 -1
- package/cjs/storage/providers/idb/idb.test.js +0 -29
- package/cjs/storage/providers/idb/idb.test.js.map +0 -1
- package/cjs/storage/providers/idb/index.d.ts +0 -22
- package/cjs/storage/providers/idb/index.js +0 -28
- package/cjs/storage/providers/idb/index.js.map +0 -1
- package/cjs/storage/providers/idb/repository/auth-keys.d.ts +0 -14
- package/cjs/storage/providers/idb/repository/auth-keys.js +0 -70
- package/cjs/storage/providers/idb/repository/auth-keys.js.map +0 -1
- package/cjs/storage/providers/idb/repository/kv.d.ts +0 -11
- package/cjs/storage/providers/idb/repository/kv.js +0 -34
- package/cjs/storage/providers/idb/repository/kv.js.map +0 -1
- package/cjs/storage/providers/idb/repository/peers.d.ts +0 -12
- package/cjs/storage/providers/idb/repository/peers.js +0 -38
- package/cjs/storage/providers/idb/repository/peers.js.map +0 -1
- package/cjs/storage/providers/idb/repository/ref-messages.d.ts +0 -12
- package/cjs/storage/providers/idb/repository/ref-messages.js +0 -57
- package/cjs/storage/providers/idb/repository/ref-messages.js.map +0 -1
- package/cjs/storage/providers/idb/utils.d.ts +0 -3
- package/cjs/storage/providers/idb/utils.js +0 -27
- package/cjs/storage/providers/idb/utils.js.map +0 -1
- package/cjs/storage/providers/memory/driver.js.map +0 -1
- package/cjs/storage/providers/memory/index.js.map +0 -1
- package/cjs/storage/providers/memory/memory.test.d.ts +0 -1
- package/cjs/storage/providers/memory/memory.test.js +0 -13
- package/cjs/storage/providers/memory/memory.test.js.map +0 -1
- package/cjs/storage/providers/memory/repository/auth-keys.js.map +0 -1
- package/cjs/storage/providers/memory/repository/kv.js.map +0 -1
- package/cjs/storage/providers/memory/repository/peers.js.map +0 -1
- package/cjs/storage/providers/memory/repository/ref-messages.js.map +0 -1
- package/cjs/storage/service/auth-keys.test.d.ts +0 -1
- package/cjs/storage/service/auth-keys.test.js +0 -22
- package/cjs/storage/service/auth-keys.test.js.map +0 -1
- package/cjs/storage/service/updates.test.d.ts +0 -1
- package/cjs/storage/service/updates.test.js +0 -60
- package/cjs/storage/service/updates.test.js.map +0 -1
- package/cjs/storage/service/utils.test-utils.d.ts +0 -2
- package/cjs/storage/service/utils.test-utils.js +0 -19
- package/cjs/storage/service/utils.test-utils.js.map +0 -1
- package/cjs/utils/async-lock.test.d.ts +0 -1
- package/cjs/utils/async-lock.test.js +0 -25
- package/cjs/utils/async-lock.test.js.map +0 -1
- package/cjs/utils/bigint-utils.test.d.ts +0 -1
- package/cjs/utils/bigint-utils.test.js +0 -150
- package/cjs/utils/bigint-utils.test.js.map +0 -1
- package/cjs/utils/buffer-utils.test.d.ts +0 -1
- package/cjs/utils/buffer-utils.test.js +0 -69
- package/cjs/utils/buffer-utils.test.js.map +0 -1
- package/cjs/utils/condition-variable.test.d.ts +0 -1
- package/cjs/utils/condition-variable.test.js +0 -27
- package/cjs/utils/condition-variable.test.js.map +0 -1
- package/cjs/utils/controllable-promise.test.d.ts +0 -1
- package/cjs/utils/controllable-promise.test.js +0 -17
- package/cjs/utils/controllable-promise.test.js.map +0 -1
- package/cjs/utils/crypto/factorization.test.d.ts +0 -1
- package/cjs/utils/crypto/factorization.test.js +0 -19
- package/cjs/utils/crypto/factorization.test.js.map +0 -1
- package/cjs/utils/crypto/keys.test.d.ts +0 -1
- package/cjs/utils/crypto/keys.test.js +0 -40
- package/cjs/utils/crypto/keys.test.js.map +0 -1
- package/cjs/utils/crypto/miller-rabin.test.d.ts +0 -1
- package/cjs/utils/crypto/miller-rabin.test.js +0 -60
- package/cjs/utils/crypto/miller-rabin.test.js.map +0 -1
- package/cjs/utils/crypto/mtproto.test.d.ts +0 -1
- package/cjs/utils/crypto/mtproto.test.js +0 -50
- package/cjs/utils/crypto/mtproto.test.js.map +0 -1
- package/cjs/utils/crypto/node.d.ts +0 -21
- package/cjs/utils/crypto/node.js +0 -74
- package/cjs/utils/crypto/node.js.map +0 -1
- package/cjs/utils/crypto/node.test.d.ts +0 -1
- package/cjs/utils/crypto/node.test.js +0 -14
- package/cjs/utils/crypto/node.test.js.map +0 -1
- package/cjs/utils/crypto/password.test.d.ts +0 -1
- package/cjs/utils/crypto/password.test.js +0 -95
- package/cjs/utils/crypto/password.test.js.map +0 -1
- package/cjs/utils/crypto/utils.test.d.ts +0 -1
- package/cjs/utils/crypto/utils.test.js +0 -49
- package/cjs/utils/crypto/utils.test.js.map +0 -1
- package/cjs/utils/crypto/wasm.d.ts +0 -22
- package/cjs/utils/crypto/wasm.js +0 -41
- package/cjs/utils/crypto/wasm.js.map +0 -1
- package/cjs/utils/crypto/web.d.ts +0 -11
- package/cjs/utils/crypto/web.js +0 -40
- package/cjs/utils/crypto/web.js.map +0 -1
- package/cjs/utils/crypto/web.test.d.ts +0 -1
- package/cjs/utils/crypto/web.test.js +0 -17
- package/cjs/utils/crypto/web.test.js.map +0 -1
- package/cjs/utils/deque.test.d.ts +0 -1
- package/cjs/utils/deque.test.js +0 -128
- package/cjs/utils/deque.test.js.map +0 -1
- package/cjs/utils/function-utils.test.d.ts +0 -1
- package/cjs/utils/function-utils.test.js +0 -23
- package/cjs/utils/function-utils.test.js.map +0 -1
- package/cjs/utils/linked-list.test.d.ts +0 -1
- package/cjs/utils/linked-list.test.js +0 -36
- package/cjs/utils/linked-list.test.js.map +0 -1
- package/cjs/utils/links/bots.test.d.ts +0 -1
- package/cjs/utils/links/bots.test.js +0 -152
- package/cjs/utils/links/bots.test.js.map +0 -1
- package/cjs/utils/links/chat.test.d.ts +0 -1
- package/cjs/utils/links/chat.test.js +0 -84
- package/cjs/utils/links/chat.test.js.map +0 -1
- package/cjs/utils/links/misc.test.d.ts +0 -1
- package/cjs/utils/links/misc.test.js +0 -153
- package/cjs/utils/links/misc.test.js.map +0 -1
- package/cjs/utils/links/proxy.test.d.ts +0 -1
- package/cjs/utils/links/proxy.test.js +0 -74
- package/cjs/utils/links/proxy.test.js.map +0 -1
- package/cjs/utils/links/user.test.d.ts +0 -1
- package/cjs/utils/links/user.test.js +0 -63
- package/cjs/utils/links/user.test.js.map +0 -1
- package/cjs/utils/logger.test.d.ts +0 -1
- package/cjs/utils/logger.test.js +0 -139
- package/cjs/utils/logger.test.js.map +0 -1
- package/cjs/utils/long-utils.test.d.ts +0 -1
- package/cjs/utils/long-utils.test.js +0 -158
- package/cjs/utils/long-utils.test.js.map +0 -1
- package/cjs/utils/lru-map.test.d.ts +0 -1
- package/cjs/utils/lru-map.test.js +0 -96
- package/cjs/utils/lru-map.test.js.map +0 -1
- package/cjs/utils/lru-set.test.d.ts +0 -1
- package/cjs/utils/lru-set.test.js +0 -77
- package/cjs/utils/lru-set.test.js.map +0 -1
- package/cjs/utils/peer-utils.test.d.ts +0 -1
- package/cjs/utils/peer-utils.test.js +0 -110
- package/cjs/utils/peer-utils.test.js.map +0 -1
- package/cjs/utils/platform/crypto.d.ts +0 -1
- package/cjs/utils/platform/crypto.js +0 -8
- package/cjs/utils/platform/crypto.js.map +0 -1
- package/cjs/utils/platform/crypto.web.d.ts +0 -1
- package/cjs/utils/platform/crypto.web.js +0 -14
- package/cjs/utils/platform/crypto.web.js.map +0 -1
- package/cjs/utils/platform/error-reporting.js.map +0 -1
- package/cjs/utils/platform/exit-hook.d.ts +0 -1
- package/cjs/utils/platform/exit-hook.js +0 -45
- package/cjs/utils/platform/exit-hook.js.map +0 -1
- package/cjs/utils/platform/exit-hook.web.d.ts +0 -1
- package/cjs/utils/platform/exit-hook.web.js +0 -21
- package/cjs/utils/platform/exit-hook.web.js.map +0 -1
- package/cjs/utils/platform/logging.d.ts +0 -1
- package/cjs/utils/platform/logging.js +0 -34
- package/cjs/utils/platform/logging.js.map +0 -1
- package/cjs/utils/platform/logging.web.d.ts +0 -1
- package/cjs/utils/platform/logging.web.js +0 -35
- package/cjs/utils/platform/logging.web.js.map +0 -1
- package/cjs/utils/platform/transport.d.ts +0 -1
- package/cjs/utils/platform/transport.js +0 -8
- package/cjs/utils/platform/transport.js.map +0 -1
- package/cjs/utils/platform/transport.web.d.ts +0 -1
- package/cjs/utils/platform/transport.web.js +0 -15
- package/cjs/utils/platform/transport.web.js.map +0 -1
- package/cjs/utils/sorted-array.test.d.ts +0 -1
- package/cjs/utils/sorted-array.test.js +0 -66
- package/cjs/utils/sorted-array.test.js.map +0 -1
- package/cjs/utils/tl-json.test.d.ts +0 -1
- package/cjs/utils/tl-json.test.js +0 -83
- package/cjs/utils/tl-json.test.js.map +0 -1
- package/cjs/utils/type-assertions.test.d.ts +0 -1
- package/cjs/utils/type-assertions.test.js +0 -67
- package/cjs/utils/type-assertions.test.js.map +0 -1
- package/esm/highlevel/base.test.d.ts +0 -1
- package/esm/highlevel/base.test.js +0 -12
- package/esm/highlevel/base.test.js.map +0 -1
- package/esm/highlevel/methods/files/_platform.d.ts +0 -1
- package/esm/highlevel/methods/files/_platform.js +0 -26
- package/esm/highlevel/methods/files/_platform.js.map +0 -1
- package/esm/highlevel/methods/files/_platform.web.d.ts +0 -1
- package/esm/highlevel/methods/files/_platform.web.js +0 -19
- package/esm/highlevel/methods/files/_platform.web.js.map +0 -1
- package/esm/highlevel/methods/files/download-file.web.d.ts +0 -1
- package/esm/highlevel/methods/files/download-file.web.js +0 -5
- package/esm/highlevel/methods/files/download-file.web.js.map +0 -1
- package/esm/highlevel/methods/messages/send-text.test.d.ts +0 -1
- package/esm/highlevel/methods/messages/send-text.test.js +0 -135
- package/esm/highlevel/methods/messages/send-text.test.js.map +0 -1
- package/esm/highlevel/methods/users/get-users.test.d.ts +0 -1
- package/esm/highlevel/methods/users/get-users.test.js +0 -28
- package/esm/highlevel/methods/users/get-users.test.js.map +0 -1
- package/esm/highlevel/methods/users/resolve-peer.test.d.ts +0 -1
- package/esm/highlevel/methods/users/resolve-peer.test.js +0 -302
- package/esm/highlevel/methods/users/resolve-peer.test.js.map +0 -1
- package/esm/highlevel/types/bots/command-scope.d.ts +0 -63
- package/esm/highlevel/types/bots/command-scope.js +0 -84
- package/esm/highlevel/types/bots/command-scope.js.map +0 -1
- package/esm/highlevel/types/bots/input/index.d.ts +0 -2
- package/esm/highlevel/types/bots/input/index.js +0 -3
- package/esm/highlevel/types/bots/input/index.js.map +0 -1
- package/esm/highlevel/types/bots/input/input-inline-message.js +0 -176
- package/esm/highlevel/types/bots/input/input-inline-message.js.map +0 -1
- package/esm/highlevel/types/bots/input/input-inline-result.js +0 -487
- package/esm/highlevel/types/bots/input/input-inline-result.js.map +0 -1
- package/esm/highlevel/types/bots/keyboard-builder.js.map +0 -1
- package/esm/highlevel/types/bots/keyboard-builder.test.d.ts +0 -1
- package/esm/highlevel/types/bots/keyboard-builder.test.js +0 -160
- package/esm/highlevel/types/bots/keyboard-builder.test.js.map +0 -1
- package/esm/highlevel/types/bots/keyboards.d.ts +0 -239
- package/esm/highlevel/types/bots/keyboards.js +0 -377
- package/esm/highlevel/types/bots/keyboards.js.map +0 -1
- package/esm/highlevel/types/bots/keyboards.test.d.ts +0 -1
- package/esm/highlevel/types/bots/keyboards.test.js +0 -144
- package/esm/highlevel/types/bots/keyboards.test.js.map +0 -1
- package/esm/highlevel/types/media/input-media.js +0 -251
- package/esm/highlevel/types/media/input-media.js.map +0 -1
- package/esm/highlevel/types/misc/input-privacy-rule.d.ts +0 -63
- package/esm/highlevel/types/misc/input-privacy-rule.js +0 -82
- package/esm/highlevel/types/misc/input-privacy-rule.js.map +0 -1
- package/esm/highlevel/types/peers/peers-index.test.d.ts +0 -1
- package/esm/highlevel/types/peers/peers-index.test.js +0 -69
- package/esm/highlevel/types/peers/peers-index.test.js.map +0 -1
- package/esm/highlevel/types/peers/user.test.d.ts +0 -1
- package/esm/highlevel/types/peers/user.test.js +0 -171
- package/esm/highlevel/types/peers/user.test.js.map +0 -1
- package/esm/highlevel/utils/file-type.test.d.ts +0 -1
- package/esm/highlevel/utils/file-type.test.js +0 -62
- package/esm/highlevel/utils/file-type.test.js.map +0 -1
- package/esm/highlevel/utils/file-utils.test.d.ts +0 -1
- package/esm/highlevel/utils/file-utils.test.js +0 -124
- package/esm/highlevel/utils/file-utils.test.js.map +0 -1
- package/esm/highlevel/utils/inline-utils.test.d.ts +0 -1
- package/esm/highlevel/utils/inline-utils.test.js +0 -42
- package/esm/highlevel/utils/inline-utils.test.js.map +0 -1
- package/esm/highlevel/utils/inspectable.test.d.ts +0 -1
- package/esm/highlevel/utils/inspectable.test.js +0 -95
- package/esm/highlevel/utils/inspectable.test.js.map +0 -1
- package/esm/highlevel/utils/memoize.test.d.ts +0 -1
- package/esm/highlevel/utils/memoize.test.js +0 -58
- package/esm/highlevel/utils/memoize.test.js.map +0 -1
- package/esm/highlevel/utils/peer-utils.test.d.ts +0 -1
- package/esm/highlevel/utils/peer-utils.test.js +0 -107
- package/esm/highlevel/utils/peer-utils.test.js.map +0 -1
- package/esm/highlevel/utils/platform/storage.d.ts +0 -1
- package/esm/highlevel/utils/platform/storage.js +0 -6
- package/esm/highlevel/utils/platform/storage.js.map +0 -1
- package/esm/highlevel/utils/platform/storage.web.d.ts +0 -1
- package/esm/highlevel/utils/platform/storage.web.js +0 -10
- package/esm/highlevel/utils/platform/storage.web.js.map +0 -1
- package/esm/highlevel/utils/query-batcher.test.d.ts +0 -1
- package/esm/highlevel/utils/query-batcher.test.js +0 -500
- package/esm/highlevel/utils/query-batcher.test.js.map +0 -1
- package/esm/highlevel/utils/stream-utils.test.d.ts +0 -1
- package/esm/highlevel/utils/stream-utils.test.js +0 -96
- package/esm/highlevel/utils/stream-utils.test.js.map +0 -1
- package/esm/highlevel/utils/string-session.test.d.ts +0 -1
- package/esm/highlevel/utils/string-session.test.js +0 -196
- package/esm/highlevel/utils/string-session.test.js.map +0 -1
- package/esm/highlevel/utils/voice-utils.test.d.ts +0 -1
- package/esm/highlevel/utils/voice-utils.test.js +0 -26
- package/esm/highlevel/utils/voice-utils.test.js.map +0 -1
- package/esm/highlevel/worker/platform/connect.d.ts +0 -2
- package/esm/highlevel/worker/platform/connect.js +0 -15
- package/esm/highlevel/worker/platform/connect.js.map +0 -1
- package/esm/highlevel/worker/platform/connect.web.d.ts +0 -2
- package/esm/highlevel/worker/platform/connect.web.js +0 -47
- package/esm/highlevel/worker/platform/connect.web.js.map +0 -1
- package/esm/highlevel/worker/platform/register.d.ts +0 -2
- package/esm/highlevel/worker/platform/register.js +0 -16
- package/esm/highlevel/worker/platform/register.js.map +0 -1
- package/esm/highlevel/worker/platform/register.web.d.ts +0 -2
- package/esm/highlevel/worker/platform/register.web.js +0 -60
- package/esm/highlevel/worker/platform/register.web.js.map +0 -1
- package/esm/network/auth-key.test.d.ts +0 -1
- package/esm/network/auth-key.test.js +0 -106
- package/esm/network/auth-key.test.js.map +0 -1
- package/esm/network/config-manager.test.d.ts +0 -1
- package/esm/network/config-manager.test.js +0 -172
- package/esm/network/config-manager.test.js.map +0 -1
- package/esm/network/persistent-connection.test.d.ts +0 -1
- package/esm/network/persistent-connection.test.js +0 -155
- package/esm/network/persistent-connection.test.js.map +0 -1
- package/esm/network/transports/intermediate.test.d.ts +0 -1
- package/esm/network/transports/intermediate.test.js +0 -82
- package/esm/network/transports/intermediate.test.js.map +0 -1
- package/esm/network/transports/obfuscated.test.d.ts +0 -1
- package/esm/network/transports/obfuscated.test.js +0 -129
- package/esm/network/transports/obfuscated.test.js.map +0 -1
- package/esm/network/transports/tcp.d.ts +0 -32
- package/esm/network/transports/tcp.js +0 -122
- package/esm/network/transports/tcp.js.map +0 -1
- package/esm/network/transports/tcp.test.d.ts +0 -1
- package/esm/network/transports/tcp.test.js +0 -101
- package/esm/network/transports/tcp.test.js.map +0 -1
- package/esm/network/transports/websocket.d.ts +0 -46
- package/esm/network/transports/websocket.js +0 -116
- package/esm/network/transports/websocket.js.map +0 -1
- package/esm/network/transports/websocket.test.d.ts +0 -1
- package/esm/network/transports/websocket.test.js +0 -89
- package/esm/network/transports/websocket.test.js.map +0 -1
- package/esm/storage/providers/idb/driver.d.ts +0 -18
- package/esm/storage/providers/idb/driver.js +0 -134
- package/esm/storage/providers/idb/driver.js.map +0 -1
- package/esm/storage/providers/idb/idb.test.d.ts +0 -1
- package/esm/storage/providers/idb/idb.test.js +0 -27
- package/esm/storage/providers/idb/idb.test.js.map +0 -1
- package/esm/storage/providers/idb/index.d.ts +0 -22
- package/esm/storage/providers/idb/index.js +0 -23
- package/esm/storage/providers/idb/index.js.map +0 -1
- package/esm/storage/providers/idb/repository/auth-keys.d.ts +0 -14
- package/esm/storage/providers/idb/repository/auth-keys.js +0 -66
- package/esm/storage/providers/idb/repository/auth-keys.js.map +0 -1
- package/esm/storage/providers/idb/repository/kv.d.ts +0 -11
- package/esm/storage/providers/idb/repository/kv.js +0 -30
- package/esm/storage/providers/idb/repository/kv.js.map +0 -1
- package/esm/storage/providers/idb/repository/peers.d.ts +0 -12
- package/esm/storage/providers/idb/repository/peers.js +0 -34
- package/esm/storage/providers/idb/repository/peers.js.map +0 -1
- package/esm/storage/providers/idb/repository/ref-messages.d.ts +0 -12
- package/esm/storage/providers/idb/repository/ref-messages.js +0 -53
- package/esm/storage/providers/idb/repository/ref-messages.js.map +0 -1
- package/esm/storage/providers/idb/utils.d.ts +0 -3
- package/esm/storage/providers/idb/utils.js +0 -21
- package/esm/storage/providers/idb/utils.js.map +0 -1
- package/esm/storage/providers/memory/driver.js.map +0 -1
- package/esm/storage/providers/memory/index.js.map +0 -1
- package/esm/storage/providers/memory/memory.test.d.ts +0 -1
- package/esm/storage/providers/memory/memory.test.js +0 -11
- package/esm/storage/providers/memory/memory.test.js.map +0 -1
- package/esm/storage/providers/memory/repository/auth-keys.js.map +0 -1
- package/esm/storage/providers/memory/repository/kv.js.map +0 -1
- package/esm/storage/providers/memory/repository/peers.js.map +0 -1
- package/esm/storage/providers/memory/repository/ref-messages.js.map +0 -1
- package/esm/storage/service/auth-keys.test.d.ts +0 -1
- package/esm/storage/service/auth-keys.test.js +0 -20
- package/esm/storage/service/auth-keys.test.js.map +0 -1
- package/esm/storage/service/updates.test.d.ts +0 -1
- package/esm/storage/service/updates.test.js +0 -58
- package/esm/storage/service/updates.test.js.map +0 -1
- package/esm/storage/service/utils.test-utils.d.ts +0 -2
- package/esm/storage/service/utils.test-utils.js +0 -15
- package/esm/storage/service/utils.test-utils.js.map +0 -1
- package/esm/utils/async-lock.test.d.ts +0 -1
- package/esm/utils/async-lock.test.js +0 -23
- package/esm/utils/async-lock.test.js.map +0 -1
- package/esm/utils/bigint-utils.test.d.ts +0 -1
- package/esm/utils/bigint-utils.test.js +0 -148
- package/esm/utils/bigint-utils.test.js.map +0 -1
- package/esm/utils/buffer-utils.test.d.ts +0 -1
- package/esm/utils/buffer-utils.test.js +0 -67
- package/esm/utils/buffer-utils.test.js.map +0 -1
- package/esm/utils/condition-variable.test.d.ts +0 -1
- package/esm/utils/condition-variable.test.js +0 -25
- package/esm/utils/condition-variable.test.js.map +0 -1
- package/esm/utils/controllable-promise.test.d.ts +0 -1
- package/esm/utils/controllable-promise.test.js +0 -15
- package/esm/utils/controllable-promise.test.js.map +0 -1
- package/esm/utils/crypto/factorization.test.d.ts +0 -1
- package/esm/utils/crypto/factorization.test.js +0 -17
- package/esm/utils/crypto/factorization.test.js.map +0 -1
- package/esm/utils/crypto/keys.test.d.ts +0 -1
- package/esm/utils/crypto/keys.test.js +0 -38
- package/esm/utils/crypto/keys.test.js.map +0 -1
- package/esm/utils/crypto/miller-rabin.test.d.ts +0 -1
- package/esm/utils/crypto/miller-rabin.test.js +0 -58
- package/esm/utils/crypto/miller-rabin.test.js.map +0 -1
- package/esm/utils/crypto/mtproto.test.d.ts +0 -1
- package/esm/utils/crypto/mtproto.test.js +0 -48
- package/esm/utils/crypto/mtproto.test.js.map +0 -1
- package/esm/utils/crypto/node.d.ts +0 -21
- package/esm/utils/crypto/node.js +0 -69
- package/esm/utils/crypto/node.js.map +0 -1
- package/esm/utils/crypto/node.test.d.ts +0 -1
- package/esm/utils/crypto/node.test.js +0 -12
- package/esm/utils/crypto/node.test.js.map +0 -1
- package/esm/utils/crypto/password.test.d.ts +0 -1
- package/esm/utils/crypto/password.test.js +0 -90
- package/esm/utils/crypto/password.test.js.map +0 -1
- package/esm/utils/crypto/utils.test.d.ts +0 -1
- package/esm/utils/crypto/utils.test.js +0 -47
- package/esm/utils/crypto/utils.test.js.map +0 -1
- package/esm/utils/crypto/wasm.d.ts +0 -22
- package/esm/utils/crypto/wasm.js +0 -37
- package/esm/utils/crypto/wasm.js.map +0 -1
- package/esm/utils/crypto/web.d.ts +0 -11
- package/esm/utils/crypto/web.js +0 -36
- package/esm/utils/crypto/web.js.map +0 -1
- package/esm/utils/crypto/web.test.d.ts +0 -1
- package/esm/utils/crypto/web.test.js +0 -15
- package/esm/utils/crypto/web.test.js.map +0 -1
- package/esm/utils/deque.test.d.ts +0 -1
- package/esm/utils/deque.test.js +0 -126
- package/esm/utils/deque.test.js.map +0 -1
- package/esm/utils/function-utils.test.d.ts +0 -1
- package/esm/utils/function-utils.test.js +0 -21
- package/esm/utils/function-utils.test.js.map +0 -1
- package/esm/utils/linked-list.test.d.ts +0 -1
- package/esm/utils/linked-list.test.js +0 -34
- package/esm/utils/linked-list.test.js.map +0 -1
- package/esm/utils/links/bots.test.d.ts +0 -1
- package/esm/utils/links/bots.test.js +0 -150
- package/esm/utils/links/bots.test.js.map +0 -1
- package/esm/utils/links/chat.test.d.ts +0 -1
- package/esm/utils/links/chat.test.js +0 -82
- package/esm/utils/links/chat.test.js.map +0 -1
- package/esm/utils/links/misc.test.d.ts +0 -1
- package/esm/utils/links/misc.test.js +0 -151
- package/esm/utils/links/misc.test.js.map +0 -1
- package/esm/utils/links/proxy.test.d.ts +0 -1
- package/esm/utils/links/proxy.test.js +0 -72
- package/esm/utils/links/proxy.test.js.map +0 -1
- package/esm/utils/links/user.test.d.ts +0 -1
- package/esm/utils/links/user.test.js +0 -61
- package/esm/utils/links/user.test.js.map +0 -1
- package/esm/utils/logger.test.d.ts +0 -1
- package/esm/utils/logger.test.js +0 -134
- package/esm/utils/logger.test.js.map +0 -1
- package/esm/utils/long-utils.test.d.ts +0 -1
- package/esm/utils/long-utils.test.js +0 -153
- package/esm/utils/long-utils.test.js.map +0 -1
- package/esm/utils/lru-map.test.d.ts +0 -1
- package/esm/utils/lru-map.test.js +0 -94
- package/esm/utils/lru-map.test.js.map +0 -1
- package/esm/utils/lru-set.test.d.ts +0 -1
- package/esm/utils/lru-set.test.js +0 -72
- package/esm/utils/lru-set.test.js.map +0 -1
- package/esm/utils/peer-utils.test.d.ts +0 -1
- package/esm/utils/peer-utils.test.js +0 -105
- package/esm/utils/peer-utils.test.js.map +0 -1
- package/esm/utils/platform/crypto.d.ts +0 -1
- package/esm/utils/platform/crypto.js +0 -4
- package/esm/utils/platform/crypto.js.map +0 -1
- package/esm/utils/platform/crypto.web.d.ts +0 -1
- package/esm/utils/platform/crypto.web.js +0 -10
- package/esm/utils/platform/crypto.web.js.map +0 -1
- package/esm/utils/platform/error-reporting.js.map +0 -1
- package/esm/utils/platform/exit-hook.d.ts +0 -1
- package/esm/utils/platform/exit-hook.js +0 -41
- package/esm/utils/platform/exit-hook.js.map +0 -1
- package/esm/utils/platform/exit-hook.web.d.ts +0 -1
- package/esm/utils/platform/exit-hook.web.js +0 -17
- package/esm/utils/platform/exit-hook.web.js.map +0 -1
- package/esm/utils/platform/logging.d.ts +0 -1
- package/esm/utils/platform/logging.js +0 -31
- package/esm/utils/platform/logging.js.map +0 -1
- package/esm/utils/platform/logging.web.d.ts +0 -1
- package/esm/utils/platform/logging.web.js +0 -31
- package/esm/utils/platform/logging.web.js.map +0 -1
- package/esm/utils/platform/transport.d.ts +0 -1
- package/esm/utils/platform/transport.js +0 -4
- package/esm/utils/platform/transport.js.map +0 -1
- package/esm/utils/platform/transport.web.d.ts +0 -1
- package/esm/utils/platform/transport.web.js +0 -12
- package/esm/utils/platform/transport.web.js.map +0 -1
- package/esm/utils/sorted-array.test.d.ts +0 -1
- package/esm/utils/sorted-array.test.js +0 -64
- package/esm/utils/sorted-array.test.js.map +0 -1
- package/esm/utils/tl-json.test.d.ts +0 -1
- package/esm/utils/tl-json.test.js +0 -81
- package/esm/utils/tl-json.test.js.map +0 -1
- package/esm/utils/type-assertions.test.d.ts +0 -1
- package/esm/utils/type-assertions.test.js +0 -65
- package/esm/utils/type-assertions.test.js.map +0 -1
- /package/cjs/highlevel/{base.test.d.ts → methods/files/download-node-stream.d.ts} +0 -0
- /package/cjs/storage/{providers/memory → memory}/driver.js +0 -0
- /package/cjs/storage/{providers/memory → memory}/index.js +0 -0
- /package/cjs/storage/{providers/memory → memory}/repository/auth-keys.js +0 -0
- /package/cjs/storage/{providers/memory → memory}/repository/kv.js +0 -0
- /package/cjs/storage/{providers/memory → memory}/repository/peers.js +0 -0
- /package/cjs/storage/{providers/memory → memory}/repository/ref-messages.js +0 -0
- /package/cjs/utils/{platform/error-reporting.js → error-reporting.js} +0 -0
- /package/{cjs/highlevel/methods/files/_platform.d.ts → esm/highlevel/methods/files/download-node-stream.d.ts} +0 -0
- /package/esm/storage/{providers/memory → memory}/driver.js +0 -0
- /package/esm/storage/{providers/memory → memory}/index.js +0 -0
- /package/esm/storage/{providers/memory → memory}/repository/auth-keys.js +0 -0
- /package/esm/storage/{providers/memory → memory}/repository/kv.js +0 -0
- /package/esm/storage/{providers/memory → memory}/repository/peers.js +0 -0
- /package/esm/storage/{providers/memory → memory}/repository/ref-messages.js +0 -0
- /package/esm/utils/{platform/error-reporting.js → error-reporting.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-connection.js","sourceRoot":"","sources":["../../../src/network/session-connection.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n// will be reworked in MTQ-32\nimport Long from 'long'\n\nimport { mtp, tl } from '@mtcute/tl'\nimport { TlBinaryReader, TlBinaryWriter, TlReaderMap, TlSerializationCounter, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { MtArgumentError, MtcuteError, MtTimeoutError } from '../types/index.js'\nimport { createAesIgeForMessageOld } from '../utils/crypto/mtproto.js'\nimport {\n concatBuffers,\n ControllablePromise,\n createControllablePromise,\n EarlyTimer,\n ICryptoProvider,\n longFromBuffer,\n randomLong,\n removeFromLongArray,\n} from '../utils/index.js'\nimport { reportUnknownError } from '../utils/platform/error-reporting.js'\nimport { doAuthorization } from './authorization.js'\nimport { MtprotoSession, PendingMessage, PendingRpc } from './mtproto-session.js'\nimport { PersistentConnection, PersistentConnectionParams } from './persistent-connection.js'\nimport { ServerSaltManager } from './server-salt.js'\nimport { TransportError } from './transports/abstract.js'\n\nexport interface SessionConnectionParams extends PersistentConnectionParams {\n initConnection: tl.RawInitConnectionRequest\n inactivityTimeout?: number\n niceStacks?: boolean\n enableErrorReporting: boolean\n layer: number\n disableUpdates?: boolean\n withUpdates?: boolean\n isMainConnection: boolean\n isMainDcConnection: boolean\n usePfs?: boolean\n\n salts: ServerSaltManager\n\n readerMap: TlReaderMap\n writerMap: TlWriterMap\n}\n\nconst TEMP_AUTH_KEY_EXPIRY = 86400 // 24 hours\nconst PING_INTERVAL = 60000 // 1 minute\nconst GET_STATE_INTERVAL = 1500 // 1.5 seconds\n\n// destroy_auth_key#d1435160 = DestroyAuthKeyRes;\n// const DESTROY_AUTH_KEY = Buffer.from('605134d1', 'hex')\n// gzip_packed#3072cfa1 packed_data:string = Object;\nconst GZIP_PACKED_ID = 0x3072cfa1\n// msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;\nconst MSG_CONTAINER_ID = 0x73f1f8dc\n// rpc_result#f35c6d01 req_msg_id:long result:Object = RpcResult;\nconst RPC_RESULT_ID = 0xf35c6d01\n// invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;\nconst INVOKE_AFTER_MSG_ID = 0xcb9f372d\nconst INVOKE_AFTER_MSG_SIZE = 12 // 8 (invokeAfterMsg) + 4 (msg_id)\n\nfunction makeNiceStack(error: tl.RpcError, stack: string, method?: string) {\n error.stack = `RpcError (${error.code} ${error.text}): ${error.message}\\n at ${method}\\n${stack\n .split('\\n')\n .slice(2)\n .join('\\n')}`\n}\n\n/**\n * A connection to a single DC.\n */\nexport class SessionConnection extends PersistentConnection {\n readonly params!: SessionConnectionParams\n\n private _flushTimer = new EarlyTimer()\n private _queuedDestroySession: Long[] = []\n\n // waitForMessage\n private _pendingWaitForUnencrypted: [ControllablePromise<Uint8Array>, NodeJS.Timeout][] = []\n\n private _usePfs = this.params.usePfs ?? false\n private _isPfsBindingPending = false\n private _isPfsBindingPendingInBackground = false\n private _pfsUpdateTimeout?: NodeJS.Timeout\n\n private _inactivityPendingFlush = false\n\n private _readerMap: TlReaderMap\n private _writerMap: TlWriterMap\n private _crypto: ICryptoProvider\n private _salts: ServerSaltManager\n\n constructor(\n params: SessionConnectionParams,\n readonly _session: MtprotoSession,\n ) {\n super(params, _session.log.create('conn'))\n this._flushTimer.onTimeout(this._flush.bind(this))\n\n this._readerMap = params.readerMap\n this._writerMap = params.writerMap\n this._crypto = params.crypto\n this._salts = params.salts\n this._handleRawMessage = this._handleRawMessage.bind(this)\n }\n\n getAuthKey(temp = false): Uint8Array | null {\n const key = temp ? this._session._authKeyTemp : this._session._authKey\n\n if (!key.ready) return null\n\n return key.key\n }\n\n setUsePfs(usePfs: boolean): void {\n if (this._usePfs === usePfs) return\n\n this.log.debug('use pfs changed to %s', usePfs)\n this._usePfs = usePfs\n\n if (!usePfs) {\n this._isPfsBindingPending = false\n this._isPfsBindingPendingInBackground = false\n this._session._authKeyTemp.reset()\n clearTimeout(this._pfsUpdateTimeout)\n }\n\n this._resetSession()\n }\n\n onTransportClose(): void {\n super.onTransportClose()\n\n Object.values(this._pendingWaitForUnencrypted).forEach(([prom, timeout]) => {\n prom.reject(new MtcuteError('Connection closed'))\n clearTimeout(timeout)\n })\n\n this.emit('disconnect')\n\n this.reset()\n }\n\n destroy(): void {\n super.destroy()\n this.reset(true)\n }\n\n reset(forever = false): void {\n this._session.initConnectionCalled = false\n this._flushTimer.reset()\n this._salts.isFetching = false\n\n if (forever) {\n this.removeAllListeners()\n }\n }\n\n onConnected(): void {\n // check if we have all the needed keys\n if (!this._session._authKey.ready) {\n if (!this.params.isMainConnection) {\n this.log.info('no auth key, waiting for main connection')\n\n // once it is done, we will be notified\n return\n }\n\n this.log.info('no perm auth key, authorizing...')\n this._authorize()\n\n // if we use pfs, we *could* also start temp key exchange here\n // but telegram restricts us to only have one auth session per connection,\n // and having a separate connection for pfs is not worth it\n return\n }\n\n if (this._usePfs && !this._session._authKeyTemp.ready) {\n this.log.info('no temp auth key but using pfs, authorizing')\n this._authorizePfs()\n\n return\n }\n\n this.log.info('auth keys are already available')\n this.onConnectionUsable()\n }\n\n protected onError(error: Error): void {\n // https://core.telegram.org/mtproto/mtproto-_transports#_transport-errors\n if (error instanceof TransportError) {\n if (error.code === 404) {\n // if we are using pfs, this could be due to the server\n // forgetting our temp key (which is kinda weird but expected)\n\n if (this._usePfs) {\n if (!this._isPfsBindingPending && this._session._authKeyTemp.ready) {\n this.log.info('transport error 404, reauthorizing pfs')\n\n // this is important! we must reset temp auth key before\n // we proceed with new temp key derivation.\n // otherwise, we can end up in an infinite loop in case it\n // was actually perm_key that got 404-ed\n //\n // if temp key binding is already in process in background,\n // _authorizePfs will mark it as foreground to prevent new\n // queries from being sent (to avoid even more 404s)\n this._session._authKeyTemp.reset()\n this._authorizePfs()\n this._onAllFailed('temp key expired, binding started')\n\n return\n } else if (this._isPfsBindingPending) {\n this.log.info('transport error 404, pfs binding in progress')\n\n this._onAllFailed('temp key expired, binding pending')\n\n return\n }\n\n // otherwise, 404 must be referencing the perm_key\n }\n\n // there happened a little trolling\n this.log.info('transport error 404, reauthorizing')\n this._session.resetAuthKey()\n this._resetSession()\n this.emit('key-change', null)\n\n return\n }\n\n this.log.error('transport error %d', error.code)\n // all pending queries must be resent\n this._onAllFailed(`transport error ${error.code}`)\n\n if (error.code === 429) {\n this._session.onTransportFlood(this.emit.bind(this, 'flood-done'))\n\n return\n }\n }\n\n this.emit('error', error)\n }\n\n protected onConnectionUsable() {\n super.onConnectionUsable()\n\n if (this.params.withUpdates) {\n // we must send some user-related rpc to the server to make sure that\n // it will send us updates\n this.sendRpc({ _: 'updates.getState' }).catch((err: any) => {\n if (this._destroyed) return // silently fail\n this.log.warn('failed to send updates.getState: %s', err.text || err.message)\n })\n }\n\n // just in case\n this._flushTimer.emitBeforeNext(1000)\n }\n\n _authorize(): void {\n if (this._session.authorizationPending) {\n this.log.info('_authorize(): authorization already in progress')\n\n return\n }\n\n if (!this.params.isMainConnection) {\n // we don't authorize on non-main connections\n this.log.debug('_authorize(): non-main connection, requesting...')\n this.emit('request-auth')\n\n return\n }\n\n this._session.authorizationPending = true\n this.emit('auth-begin')\n\n doAuthorization(this, this._crypto)\n .then(([authKey, serverSalt, timeOffset]) => {\n this._session._authKey.setup(authKey)\n this._salts.currentSalt = serverSalt\n this._session._timeOffset = timeOffset\n\n this._session.authorizationPending = false\n\n this.emit('key-change', authKey)\n\n if (this._usePfs) {\n return this._authorizePfs()\n }\n this.onConnectionUsable()\n })\n .catch((err: Error) => {\n this._session.authorizationPending = false\n this.log.error('Authorization error: %s', err.message)\n this.onError(err)\n this.reconnect()\n })\n }\n\n private _authorizePfs(background = false): void {\n if (this._isPfsBindingPending) return\n\n if (this._pfsUpdateTimeout) {\n clearTimeout(this._pfsUpdateTimeout)\n this._pfsUpdateTimeout = undefined\n }\n\n if (this._isPfsBindingPendingInBackground) {\n // e.g. temp key has expired while we were binding a key in the background\n // in this case, we shouldn't start pfs binding again, and instead wait for\n // current operation to complete\n this._isPfsBindingPendingInBackground = false\n this._isPfsBindingPending = true\n\n return\n }\n\n if (background) {\n this._isPfsBindingPendingInBackground = true\n } else {\n this._isPfsBindingPending = true\n }\n\n doAuthorization(this, this._crypto, TEMP_AUTH_KEY_EXPIRY)\n .then(async ([tempAuthKey, tempServerSalt]) => {\n if (!this._usePfs) {\n this.log.info('pfs has been disabled while generating temp key')\n\n return\n }\n\n const tempKey = this._session._authKeyTempSecondary\n tempKey.setup(tempAuthKey)\n\n const msgId = this._session.getMessageId()\n\n this.log.debug(\n 'binding temp_auth_key (%h) to perm_auth_key (%h), msg_id = %l...',\n tempKey.id,\n this._session._authKey.id,\n msgId,\n )\n\n // we now need to bind the key\n const inner: mtp.RawMt_bind_auth_key_inner = {\n _: 'mt_bind_auth_key_inner',\n nonce: randomLong(),\n tempAuthKeyId: longFromBuffer(tempKey.id),\n permAuthKeyId: longFromBuffer(this._session._authKey.id),\n tempSessionId: this._session._sessionId,\n expiresAt: Math.floor(Date.now() / 1000) + TEMP_AUTH_KEY_EXPIRY,\n }\n\n // encrypt using mtproto v1 (fucking kill me plz)\n\n const writer = TlBinaryWriter.alloc(this.params.writerMap, 80)\n // = 40 (inner length) + 32 (mtproto header) + 8 (pad 72 so mod 16 = 0)\n\n writer.raw(this._crypto.randomBytes(16))\n writer.long(msgId)\n writer.int(0) // seq_no\n writer.int(40) // msg_len\n writer.object(inner)\n\n const msgWithoutPadding = writer.result()\n writer.raw(this._crypto.randomBytes(8))\n const msgWithPadding = writer.result()\n\n const hash = this._crypto.sha1(msgWithoutPadding)\n const msgKey = hash.subarray(4, 20)\n\n const ige = createAesIgeForMessageOld(this._crypto, this._session._authKey.key, msgKey, true)\n const encryptedData = ige.encrypt(msgWithPadding)\n const encryptedMessage = concatBuffers([this._session._authKey.id, msgKey, encryptedData])\n\n const promise = createControllablePromise<mtp.RawMt_rpc_error | boolean>()\n\n // encrypt the message using temp key and same msg id\n // this is a bit of a hack, but it works\n //\n // hacking inside main send loop to allow sending\n // with another key is just too much hassle.\n // we could just always use temp key if one is available,\n // but that way we won't be able to refresh the key\n // that is about to expire in the background without\n // interrupting actual message flow\n // decrypting is trivial though, since key id\n // is in the first bytes of the message, and is never used later on.\n\n this._session.pendingMessages.set(msgId, {\n _: 'bind',\n promise,\n })\n\n const request: tl.auth.RawBindTempAuthKeyRequest = {\n _: 'auth.bindTempAuthKey',\n permAuthKeyId: inner.permAuthKeyId,\n nonce: inner.nonce,\n expiresAt: inner.expiresAt,\n encryptedMessage,\n }\n const reqSize = TlSerializationCounter.countNeededBytes(this._writerMap, request)\n const reqWriter = TlBinaryWriter.alloc(this._writerMap, reqSize + 16)\n reqWriter.long(this._registerOutgoingMsgId(msgId))\n reqWriter.uint(this._session.getSeqNo())\n reqWriter.uint(reqSize)\n reqWriter.object(request)\n\n // we can now send it as is\n const requestEncrypted = tempKey.encryptMessage(\n reqWriter.result(),\n tempServerSalt,\n this._session._sessionId,\n )\n await this.send(requestEncrypted)\n\n const res = await promise\n\n this._session.pendingMessages.delete(msgId)\n\n if (!this._usePfs) {\n this.log.info('pfs has been disabled while binding temp key')\n\n return\n }\n\n if (typeof res === 'object') {\n this.log.error('failed to bind temp key: %s:%s', res.errorCode, res.errorMessage)\n throw new MtcuteError('Failed to bind temporary key')\n }\n\n // now we can swap the keys (secondary becomes primary,\n // and primary is not immediately forgot because messages using it may still be in flight)\n\n this._session._authKeyTempSecondary = this._session._authKeyTemp\n this._session._authKeyTemp = tempKey\n this._salts.currentSalt = tempServerSalt\n\n this.log.debug('temp key has been bound, exp = %d', inner.expiresAt)\n\n this._isPfsBindingPending = false\n this._isPfsBindingPendingInBackground = false\n\n // we must re-init connection after binding temp key\n this._session.initConnectionCalled = false\n\n this.emit('tmp-key-change', tempAuthKey, inner.expiresAt)\n this.onConnectionUsable()\n\n // set a timeout to update temp auth key in advance to avoid interruption\n this._pfsUpdateTimeout = setTimeout(\n () => {\n this._pfsUpdateTimeout = undefined\n this.log.debug('temp key is expiring soon')\n this._authorizePfs(true)\n },\n (TEMP_AUTH_KEY_EXPIRY - 60) * 1000,\n )\n })\n .catch((err: Error) => {\n this.log.error('PFS Authorization error: %s', err.message)\n\n if (this._isPfsBindingPendingInBackground) {\n this._isPfsBindingPendingInBackground = false\n\n // if we are in background, we can just retry\n return this._authorizePfs(true)\n }\n\n this._isPfsBindingPending = false\n this.onError(err)\n this.reconnect()\n })\n }\n\n waitForUnencryptedMessage(timeout = 5000): Promise<Uint8Array> {\n const promise = createControllablePromise<Uint8Array>()\n const timeoutId = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._pendingWaitForUnencrypted = this._pendingWaitForUnencrypted.filter((it) => it[0] !== promise)\n }, timeout)\n this._pendingWaitForUnencrypted.push([promise, timeoutId])\n\n return promise\n }\n\n protected onMessage(data: Uint8Array): void {\n if (this._pendingWaitForUnencrypted.length) {\n const int32 = new Int32Array(data.buffer, data.byteOffset, 2)\n\n if (int32[0] === 0 && int32[1] === 0) {\n // auth_key_id = 0, meaning it's an unencrypted message used for authorization\n\n const [promise, timeout] = this._pendingWaitForUnencrypted.shift()!\n clearTimeout(timeout)\n promise.resolve(data)\n\n return\n }\n }\n\n if (!this._session._authKey.ready) {\n // if a message is received before authorization,\n // either the server is misbehaving,\n // or there was a problem with authorization.\n this.log.warn('received message before authorization: %h', data)\n\n return\n }\n\n try {\n this._session.decryptMessage(data, this._handleRawMessage)\n } catch (err) {\n this.log.error('failed to decrypt message: %s\\ndata: %h', err, data)\n }\n }\n\n private _handleRawMessage(messageId: Long, seqNo: number, message: TlBinaryReader): void {\n const objectId = message.uint()\n\n if (objectId === GZIP_PACKED_ID) {\n return this._handleRawMessage(\n messageId,\n seqNo,\n new TlBinaryReader(this._readerMap, this._crypto.gunzip(message.bytes())),\n )\n }\n\n if (objectId === MSG_CONTAINER_ID) {\n const count = message.uint()\n\n for (let i = 0; i < count; i++) {\n // msg_id:long seqno:int bytes:int\n const msgId = message.long()\n const seqNo = message.uint() // seqno\n const length = message.uint()\n\n // container can't contain other containers, but can contain rpc_result\n const obj = message.raw(length)\n\n this._handleRawMessage(msgId, seqNo, new TlBinaryReader(this._readerMap, obj))\n }\n\n return\n }\n\n if (objectId === RPC_RESULT_ID) {\n return this._onRpcResult(messageId, message)\n }\n\n // we are safe.. i guess\n this._handleMessage(messageId, message.object(objectId))\n }\n\n private _handleMessage(messageId: Long, message_: unknown): void {\n if (messageId.isEven()) {\n this.log.warn('warn: ignoring message with invalid messageId = %s (is even)', messageId)\n\n return\n }\n\n if (this._session.recentIncomingMsgIds.has(messageId)) {\n this.log.debug('ignoring duplicate message %s', messageId)\n\n return\n }\n const message = message_ as mtp.TlObject\n\n this.log.debug('received %s (msg_id: %l)', message._, messageId)\n this._session.recentIncomingMsgIds.add(messageId)\n\n switch (message._) {\n case 'mt_msgs_ack':\n case 'mt_http_wait':\n case 'mt_bad_msg_notification':\n case 'mt_bad_server_salt':\n case 'mt_msgs_all_info':\n case 'mt_msgs_state_info':\n case 'mt_msg_detailed_info':\n case 'mt_msg_new_detailed_info':\n break\n default:\n this._sendAck(messageId)\n }\n\n switch (message._) {\n case 'mt_pong':\n this._onPong(message)\n break\n case 'mt_bad_server_salt':\n this._onBadServerSalt(message)\n break\n case 'mt_bad_msg_notification':\n this._onBadMsgNotification(messageId, message)\n break\n case 'mt_msgs_ack':\n message.msgIds.forEach((msgId) => this._onMessageAcked(msgId))\n break\n case 'mt_new_session_created':\n this._onNewSessionCreated(message)\n break\n case 'mt_msgs_all_info':\n this._onMessagesInfo(message.msgIds, message.info)\n break\n case 'mt_msg_detailed_info':\n this._onMessageInfo(message.msgId, message.status, message.answerMsgId)\n break\n case 'mt_msg_new_detailed_info':\n this._onMessageInfo(Long.ZERO, 0, message.answerMsgId)\n break\n case 'mt_msgs_state_info':\n this._onMsgsStateInfo(message)\n break\n case 'mt_future_salts':\n this._onFutureSalts(message)\n break\n case 'mt_msgs_state_req':\n case 'mt_msg_resend_req':\n // tdlib doesnt handle them, so why should we? :upside_down_face:\n this.log.warn('received %s (msg_id = %l): %j', message._, messageId, message)\n break\n case 'mt_destroy_session_ok':\n case 'mt_destroy_session_none':\n this._onDestroySessionResult(message)\n break\n default:\n if (tl.isAnyUpdates(message)) {\n if (this._usable && this.params.inactivityTimeout) {\n this._rescheduleInactivity()\n }\n\n this.log.verbose('<<< %j', message)\n\n if (this.params.disableUpdates) {\n this.log.warn('received updates, but updates are disabled')\n // likely due to some request in the session missing invokeWithoutUpdates\n break\n }\n\n this.emit('update', message)\n\n return\n }\n\n this.log.warn('unknown message received: %j', message)\n }\n }\n\n private _onRpcResult(messageId: Long, message: TlBinaryReader): void {\n if (this._usable && this.params.inactivityTimeout) {\n this._rescheduleInactivity()\n }\n\n const reqMsgId = message.long()\n\n if (reqMsgId.isZero()) {\n let resultType\n\n try {\n // eslint-disable-next-line\n resultType = (message.object() as any)._\n } catch (err) {\n resultType = message.peekUint()\n }\n this.log.warn('received rpc_result with %j with req_msg_id = 0', resultType)\n\n return\n }\n\n const msg = this._session.pendingMessages.get(reqMsgId)\n\n if (!msg) {\n let result\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n result = message.object() as any\n } catch (err) {\n result = '[failed to parse]'\n }\n\n // check if the msg is one of the recent ones\n if (this._session.recentOutgoingMsgIds.has(reqMsgId)) {\n this.log.debug('received rpc_result again for %l (contains %j)', reqMsgId, result)\n } else {\n this.log.warn('received rpc_result for unknown message %l: %j', reqMsgId, result)\n }\n\n return\n }\n\n this._sendAck(messageId)\n\n // special case for auth key binding\n if (msg._ !== 'rpc') {\n if (msg._ === 'bind') {\n this._sendAck(messageId)\n msg.promise.resolve(message.object())\n\n return\n }\n\n if (msg._ === 'cancel') {\n let result\n\n try {\n result = message.object() as mtp.TlObject\n } catch (err) {\n this.log.debug('failed to parse rpc_result for cancel request %l, ignoring', reqMsgId)\n\n return\n }\n\n this.log.debug('received %s for cancelled request %l: %j', result._, reqMsgId, result)\n this._onMessageAcked(reqMsgId)\n\n return\n }\n\n this.log.error('received rpc_result for %s request %l', msg._, reqMsgId)\n\n return\n }\n\n const rpc = msg.rpc\n\n const customReader = this._readerMap._results![rpc.method]\n\n let result: any\n\n if (customReader) {\n result = customReader(message)\n } else {\n const objectId = message.uint()\n\n if (objectId === GZIP_PACKED_ID) {\n const inner = this._crypto.gunzip(message.bytes())\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n result = TlBinaryReader.deserializeObject(this._readerMap, inner)\n } else {\n result = message.object(objectId)\n }\n }\n\n // initConnection call was definitely received and\n // processed by the server, so we no longer need to use it\n // todo: is this the case with failed invokeAfterMsg(s) as well?\n if (rpc.initConn) {\n this._session.initConnectionCalled = true\n }\n\n rpc.done = true\n\n this.log.verbose('<<< (%s) %j', rpc.method, result)\n\n if (result._ === 'mt_rpc_error') {\n const res = result as mtp.RawMt_rpc_error\n this.log.debug(\n 'received rpc_error [%d:%s] for %l (%s)',\n res.errorCode,\n res.errorMessage,\n reqMsgId,\n rpc.method,\n )\n\n if (rpc.cancelled) return\n\n switch (res.errorMessage) {\n case 'AUTH_KEY_PERM_EMPTY':\n // happens when temp auth key is not yet bound\n // this shouldn't happen as we block any outbound communications\n // until the temp key is derived and bound.\n //\n // i think it is also possible for the error to be returned\n // when the temp key has expired, but this still shouldn't happen\n // but this is tg, so something may go wrong, and we will receive this as an error\n // (for god's sake why is this not in mtproto and instead hacked into the app layer)\n this._authorizePfs()\n this._onMessageFailed(reqMsgId, 'AUTH_KEY_PERM_EMPTY', true)\n\n return\n case 'CONNECTION_NOT_INITED': {\n // this seems to sometimes happen when using pfs\n // no idea why, but tdlib also seems to handle these, so whatever\n\n this._session.initConnectionCalled = false\n this._onMessageFailed(reqMsgId, res.errorMessage, true)\n\n // just setting this flag is not enough because the message\n // is already serialized, so we do this awesome hack\n this.sendRpc({ _: 'help.getNearestDc' })\n .then(() => {\n this.log.debug('additional help.getNearestDc for initConnection ok')\n })\n .catch((err) => {\n this.log.debug('additional help.getNearestDc for initConnection error: %s', err)\n })\n\n return\n }\n case 'MSG_WAIT_TIMEOUT':\n case 'MSG_WAIT_FAILED': {\n if (!rpc.invokeAfter) {\n this.log.warn('received %s for non-chained request %l', res.errorMessage, reqMsgId)\n\n break\n }\n\n // in some cases, MSG_WAIT_TIMEOUT is returned instead of MSG_WAIT_FAILED when one of the deps\n // failed with MSG_WAIT_TIMEOUT. i have no clue why, this makes zero sense, but what fucking ever\n //\n // this basically means we can't handle a timeout any different than a general failure,\n // because the timeout might not refer to the immediate `.invokeAfter` message, but to\n // its arbitrary-depth dependency, so we indeed have to wait for the message ourselves...\n\n if (this._session.pendingMessages.has(rpc.invokeAfter)) {\n // the dependency is still pending, postpone the processing\n this.log.debug(\n 'chain %s: waiting for %l before processing %l',\n rpc.chainId,\n rpc.invokeAfter,\n reqMsgId,\n )\n this._session.getPendingChainedFails(rpc.chainId!).insert(rpc)\n } else {\n this._session.chains.delete(rpc.chainId!)\n this._onMessageFailed(reqMsgId, 'MSG_WAIT_FAILED', true)\n }\n\n return\n }\n }\n\n const error = tl.RpcError.fromTl(res)\n\n if (this.params.niceStacks !== false) {\n makeNiceStack(error, rpc.stack!, rpc.method)\n }\n\n if (error.unknown && this.params.enableErrorReporting) {\n reportUnknownError(this.log, error, rpc.method)\n }\n\n rpc.promise.reject(error)\n } else {\n this.log.debug('received rpc_result (%s) for request %l (%s)', result._, reqMsgId, rpc.method)\n\n if (rpc.cancelled) return\n\n rpc.promise.resolve(result)\n }\n\n if (rpc.chainId) {\n this._processPendingChainedFails(rpc.chainId, reqMsgId)\n }\n\n this._onMessageAcked(reqMsgId)\n this._session.pendingMessages.delete(reqMsgId)\n }\n\n private _processPendingChainedFails(chainId: number | string, sinceMsgId: Long): void {\n // sinceMsgId was already definitely received and contained an error.\n // we should now re-send all the pending MSG_WAIT_FAILED after it\n this._session.removeFromChain(chainId, sinceMsgId)\n\n const oldPending = this._session.chainsPendingFails.get(chainId)\n\n if (!oldPending?.length) {\n return\n }\n\n const idx = oldPending.index({ invokeAfter: sinceMsgId } as PendingRpc, true)\n if (idx === -1) return\n\n const toFail = oldPending.raw.splice(idx)\n\n this.log.debug('chain %s: failing %d dependant messages: %L', chainId, toFail.length, toFail)\n\n // we're failing the rest of the chain, including the last message\n this._session.chains.delete(chainId)\n\n for (const rpc of toFail) {\n this._onMessageFailed(rpc.msgId!, 'MSG_WAIT_FAILED', true)\n }\n }\n\n private _onMessageAcked(msgId: Long, inContainer = false): void {\n const msg = this._session.pendingMessages.get(msgId)\n\n if (!msg) {\n if (!this._session.recentOutgoingMsgIds.has(msgId)) {\n this.log.warn('received ack for unknown message %l', msgId)\n }\n\n return\n }\n\n switch (msg._) {\n case 'container':\n this.log.debug('received ack for container %l (size = %d)', msgId, msg.msgIds.length)\n\n msg.msgIds.forEach((msgId) => this._onMessageAcked(msgId, true))\n\n // we no longer need info about the container\n this._session.pendingMessages.delete(msgId)\n break\n\n case 'rpc': {\n const rpc = msg.rpc\n this.log.debug('received ack for rpc query %l (%s, acked before = %s)', msgId, rpc.method, rpc.acked)\n\n rpc.acked = true\n\n if (!inContainer && rpc.containerId && this._session.pendingMessages.has(rpc.containerId)) {\n // ack all the messages in that container\n this._onMessageAcked(rpc.containerId)\n }\n\n // this message could also already be in some queue,\n removeFromLongArray(this._session.queuedStateReq, msgId)\n removeFromLongArray(this._session.queuedResendReq, msgId)\n\n // if resend/state was already requested, it will simply be ignored\n\n this._session.getStateSchedule.remove(rpc)\n break\n }\n case 'bind':\n case 'cancel':\n break // do nothing, wait for the result\n\n default:\n if (!inContainer) {\n this.log.warn('received unexpected ack for %s query %l', msg._, msgId)\n }\n }\n }\n\n private _onAllFailed(reason: string) {\n // called when all the pending messages are to be resent\n // e.g. when server returns 429\n\n // most service messages can be omitted as stale\n\n for (const msgId of this._session.pendingMessages.keys()) {\n const info = this._session.pendingMessages.get(msgId)!\n\n switch (info._) {\n case 'container':\n case 'state':\n case 'resend':\n case 'ping':\n // no longer relevant\n this._session.pendingMessages.delete(msgId)\n break\n default:\n this._onMessageFailed(msgId, reason, true)\n break\n }\n }\n }\n\n private _onMessageFailed(msgId: Long, reason: string, inContainer = false): void {\n const msgInfo = this._session.pendingMessages.get(msgId)\n\n if (!msgInfo) {\n this.log.debug('unknown message %l failed because of %s', msgId, reason)\n\n return\n }\n\n switch (msgInfo._) {\n case 'container':\n this.log.debug('container %l (size = %d) failed because of %s', msgId, msgInfo.msgIds.length, reason)\n msgInfo.msgIds.forEach((msgId) => this._onMessageFailed(msgId, reason, true))\n break\n case 'ping':\n this.log.debug('ping (msg_id = %l) failed because of %s', msgId, reason)\n // restart ping\n this._session.resetLastPing(true)\n break\n\n case 'rpc': {\n const rpc = msgInfo.rpc\n this.log.debug('rpc query %l (%s) failed because of %s', msgId, rpc.method, reason)\n\n // since the query was rejected, we can let it reassign msg_id to avoid containers\n this._session.pendingMessages.delete(msgId)\n rpc.msgId = undefined\n this._enqueueRpc(rpc, true)\n\n if (!inContainer && rpc.containerId && this._session.pendingMessages.has(rpc.containerId)) {\n // fail all the messages in that container\n this._onMessageFailed(rpc.containerId, reason)\n }\n\n // this message could also already be in some queue,\n removeFromLongArray(this._session.queuedStateReq, msgId)\n removeFromLongArray(this._session.queuedResendReq, msgId)\n\n // if resend/state was already requested, it will simply be ignored\n\n this._session.getStateSchedule.remove(rpc)\n\n break\n }\n case 'resend':\n this.log.debug(\n 'resend request %l (size = %d) failed because of %s',\n msgId,\n msgInfo.msgIds.length,\n reason,\n )\n this._session.queuedResendReq.splice(0, 0, ...msgInfo.msgIds)\n this._flushTimer.emitWhenIdle()\n break\n case 'state':\n this.log.debug(\n 'state request %l (size = %d) failed because of %s',\n msgId,\n msgInfo.msgIds.length,\n reason,\n )\n this._session.queuedStateReq.splice(0, 0, ...msgInfo.msgIds)\n this._flushTimer.emitWhenIdle()\n break\n case 'bind':\n this.log.debug('temp key binding request %l failed because of %s, retrying', msgId, reason)\n msgInfo.promise.reject(Error(reason))\n break\n case 'future_salts':\n this.log.debug('future_salts request %l failed because of %s, will retry', msgId, reason)\n this._salts.isFetching = false\n // this is enough to make it retry on the next flush.\n break\n }\n\n this._session.pendingMessages.delete(msgId)\n }\n\n private _registerOutgoingMsgId(msgId: Long): Long {\n this._session.recentOutgoingMsgIds.add(msgId)\n\n return msgId\n }\n\n private _onPong({ msgId, pingId }: mtp.RawMt_pong): void {\n const info = this._session.pendingMessages.get(msgId)\n\n if (!info) {\n this.log.warn('received pong to unknown ping (msg_id %l, ping_id %l)', msgId, pingId)\n\n return\n }\n\n if (info._ !== 'ping') {\n this.log.warn('received pong to %s query, not ping (msg_id %l, ping_id %l)', info._, msgId, pingId)\n\n return\n }\n\n if (info.pingId.neq(pingId)) {\n this.log.warn('received pong to %l, but expected ping_id = %l (got %l)', msgId, info.pingId, pingId)\n }\n\n const rtt = Date.now() - this._session.lastPingTime\n this._session.lastPingRtt = rtt\n\n if (info.containerId.neq(msgId)) {\n this._onMessageAcked(info.containerId)\n }\n\n this.log.debug('received pong: msg_id %l, ping_id %l, rtt = %dms', msgId, pingId, rtt)\n this._session.resetLastPing()\n }\n\n private _onBadServerSalt(msg: mtp.RawMt_bad_server_salt): void {\n this._salts.currentSalt = msg.newServerSalt\n\n this._onMessageFailed(msg.badMsgId, 'bad_server_salt')\n }\n\n private _onBadMsgNotification(msgId: Long, msg: mtp.RawMt_bad_msg_notification): void {\n switch (msg.errorCode) {\n case 16:\n case 17:\n case 20: {\n if (msg.errorCode !== 20) {\n // msg_id is either too high or too low\n // code 20 means msg_id is too old,\n // we just need to resend the message\n const serverTime = msgId.low >>> 0\n const timeOffset = Math.floor(Date.now() / 1000) - serverTime\n\n this._session._timeOffset = timeOffset\n this.log.debug('server time: %d, corrected offset to %d', serverTime, timeOffset)\n }\n\n this._onMessageFailed(msg.badMsgId, `bad_msg_notification ${msg.errorCode}`)\n break\n }\n default:\n // something went very wrong, we need to reset the session\n this.log.error(\n 'received bad_msg_notification for msg_id = %l, code = %d. session will be reset',\n msg.badMsgId,\n msg.errorCode,\n )\n this._resetSession()\n break\n }\n }\n\n private _onNewSessionCreated({ firstMsgId, serverSalt, uniqueId }: mtp.RawMt_new_session_created): void {\n if (uniqueId.eq(this._session.lastSessionCreatedUid)) {\n this.log.debug('received new_session_created with the same uid = %l, ignoring', uniqueId)\n\n return\n }\n\n if (!this._session.lastSessionCreatedUid.isZero() && !this.params.disableUpdates) {\n // force the client to fetch missed updates\n // when _lastSessionCreatedUid == 0, the connection has\n // just been established, and the client will fetch them anyways\n this.emit('update', { _: 'updatesTooLong' })\n }\n\n this._salts.currentSalt = serverSalt\n\n this.log.debug('received new_session_created, uid = %l, first msg_id = %l', uniqueId, firstMsgId)\n\n for (const msgId of this._session.pendingMessages.keys()) {\n const val = this._session.pendingMessages.get(msgId)!\n\n if (val._ === 'bind') {\n // should NOT happen.\n if (msgId.lt(firstMsgId)) {\n this._onMessageFailed(msgId, 'received in wrong session')\n }\n continue\n }\n\n if (val._ === 'container') {\n if (msgId.lt(firstMsgId)) {\n // all messages in this container will be resent\n // info about this container is no longer needed\n this._session.pendingMessages.delete(msgId)\n }\n\n return\n }\n\n const containerId = val._ === 'rpc' ? val.rpc.containerId || msgId : val.containerId\n\n if (containerId.lt(firstMsgId)) {\n this._onMessageFailed(msgId, 'new_session_created', true)\n }\n }\n }\n\n private _onMessageInfo(msgId: Long, status: number, answerMsgId: Long): void {\n if (!msgId.isZero()) {\n const info = this._session.pendingMessages.get(msgId)\n\n if (!info) {\n if (!this._session.recentOutgoingMsgIds.has(msgId)) {\n this.log.warn('received message info about unknown message %l', msgId)\n }\n\n return\n }\n\n switch (status & 7) {\n case 1:\n case 2:\n case 3:\n // message wasn't received by the server\n return this._onMessageFailed(msgId, `message info state ${status}`)\n break\n\n case 0:\n if (!answerMsgId.isZero()) {\n this.log.warn(\n 'received message info with status = 0: msg_id = %l, status = %d, ans_id = %l',\n msgId,\n status,\n answerMsgId,\n )\n\n return this._onMessageFailed(msgId, 'message info state = 0, ans_id = 0')\n }\n // fallthrough\n case 4:\n this._onMessageAcked(msgId)\n break\n }\n }\n\n if (!answerMsgId.isZero() && !this._session.recentIncomingMsgIds.has(answerMsgId)) {\n this.log.debug('received message info for %l, but answer (%l) was not received yet', msgId, answerMsgId)\n this._session.queuedResendReq.push(answerMsgId)\n this._flushTimer.emitWhenIdle()\n\n return\n }\n\n if (answerMsgId.isZero()) {\n this.log.debug('received message info for %l: message is still pending (status = %d)', msgId, status)\n\n return\n }\n\n this.log.debug('received message info for %l, and answer (%l) was already received', msgId, answerMsgId)\n }\n\n private _onMessagesInfo(msgIds: Long[], info: Uint8Array): void {\n if (msgIds.length !== info.length) {\n this.log.warn('messages state info was invalid: msg_ids.length !== info.length')\n }\n\n for (let i = 0; i < msgIds.length; i++) {\n this._onMessageInfo(msgIds[i], info[i], Long.ZERO)\n }\n }\n\n private _onMsgsStateInfo(msg: mtp.RawMt_msgs_state_info): void {\n const info = this._session.pendingMessages.get(msg.reqMsgId)\n\n if (!info) {\n this.log.warn('received msgs_state_info to unknown request %l', msg.reqMsgId)\n\n return\n }\n\n if (info._ !== 'state') {\n this.log.warn('received msgs_state_info to %s query %l', info._, msg.reqMsgId)\n\n return\n }\n\n this._onMessagesInfo(info.msgIds, msg.info)\n }\n\n private _onFutureSalts(msg: mtp.RawMt_future_salts): void {\n const info = this._session.pendingMessages.get(msg.reqMsgId)\n\n if (!info) {\n this.log.warn('received future_salts to unknown request %l', msg.reqMsgId)\n\n return\n }\n\n if (info._ !== 'future_salts') {\n this.log.warn('received future_salts to %s query %l', info._, msg.reqMsgId)\n\n return\n }\n\n this.log.debug('received future_salts: %d salts', msg.salts.length)\n\n this._salts.isFetching = false\n this._salts.setFutureSalts(msg.salts.slice())\n this.emit('future-salts', msg.salts)\n }\n\n private _onDestroySessionResult(msg: mtp.TypeDestroySessionRes): void {\n const reqMsgId = this._session.destroySessionIdToMsgId.get(msg.sessionId)\n\n if (!reqMsgId) {\n this.log.warn('received %s for unknown session %h', msg._, msg.sessionId)\n\n return\n }\n\n this._session.destroySessionIdToMsgId.delete(msg.sessionId)\n this._session.pendingMessages.delete(reqMsgId)\n this.log.debug('received %s for session %h', msg._, msg.sessionId)\n }\n\n private _enqueueRpc(rpc: PendingRpc, force?: boolean) {\n if (this._session.enqueueRpc(rpc, force)) {\n this._flushTimer.emitWhenIdle()\n }\n }\n\n _resetSession(): void {\n this._queuedDestroySession.push(this._session._sessionId)\n\n this._session.resetState(true)\n this._onAllFailed('session reset')\n this.reconnect()\n\n // once we receive new_session_created, all pending messages will be resent.\n this._flushTimer.reset()\n }\n\n private _sendAck(msgId: Long): void {\n if (this._session.queuedAcks.length === 0) {\n this._flushTimer.emitBeforeNext(30000)\n }\n\n this._session.queuedAcks.push(msgId)\n\n if (this._session.queuedAcks.length >= 100) {\n this._flushTimer.emitWhenIdle()\n }\n }\n\n sendRpc<T extends tl.RpcMethod>(\n request: T,\n stack?: string,\n timeout?: number,\n abortSignal?: AbortSignal,\n chainId?: string | number,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (this._usable && this.params.inactivityTimeout) {\n this._rescheduleInactivity()\n }\n\n if (!stack && this.params.niceStacks !== false) {\n stack = new Error().stack\n }\n\n const method = request._\n\n let obj: tl.TlObject = request\n let initConn = false\n\n if (this.params.disableUpdates) {\n obj = {\n _: 'invokeWithoutUpdates',\n query: obj,\n }\n }\n\n if (!this._session.initConnectionCalled) {\n // we will wrap every rpc call with initConnection\n // until some of the requests wrapped with it is\n // either acked or returns rpc_result\n\n this.log.debug('wrapping %s with initConnection, layer: %d', method, this.params.layer)\n const proxy = this._transport.getMtproxyInfo?.()\n obj = {\n _: 'invokeWithLayer',\n layer: this.params.layer,\n query: {\n ...this.params.initConnection,\n proxy,\n query: obj,\n },\n }\n initConn = true\n }\n\n this.log.verbose('>>> %j', obj)\n\n let content = TlBinaryWriter.serializeObject(this._writerMap, obj)\n\n if (content.length > 1044404) {\n // if you send larger payloads, telegram will just close connection,\n // and since we resend them, it will get resent after reconnection and\n // that will be an endless loop of reconnections. we don't want that,\n // and payloads this large are usually a sign of an error in the code.\n throw new MtArgumentError(`Payload is too big (${content.length} > 1044404)`)\n }\n\n // gzip\n let shouldGzip = content.length > 128\n\n if (content.length > 16384) {\n // test compression ratio for the middle part\n // if it is less than 0.9, then try to compress the whole request\n\n const middle = ~~((content.length - 1024) / 2)\n const middlePart = content.subarray(middle, middle + 1024)\n const gzipped = this._crypto.gzip(middlePart, Math.floor(middlePart.length * 0.9))\n\n if (!gzipped) shouldGzip = false\n }\n\n if (shouldGzip) {\n const gzipped = this._crypto.gzip(content, Math.floor(content.length * 0.9))\n\n if (gzipped) {\n this.log.debug('gzipped %s (%db -> %db)', method, content.length, gzipped.length)\n\n content = gzipped\n } else {\n shouldGzip = false\n }\n }\n\n const pending: PendingRpc = {\n method,\n promise: createControllablePromise(),\n data: content,\n stack,\n // we will need to know size of gzip_packed overhead in _flush()\n gzipOverhead: shouldGzip ? 4 + TlSerializationCounter.countBytesOverhead(content.length) : 0,\n initConn,\n chainId,\n\n // setting them as well so jit can optimize stuff\n invokeAfter: undefined,\n sent: undefined,\n done: undefined,\n getState: undefined,\n msgId: undefined,\n seqNo: undefined,\n containerId: undefined,\n acked: undefined,\n cancelled: undefined,\n timeout: undefined,\n }\n\n if (abortSignal?.aborted) {\n pending.promise.reject(abortSignal.reason)\n\n return pending.promise\n }\n\n if (timeout) {\n pending.timeout = setTimeout(this._cancelRpc, timeout, pending, true)\n }\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', () => this._cancelRpc(pending, false, abortSignal))\n }\n\n this._enqueueRpc(pending, true)\n\n return pending.promise\n }\n\n private _cancelRpc(rpc: PendingRpc, onTimeout = false, abortSignal?: AbortSignal): void {\n if (rpc.done) return\n\n if (rpc.cancelled && !onTimeout) {\n throw new MtcuteError('RPC was already cancelled')\n }\n\n if (!onTimeout && rpc.timeout) {\n clearTimeout(rpc.timeout)\n }\n\n if (onTimeout) {\n // todo: replace with MtTimeoutError\n const error = new tl.RpcError(400, 'Client timeout')\n\n if (this.params.niceStacks !== false) {\n makeNiceStack(error, rpc.stack!, rpc.method)\n }\n\n rpc.promise.reject(error)\n } else if (abortSignal) {\n rpc.promise.reject(abortSignal.reason)\n }\n\n rpc.cancelled = true\n\n if (rpc.msgId) {\n this._session.queuedCancelReq.push(rpc.msgId)\n this._session.getStateSchedule.remove(rpc)\n this._flushTimer.emitWhenIdle()\n } else {\n // in case rpc wasn't sent yet (or had some error),\n // we can simply remove it from queue\n this._session.queuedRpc.remove(rpc)\n }\n }\n\n protected _onInactivityTimeout() {\n // we should send all pending acks and other service messages\n // before dropping the connection\n // additionally, if we are still waiting for some rpc results,\n // we should wait for them first\n\n let hasPendingRpc = false\n\n for (const it of this._session.pendingMessages.values()) {\n if (it._ === 'rpc') {\n hasPendingRpc = true\n break\n }\n }\n\n if (hasPendingRpc) {\n this.log.debug('waiting for pending rpc queries to finish before closing connection')\n this._rescheduleInactivity()\n\n return\n }\n\n if (!this._session.hasPendingMessages) {\n this.log.debug('no pending service messages, closing connection')\n super._onInactivityTimeout()\n\n return\n }\n\n this._inactivityPendingFlush = true\n this._flush()\n }\n\n flushWhenIdle(): void {\n this._flushTimer.emitWhenIdle()\n }\n\n private _flush(): void {\n if (!this._session._authKey.ready || this._isPfsBindingPending || this._session.current429Timeout) {\n this.log.debug(\n 'skipping flush, connection is not usable (auth key ready = %b, pfs binding pending = %b, 429 timeout = %b)',\n this._session._authKey.ready,\n this._isPfsBindingPending,\n Boolean(this._session.current429Timeout),\n )\n\n // it will be flushed once connection is usable\n return\n }\n\n try {\n this._doFlush()\n } catch (e: any) {\n this.log.error('flush error: %s', (e as Error).stack)\n // should not happen unless there's a bug in the code\n }\n\n // schedule next flush\n // if there are more queued requests, flush immediately\n // (they likely didn't fit into one message)\n if (this._session.hasPendingMessages) {\n // we schedule it on the next tick, so we can load-balance\n // between multiple connections using the same session\n this._flushTimer.emitWhenIdle()\n } else {\n const nextPingTime = this._session.lastPingTime + PING_INTERVAL\n const nextGetScheduleTime = this._session.getStateSchedule.raw[0]?.getState || Infinity\n\n this._flushTimer.emitBefore(Math.min(nextPingTime, nextGetScheduleTime))\n }\n }\n\n private _doFlush(): void {\n this.log.debug('flushing send queue. queued rpc: %d', this._session.queuedRpc.length)\n\n // oh bloody hell mate\n\n // total size & count\n let packetSize = 0\n let messageCount = 0\n // size & msg count that count towards container limit\n // these will be added to total later\n let containerMessageCount = 0\n let containerSize = 0\n\n let ackRequest: Uint8Array | null = null\n let ackMsgIds: Long[] | null = null\n\n let getFutureSaltsRequest: Uint8Array | null = null\n let getFutureSaltsMsgId: Long | null = null\n\n let pingRequest: Uint8Array | null = null\n let pingId: Long | null = null\n let pingMsgId: Long | null = null\n\n let getStateRequest: Uint8Array | null = null\n let getStateMsgId: Long | null = null\n let getStateMsgIds: Long[] | null = null\n\n let resendRequest: Uint8Array | null = null\n let resendMsgId: Long | null = null\n let resendMsgIds: Long[] | null = null\n\n let cancelRpcs: Long[] | null = null\n let destroySessions: Long[] | null = null\n let rootMsgId: Long | null = null\n\n const now = Date.now()\n\n if (this._session.queuedAcks.length) {\n let acks = this._session.queuedAcks\n\n if (acks.length > 8192) {\n this._session.queuedAcks = acks.slice(8192)\n acks = acks.slice(0, 8192)\n } else {\n this._session.queuedAcks = []\n }\n\n const obj: mtp.RawMt_msgs_ack = {\n _: 'mt_msgs_ack',\n msgIds: acks,\n }\n ackMsgIds = obj.msgIds\n\n ackRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n packetSize += ackRequest.length + 16\n messageCount += 1\n }\n\n if (now - this._session.lastPingTime > PING_INTERVAL) {\n if (!this._session.lastPingMsgId.isZero()) {\n this.log.warn(\"didn't receive pong for previous ping (msg_id = %l)\", this._session.lastPingMsgId)\n this._session.pendingMessages.delete(this._session.lastPingMsgId)\n }\n\n pingId = randomLong()\n const obj: mtp.RawMt_ping_delay_disconnect = {\n _: 'mt_ping_delay_disconnect',\n pingId,\n disconnectDelay: 75,\n }\n\n this._session.lastPingTime = Date.now()\n\n pingRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n containerSize += pingRequest.length + 16\n containerMessageCount += 1\n }\n\n {\n if (this._session.queuedStateReq.length) {\n let ids = this._session.queuedStateReq\n\n if (ids.length > 8192) {\n this._session.queuedStateReq = ids.slice(8192)\n ids = ids.slice(0, 8192)\n } else {\n this._session.queuedStateReq = []\n }\n getStateMsgIds = ids\n }\n\n const idx = this._session.getStateSchedule.index({ getState: now } as PendingRpc, true)\n\n if (idx > 0) {\n const toGetState = this._session.getStateSchedule.raw.splice(0, idx)\n if (!getStateMsgIds) getStateMsgIds = []\n toGetState.forEach((it) => getStateMsgIds!.push(it.msgId!))\n }\n\n if (getStateMsgIds) {\n const obj: mtp.RawMt_msgs_state_req = {\n _: 'mt_msgs_state_req',\n msgIds: getStateMsgIds,\n }\n\n getStateRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n packetSize += getStateRequest.length + 16\n messageCount += 1\n }\n }\n\n if (this._session.queuedResendReq.length) {\n resendMsgIds = this._session.queuedResendReq\n\n if (resendMsgIds.length > 8192) {\n this._session.queuedResendReq = resendMsgIds.slice(8192)\n resendMsgIds = resendMsgIds.slice(0, 8192)\n } else {\n this._session.queuedResendReq = []\n }\n\n const obj: mtp.RawMt_msg_resend_req = {\n _: 'mt_msg_resend_req',\n msgIds: resendMsgIds,\n }\n\n resendRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n packetSize += resendRequest.length + 16\n messageCount += 1\n }\n\n if (this._session.queuedCancelReq.length) {\n containerMessageCount += this._session.queuedCancelReq.length\n containerSize += this._session.queuedCancelReq.length * 28\n cancelRpcs = this._session.queuedCancelReq\n this._session.queuedCancelReq = []\n }\n\n if (this._queuedDestroySession.length) {\n containerMessageCount += this._queuedDestroySession.length\n containerSize += this._queuedDestroySession.length * 28\n destroySessions = this._queuedDestroySession\n this._queuedDestroySession = []\n }\n\n if (this._salts.shouldFetchSalts()) {\n const obj: mtp.RawMt_get_future_salts = {\n _: 'mt_get_future_salts',\n num: 64,\n }\n\n getFutureSaltsRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n containerSize += getFutureSaltsRequest.length + 16\n containerMessageCount += 1\n this._salts.isFetching = true\n }\n\n let forceContainer = false\n const rpcToSend: PendingRpc[] = []\n\n while (\n this._session.queuedRpc.length &&\n containerSize < 32768 && // 2^15\n containerMessageCount < 1020\n ) {\n const msg = this._session.queuedRpc.popFront()!\n if (msg.cancelled) continue\n\n // note: we don't check for <2^15 here\n // this is not documented, but large requests\n // (like upload.saveFilePart) *may* exceed that limit\n\n rpcToSend.push(msg)\n containerSize += msg.data.length + 16\n if (msg.gzipOverhead) containerSize += msg.gzipOverhead\n\n if (msg.chainId) {\n containerSize += INVOKE_AFTER_MSG_SIZE\n }\n\n // if message was already assigned a msg_id,\n // we must wrap it in a container with a newer msg_id\n if (msg.msgId) forceContainer = true\n\n // having >1 upload.getFile within a container seems to cause flood_wait errors\n // also a crutch for load-balancing\n if (msg.method === 'upload.getFile') break\n }\n\n packetSize += containerSize\n messageCount += containerMessageCount + rpcToSend.length\n\n if (!messageCount) {\n this.log.debug('flush did not happen: nothing to flush')\n\n return\n }\n\n const useContainer = forceContainer || messageCount > 1\n if (useContainer) packetSize += 24 // 8 (msg_container) + 16 (mtproto header)\n\n const writer = TlBinaryWriter.alloc(this._writerMap, packetSize)\n\n if (useContainer) {\n // leave bytes for mtproto header (we'll write it later,\n // since we need seqno and msg_id to be larger than the content)\n writer.pos += 16\n writer.uint(MSG_CONTAINER_ID)\n writer.uint(messageCount)\n }\n\n const otherPendings: Exclude<PendingMessage, { _: 'rpc' | 'container' | 'bind' }>[] = []\n\n if (ackRequest) {\n this._registerOutgoingMsgId(this._session.writeMessage(writer, ackRequest))\n }\n\n if (pingRequest) {\n pingMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, pingRequest))\n this._session.lastPingMsgId = pingMsgId\n const pingPending: PendingMessage = {\n _: 'ping',\n pingId: pingId!,\n containerId: pingMsgId,\n }\n this._session.pendingMessages.set(pingMsgId, pingPending)\n otherPendings.push(pingPending)\n }\n\n if (getStateRequest) {\n getStateMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, getStateRequest))\n const getStatePending: PendingMessage = {\n _: 'state',\n msgIds: getStateMsgIds!,\n containerId: getStateMsgId,\n }\n this._session.pendingMessages.set(getStateMsgId, getStatePending)\n otherPendings.push(getStatePending)\n }\n\n if (resendRequest) {\n resendMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, resendRequest))\n const resendPending: PendingMessage = {\n _: 'resend',\n msgIds: resendMsgIds!,\n containerId: resendMsgId,\n }\n this._session.pendingMessages.set(resendMsgId, resendPending)\n otherPendings.push(resendPending)\n }\n\n if (cancelRpcs) {\n cancelRpcs.forEach((msgId) => {\n const cancelMsgId = this._registerOutgoingMsgId(\n this._session.writeMessage(writer, {\n _: 'mt_rpc_drop_answer',\n reqMsgId: msgId,\n }),\n )\n\n const pending: PendingMessage = {\n _: 'cancel',\n msgId,\n containerId: cancelMsgId,\n }\n this._session.pendingMessages.set(cancelMsgId, pending)\n otherPendings.push(pending)\n })\n }\n\n if (destroySessions) {\n destroySessions.forEach((sessionId) => {\n const msgId = this._registerOutgoingMsgId(\n this._session.writeMessage(writer, {\n _: 'mt_destroy_session',\n sessionId,\n }),\n )\n\n const pending: PendingMessage = {\n _: 'destroy_session',\n sessionId,\n containerId: msgId,\n }\n this._session.pendingMessages.set(msgId, pending)\n this._session.destroySessionIdToMsgId.set(sessionId, msgId)\n otherPendings.push(pending)\n })\n }\n\n if (getFutureSaltsRequest) {\n getFutureSaltsMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, getFutureSaltsRequest))\n const pending: PendingMessage = {\n _: 'future_salts',\n containerId: getFutureSaltsMsgId,\n }\n this._session.pendingMessages.set(getFutureSaltsMsgId, pending)\n otherPendings.push(pending)\n }\n\n const getStateTime = now + GET_STATE_INTERVAL\n\n for (let i = 0; i < rpcToSend.length; i++) {\n const msg = rpcToSend[i]\n // not using writeMessage here because we also need seqNo, and\n // i dont want to also return seqNo there because that would mean\n // extra object overhead\n\n if (!msg.msgId) {\n const msgId = this._session.getMessageId()\n const seqNo = this._session.getSeqNo()\n\n this.log.debug('%s: msg_id assigned %l, seqno: %d', msg.method, msgId, seqNo)\n\n msg.msgId = msgId\n msg.seqNo = seqNo\n this._session.pendingMessages.set(msgId, {\n _: 'rpc',\n rpc: msg,\n })\n\n if (msg.chainId) {\n msg.invokeAfter = this._session.addToChain(msg.chainId, msgId)\n this.log.debug('chain %s: invoke %l after %l', msg.chainId, msg.msgId, msg.invokeAfter)\n }\n } else {\n this.log.debug('%s: msg_id already assigned, reusing %l, seqno: %d', msg.method, msg.msgId, msg.seqNo)\n }\n\n // (re-)schedule get_state if needed\n if (msg.getState) {\n this._session.getStateSchedule.remove(msg)\n }\n if (!msg.acked) {\n msg.getState = getStateTime\n this._session.getStateSchedule.insert(msg)\n }\n\n if (rootMsgId === null) rootMsgId = msg.msgId\n writer.long(this._registerOutgoingMsgId(msg.msgId))\n writer.uint(msg.seqNo!)\n\n const invokeAfterSize = msg.invokeAfter ? INVOKE_AFTER_MSG_SIZE : 0\n\n const writeInvokeAfter = () => {\n if (!msg.invokeAfter) return\n\n writer.uint(INVOKE_AFTER_MSG_ID)\n writer.long(msg.invokeAfter)\n }\n\n if (msg.gzipOverhead) {\n writer.uint(msg.data.length + msg.gzipOverhead + invokeAfterSize)\n writeInvokeAfter()\n writer.uint(GZIP_PACKED_ID)\n writer.bytes(msg.data)\n } else {\n writer.uint(msg.data.length + invokeAfterSize)\n writeInvokeAfter()\n writer.raw(msg.data)\n }\n\n msg.sent = true\n }\n\n if (useContainer) {\n // we now need to assign the container msg_id and seqno\n // we couldn't have assigned them earlier because mtproto\n // requires them to be >= than the contained messages\n\n packetSize = writer.pos\n\n const containerId = this._session.getMessageId()\n writer.pos = 0\n rootMsgId = containerId\n writer.long(this._registerOutgoingMsgId(containerId))\n writer.uint(this._session.getSeqNo(false))\n writer.uint(packetSize - 16)\n writer.pos = packetSize\n\n const msgIds = []\n\n for (let i = 0; i < rpcToSend.length; i++) {\n const msg = rpcToSend[i]\n msg.containerId = containerId\n msgIds.push(msg.msgId!)\n }\n\n if (otherPendings.length) {\n otherPendings.forEach((msg) => {\n msgIds.push(msg.containerId)\n msg.containerId = containerId\n })\n }\n\n this._session.pendingMessages.set(containerId, {\n _: 'container',\n msgIds,\n })\n }\n\n const result = writer.result()\n\n this.log.debug(\n 'sending %d messages: size = %db, acks = %L, ping = %b (msg_id = %l), state_req = %L (msg_id = %l), resend = %L (msg_id = %l), cancels = %L (msg_id = %l), salts_req = %b (msg_id = %l), rpc = %s, container = %b, root msg_id = %l',\n messageCount,\n packetSize,\n ackMsgIds,\n pingRequest,\n pingMsgId,\n getStateMsgIds,\n getStateMsgId,\n resendMsgIds,\n cancelRpcs,\n cancelRpcs,\n resendMsgId,\n getFutureSaltsRequest,\n getFutureSaltsMsgId,\n rpcToSend.map((it) => it.method),\n useContainer,\n rootMsgId,\n )\n\n const enc = this._session.encryptMessage(result)\n const promise = this.send(enc).catch((err: Error) => {\n this.log.error('error while sending pending messages (root msg_id = %l): %s', rootMsgId, err.stack)\n\n // put acks in the front so they are the first to be sent\n if (ackMsgIds) {\n this._session.queuedAcks.splice(0, 0, ...ackMsgIds)\n }\n if (rootMsgId) {\n this._onMessageFailed(rootMsgId, 'unknown error')\n }\n })\n\n if (this._inactivityPendingFlush && !this._session.hasPendingMessages) {\n void promise.then(() => {\n this.log.debug('pending messages sent, closing connection')\n this._flushTimer.reset()\n this._inactivityPendingFlush = false\n\n super._onInactivityTimeout()\n })\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session-connection.js","sourceRoot":"","sources":["../../../src/network/session-connection.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n// will be reworked in MTQ-32\nimport Long from 'long'\n\nimport { mtp, tl } from '@mtcute/tl'\nimport { TlBinaryReader, TlBinaryWriter, TlReaderMap, TlSerializationCounter, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { getPlatform } from '../platform.js'\nimport { MtArgumentError, MtcuteError, MtTimeoutError } from '../types/index.js'\nimport { createAesIgeForMessageOld } from '../utils/crypto/mtproto.js'\nimport { reportUnknownError } from '../utils/error-reporting.js'\nimport {\n concatBuffers,\n ControllablePromise,\n createControllablePromise,\n EarlyTimer,\n ICryptoProvider,\n longFromBuffer,\n randomLong,\n removeFromLongArray,\n} from '../utils/index.js'\nimport { doAuthorization } from './authorization.js'\nimport { MtprotoSession, PendingMessage, PendingRpc } from './mtproto-session.js'\nimport { PersistentConnection, PersistentConnectionParams } from './persistent-connection.js'\nimport { ServerSaltManager } from './server-salt.js'\nimport { TransportError } from './transports/abstract.js'\n\nexport interface SessionConnectionParams extends PersistentConnectionParams {\n initConnection: tl.RawInitConnectionRequest\n inactivityTimeout?: number\n niceStacks?: boolean\n enableErrorReporting: boolean\n layer: number\n disableUpdates?: boolean\n withUpdates?: boolean\n isMainConnection: boolean\n isMainDcConnection: boolean\n usePfs?: boolean\n\n salts: ServerSaltManager\n\n readerMap: TlReaderMap\n writerMap: TlWriterMap\n}\n\nconst TEMP_AUTH_KEY_EXPIRY = 86400 // 24 hours\nconst PING_INTERVAL = 60000 // 1 minute\nconst GET_STATE_INTERVAL = 1500 // 1.5 seconds\n\n// destroy_auth_key#d1435160 = DestroyAuthKeyRes;\n// const DESTROY_AUTH_KEY = Buffer.from('605134d1', 'hex')\n// gzip_packed#3072cfa1 packed_data:string = Object;\nconst GZIP_PACKED_ID = 0x3072cfa1\n// msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;\nconst MSG_CONTAINER_ID = 0x73f1f8dc\n// rpc_result#f35c6d01 req_msg_id:long result:Object = RpcResult;\nconst RPC_RESULT_ID = 0xf35c6d01\n// invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;\nconst INVOKE_AFTER_MSG_ID = 0xcb9f372d\nconst INVOKE_AFTER_MSG_SIZE = 12 // 8 (invokeAfterMsg) + 4 (msg_id)\n\nfunction makeNiceStack(error: tl.RpcError, stack: string, method?: string) {\n error.stack = `RpcError (${error.code} ${error.text}): ${error.message}\\n at ${method}\\n${stack\n .split('\\n')\n .slice(2)\n .join('\\n')}`\n}\n\n/**\n * A connection to a single DC.\n */\nexport class SessionConnection extends PersistentConnection {\n readonly params!: SessionConnectionParams\n\n private _flushTimer = new EarlyTimer()\n private _queuedDestroySession: Long[] = []\n\n // waitForMessage\n private _pendingWaitForUnencrypted: [ControllablePromise<Uint8Array>, NodeJS.Timeout][] = []\n\n private _usePfs = this.params.usePfs ?? false\n private _isPfsBindingPending = false\n private _isPfsBindingPendingInBackground = false\n private _pfsUpdateTimeout?: NodeJS.Timeout\n\n private _inactivityPendingFlush = false\n\n private _readerMap: TlReaderMap\n private _writerMap: TlWriterMap\n private _crypto: ICryptoProvider\n private _salts: ServerSaltManager\n\n constructor(\n params: SessionConnectionParams,\n readonly _session: MtprotoSession,\n ) {\n super(params, _session.log.create('conn'))\n this._flushTimer.onTimeout(this._flush.bind(this))\n\n this._readerMap = params.readerMap\n this._writerMap = params.writerMap\n this._crypto = params.crypto\n this._salts = params.salts\n this._handleRawMessage = this._handleRawMessage.bind(this)\n }\n\n private _online = getPlatform().isOnline?.() ?? true\n\n getAuthKey(temp = false): Uint8Array | null {\n const key = temp ? this._session._authKeyTemp : this._session._authKey\n\n if (!key.ready) return null\n\n return key.key\n }\n\n setUsePfs(usePfs: boolean): void {\n if (this._usePfs === usePfs) return\n\n this.log.debug('use pfs changed to %s', usePfs)\n this._usePfs = usePfs\n\n if (!usePfs) {\n this._isPfsBindingPending = false\n this._isPfsBindingPendingInBackground = false\n this._session._authKeyTemp.reset()\n clearTimeout(this._pfsUpdateTimeout)\n }\n\n this._resetSession()\n }\n\n onTransportClose(): void {\n super.onTransportClose()\n\n Object.values(this._pendingWaitForUnencrypted).forEach(([prom, timeout]) => {\n prom.reject(new MtcuteError('Connection closed'))\n clearTimeout(timeout)\n })\n\n this.emit('disconnect')\n\n this.reset()\n }\n\n destroy(): void {\n super.destroy()\n this.reset(true)\n }\n\n reset(forever = false): void {\n this._session.initConnectionCalled = false\n this._flushTimer.reset()\n this._salts.isFetching = false\n\n if (forever) {\n this.removeAllListeners()\n }\n }\n\n onConnected(): void {\n // check if we have all the needed keys\n if (!this._session._authKey.ready) {\n if (!this.params.isMainConnection) {\n this.log.info('no auth key, waiting for main connection')\n\n // once it is done, we will be notified\n return\n }\n\n this.log.info('no perm auth key, authorizing...')\n this._authorize()\n\n // if we use pfs, we *could* also start temp key exchange here\n // but telegram restricts us to only have one auth session per connection,\n // and having a separate connection for pfs is not worth it\n return\n }\n\n if (this._usePfs && !this._session._authKeyTemp.ready) {\n this.log.info('no temp auth key but using pfs, authorizing')\n this._authorizePfs()\n\n return\n }\n\n this.log.info('auth keys are already available')\n this.onConnectionUsable()\n }\n\n protected onError(error: Error): void {\n // https://core.telegram.org/mtproto/mtproto-_transports#_transport-errors\n if (error instanceof TransportError) {\n if (error.code === 404) {\n // if we are using pfs, this could be due to the server\n // forgetting our temp key (which is kinda weird but expected)\n\n if (this._usePfs) {\n if (!this._isPfsBindingPending && this._session._authKeyTemp.ready) {\n this.log.info('transport error 404, reauthorizing pfs')\n\n // this is important! we must reset temp auth key before\n // we proceed with new temp key derivation.\n // otherwise, we can end up in an infinite loop in case it\n // was actually perm_key that got 404-ed\n //\n // if temp key binding is already in process in background,\n // _authorizePfs will mark it as foreground to prevent new\n // queries from being sent (to avoid even more 404s)\n this._session._authKeyTemp.reset()\n this._authorizePfs()\n this._onAllFailed('temp key expired, binding started')\n\n return\n } else if (this._isPfsBindingPending) {\n this.log.info('transport error 404, pfs binding in progress')\n\n this._onAllFailed('temp key expired, binding pending')\n\n return\n }\n\n // otherwise, 404 must be referencing the perm_key\n }\n\n // there happened a little trolling\n this.log.info('transport error 404, reauthorizing')\n this._session.resetAuthKey()\n this._resetSession()\n this.emit('key-change', null)\n\n return\n }\n\n this.log.error('transport error %d', error.code)\n // all pending queries must be resent\n this._onAllFailed(`transport error ${error.code}`)\n\n if (error.code === 429) {\n this._session.onTransportFlood(this.emit.bind(this, 'flood-done'))\n\n return\n }\n }\n\n this.emit('error', error)\n }\n\n protected onConnectionUsable() {\n super.onConnectionUsable()\n\n if (this.params.withUpdates) {\n // we must send some user-related rpc to the server to make sure that\n // it will send us updates\n this.sendRpc({ _: 'updates.getState' }).catch((err: any) => {\n if (this._destroyed) return // silently fail\n this.log.warn('failed to send updates.getState: %s', err.text || err.message)\n })\n }\n\n // just in case\n this._flushTimer.emitBeforeNext(1000)\n }\n\n _authorize(): void {\n if (this._session.authorizationPending) {\n this.log.info('_authorize(): authorization already in progress')\n\n return\n }\n\n if (!this.params.isMainConnection) {\n // we don't authorize on non-main connections\n this.log.debug('_authorize(): non-main connection, requesting...')\n this.emit('request-auth')\n\n return\n }\n\n this._session.authorizationPending = true\n this.emit('auth-begin')\n\n doAuthorization(this, this._crypto)\n .then(([authKey, serverSalt, timeOffset]) => {\n this._session._authKey.setup(authKey)\n this._salts.currentSalt = serverSalt\n this._session.updateTimeOffset(timeOffset)\n\n this._session.authorizationPending = false\n\n this.emit('key-change', authKey)\n\n if (this._usePfs) {\n return this._authorizePfs()\n }\n this.onConnectionUsable()\n })\n .catch((err: Error) => {\n this._session.authorizationPending = false\n this.log.error('Authorization error: %s', err.message)\n this.onError(err)\n this.reconnect()\n })\n }\n\n private _authorizePfs(background = false): void {\n if (this._isPfsBindingPending) return\n\n if (this._pfsUpdateTimeout) {\n clearTimeout(this._pfsUpdateTimeout)\n this._pfsUpdateTimeout = undefined\n }\n\n if (this._isPfsBindingPendingInBackground) {\n // e.g. temp key has expired while we were binding a key in the background\n // in this case, we shouldn't start pfs binding again, and instead wait for\n // current operation to complete\n this._isPfsBindingPendingInBackground = false\n this._isPfsBindingPending = true\n\n return\n }\n\n if (background) {\n this._isPfsBindingPendingInBackground = true\n } else {\n this._isPfsBindingPending = true\n }\n\n doAuthorization(this, this._crypto, TEMP_AUTH_KEY_EXPIRY)\n .then(async ([tempAuthKey, tempServerSalt]) => {\n if (!this._usePfs) {\n this.log.info('pfs has been disabled while generating temp key')\n\n return\n }\n\n const tempKey = this._session._authKeyTempSecondary\n tempKey.setup(tempAuthKey)\n\n const msgId = this._session.getMessageId()\n\n this.log.debug(\n 'binding temp_auth_key (%h) to perm_auth_key (%h), msg_id = %l...',\n tempKey.id,\n this._session._authKey.id,\n msgId,\n )\n\n // we now need to bind the key\n const inner: mtp.RawMt_bind_auth_key_inner = {\n _: 'mt_bind_auth_key_inner',\n nonce: randomLong(),\n tempAuthKeyId: longFromBuffer(tempKey.id),\n permAuthKeyId: longFromBuffer(this._session._authKey.id),\n tempSessionId: this._session._sessionId,\n expiresAt: Math.floor(Date.now() / 1000) + TEMP_AUTH_KEY_EXPIRY,\n }\n\n // encrypt using mtproto v1 (fucking kill me plz)\n\n const writer = TlBinaryWriter.alloc(this.params.writerMap, 80)\n // = 40 (inner length) + 32 (mtproto header) + 8 (pad 72 so mod 16 = 0)\n\n writer.raw(this._crypto.randomBytes(16))\n writer.long(msgId)\n writer.int(0) // seq_no\n writer.int(40) // msg_len\n writer.object(inner)\n\n const msgWithoutPadding = writer.result()\n writer.raw(this._crypto.randomBytes(8))\n const msgWithPadding = writer.result()\n\n const hash = this._crypto.sha1(msgWithoutPadding)\n const msgKey = hash.subarray(4, 20)\n\n const ige = createAesIgeForMessageOld(this._crypto, this._session._authKey.key, msgKey, true)\n const encryptedData = ige.encrypt(msgWithPadding)\n const encryptedMessage = concatBuffers([this._session._authKey.id, msgKey, encryptedData])\n\n const promise = createControllablePromise<mtp.RawMt_rpc_error | boolean>()\n\n // encrypt the message using temp key and same msg id\n // this is a bit of a hack, but it works\n //\n // hacking inside main send loop to allow sending\n // with another key is just too much hassle.\n // we could just always use temp key if one is available,\n // but that way we won't be able to refresh the key\n // that is about to expire in the background without\n // interrupting actual message flow\n // decrypting is trivial though, since key id\n // is in the first bytes of the message, and is never used later on.\n\n this._session.pendingMessages.set(msgId, {\n _: 'bind',\n promise,\n })\n\n const request: tl.auth.RawBindTempAuthKeyRequest = {\n _: 'auth.bindTempAuthKey',\n permAuthKeyId: inner.permAuthKeyId,\n nonce: inner.nonce,\n expiresAt: inner.expiresAt,\n encryptedMessage,\n }\n const reqSize = TlSerializationCounter.countNeededBytes(this._writerMap, request)\n const reqWriter = TlBinaryWriter.alloc(this._writerMap, reqSize + 16)\n reqWriter.long(this._registerOutgoingMsgId(msgId))\n reqWriter.uint(this._session.getSeqNo())\n reqWriter.uint(reqSize)\n reqWriter.object(request)\n\n // we can now send it as is\n const requestEncrypted = tempKey.encryptMessage(\n reqWriter.result(),\n tempServerSalt,\n this._session._sessionId,\n )\n await this.send(requestEncrypted)\n\n const res = await promise\n\n this._session.pendingMessages.delete(msgId)\n\n if (!this._usePfs) {\n this.log.info('pfs has been disabled while binding temp key')\n\n return\n }\n\n if (typeof res === 'object') {\n this.log.error('failed to bind temp key: %s:%s', res.errorCode, res.errorMessage)\n throw new MtcuteError('Failed to bind temporary key')\n }\n\n // now we can swap the keys (secondary becomes primary,\n // and primary is not immediately forgot because messages using it may still be in flight)\n\n this._session._authKeyTempSecondary = this._session._authKeyTemp\n this._session._authKeyTemp = tempKey\n this._salts.currentSalt = tempServerSalt\n\n this.log.debug('temp key has been bound, exp = %d', inner.expiresAt)\n\n this._isPfsBindingPending = false\n this._isPfsBindingPendingInBackground = false\n\n // we must re-init connection after binding temp key\n this._session.initConnectionCalled = false\n\n this.emit('tmp-key-change', tempAuthKey, inner.expiresAt)\n this.onConnectionUsable()\n\n // set a timeout to update temp auth key in advance to avoid interruption\n this._pfsUpdateTimeout = setTimeout(\n () => {\n this._pfsUpdateTimeout = undefined\n this.log.debug('temp key is expiring soon')\n this._authorizePfs(true)\n },\n (TEMP_AUTH_KEY_EXPIRY - 60) * 1000,\n )\n })\n .catch((err: Error) => {\n this.log.error('PFS Authorization error: %s', err.message)\n\n if (this._isPfsBindingPendingInBackground) {\n this._isPfsBindingPendingInBackground = false\n\n // if we are in background, we can just retry\n return this._authorizePfs(true)\n }\n\n this._isPfsBindingPending = false\n this.onError(err)\n this.reconnect()\n })\n }\n\n waitForUnencryptedMessage(timeout = 5000): Promise<Uint8Array> {\n const promise = createControllablePromise<Uint8Array>()\n const timeoutId = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._pendingWaitForUnencrypted = this._pendingWaitForUnencrypted.filter((it) => it[0] !== promise)\n }, timeout)\n this._pendingWaitForUnencrypted.push([promise, timeoutId])\n\n return promise\n }\n\n protected onMessage(data: Uint8Array): void {\n if (this._pendingWaitForUnencrypted.length) {\n const int32 = new Int32Array(data.buffer, data.byteOffset, 2)\n\n if (int32[0] === 0 && int32[1] === 0) {\n // auth_key_id = 0, meaning it's an unencrypted message used for authorization\n\n const [promise, timeout] = this._pendingWaitForUnencrypted.shift()!\n clearTimeout(timeout)\n promise.resolve(data)\n\n return\n }\n }\n\n if (!this._session._authKey.ready) {\n // if a message is received before authorization,\n // either the server is misbehaving,\n // or there was a problem with authorization.\n this.log.warn('received message before authorization: %h', data)\n\n return\n }\n\n try {\n this._session.decryptMessage(data, this._handleRawMessage)\n } catch (err) {\n this.log.error('failed to decrypt message: %s\\ndata: %h', err, data)\n }\n }\n\n private _handleRawMessage(messageId: Long, seqNo: number, message: TlBinaryReader): void {\n const objectId = message.uint()\n\n if (objectId === GZIP_PACKED_ID) {\n return this._handleRawMessage(\n messageId,\n seqNo,\n new TlBinaryReader(this._readerMap, this._crypto.gunzip(message.bytes())),\n )\n }\n\n if (objectId === MSG_CONTAINER_ID) {\n const count = message.uint()\n\n for (let i = 0; i < count; i++) {\n // msg_id:long seqno:int bytes:int\n const msgId = message.long()\n const seqNo = message.uint() // seqno\n const length = message.uint()\n\n // container can't contain other containers, but can contain rpc_result\n const obj = message.raw(length)\n\n this._handleRawMessage(msgId, seqNo, new TlBinaryReader(this._readerMap, obj))\n }\n\n return\n }\n\n if (objectId === RPC_RESULT_ID) {\n return this._onRpcResult(messageId, message)\n }\n\n // we are safe.. i guess\n this._handleMessage(messageId, message.object(objectId))\n }\n\n private _handleMessage(messageId: Long, message_: unknown): void {\n if (messageId.isEven()) {\n this.log.warn('warn: ignoring message with invalid messageId = %s (is even)', messageId)\n\n return\n }\n\n if (this._session.recentIncomingMsgIds.has(messageId)) {\n this.log.debug('ignoring duplicate message %s', messageId)\n\n return\n }\n const message = message_ as mtp.TlObject\n\n this.log.debug('received %s (msg_id: %l)', message._, messageId)\n this._session.recentIncomingMsgIds.add(messageId)\n\n switch (message._) {\n case 'mt_msgs_ack':\n case 'mt_http_wait':\n case 'mt_bad_msg_notification':\n case 'mt_bad_server_salt':\n case 'mt_msgs_all_info':\n case 'mt_msgs_state_info':\n case 'mt_msg_detailed_info':\n case 'mt_msg_new_detailed_info':\n break\n default:\n this._sendAck(messageId)\n }\n\n switch (message._) {\n case 'mt_pong':\n this._onPong(message)\n break\n case 'mt_bad_server_salt':\n this._onBadServerSalt(message)\n break\n case 'mt_bad_msg_notification':\n this._onBadMsgNotification(messageId, message)\n break\n case 'mt_msgs_ack':\n message.msgIds.forEach((msgId) => this._onMessageAcked(msgId))\n break\n case 'mt_new_session_created':\n this._onNewSessionCreated(message)\n break\n case 'mt_msgs_all_info':\n this._onMessagesInfo(message.msgIds, message.info)\n break\n case 'mt_msg_detailed_info':\n this._onMessageInfo(message.msgId, message.status, message.answerMsgId)\n break\n case 'mt_msg_new_detailed_info':\n this._onMessageInfo(Long.ZERO, 0, message.answerMsgId)\n break\n case 'mt_msgs_state_info':\n this._onMsgsStateInfo(message)\n break\n case 'mt_future_salts':\n this._onFutureSalts(message)\n break\n case 'mt_msgs_state_req':\n case 'mt_msg_resend_req':\n // tdlib doesnt handle them, so why should we? :upside_down_face:\n this.log.warn('received %s (msg_id = %l): %j', message._, messageId, message)\n break\n case 'mt_destroy_session_ok':\n case 'mt_destroy_session_none':\n this._onDestroySessionResult(message)\n break\n default:\n if (tl.isAnyUpdates(message)) {\n if (this._usable && this.params.inactivityTimeout) {\n this._rescheduleInactivity()\n }\n\n this.log.verbose('<<< %j', message)\n\n if (this.params.disableUpdates) {\n this.log.warn('received updates, but updates are disabled')\n // likely due to some request in the session missing invokeWithoutUpdates\n break\n }\n\n this.emit('update', message)\n\n return\n }\n\n this.log.warn('unknown message received: %j', message)\n }\n }\n\n private _onRpcResult(messageId: Long, message: TlBinaryReader): void {\n if (this._usable && this.params.inactivityTimeout) {\n this._rescheduleInactivity()\n }\n\n const reqMsgId = message.long()\n\n if (reqMsgId.isZero()) {\n let resultType\n\n try {\n // eslint-disable-next-line\n resultType = (message.object() as any)._\n } catch (err) {\n resultType = message.peekUint()\n }\n this.log.warn('received rpc_result with %j with req_msg_id = 0', resultType)\n\n return\n }\n\n const msg = this._session.pendingMessages.get(reqMsgId)\n\n if (!msg) {\n let result\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n result = message.object() as any\n } catch (err) {\n result = '[failed to parse]'\n }\n\n // check if the msg is one of the recent ones\n if (this._session.recentOutgoingMsgIds.has(reqMsgId)) {\n this.log.debug('received rpc_result again for %l (contains %j)', reqMsgId, result)\n } else {\n this.log.warn('received rpc_result for unknown message %l: %j', reqMsgId, result)\n }\n\n return\n }\n\n this._sendAck(messageId)\n\n // special case for auth key binding\n if (msg._ !== 'rpc') {\n if (msg._ === 'bind') {\n this._sendAck(messageId)\n msg.promise.resolve(message.object())\n\n return\n }\n\n if (msg._ === 'cancel') {\n let result\n\n try {\n result = message.object() as mtp.TlObject\n } catch (err) {\n this.log.debug('failed to parse rpc_result for cancel request %l, ignoring', reqMsgId)\n\n return\n }\n\n this.log.debug('received %s for cancelled request %l: %j', result._, reqMsgId, result)\n this._onMessageAcked(reqMsgId)\n\n return\n }\n\n this.log.error('received rpc_result for %s request %l', msg._, reqMsgId)\n\n return\n }\n\n const rpc = msg.rpc\n\n const customReader = this._readerMap._results![rpc.method]\n\n let result: any\n\n if (customReader) {\n result = customReader(message)\n } else {\n const objectId = message.uint()\n\n if (objectId === GZIP_PACKED_ID) {\n const inner = this._crypto.gunzip(message.bytes())\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n result = TlBinaryReader.deserializeObject(this._readerMap, inner)\n } else {\n result = message.object(objectId)\n }\n }\n\n // initConnection call was definitely received and\n // processed by the server, so we no longer need to use it\n // todo: is this the case with failed invokeAfterMsg(s) as well?\n if (rpc.initConn) {\n this._session.initConnectionCalled = true\n }\n\n rpc.done = true\n\n this.log.verbose('<<< (%s:%l) %j', rpc.method, reqMsgId, result)\n\n if (result._ === 'mt_rpc_error') {\n const res = result as mtp.RawMt_rpc_error\n this.log.debug(\n 'received rpc_error [%d:%s] for %l (%s)',\n res.errorCode,\n res.errorMessage,\n reqMsgId,\n rpc.method,\n )\n\n if (rpc.cancelled) return\n\n switch (res.errorMessage) {\n case 'AUTH_KEY_PERM_EMPTY':\n // happens when temp auth key is not yet bound\n // this shouldn't happen as we block any outbound communications\n // until the temp key is derived and bound.\n //\n // i think it is also possible for the error to be returned\n // when the temp key has expired, but this still shouldn't happen\n // but this is tg, so something may go wrong, and we will receive this as an error\n // (for god's sake why is this not in mtproto and instead hacked into the app layer)\n this._authorizePfs()\n this._onMessageFailed(reqMsgId, 'AUTH_KEY_PERM_EMPTY', true)\n\n return\n case 'CONNECTION_NOT_INITED': {\n // this seems to sometimes happen when using pfs\n // no idea why, but tdlib also seems to handle these, so whatever\n\n this._session.initConnectionCalled = false\n this._onMessageFailed(reqMsgId, res.errorMessage, true)\n\n // just setting this flag is not enough because the message\n // is already serialized, so we do this awesome hack\n this.sendRpc({ _: 'help.getNearestDc' })\n .then(() => {\n this.log.debug('additional help.getNearestDc for initConnection ok')\n })\n .catch((err) => {\n this.log.debug('additional help.getNearestDc for initConnection error: %s', err)\n })\n\n return\n }\n case 'MSG_WAIT_TIMEOUT':\n case 'MSG_WAIT_FAILED': {\n if (!rpc.invokeAfter) {\n this.log.warn('received %s for non-chained request %l', res.errorMessage, reqMsgId)\n\n break\n }\n\n // in some cases, MSG_WAIT_TIMEOUT is returned instead of MSG_WAIT_FAILED when one of the deps\n // failed with MSG_WAIT_TIMEOUT. i have no clue why, this makes zero sense, but what fucking ever\n //\n // this basically means we can't handle a timeout any different than a general failure,\n // because the timeout might not refer to the immediate `.invokeAfter` message, but to\n // its arbitrary-depth dependency, so we indeed have to wait for the message ourselves...\n\n if (this._session.pendingMessages.has(rpc.invokeAfter)) {\n // the dependency is still pending, postpone the processing\n this.log.debug(\n 'chain %s: waiting for %l before processing %l',\n rpc.chainId,\n rpc.invokeAfter,\n reqMsgId,\n )\n this._session.getPendingChainedFails(rpc.chainId!).insert(rpc)\n } else {\n this._session.chains.delete(rpc.chainId!)\n this._onMessageFailed(reqMsgId, 'MSG_WAIT_FAILED', true)\n }\n\n return\n }\n }\n\n const error = tl.RpcError.fromTl(res)\n\n if (this.params.niceStacks !== false) {\n makeNiceStack(error, rpc.stack!, rpc.method)\n }\n\n if (error.unknown && this.params.enableErrorReporting) {\n reportUnknownError(this.log, error, rpc.method)\n }\n\n rpc.promise.reject(error)\n } else {\n this.log.debug('received rpc_result (%s) for request %l (%s)', result._, reqMsgId, rpc.method)\n\n if (rpc.cancelled) return\n\n rpc.promise.resolve(result)\n }\n\n if (rpc.chainId) {\n this._processPendingChainedFails(rpc.chainId, reqMsgId)\n }\n\n this._onMessageAcked(reqMsgId)\n this._session.pendingMessages.delete(reqMsgId)\n }\n\n private _processPendingChainedFails(chainId: number | string, sinceMsgId: Long): void {\n // sinceMsgId was already definitely received and contained an error.\n // we should now re-send all the pending MSG_WAIT_FAILED after it\n this._session.removeFromChain(chainId, sinceMsgId)\n\n const oldPending = this._session.chainsPendingFails.get(chainId)\n\n if (!oldPending?.length) {\n return\n }\n\n const idx = oldPending.index({ invokeAfter: sinceMsgId } as PendingRpc, true)\n if (idx === -1) return\n\n const toFail = oldPending.raw.splice(idx)\n\n this.log.debug('chain %s: failing %d dependant messages: %L', chainId, toFail.length, toFail)\n\n // we're failing the rest of the chain, including the last message\n this._session.chains.delete(chainId)\n\n for (const rpc of toFail) {\n this._onMessageFailed(rpc.msgId!, 'MSG_WAIT_FAILED', true)\n }\n }\n\n private _onMessageAcked(msgId: Long, inContainer = false): void {\n const msg = this._session.pendingMessages.get(msgId)\n\n if (!msg) {\n if (!this._session.recentOutgoingMsgIds.has(msgId)) {\n this.log.warn('received ack for unknown message %l', msgId)\n }\n\n return\n }\n\n switch (msg._) {\n case 'container':\n this.log.debug('received ack for container %l (size = %d)', msgId, msg.msgIds.length)\n\n msg.msgIds.forEach((msgId) => this._onMessageAcked(msgId, true))\n\n // we no longer need info about the container\n this._session.pendingMessages.delete(msgId)\n break\n\n case 'rpc': {\n const rpc = msg.rpc\n this.log.debug('received ack for rpc query %l (%s, acked before = %s)', msgId, rpc.method, rpc.acked)\n\n rpc.acked = true\n\n if (!inContainer && rpc.containerId && this._session.pendingMessages.has(rpc.containerId)) {\n // ack all the messages in that container\n this._onMessageAcked(rpc.containerId)\n }\n\n // this message could also already be in some queue,\n removeFromLongArray(this._session.queuedStateReq, msgId)\n removeFromLongArray(this._session.queuedResendReq, msgId)\n\n // if resend/state was already requested, it will simply be ignored\n\n this._session.getStateSchedule.remove(rpc)\n break\n }\n case 'bind':\n case 'cancel':\n break // do nothing, wait for the result\n\n default:\n if (!inContainer) {\n this.log.warn('received unexpected ack for %s query %l', msg._, msgId)\n }\n }\n }\n\n private _onAllFailed(reason: string) {\n // called when all the pending messages are to be resent\n // e.g. when server returns 429\n\n // most service messages can be omitted as stale\n\n for (const msgId of this._session.pendingMessages.keys()) {\n const info = this._session.pendingMessages.get(msgId)!\n\n switch (info._) {\n case 'container':\n case 'state':\n case 'resend':\n case 'ping':\n // no longer relevant\n this._session.pendingMessages.delete(msgId)\n break\n default:\n this._onMessageFailed(msgId, reason, true)\n break\n }\n }\n }\n\n private _onMessageFailed(msgId: Long, reason: string, inContainer = false): void {\n const msgInfo = this._session.pendingMessages.get(msgId)\n\n if (!msgInfo) {\n this.log.debug('unknown message %l failed because of %s', msgId, reason)\n\n return\n }\n\n switch (msgInfo._) {\n case 'container':\n this.log.debug('container %l (size = %d) failed because of %s', msgId, msgInfo.msgIds.length, reason)\n msgInfo.msgIds.forEach((msgId) => this._onMessageFailed(msgId, reason, true))\n break\n case 'ping':\n this.log.debug('ping (msg_id = %l) failed because of %s', msgId, reason)\n // restart ping\n this._session.resetLastPing(true)\n break\n\n case 'rpc': {\n const rpc = msgInfo.rpc\n this.log.debug('rpc query %l (%s) failed because of %s', msgId, rpc.method, reason)\n\n // since the query was rejected, we can let it reassign msg_id to avoid containers\n this._session.pendingMessages.delete(msgId)\n rpc.msgId = undefined\n this._enqueueRpc(rpc, true)\n\n if (!inContainer && rpc.containerId && this._session.pendingMessages.has(rpc.containerId)) {\n // fail all the messages in that container\n this._onMessageFailed(rpc.containerId, reason)\n }\n\n // this message could also already be in some queue,\n removeFromLongArray(this._session.queuedStateReq, msgId)\n removeFromLongArray(this._session.queuedResendReq, msgId)\n\n // if resend/state was already requested, it will simply be ignored\n\n this._session.getStateSchedule.remove(rpc)\n\n break\n }\n case 'resend':\n this.log.debug(\n 'resend request %l (size = %d) failed because of %s',\n msgId,\n msgInfo.msgIds.length,\n reason,\n )\n this._session.queuedResendReq.splice(0, 0, ...msgInfo.msgIds)\n this._flushTimer.emitWhenIdle()\n break\n case 'state':\n this.log.debug(\n 'state request %l (size = %d) failed because of %s',\n msgId,\n msgInfo.msgIds.length,\n reason,\n )\n this._session.queuedStateReq.splice(0, 0, ...msgInfo.msgIds)\n this._flushTimer.emitWhenIdle()\n break\n case 'bind':\n this.log.debug('temp key binding request %l failed because of %s, retrying', msgId, reason)\n msgInfo.promise.reject(Error(reason))\n break\n case 'future_salts':\n this.log.debug('future_salts request %l failed because of %s, will retry', msgId, reason)\n this._salts.isFetching = false\n // this is enough to make it retry on the next flush.\n break\n }\n\n this._session.pendingMessages.delete(msgId)\n }\n\n private _registerOutgoingMsgId(msgId: Long): Long {\n this._session.recentOutgoingMsgIds.add(msgId)\n\n return msgId\n }\n\n private _onPong({ msgId, pingId }: mtp.RawMt_pong): void {\n const info = this._session.pendingMessages.get(msgId)\n\n if (!info) {\n this.log.warn('received pong to unknown ping (msg_id %l, ping_id %l)', msgId, pingId)\n\n return\n }\n\n if (info._ !== 'ping') {\n this.log.warn('received pong to %s query, not ping (msg_id %l, ping_id %l)', info._, msgId, pingId)\n\n return\n }\n\n if (info.pingId.neq(pingId)) {\n this.log.warn('received pong to %l, but expected ping_id = %l (got %l)', msgId, info.pingId, pingId)\n }\n\n const rtt = Date.now() - this._session.lastPingTime\n this._session.lastPingRtt = rtt\n\n if (info.containerId.neq(msgId)) {\n this._onMessageAcked(info.containerId)\n }\n\n this.log.debug('received pong: msg_id %l, ping_id %l, rtt = %dms', msgId, pingId, rtt)\n this._session.resetLastPing()\n }\n\n private _onBadServerSalt(msg: mtp.RawMt_bad_server_salt): void {\n this._salts.currentSalt = msg.newServerSalt\n\n this._onMessageFailed(msg.badMsgId, 'bad_server_salt')\n }\n\n private _onBadMsgNotification(msgId: Long, msg: mtp.RawMt_bad_msg_notification): void {\n switch (msg.errorCode) {\n case 16:\n case 17:\n case 20: {\n if (msg.errorCode !== 20) {\n // msg_id is either too high or too low\n // code 20 means msg_id is too old,\n // we just need to resend the message\n const serverTime = msgId.high >>> 0\n const timeOffset = Math.floor(Date.now() / 1000) - serverTime\n\n this._session.updateTimeOffset(timeOffset)\n this.log.debug('server time: %d, corrected offset to %d', serverTime, timeOffset)\n }\n\n this._onMessageFailed(msg.badMsgId, `bad_msg_notification ${msg.errorCode}`)\n break\n }\n default:\n // something went very wrong, we need to reset the session\n this.log.error(\n 'received bad_msg_notification for msg_id = %l, code = %d. session will be reset',\n msg.badMsgId,\n msg.errorCode,\n )\n this._resetSession()\n break\n }\n }\n\n private _onNewSessionCreated({ firstMsgId, serverSalt, uniqueId }: mtp.RawMt_new_session_created): void {\n if (uniqueId.eq(this._session.lastSessionCreatedUid)) {\n this.log.debug('received new_session_created with the same uid = %l, ignoring', uniqueId)\n\n return\n }\n\n if (!this._session.lastSessionCreatedUid.isZero() && !this.params.disableUpdates) {\n // force the client to fetch missed updates\n // when _lastSessionCreatedUid == 0, the connection has\n // just been established, and the client will fetch them anyways\n this.emit('update', { _: 'updatesTooLong' })\n }\n\n this._salts.currentSalt = serverSalt\n\n this.log.debug('received new_session_created, uid = %l, first msg_id = %l', uniqueId, firstMsgId)\n\n for (const msgId of this._session.pendingMessages.keys()) {\n const val = this._session.pendingMessages.get(msgId)!\n\n if (val._ === 'bind') {\n // should NOT happen.\n if (msgId.lt(firstMsgId)) {\n this._onMessageFailed(msgId, 'received in wrong session')\n }\n continue\n }\n\n if (val._ === 'container') {\n if (msgId.lt(firstMsgId)) {\n // all messages in this container will be resent\n // info about this container is no longer needed\n this._session.pendingMessages.delete(msgId)\n }\n\n return\n }\n\n const containerId = val._ === 'rpc' ? val.rpc.containerId || msgId : val.containerId\n\n if (containerId.lt(firstMsgId)) {\n this._onMessageFailed(msgId, 'new_session_created', true)\n }\n }\n }\n\n private _onMessageInfo(msgId: Long, status: number, answerMsgId: Long): void {\n if (!msgId.isZero()) {\n const info = this._session.pendingMessages.get(msgId)\n\n if (!info) {\n if (!this._session.recentOutgoingMsgIds.has(msgId)) {\n this.log.warn('received message info about unknown message %l', msgId)\n }\n\n return\n }\n\n switch (status & 7) {\n case 1:\n case 2:\n case 3:\n // message wasn't received by the server\n return this._onMessageFailed(msgId, `message info state ${status}`)\n break\n\n case 0:\n if (!answerMsgId.isZero()) {\n this.log.warn(\n 'received message info with status = 0: msg_id = %l, status = %d, ans_id = %l',\n msgId,\n status,\n answerMsgId,\n )\n\n return this._onMessageFailed(msgId, 'message info state = 0, ans_id = 0')\n }\n // fallthrough\n case 4:\n this._onMessageAcked(msgId)\n break\n }\n }\n\n if (!answerMsgId.isZero() && !this._session.recentIncomingMsgIds.has(answerMsgId)) {\n this.log.debug('received message info for %l, but answer (%l) was not received yet', msgId, answerMsgId)\n this._session.queuedResendReq.push(answerMsgId)\n this._flushTimer.emitWhenIdle()\n\n return\n }\n\n if (answerMsgId.isZero()) {\n this.log.debug('received message info for %l: message is still pending (status = %d)', msgId, status)\n\n return\n }\n\n this.log.debug('received message info for %l, and answer (%l) was already received', msgId, answerMsgId)\n }\n\n private _onMessagesInfo(msgIds: Long[], info: Uint8Array): void {\n if (msgIds.length !== info.length) {\n this.log.warn('messages state info was invalid: msg_ids.length !== info.length')\n }\n\n for (let i = 0; i < msgIds.length; i++) {\n this._onMessageInfo(msgIds[i], info[i], Long.ZERO)\n }\n }\n\n private _onMsgsStateInfo(msg: mtp.RawMt_msgs_state_info): void {\n const info = this._session.pendingMessages.get(msg.reqMsgId)\n\n if (!info) {\n this.log.warn('received msgs_state_info to unknown request %l', msg.reqMsgId)\n\n return\n }\n\n if (info._ !== 'state') {\n this.log.warn('received msgs_state_info to %s query %l', info._, msg.reqMsgId)\n\n return\n }\n\n this._onMessagesInfo(info.msgIds, msg.info)\n }\n\n private _onFutureSalts(msg: mtp.RawMt_future_salts): void {\n const info = this._session.pendingMessages.get(msg.reqMsgId)\n\n if (!info) {\n this.log.warn('received future_salts to unknown request %l', msg.reqMsgId)\n\n return\n }\n\n if (info._ !== 'future_salts') {\n this.log.warn('received future_salts to %s query %l', info._, msg.reqMsgId)\n\n return\n }\n\n this.log.debug('received future_salts: %d salts', msg.salts.length)\n\n this._salts.isFetching = false\n this._salts.setFutureSalts(msg.salts.slice())\n this.emit('future-salts', msg.salts)\n }\n\n private _onDestroySessionResult(msg: mtp.TypeDestroySessionRes): void {\n const reqMsgId = this._session.destroySessionIdToMsgId.get(msg.sessionId)\n\n if (!reqMsgId) {\n this.log.warn('received %s for unknown session %h', msg._, msg.sessionId)\n\n return\n }\n\n this._session.destroySessionIdToMsgId.delete(msg.sessionId)\n this._session.pendingMessages.delete(reqMsgId)\n this.log.debug('received %s for session %h', msg._, msg.sessionId)\n }\n\n private _enqueueRpc(rpc: PendingRpc, force?: boolean) {\n if (this._session.enqueueRpc(rpc, force)) {\n this._flushTimer.emitWhenIdle()\n }\n }\n\n _resetSession(): void {\n this._queuedDestroySession.push(this._session._sessionId)\n\n this._session.resetState(true)\n this._onAllFailed('session reset')\n this.reconnect()\n\n // once we receive new_session_created, all pending messages will be resent.\n this._flushTimer.reset()\n }\n\n private _sendAck(msgId: Long): void {\n if (this._session.queuedAcks.length === 0) {\n this._flushTimer.emitBeforeNext(30000)\n }\n\n this._session.queuedAcks.push(msgId)\n\n if (this._session.queuedAcks.length >= 100) {\n this._flushTimer.emitWhenIdle()\n }\n }\n\n sendRpc<T extends tl.RpcMethod>(\n request: T,\n stack?: string,\n timeout?: number,\n abortSignal?: AbortSignal,\n chainId?: string | number,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (this._usable && this.params.inactivityTimeout) {\n this._rescheduleInactivity()\n }\n\n if (!stack && this.params.niceStacks !== false) {\n stack = new Error().stack\n }\n\n const method = request._\n\n let obj: tl.TlObject = request\n let initConn = false\n\n if (this.params.disableUpdates) {\n obj = {\n _: 'invokeWithoutUpdates',\n query: obj,\n }\n }\n\n if (!this._session.initConnectionCalled) {\n // we will wrap every rpc call with initConnection\n // until some of the requests wrapped with it is\n // either acked or returns rpc_result\n\n this.log.debug('wrapping %s with initConnection, layer: %d', method, this.params.layer)\n const proxy = this._transport.getMtproxyInfo?.()\n obj = {\n _: 'invokeWithLayer',\n layer: this.params.layer,\n query: {\n ...this.params.initConnection,\n proxy,\n query: obj,\n },\n }\n initConn = true\n }\n\n this.log.verbose('>>> %j', obj)\n\n let content = TlBinaryWriter.serializeObject(this._writerMap, obj)\n\n if (content.length > 1044404) {\n // if you send larger payloads, telegram will just close connection,\n // and since we resend them, it will get resent after reconnection and\n // that will be an endless loop of reconnections. we don't want that,\n // and payloads this large are usually a sign of an error in the code.\n throw new MtArgumentError(`Payload is too big (${content.length} > 1044404)`)\n }\n\n // gzip\n let shouldGzip = content.length > 128\n\n if (content.length > 16384) {\n // test compression ratio for the middle part\n // if it is less than 0.9, then try to compress the whole request\n\n const middle = ~~((content.length - 1024) / 2)\n const middlePart = content.subarray(middle, middle + 1024)\n const gzipped = this._crypto.gzip(middlePart, Math.floor(middlePart.length * 0.9))\n\n if (!gzipped) shouldGzip = false\n }\n\n if (shouldGzip) {\n const gzipped = this._crypto.gzip(content, Math.floor(content.length * 0.9))\n\n if (gzipped) {\n this.log.debug('gzipped %s (%db -> %db)', method, content.length, gzipped.length)\n\n content = gzipped\n } else {\n shouldGzip = false\n }\n }\n\n const pending: PendingRpc = {\n method,\n promise: createControllablePromise(),\n data: content,\n stack,\n // we will need to know size of gzip_packed overhead in _flush()\n gzipOverhead: shouldGzip ? 4 + TlSerializationCounter.countBytesOverhead(content.length) : 0,\n initConn,\n chainId,\n\n // setting them as well so jit can optimize stuff\n invokeAfter: undefined,\n sent: undefined,\n done: undefined,\n getState: undefined,\n msgId: undefined,\n seqNo: undefined,\n containerId: undefined,\n acked: undefined,\n cancelled: undefined,\n timeout: undefined,\n }\n\n if (abortSignal?.aborted) {\n pending.promise.reject(abortSignal.reason)\n\n return pending.promise\n }\n\n if (timeout) {\n pending.timeout = setTimeout(this._cancelRpc, timeout, pending, true)\n }\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', () => this._cancelRpc(pending, false, abortSignal))\n }\n\n this._enqueueRpc(pending, true)\n\n return pending.promise\n }\n\n notifyNetworkChanged(online: boolean): void {\n this._online = online\n\n if (online) {\n this.reconnect()\n } else {\n this.disconnectManual()\n }\n }\n\n private _cancelRpc(rpc: PendingRpc, onTimeout = false, abortSignal?: AbortSignal): void {\n if (rpc.done) return\n\n if (rpc.cancelled && !onTimeout) {\n throw new MtcuteError('RPC was already cancelled')\n }\n\n if (!onTimeout && rpc.timeout) {\n clearTimeout(rpc.timeout)\n }\n\n if (onTimeout) {\n // todo: replace with MtTimeoutError\n const error = new tl.RpcError(400, 'Client timeout')\n\n if (this.params.niceStacks !== false) {\n makeNiceStack(error, rpc.stack!, rpc.method)\n }\n\n rpc.promise.reject(error)\n } else if (abortSignal) {\n rpc.promise.reject(abortSignal.reason)\n }\n\n rpc.cancelled = true\n\n if (rpc.msgId) {\n this._session.queuedCancelReq.push(rpc.msgId)\n this._session.getStateSchedule.remove(rpc)\n this._flushTimer.emitWhenIdle()\n } else {\n // in case rpc wasn't sent yet (or had some error),\n // we can simply remove it from queue\n this._session.queuedRpc.remove(rpc)\n }\n }\n\n protected _onInactivityTimeout() {\n // we should send all pending acks and other service messages\n // before dropping the connection\n // additionally, if we are still waiting for some rpc results,\n // we should wait for them first\n\n let hasPendingRpc = false\n\n for (const it of this._session.pendingMessages.values()) {\n if (it._ === 'rpc') {\n hasPendingRpc = true\n break\n }\n }\n\n if (hasPendingRpc) {\n this.log.debug('waiting for pending rpc queries to finish before closing connection')\n this._rescheduleInactivity()\n\n return\n }\n\n if (!this._session.hasPendingMessages) {\n this.log.debug('no pending service messages, closing connection')\n super._onInactivityTimeout()\n\n return\n }\n\n this._inactivityPendingFlush = true\n this._flush()\n }\n\n flushWhenIdle(): void {\n this._flushTimer.emitWhenIdle()\n }\n\n private _flush(): void {\n if (\n this._disconnectedManually ||\n !this._session._authKey.ready ||\n this._isPfsBindingPending ||\n this._session.current429Timeout\n ) {\n this.log.debug(\n 'skipping flush, connection is not usable (offline = %b, auth key ready = %b, pfs binding pending = %b, 429 timeout = %b)',\n this._disconnectedManually,\n this._session._authKey.ready,\n this._isPfsBindingPending,\n this._session.current429Timeout,\n )\n\n // it will be flushed once connection is usable\n return\n }\n\n try {\n this._doFlush()\n } catch (e: any) {\n this.log.error('flush error: %s', (e as Error).stack)\n // should not happen unless there's a bug in the code\n }\n\n // schedule next flush\n // if there are more queued requests, flush immediately\n // (they likely didn't fit into one message)\n if (this._session.hasPendingMessages) {\n // we schedule it on the next tick, so we can load-balance\n // between multiple connections using the same session\n this._flushTimer.emitWhenIdle()\n } else {\n const nextPingTime = this._session.lastPingTime + PING_INTERVAL\n const nextGetScheduleTime = this._session.getStateSchedule.raw[0]?.getState || Infinity\n\n this._flushTimer.emitBefore(Math.min(nextPingTime, nextGetScheduleTime))\n }\n }\n\n private _doFlush(): void {\n this.log.debug('flushing send queue. queued rpc: %d', this._session.queuedRpc.length)\n\n // oh bloody hell mate\n\n // total size & count\n let packetSize = 0\n let messageCount = 0\n // size & msg count that count towards container limit\n // these will be added to total later\n let containerMessageCount = 0\n let containerSize = 0\n\n let ackRequest: Uint8Array | null = null\n let ackMsgIds: Long[] | null = null\n\n let getFutureSaltsRequest: Uint8Array | null = null\n let getFutureSaltsMsgId: Long | null = null\n\n let pingRequest: Uint8Array | null = null\n let pingId: Long | null = null\n let pingMsgId: Long | null = null\n\n let getStateRequest: Uint8Array | null = null\n let getStateMsgId: Long | null = null\n let getStateMsgIds: Long[] | null = null\n\n let resendRequest: Uint8Array | null = null\n let resendMsgId: Long | null = null\n let resendMsgIds: Long[] | null = null\n\n let cancelRpcs: Long[] | null = null\n let destroySessions: Long[] | null = null\n let rootMsgId: Long | null = null\n\n const now = Date.now()\n\n if (this._session.queuedAcks.length) {\n let acks = this._session.queuedAcks\n\n if (acks.length > 8192) {\n this._session.queuedAcks = acks.slice(8192)\n acks = acks.slice(0, 8192)\n } else {\n this._session.queuedAcks = []\n }\n\n const obj: mtp.RawMt_msgs_ack = {\n _: 'mt_msgs_ack',\n msgIds: acks,\n }\n ackMsgIds = obj.msgIds\n\n ackRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n packetSize += ackRequest.length + 16\n messageCount += 1\n }\n\n if (now - this._session.lastPingTime > PING_INTERVAL) {\n if (!this._session.lastPingMsgId.isZero()) {\n this.log.warn(\"didn't receive pong for previous ping (msg_id = %l)\", this._session.lastPingMsgId)\n this._session.pendingMessages.delete(this._session.lastPingMsgId)\n }\n\n pingId = randomLong()\n const obj: mtp.RawMt_ping_delay_disconnect = {\n _: 'mt_ping_delay_disconnect',\n pingId,\n disconnectDelay: 75,\n }\n\n this._session.lastPingTime = Date.now()\n\n pingRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n containerSize += pingRequest.length + 16\n containerMessageCount += 1\n }\n\n {\n if (this._session.queuedStateReq.length) {\n let ids = this._session.queuedStateReq\n\n if (ids.length > 8192) {\n this._session.queuedStateReq = ids.slice(8192)\n ids = ids.slice(0, 8192)\n } else {\n this._session.queuedStateReq = []\n }\n getStateMsgIds = ids\n }\n\n const idx = this._session.getStateSchedule.index({ getState: now } as PendingRpc, true)\n\n if (idx > 0) {\n const toGetState = this._session.getStateSchedule.raw.splice(0, idx)\n if (!getStateMsgIds) getStateMsgIds = []\n toGetState.forEach((it) => getStateMsgIds!.push(it.msgId!))\n }\n\n if (getStateMsgIds) {\n const obj: mtp.RawMt_msgs_state_req = {\n _: 'mt_msgs_state_req',\n msgIds: getStateMsgIds,\n }\n\n getStateRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n packetSize += getStateRequest.length + 16\n messageCount += 1\n }\n }\n\n if (this._session.queuedResendReq.length) {\n resendMsgIds = this._session.queuedResendReq\n\n if (resendMsgIds.length > 8192) {\n this._session.queuedResendReq = resendMsgIds.slice(8192)\n resendMsgIds = resendMsgIds.slice(0, 8192)\n } else {\n this._session.queuedResendReq = []\n }\n\n const obj: mtp.RawMt_msg_resend_req = {\n _: 'mt_msg_resend_req',\n msgIds: resendMsgIds,\n }\n\n resendRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n packetSize += resendRequest.length + 16\n messageCount += 1\n }\n\n if (this._session.queuedCancelReq.length) {\n containerMessageCount += this._session.queuedCancelReq.length\n containerSize += this._session.queuedCancelReq.length * 28\n cancelRpcs = this._session.queuedCancelReq\n this._session.queuedCancelReq = []\n }\n\n if (this._queuedDestroySession.length) {\n containerMessageCount += this._queuedDestroySession.length\n containerSize += this._queuedDestroySession.length * 28\n destroySessions = this._queuedDestroySession\n this._queuedDestroySession = []\n }\n\n if (this._salts.shouldFetchSalts()) {\n const obj: mtp.RawMt_get_future_salts = {\n _: 'mt_get_future_salts',\n num: 64,\n }\n\n getFutureSaltsRequest = TlBinaryWriter.serializeObject(this._writerMap, obj)\n containerSize += getFutureSaltsRequest.length + 16\n containerMessageCount += 1\n this._salts.isFetching = true\n }\n\n let forceContainer = false\n const rpcToSend: PendingRpc[] = []\n\n while (\n this._session.queuedRpc.length &&\n containerSize < 32768 && // 2^15\n containerMessageCount < 1020\n ) {\n const msg = this._session.queuedRpc.popFront()!\n if (msg.cancelled) continue\n\n // note: we don't check for <2^15 here\n // this is not documented, but large requests\n // (like upload.saveFilePart) *may* exceed that limit\n\n rpcToSend.push(msg)\n containerSize += msg.data.length + 16\n if (msg.gzipOverhead) containerSize += msg.gzipOverhead\n\n if (msg.chainId) {\n containerSize += INVOKE_AFTER_MSG_SIZE\n }\n\n // if message was already assigned a msg_id,\n // we must wrap it in a container with a newer msg_id\n if (msg.msgId) forceContainer = true\n\n // having >1 upload.getFile within a container seems to cause flood_wait errors\n // also a crutch for load-balancing\n if (msg.method === 'upload.getFile') break\n }\n\n packetSize += containerSize\n messageCount += containerMessageCount + rpcToSend.length\n\n if (!messageCount) {\n this.log.debug('flush did not happen: nothing to flush')\n\n return\n }\n\n const useContainer = forceContainer || messageCount > 1\n if (useContainer) packetSize += 24 // 8 (msg_container) + 16 (mtproto header)\n\n const writer = TlBinaryWriter.alloc(this._writerMap, packetSize)\n\n if (useContainer) {\n // leave bytes for mtproto header (we'll write it later,\n // since we need seqno and msg_id to be larger than the content)\n writer.pos += 16\n writer.uint(MSG_CONTAINER_ID)\n writer.uint(messageCount)\n }\n\n const otherPendings: Exclude<PendingMessage, { _: 'rpc' | 'container' | 'bind' }>[] = []\n\n if (ackRequest) {\n this._registerOutgoingMsgId(this._session.writeMessage(writer, ackRequest))\n }\n\n if (pingRequest) {\n pingMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, pingRequest))\n this._session.lastPingMsgId = pingMsgId\n const pingPending: PendingMessage = {\n _: 'ping',\n pingId: pingId!,\n containerId: pingMsgId,\n }\n this._session.pendingMessages.set(pingMsgId, pingPending)\n otherPendings.push(pingPending)\n }\n\n if (getStateRequest) {\n getStateMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, getStateRequest))\n const getStatePending: PendingMessage = {\n _: 'state',\n msgIds: getStateMsgIds!,\n containerId: getStateMsgId,\n }\n this._session.pendingMessages.set(getStateMsgId, getStatePending)\n otherPendings.push(getStatePending)\n }\n\n if (resendRequest) {\n resendMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, resendRequest))\n const resendPending: PendingMessage = {\n _: 'resend',\n msgIds: resendMsgIds!,\n containerId: resendMsgId,\n }\n this._session.pendingMessages.set(resendMsgId, resendPending)\n otherPendings.push(resendPending)\n }\n\n if (cancelRpcs) {\n cancelRpcs.forEach((msgId) => {\n const cancelMsgId = this._registerOutgoingMsgId(\n this._session.writeMessage(writer, {\n _: 'mt_rpc_drop_answer',\n reqMsgId: msgId,\n }),\n )\n\n const pending: PendingMessage = {\n _: 'cancel',\n msgId,\n containerId: cancelMsgId,\n }\n this._session.pendingMessages.set(cancelMsgId, pending)\n otherPendings.push(pending)\n })\n }\n\n if (destroySessions) {\n destroySessions.forEach((sessionId) => {\n const msgId = this._registerOutgoingMsgId(\n this._session.writeMessage(writer, {\n _: 'mt_destroy_session',\n sessionId,\n }),\n )\n\n const pending: PendingMessage = {\n _: 'destroy_session',\n sessionId,\n containerId: msgId,\n }\n this._session.pendingMessages.set(msgId, pending)\n this._session.destroySessionIdToMsgId.set(sessionId, msgId)\n otherPendings.push(pending)\n })\n }\n\n if (getFutureSaltsRequest) {\n getFutureSaltsMsgId = this._registerOutgoingMsgId(this._session.writeMessage(writer, getFutureSaltsRequest))\n const pending: PendingMessage = {\n _: 'future_salts',\n containerId: getFutureSaltsMsgId,\n }\n this._session.pendingMessages.set(getFutureSaltsMsgId, pending)\n otherPendings.push(pending)\n }\n\n const getStateTime = now + GET_STATE_INTERVAL\n\n for (let i = 0; i < rpcToSend.length; i++) {\n const msg = rpcToSend[i]\n // not using writeMessage here because we also need seqNo, and\n // i dont want to also return seqNo there because that would mean\n // extra object overhead\n\n if (!msg.msgId) {\n const msgId = this._session.getMessageId()\n const seqNo = this._session.getSeqNo()\n\n this.log.debug('%s: msg_id assigned %l, seqno: %d', msg.method, msgId, seqNo)\n\n msg.msgId = msgId\n msg.seqNo = seqNo\n this._session.pendingMessages.set(msgId, {\n _: 'rpc',\n rpc: msg,\n })\n\n if (msg.chainId) {\n msg.invokeAfter = this._session.addToChain(msg.chainId, msgId)\n this.log.debug('chain %s: invoke %l after %l', msg.chainId, msg.msgId, msg.invokeAfter)\n }\n } else {\n this.log.debug('%s: msg_id already assigned, reusing %l, seqno: %d', msg.method, msg.msgId, msg.seqNo)\n }\n\n // (re-)schedule get_state if needed\n if (msg.getState) {\n this._session.getStateSchedule.remove(msg)\n }\n if (!msg.acked) {\n msg.getState = getStateTime\n this._session.getStateSchedule.insert(msg)\n }\n\n if (rootMsgId === null) rootMsgId = msg.msgId\n writer.long(this._registerOutgoingMsgId(msg.msgId))\n writer.uint(msg.seqNo!)\n\n const invokeAfterSize = msg.invokeAfter ? INVOKE_AFTER_MSG_SIZE : 0\n\n const writeInvokeAfter = () => {\n if (!msg.invokeAfter) return\n\n writer.uint(INVOKE_AFTER_MSG_ID)\n writer.long(msg.invokeAfter)\n }\n\n if (msg.gzipOverhead) {\n writer.uint(msg.data.length + msg.gzipOverhead + invokeAfterSize)\n writeInvokeAfter()\n writer.uint(GZIP_PACKED_ID)\n writer.bytes(msg.data)\n } else {\n writer.uint(msg.data.length + invokeAfterSize)\n writeInvokeAfter()\n writer.raw(msg.data)\n }\n\n msg.sent = true\n }\n\n if (useContainer) {\n // we now need to assign the container msg_id and seqno\n // we couldn't have assigned them earlier because mtproto\n // requires them to be >= than the contained messages\n\n packetSize = writer.pos\n\n const containerId = this._session.getMessageId()\n writer.pos = 0\n rootMsgId = containerId\n writer.long(this._registerOutgoingMsgId(containerId))\n writer.uint(this._session.getSeqNo(false))\n writer.uint(packetSize - 16)\n writer.pos = packetSize\n\n const msgIds = []\n\n for (let i = 0; i < rpcToSend.length; i++) {\n const msg = rpcToSend[i]\n msg.containerId = containerId\n msgIds.push(msg.msgId!)\n }\n\n if (otherPendings.length) {\n otherPendings.forEach((msg) => {\n msgIds.push(msg.containerId)\n msg.containerId = containerId\n })\n }\n\n this._session.pendingMessages.set(containerId, {\n _: 'container',\n msgIds,\n })\n }\n\n const result = writer.result()\n\n this.log.debug(\n 'sending %d messages: size = %db, acks = %L, ping = %b (msg_id = %l), state_req = %L (msg_id = %l), resend = %L (msg_id = %l), cancels = %L (msg_id = %l), salts_req = %b (msg_id = %l), rpc = %s, container = %b, root msg_id = %l',\n messageCount,\n packetSize,\n ackMsgIds,\n pingRequest,\n pingMsgId,\n getStateMsgIds,\n getStateMsgId,\n resendMsgIds,\n cancelRpcs,\n cancelRpcs,\n resendMsgId,\n getFutureSaltsRequest,\n getFutureSaltsMsgId,\n rpcToSend.map((it) => it.method),\n useContainer,\n rootMsgId,\n )\n\n const enc = this._session.encryptMessage(result)\n const promise = this.send(enc).catch((err: Error) => {\n this.log.error('error while sending pending messages (root msg_id = %l): %s', rootMsgId, err.stack)\n\n // put acks in the front so they are the first to be sent\n if (ackMsgIds) {\n this._session.queuedAcks.splice(0, 0, ...ackMsgIds)\n }\n if (rootMsgId) {\n this._onMessageFailed(rootMsgId, 'unknown error')\n }\n })\n\n if (this._inactivityPendingFlush && !this._session.hasPendingMessages) {\n void promise.then(() => {\n this.log.debug('pending messages sent, closing connection')\n this._flushTimer.reset()\n this._inactivityPendingFlush = false\n\n super._onInactivityTimeout()\n })\n }\n }\n}\n"]}
|