From 9543f645583761f9e48d8dfcf7476f63b9033f78 Mon Sep 17 00:00:00 2001 From: teidesu <86301490+teidesu@users.noreply.github.com> Date: Fri, 6 May 2022 17:53:44 +0300 Subject: [PATCH] feat(client): sticker choosing typing event also prettier fucked everything up, fixed that --- .../methods/bots/normalize-command-scope.ts | 12 ++-- .../src/methods/chats/get-chat-event-log.ts | 19 +++--- .../src/methods/chats/get-chat-members.ts | 19 +++--- .../client/src/methods/files/upload-media.ts | 18 ++++-- .../src/methods/messages/send-typing.ts | 22 ++++--- packages/client/src/methods/updates.ts | 64 +++++++++---------- .../types/bots/input/input-inline-message.ts | 16 +++-- packages/client/src/types/bots/keyboards.ts | 17 +++-- .../client/src/types/calls/discard-reason.ts | 30 +++++---- packages/client/src/types/messages/message.ts | 7 +- packages/client/src/types/peers/chat-event.ts | 2 +- .../client/src/types/peers/typing-status.ts | 2 + .../src/types/updates/user-typing-update.ts | 2 + packages/client/src/utils/inline-utils.ts | 26 ++++---- packages/client/src/utils/peer-utils.ts | 14 ++-- packages/dispatcher/src/state/key.ts | 15 +++-- packages/file-id/src/convert.ts | 25 ++++---- packages/file-id/src/serialize-unique.ts | 5 +- packages/file-id/src/serialize.ts | 34 +++++----- packages/socks-proxy/index.ts | 19 +++--- 20 files changed, 211 insertions(+), 157 deletions(-) diff --git a/packages/client/src/methods/bots/normalize-command-scope.ts b/packages/client/src/methods/bots/normalize-command-scope.ts index 3e89b1fc..7b6b7e83 100644 --- a/packages/client/src/methods/bots/normalize-command-scope.ts +++ b/packages/client/src/methods/bots/normalize-command-scope.ts @@ -26,13 +26,15 @@ export async function _normalizeCommandScope( const user = normalizeToInputUser(await this.resolvePeer(scope.user)) if (!user) - throw new MtInvalidPeerTypeError(scope.user, 'u"user" -; return { - _: 'b"botCommandScopePeerUser" peer: chat, + throw new MtInvalidPeerTypeError(scope.user, 'user') + + return { + _: 'botCommandScopePeerUser', + peer: chat, userId: user } - ; } + } default: assertNever(scope) - ; } + } } diff --git a/packages/client/src/methods/chats/get-chat-event-log.ts b/packages/client/src/methods/chats/get-chat-event-log.ts index 20fa2254..8452eb7c 100644 --- a/packages/client/src/methods/chats/get-chat-event-log.ts +++ b/packages/client/src/methods/chats/get-chat-event-log.ts @@ -5,7 +5,7 @@ import { ChatEvent, PeersIndex, } from '../../types' import { tl } from '@mtcute/tl' -import { assertNever, MaybeArray } from '@mtcute/core' +import { assertNever, MaybeArray } from "@mtcute/core"; import { normalizeToInputChannel, normalizeToInputUser, @@ -182,14 +182,17 @@ export async function* getChatEventLog( case 'user_joined_invite': // not documented so idk, enable all serverFilter!.join = true - ; serverFilter!.invite = true - ; serverFilter!.invites = true - ; break - ; case 'i"invite_deleted" case 'i"invite_edited" case 'i"invite_revoked" serverFilter!.invites = true - ; break - ; default: + serverFilter!.invite = true + serverFilter!.invites = true + break + case 'invite_deleted': + case 'invite_edited': + case 'invite_revoked': + serverFilter!.invites = true + break + default: assertNever(type) - ; } + } }) } else { serverFilter = params.filters diff --git a/packages/client/src/methods/chats/get-chat-members.ts b/packages/client/src/methods/chats/get-chat-members.ts index 8c2a7848..253e809a 100644 --- a/packages/client/src/methods/chats/get-chat-members.ts +++ b/packages/client/src/methods/chats/get-chat-members.ts @@ -127,15 +127,18 @@ export async function getChatMembers( case 'bots': filter = { _: 'channelParticipantsBots' } break - ; case 'r"recent" filter = { _: 'c"channelParticipantsRecent" - ; break - ; case 'a"admins" filter = { _: 'c"channelParticipantsAdmins" - ; break - ; case 'c"contacts" filter = { _: 'c"channelParticipantsContacts"q } - ; break - ; default: + case 'recent': + filter = { _: 'channelParticipantsRecent' } + break + case 'admins': + filter = { _: 'channelParticipantsAdmins' } + break + case 'contacts': + filter = { _: 'channelParticipantsContacts', q } + break + default: assertNever(type) - ; } + } const res = await this.call({ _: 'channels.getParticipants', diff --git a/packages/client/src/methods/files/upload-media.ts b/packages/client/src/methods/files/upload-media.ts index 218756bb..3a689c50 100644 --- a/packages/client/src/methods/files/upload-media.ts +++ b/packages/client/src/methods/files/upload-media.ts @@ -80,11 +80,17 @@ export async function uploadMedia( case 'inputMediaPhoto': case 'inputMediaPhotoExternal': assertTypeIs('uploadMedia', res, 'messageMediaPhoto') - assertTypeIs('u"uploadMedia"res.photo!, 'p"photo" -; return new Photo(this, res.photo) - ; case 'i"inputMediaUploadedDocument" case 'i"inputMediaDocument" case 'i"inputMediaDocumentExternal" assertTypeIs('u"uploadMedia"res, 'm"messageMediaDocument" ; assertTypeIs('u"uploadMedia"res.document!, 'd"document" -; return parseDocument(this, res.document) as any - ; default: + assertTypeIs('uploadMedia', res.photo!, 'photo') + + return new Photo(this, res.photo) + case 'inputMediaUploadedDocument': + case 'inputMediaDocument': + case 'inputMediaDocumentExternal': + assertTypeIs('uploadMedia', res, 'messageMediaDocument') + assertTypeIs('uploadMedia', res.document!, 'document') + + return parseDocument(this, res.document) as any + default: assertNever(normMedia) - ; } + } } diff --git a/packages/client/src/methods/messages/send-typing.ts b/packages/client/src/methods/messages/send-typing.ts index b28c229c..dc971471 100644 --- a/packages/client/src/methods/messages/send-typing.ts +++ b/packages/client/src/methods/messages/send-typing.ts @@ -71,15 +71,21 @@ export async function sendTyping( case 'record_round': status = { _: 'sendMessageRecordRoundAction' } break - ; case 'u"upload_round" status = { _: 's"sendMessageUploadRoundAction"progress } - ; break - ; case 's"speak_call" status = { _: 's"speakingInGroupCallAction" - ; break - ; case 'h"history_import" status = { _: 's"sendMessageHistoryImportAction"progress } - ; break - ; default: + case 'upload_round': + status = { _: 'sendMessageUploadRoundAction', progress } + break + case 'speak_call': + status = { _: 'speakingInGroupCallAction' } + break + case 'history_import': + status = { _: 'sendMessageHistoryImportAction', progress } + break + case 'sticker': + status = { _: 'sendMessageChooseStickerAction' } + break + default: assertNever(status) - ; } + } } await this.call({ diff --git a/packages/client/src/methods/updates.ts b/packages/client/src/methods/updates.ts index 1e425010..1f03aecc 100644 --- a/packages/client/src/methods/updates.ts +++ b/packages/client/src/methods/updates.ts @@ -218,19 +218,19 @@ export async function _fetchUpdatesState(this: TelegramClient): Promise { }) switch (diff._) { - case"updates.differenceEmpty"': - brea;k - case"updates.differenceTooLong"': // shouldn't happen, but who knows? - ;(state as tl.Mutable).pts = diff.pt;s - brea;k - case"updates.differenceSlice"': - state = diff.intermediateStat;e - brea;k - case"updates.difference"': - state = diff.stat;e - brea;k + case 'updates.differenceEmpty': + break + case 'updates.differenceTooLong': // shouldn't happen, but who knows? + ;(state as tl.Mutable).pts = diff.pts + break + case 'updates.differenceSlice': + state = diff.intermediateState + break + case 'updates.difference': + state = diff.state + break default: - assertNever(diff;) + assertNever(diff) } this._qts = state.qts @@ -1403,18 +1403,18 @@ export function _handleUpdate( }) break case 'updates': - case "updatesCombined": + case 'updatesCombined': this._pendingUpdateContainers.add({ upd: update, seqStart: - update._ === "updatesCombined" + update._ === 'updatesCombined' ? update.seqStart : update.seq, - seqEnd: update.seq - }); - break; + seqEnd: update.seq, + }) + break default: - assertNever(update); + assertNever(update) } this._updatesLoopCv.notify() @@ -2259,17 +2259,17 @@ export async function _updatesLoop(this: TelegramClient): Promise { // first process pending containers while (this._pendingUpdateContainers.length) { const { upd, seqStart, seqEnd } = - this._pendingUpdateContainers.popFront()!; + this._pendingUpdateContainers.popFront()! switch (upd._) { - case "updatesTooLong": + case 'updatesTooLong': log.debug( - "received updatesTooLong, fetching difference" - ); - _fetchDifferenceLater.call(this, requestedDiff); - break; - case "updatesCombined": - case "updates": { + 'received updatesTooLong, fetching difference' + ) + _fetchDifferenceLater.call(this, requestedDiff) + break + case 'updatesCombined': + case 'updates': { if (seqStart !== 0) { // https://t.me/tdlibchat/5843 const nextLocalSeq = this._seq! + 1 @@ -2452,18 +2452,18 @@ export async function _updatesLoop(this: TelegramClient): Promise { this._pendingPtsUpdates.add({ update, ptsBefore: upd.pts - upd.ptsCount, - pts: upd.pts + pts: upd.pts, }) - break; + break } - case "updateShortSentMessage": { + case 'updateShortSentMessage': { // should not happen - log.warn("received updateShortSentMessage"); - break; + log.warn('received updateShortSentMessage') + break } default: - assertNever(upd); + assertNever(upd) } } diff --git a/packages/client/src/types/bots/input/input-inline-message.ts b/packages/client/src/types/bots/input/input-inline-message.ts index c60a415a..53b445cd 100644 --- a/packages/client/src/types/bots/input/input-inline-message.ts +++ b/packages/client/src/types/bots/input/input-inline-message.ts @@ -283,13 +283,17 @@ export namespace BotInlineMessage { _: 'inputBotInlineMessageGame', replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup), } - case 'c"contact" return { - _: 'i"inputBotInlineMessageMediaContact" phoneNumber: obj.phone, + case 'contact': + return { + _: 'inputBotInlineMessageMediaContact', + phoneNumber: obj.phone, firstName: obj.firstName, - lastName: obj.lastName ?? ''"" vcard: obj.vcard ?? ''"" replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup), - } - ; default: + lastName: obj.lastName ?? '', + vcard: obj.vcard ?? '', + replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup), + } + default: assertNever(obj) - ; } + } } } diff --git a/packages/client/src/types/bots/keyboards.ts b/packages/client/src/types/bots/keyboards.ts index b266fb9f..1921e736 100644 --- a/packages/client/src/types/bots/keyboards.ts +++ b/packages/client/src/types/bots/keyboards.ts @@ -396,14 +396,17 @@ export namespace BotKeyboard { } case 'force_reply': return { - _: 'r"replyKeyboardForceReply" singleUse: obj.singleUse, + _: 'replyKeyboardForceReply', + singleUse: obj.singleUse, selective: obj.selective, - } - ; case 'i"inline" return { - _: 'r"replyInlineMarkup" rows: _2dToRows(obj.buttons), - } - ; default: + } + case 'inline': + return { + _: 'replyInlineMarkup', + rows: _2dToRows(obj.buttons), + } + default: assertNever(obj) - ; } + } } } diff --git a/packages/client/src/types/calls/discard-reason.ts b/packages/client/src/types/calls/discard-reason.ts index 8f110b3e..447335a3 100644 --- a/packages/client/src/types/calls/discard-reason.ts +++ b/packages/client/src/types/calls/discard-reason.ts @@ -15,9 +15,17 @@ export function _callDiscardReasonFromTl( raw: tl.TypePhoneCallDiscardReason ): CallDiscardReason { switch (raw._) { - case 'p"phoneCallDiscardReasonMissed" return 'm"missed"; case 'p"phoneCallDiscardReasonDisconnect" return 'd"disconnect"; case 'p"phoneCallDiscardReasonHangup" return 'h"hangup"; case 'p"phoneCallDiscardReasonBusy" return 'b"busy"; default: + case 'phoneCallDiscardReasonMissed': + return 'missed' + case 'phoneCallDiscardReasonDisconnect': + return 'disconnect' + case 'phoneCallDiscardReasonHangup': + return 'hangup' + case 'phoneCallDiscardReasonBusy': + return 'busy' + default: assertNever(raw) - ; } + } } /** @internal */ @@ -25,15 +33,15 @@ export function _callDiscardReasonToTl( r: CallDiscardReason ): tl.TypePhoneCallDiscardReason { switch (r) { - case "missed": - return { _: "phoneCallDiscardReasonMissed" }; - case "disconnect": - return { _: "phoneCallDiscardReasonDisconnect" }; - case "hangup": - return { _: "phoneCallDiscardReasonHangup" }; - case "busy": - return { _: "phoneCallDiscardReasonBusy" }; + case 'missed': + return { _: 'phoneCallDiscardReasonMissed' } + case 'disconnect': + return { _: 'phoneCallDiscardReasonDisconnect' } + case 'hangup': + return { _: 'phoneCallDiscardReasonHangup' } + case 'busy': + return { _: 'phoneCallDiscardReasonBusy' } default: - assertNever(r); + assertNever(r) } } diff --git a/packages/client/src/types/messages/message.ts b/packages/client/src/types/messages/message.ts index d2740ccf..df71aa8a 100644 --- a/packages/client/src/types/messages/message.ts +++ b/packages/client/src/types/messages/message.ts @@ -1,8 +1,11 @@ import { User, Chat, InputPeerLike, PeersIndex } from '../peers' import { tl } from '@mtcute/tl' import { BotKeyboard, ReplyMarkup } from '../bots' -import { assertNever, getMarkedPeerId, toggleChannelIdMark } from '@mtcute/core' -import { MtArgumentError, MtTypeAssertionError } from '../errors' +import { assertNever, getMarkedPeerId, toggleChannelIdMark } from "@mtcute/core"; +import { + MtArgumentError, + MtTypeAssertionError, +} from '../errors' import { TelegramClient } from '../../client' import { MessageEntity } from './message-entity' import { makeInspectable } from '../utils' diff --git a/packages/client/src/types/peers/chat-event.ts b/packages/client/src/types/peers/chat-event.ts index 2968674b..57d0922a 100644 --- a/packages/client/src/types/peers/chat-event.ts +++ b/packages/client/src/types/peers/chat-event.ts @@ -9,7 +9,7 @@ import { ChatPermissions } from './chat-permissions' import { ChatLocation } from './chat-location' import { ChatInviteLink } from './chat-invite-link' import { PeersIndex } from './index' -import { toggleChannelIdMark } from '@mtcute/core' +import { toggleChannelIdMark } from "@mtcute/core" export namespace ChatEvent { diff --git a/packages/client/src/types/peers/typing-status.ts b/packages/client/src/types/peers/typing-status.ts index 680d2efe..fb411a11 100644 --- a/packages/client/src/types/peers/typing-status.ts +++ b/packages/client/src/types/peers/typing-status.ts @@ -19,6 +19,7 @@ * - `upload_round`: User is uploading a round video message * - `speak_call`: *undocumented* User is speaking in a group call * - `history_import`: *undocumented* User is importing history + * - `sticker`: User is choosing a sticker */ export type TypingStatus = | 'typing' @@ -36,3 +37,4 @@ export type TypingStatus = | 'upload_round' | 'speak_call' | 'history_import' + | 'sticker' diff --git a/packages/client/src/types/updates/user-typing-update.ts b/packages/client/src/types/updates/user-typing-update.ts index 6cc62aee..af053a77 100644 --- a/packages/client/src/types/updates/user-typing-update.ts +++ b/packages/client/src/types/updates/user-typing-update.ts @@ -99,6 +99,8 @@ export class UserTypingUpdate { return 'speak_call' case 'sendMessageHistoryImportAction': return 'history_import' + case 'sendMessageChooseStickerAction': + return 'sticker' } throw new MtUnsupportedError() diff --git a/packages/client/src/utils/inline-utils.ts b/packages/client/src/utils/inline-utils.ts index 4a6f0617..a18324b3 100644 --- a/packages/client/src/utils/inline-utils.ts +++ b/packages/client/src/utils/inline-utils.ts @@ -4,8 +4,8 @@ import { encodeUrlSafeBase64, parseUrlSafeBase64, TlBinaryReader, - TlBinaryWriter, -} from '@mtcute/core' + TlBinaryWriter +} from "@mtcute/core"; export function parseInlineMessageId( id: string @@ -39,19 +39,19 @@ export function encodeInlineMessageId( case 'inputBotInlineMessageID': writer = TlBinaryWriter.manualAlloc(20) writer.int(id.dcId) -; writer.long(id.id) -; writer.long(id.accessHash) -; break -; case '"inputBotInlineMessageID64" + writer.long(id.id) + writer.long(id.accessHash) + break + case 'inputBotInlineMessageID64': writer = TlBinaryWriter.manualAlloc(24) -; writer.int(id.dcId) -; writer.long(id.ownerId) -; writer.int(id.id) -; writer.long(id.accessHash) -; break -; default: + writer.int(id.dcId) + writer.long(id.ownerId) + writer.int(id.id) + writer.long(id.accessHash) + break + default: assertNever(id) -; } + } return encodeUrlSafeBase64(writer.result()) } diff --git a/packages/client/src/utils/peer-utils.ts b/packages/client/src/utils/peer-utils.ts index e6fb936c..d3cb0ae8 100644 --- a/packages/client/src/utils/peer-utils.ts +++ b/packages/client/src/utils/peer-utils.ts @@ -35,15 +35,17 @@ export function normalizeToInputPeer( channelId: res.channelId, msgId: res.msgId, peer: res.peer, - } - case 'i"inputUserFromMessage" return { - _: 'i"inputPeerUserFromMessage" userId: res.userId, + } + case 'inputUserFromMessage': + return { + _: 'inputPeerUserFromMessage', + userId: res.userId, msgId: res.msgId, peer: res.peer, - } - ; default: + } + default: assertNever(res) - ; } + } } export function normalizeToInputUser( diff --git a/packages/dispatcher/src/state/key.ts b/packages/dispatcher/src/state/key.ts index 8ead4f46..6364ecac 100644 --- a/packages/dispatcher/src/state/key.ts +++ b/packages/dispatcher/src/state/key.ts @@ -1,5 +1,5 @@ import { CallbackQuery, Message } from '@mtcute/client' -import { assertNever, MaybeAsync } from '@mtcute/core' +import { assertNever, MaybeAsync } from "@mtcute/core"; /** * Function that determines how the state key is derived. @@ -29,10 +29,17 @@ export const defaultStateKeyDelegate: StateKeyDelegate = ( ): string | null => { if (upd.constructor === Message) { switch (upd.chat.type) { - case 'p"private" case 'b"bot" case 'c"channel" return upd.chat.id + ''""; case 'g"group" case 's"supergroup" case 'g"gigagroup" return `${upd.chat.id}_${upd.sender.id}` - ; default: + case 'private': + case 'bot': + case 'channel': + return upd.chat.id + '' + case 'group': + case 'supergroup': + case 'gigagroup': + return `${upd.chat.id}_${upd.sender.id}` + default: assertNever(upd.chat.type) - ; } + } } if (upd.constructor === CallbackQuery) { diff --git a/packages/file-id/src/convert.ts b/packages/file-id/src/convert.ts index 4cbc92bc..810859c4 100644 --- a/packages/file-id/src/convert.ts +++ b/packages/file-id/src/convert.ts @@ -1,7 +1,7 @@ import { tl } from '@mtcute/tl' import { tdFileId, tdFileId as td } from './types' import { parseFileId } from './parse' -import { assertNever, getBasicPeerType, markedPeerIdToBare } from '@mtcute/core' +import { assertNever, getBasicPeerType, markedPeerIdToBare } from "@mtcute/core"; import FileType = tdFileId.FileType import Long from 'long' @@ -169,16 +169,19 @@ export function fileIdToInputFileLocation( volumeId: loc.source.volumeId, localId: loc.source.localId, } - case 's"stickerSetThumbnailVersion" return { - _: 'i"inputStickerSetThumb" stickerset: { - _: 'i"inputStickerSetID" id: loc.source.id, + case 'stickerSetThumbnailVersion': + return { + _: 'inputStickerSetThumb', + stickerset: { + _: 'inputStickerSetID', + id: loc.source.id, accessHash: loc.source.accessHash, - }, + }, thumbVersion: loc.source.version } - ; default: + default: assertNever(loc.source) - ; } + } throw new td.ConversionError('inputFileLocation') } @@ -205,16 +208,16 @@ export function fileIdToInputFileLocation( } } else { return { - _: "inputDocumentFileLocation", + _: 'inputDocumentFileLocation', fileReference: fileId.fileReference, id: loc.id, accessHash: loc.accessHash, - thumbSize: "" - }; + thumbSize: '', + } } } default: - assertNever(loc); + assertNever(loc) } } diff --git a/packages/file-id/src/serialize-unique.ts b/packages/file-id/src/serialize-unique.ts index 57c07d5c..2a62a044 100644 --- a/packages/file-id/src/serialize-unique.ts +++ b/packages/file-id/src/serialize-unique.ts @@ -1,5 +1,5 @@ import { tdFileId, tdFileId as td } from './types' -import { assertNever, encodeUrlSafeBase64 } from '@mtcute/core' +import { assertNever, encodeUrlSafeBase64 } from "@mtcute/core"; import { telegramRleEncode } from './utils' import FileType = tdFileId.FileType import { TlBinaryWriter } from '@mtcute/tl-runtime' @@ -141,8 +141,7 @@ export function toUniqueFileId( break } case 'web': - writer = TlBinaryWriter.alloc( - {}, + writer = TlBinaryWriter.alloc({}, Buffer.byteLength(inputLocation.url, 'utf-8') + 8 ) writer.int(type) diff --git a/packages/file-id/src/serialize.ts b/packages/file-id/src/serialize.ts index c22cc4cb..9f0b58f4 100644 --- a/packages/file-id/src/serialize.ts +++ b/packages/file-id/src/serialize.ts @@ -1,5 +1,5 @@ import { tdFileId as td } from './types' -import { assertNever, encodeUrlSafeBase64 } from '@mtcute/core' +import { assertNever, encodeUrlSafeBase64 } from "@mtcute/core"; import { telegramRleEncode } from './utils' import { TlBinaryWriter } from '@mtcute/tl-runtime' @@ -86,25 +86,27 @@ export function toFileId( writer.int(8) writer.long(loc.source.id) writer.long(loc.source.accessHash) - ; writer.long(loc.source.volumeId) - ; writer.int(loc.source.localId) - ; break - ; case 'st"stickerSetThumbnailVersion" writer.int(9) - ; writer.long(loc.source.id) - ; writer.long(loc.source.accessHash) - ; writer.int(loc.source.version) - ; break - ; default: + writer.long(loc.source.volumeId) + writer.int(loc.source.localId) + break + case 'stickerSetThumbnailVersion': + writer.int(9) + writer.long(loc.source.id) + writer.long(loc.source.accessHash) + writer.int(loc.source.version) + break + default: assertNever(loc.source) - ; } + } break - ; case 'co"common" writer.long(loc.id) - ; writer.long(loc.accessHash) - ; break - ; default: + case 'common': + writer.long(loc.id) + writer.long(loc.accessHash) + break + default: assertNever(loc) - ; } + } return encodeUrlSafeBase64( Buffer.concat([telegramRleEncode(writer.result()), SUFFIX]) diff --git a/packages/socks-proxy/index.ts b/packages/socks-proxy/index.ts index c7a9e8c9..b2f24739 100644 --- a/packages/socks-proxy/index.ts +++ b/packages/socks-proxy/index.ts @@ -3,8 +3,8 @@ import { BaseTcpTransport, TransportState, tl, - assertNever, -} from '@mtcute/core' + assertNever +} from "@mtcute/core"; import { connect } from 'net' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -439,18 +439,17 @@ export abstract class BaseSocksTcpTransport extends BaseTcpTransport { code in SOCKS5_ERRORS ? SOCKS5_ERRORS[code] : `Unknown error code: 0x${code.toString( - 16 - )}` + 16 + )}` this._socket!.emit( - '"error" + 'error', new SocksProxyConnectionError(this._proxy, msg) ) -; } + } break -; } - default: - assertNever(state) -; } + } + default: assertNever(state) + } } this.log.debug(