@@ -133,6 +133,23 @@ function resolveWaWebSocketUrl(value: string | URL | undefined): string | URL |
133133 return value . trim ( ) || undefined ;
134134}
135135
136+ function resolveEnvWaWebSocketUrl ( ) : string | undefined {
137+ const value = resolveWaWebSocketUrl ( process . env [ OPENCLAW_WHATSAPP_WEB_SOCKET_URL_ENV ] ) ;
138+ if ( ! value ) {
139+ return undefined ;
140+ }
141+ let url : URL ;
142+ try {
143+ url = new URL ( value ) ;
144+ } catch {
145+ throw new Error ( `${ OPENCLAW_WHATSAPP_WEB_SOCKET_URL_ENV } must be a valid URL.` ) ;
146+ }
147+ if ( url . protocol !== "ws:" && url . protocol !== "wss:" ) {
148+ throw new Error ( `${ OPENCLAW_WHATSAPP_WEB_SOCKET_URL_ENV } must use ws:// or wss://.` ) ;
149+ }
150+ return url . toString ( ) ;
151+ }
152+
136153/**
137154 * Create a Baileys socket backed by the multi-file auth store we keep on disk.
138155 * Consumers can opt into QR printing for interactive login flows.
@@ -172,6 +189,7 @@ export async function createWaSocket(
172189 await writeCredsJsonAtomically ( authDir , state . creds ) ;
173190 } ;
174191 const { version } = await fetchLatestBaileysVersion ( ) ;
192+ const waWebSocketUrl = resolveWaWebSocketUrl ( opts . waWebSocketUrl ) ?? resolveEnvWaWebSocketUrl ( ) ;
175193 const agent = await resolveEnvProxyAgent ( sessionLogger ) ;
176194 const fetchAgent = await resolveEnvFetchDispatcher ( sessionLogger , agent ) ;
177195 const socketTiming = {
@@ -181,9 +199,6 @@ export async function createWaSocket(
181199 defaultQueryTimeoutMs :
182200 opts . defaultQueryTimeoutMs ?? DEFAULT_WHATSAPP_SOCKET_TIMING . defaultQueryTimeoutMs ,
183201 } ;
184- const waWebSocketUrl =
185- resolveWaWebSocketUrl ( opts . waWebSocketUrl ) ??
186- resolveWaWebSocketUrl ( process . env [ OPENCLAW_WHATSAPP_WEB_SOCKET_URL_ENV ] ) ;
187202 const sock = makeWASocket ( {
188203 auth : {
189204 creds : state . creds ,
0 commit comments