@mtcute/core 0.7.3 → 0.9.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/LICENSE +1 -1
- 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 +24 -11
- 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/files/utils.d.ts +9 -6
- package/cjs/highlevel/types/files/utils.js.map +1 -1
- 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/client.d.ts +4 -4
- package/cjs/network/client.js +3 -1
- package/cjs/network/client.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 +18 -4
- 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 +2 -2
- package/cjs/storage/index.js +2 -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/sqlite/driver.d.ts +24 -0
- package/cjs/storage/sqlite/driver.js +129 -0
- package/cjs/storage/sqlite/driver.js.map +1 -0
- package/cjs/storage/sqlite/index.d.ts +17 -0
- package/cjs/storage/sqlite/index.js +35 -0
- package/cjs/storage/sqlite/index.js.map +1 -0
- package/cjs/storage/sqlite/repository/auth-keys.d.ts +20 -0
- package/cjs/storage/sqlite/repository/auth-keys.js +68 -0
- package/cjs/storage/sqlite/repository/auth-keys.js.map +1 -0
- package/cjs/storage/sqlite/repository/kv.d.ts +14 -0
- package/cjs/storage/sqlite/repository/kv.js +96 -0
- package/cjs/storage/sqlite/repository/kv.js.map +1 -0
- package/cjs/storage/sqlite/repository/peers.d.ts +16 -0
- package/cjs/storage/sqlite/repository/peers.js +77 -0
- package/cjs/storage/sqlite/repository/peers.js.map +1 -0
- package/cjs/storage/sqlite/repository/ref-messages.d.ts +16 -0
- package/cjs/storage/sqlite/repository/ref-messages.js +49 -0
- package/cjs/storage/sqlite/repository/ref-messages.js.map +1 -0
- package/cjs/storage/sqlite/types.d.ts +18 -0
- package/cjs/storage/sqlite/types.js +3 -0
- package/cjs/storage/sqlite/types.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 +24 -11
- 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/utils.d.ts +9 -6
- package/esm/highlevel/types/files/utils.js.map +1 -1
- 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/client.d.ts +4 -4
- package/esm/network/client.js +4 -2
- package/esm/network/client.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 +18 -4
- 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 +2 -2
- package/esm/storage/index.js +2 -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/sqlite/driver.d.ts +24 -0
- package/esm/storage/sqlite/driver.js +125 -0
- package/esm/storage/sqlite/driver.js.map +1 -0
- package/esm/storage/sqlite/index.d.ts +17 -0
- package/esm/storage/sqlite/index.js +17 -0
- package/esm/storage/sqlite/index.js.map +1 -0
- package/esm/storage/sqlite/repository/auth-keys.d.ts +20 -0
- package/esm/storage/sqlite/repository/auth-keys.js +64 -0
- package/esm/storage/sqlite/repository/auth-keys.js.map +1 -0
- package/esm/storage/sqlite/repository/kv.d.ts +14 -0
- package/esm/storage/sqlite/repository/kv.js +92 -0
- package/esm/storage/sqlite/repository/kv.js.map +1 -0
- package/esm/storage/sqlite/repository/peers.d.ts +16 -0
- package/esm/storage/sqlite/repository/peers.js +73 -0
- package/esm/storage/sqlite/repository/peers.js.map +1 -0
- package/esm/storage/sqlite/repository/ref-messages.d.ts +16 -0
- package/esm/storage/sqlite/repository/ref-messages.js +45 -0
- package/esm/storage/sqlite/repository/ref-messages.js.map +1 -0
- package/esm/storage/sqlite/types.d.ts +18 -0
- package/esm/storage/sqlite/types.js +2 -0
- package/esm/storage/sqlite/types.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 +25 -53
- 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.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) %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.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 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"]}
|