From 65aa4a7d99027a2aa7bdadfabcb2accc5f40131b Mon Sep 17 00:00:00 2001 From: SamuelScheit Date: Sun, 30 Apr 2023 12:30:08 +0200 Subject: [PATCH] unify web + mobile and use tcp socket --- src/Socket/messages-recv.ts | 2 +- src/Socket/mobile-socket.ts | 4 ---- src/Socket/socket.ts | 11 +++++++++-- src/Socket/web-socket.ts | 31 ------------------------------- src/Utils/auth-utils.ts | 2 +- src/Utils/validate-connection.ts | 20 +------------------- 6 files changed, 12 insertions(+), 58 deletions(-) delete mode 100644 src/Socket/web-socket.ts diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index 88d8fa5..fd0bf9c 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -564,7 +564,7 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { if(msg.messageStubType === proto.WebMessageInfo.StubType.CIPHERTEXT) { retryMutex.mutex( async() => { - if(ws.readyState === ws.OPEN) { + if(ws.isOpen) { const encNode = getBinaryNodeChild(node, 'enc') await sendRetryRequest(node, !encNode) if(retryRequestDelayMs) { diff --git a/src/Socket/mobile-socket.ts b/src/Socket/mobile-socket.ts index edcdd5d..6b01a4e 100644 --- a/src/Socket/mobile-socket.ts +++ b/src/Socket/mobile-socket.ts @@ -6,10 +6,6 @@ export class MobileSocket extends Socket { constructor(public config: SocketConfig) { super() - if(config.auth.creds.registered) { - this.connect() - } - this.on('data', (d) => { this.emit('message', d) }) diff --git a/src/Socket/socket.ts b/src/Socket/socket.ts index eb9d772..60e6b92 100644 --- a/src/Socket/socket.ts +++ b/src/Socket/socket.ts @@ -8,7 +8,6 @@ import { addTransactionCapability, bindWaitForConnectionUpdate, configureSuccess import { makeEventBuffer } from '../Utils/event-buffer' import { assertNodeErrorFree, BinaryNode, binaryNodeToString, encodeBinaryNode, getBinaryNodeChild, getBinaryNodeChildren, S_WHATSAPP_NET } from '../WABinary' import { MobileSocket } from './mobile-socket' -import { WebSocket } from './web-socket' /** * Connects to WA servers and performs: @@ -32,9 +31,17 @@ export const makeSocket = (config: SocketConfig) => { } = config config.mobile = config.mobile || config.auth.creds.registered - const ws = config.mobile ? new MobileSocket(config) : new WebSocket(config) + const ws = new MobileSocket(config) ws.setMaxListeners(0) + if(!config.mobile) { + // if not mobile -> auto connect + ws.connect() + } else if(config.auth.creds.registered) { + // if mobile and registered -> auto connect + ws.connect() + } + const ev = makeEventBuffer(logger) /** ephemeral key pair used to encrypt/decrypt communication. Unique for each connection */ const ephemeralKeyPair = Curve.generateKeyPair() diff --git a/src/Socket/web-socket.ts b/src/Socket/web-socket.ts deleted file mode 100644 index ece9264..0000000 --- a/src/Socket/web-socket.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { WebSocket as WS } from 'ws' -import { DEFAULT_ORIGIN } from '../Defaults' -import { SocketConfig } from '../Types' - -export class WebSocket extends WS { - constructor(public config: SocketConfig) { - super(config.waWebSocketUrl, undefined, { - origin: DEFAULT_ORIGIN, - headers: config.options.headers as Record, - handshakeTimeout: config.connectTimeoutMs, - timeout: config.connectTimeoutMs, - agent: config.agent, - }) - } - - get isOpen() { - return this.readyState === WS.OPEN - } - - get isClosed() { - return this.readyState === WS.CLOSED - } - - get isClosing() { - return this.readyState === WS.CLOSING - } - - get isConnecting() { - return this.readyState === WS.CONNECTING - } -} diff --git a/src/Utils/auth-utils.ts b/src/Utils/auth-utils.ts index aa176b6..1f79da5 100644 --- a/src/Utils/auth-utils.ts +++ b/src/Utils/auth-utils.ts @@ -213,6 +213,6 @@ export const initAuthCreds = (): AuthenticationCreds => { identityId: randomBytes(20), registered: false, backupToken: randomBytes(20), - registration: {} as RegistrationOptions + registration: {} as never } } \ No newline at end of file diff --git a/src/Utils/validate-connection.ts b/src/Utils/validate-connection.ts index 29b6cab..fae4a18 100644 --- a/src/Utils/validate-connection.ts +++ b/src/Utils/validate-connection.ts @@ -13,7 +13,7 @@ const getUserAgent = (config: SocketConfig): proto.ClientPayload.IUserAgent => { const version = config.mobile ? [2, 22, 24] : config.version const device = config.mobile ? 'iPhone_7' : 'Desktop' const manufacturer = config.mobile ? 'Apple' : '' - const platform = config.mobile ? proto.ClientPayload.UserAgent.Platform.IOS : proto.ClientPayload.UserAgent.Platform.WEB + const platform = config.mobile ? proto.ClientPayload.UserAgent.Platform.IOS : proto.ClientPayload.UserAgent.Platform.MACOS const phoneId = config.mobile ? { phoneId: config.auth.creds.phoneId } : {} return { @@ -36,20 +36,6 @@ const getUserAgent = (config: SocketConfig): proto.ClientPayload.IUserAgent => { } } -const PLATFORM_MAP = { - 'Mac OS': proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN, - 'Windows': proto.ClientPayload.WebInfo.WebSubPlatform.WIN32 -} - -const getWebInfo = (config: SocketConfig): proto.ClientPayload.IWebInfo => { - let webSubPlatform = proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER - if(config.syncFullHistory && PLATFORM_MAP[config.browser[0]]) { - webSubPlatform = PLATFORM_MAP[config.browser[0]] - } - - return { webSubPlatform } -} - const getClientPayload = (config: SocketConfig) => { const payload: proto.IClientPayload = { connectType: proto.ClientPayload.ConnectType.WIFI_UNKNOWN, @@ -57,10 +43,6 @@ const getClientPayload = (config: SocketConfig) => { userAgent: getUserAgent(config), } - if(!config.mobile) { - payload.webInfo = getWebInfo(config) - } - return payload }