feat: add makeWASocketAutoVersion for automatic version fetching
Adds a new async function that automatically fetches the latest
WhatsApp Web version from web.whatsapp.com before connecting.
Usage:
```typescript
// Option 1: Auto-fetch version (recommended)
const sock = await makeWASocketAutoVersion({ auth: state })
// Option 2: Manual version (existing behavior)
const sock = makeWASocket({ auth: state })
```
Benefits:
- No need to update library for version changes
- Automatic fallback to bundled version if fetch fails
- Logged warnings when using fallback
This commit is contained in:
@@ -49,6 +49,7 @@ export const PROCESSABLE_HISTORY_TYPES = [
|
|||||||
|
|
||||||
export const DEFAULT_CONNECTION_CONFIG: SocketConfig = {
|
export const DEFAULT_CONNECTION_CONFIG: SocketConfig = {
|
||||||
version: version as WAVersion,
|
version: version as WAVersion,
|
||||||
|
fetchLatestVersion: false,
|
||||||
browser: Browsers.macOS('Chrome'),
|
browser: Browsers.macOS('Chrome'),
|
||||||
waWebSocketUrl: 'wss://web.whatsapp.com/ws/chat',
|
waWebSocketUrl: 'wss://web.whatsapp.com/ws/chat',
|
||||||
connectTimeoutMs: 20_000,
|
connectTimeoutMs: 20_000,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { DEFAULT_CONNECTION_CONFIG } from '../Defaults'
|
import { DEFAULT_CONNECTION_CONFIG } from '../Defaults'
|
||||||
import type { UserFacingSocketConfig } from '../Types'
|
import type { UserFacingSocketConfig } from '../Types'
|
||||||
|
import { fetchLatestWaWebVersion } from '../Utils/generics'
|
||||||
import { makeCommunitiesSocket } from './communities'
|
import { makeCommunitiesSocket } from './communities'
|
||||||
|
|
||||||
// export the last socket layer
|
// export the last socket layer
|
||||||
@@ -19,4 +20,48 @@ const makeWASocket = (config: UserFacingSocketConfig) => {
|
|||||||
return makeCommunitiesSocket(newConfig)
|
return makeCommunitiesSocket(newConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a WhatsApp socket connection with automatic version fetching.
|
||||||
|
* Fetches the latest WhatsApp Web version from web.whatsapp.com before connecting.
|
||||||
|
* Falls back to bundled version if fetch fails.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const sock = await makeWASocketAutoVersion({
|
||||||
|
* auth: state
|
||||||
|
* })
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
export const makeWASocketAutoVersion = async (config: UserFacingSocketConfig) => {
|
||||||
|
const mergedConfig = {
|
||||||
|
...DEFAULT_CONNECTION_CONFIG,
|
||||||
|
...config
|
||||||
|
}
|
||||||
|
|
||||||
|
const logger = mergedConfig.logger
|
||||||
|
|
||||||
|
// Fetch latest version
|
||||||
|
try {
|
||||||
|
logger?.info('Fetching latest WhatsApp Web version...')
|
||||||
|
const result = await fetchLatestWaWebVersion()
|
||||||
|
|
||||||
|
if (result.isLatest) {
|
||||||
|
logger?.info({ version: result.version }, 'Using latest WhatsApp Web version')
|
||||||
|
mergedConfig.version = result.version
|
||||||
|
} else {
|
||||||
|
logger?.warn(
|
||||||
|
{ error: result.error, fallbackVersion: mergedConfig.version },
|
||||||
|
'Failed to fetch latest version, using bundled version'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
logger?.warn(
|
||||||
|
{ error, fallbackVersion: mergedConfig.version },
|
||||||
|
'Error fetching latest version, using bundled version'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return makeWASocket(mergedConfig)
|
||||||
|
}
|
||||||
|
|
||||||
export default makeWASocket
|
export default makeWASocket
|
||||||
|
|||||||
@@ -49,6 +49,13 @@ export type SocketConfig = {
|
|||||||
logger: ILogger
|
logger: ILogger
|
||||||
/** version to connect with */
|
/** version to connect with */
|
||||||
version: WAVersion
|
version: WAVersion
|
||||||
|
/**
|
||||||
|
* Automatically fetch the latest WhatsApp Web version on connect.
|
||||||
|
* When enabled, fetches from web.whatsapp.com before connecting.
|
||||||
|
* Falls back to bundled version if fetch fails.
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
fetchLatestVersion: boolean
|
||||||
/** override browser config */
|
/** override browser config */
|
||||||
browser: WABrowserDescription
|
browser: WABrowserDescription
|
||||||
/** agent used for fetch requests -- uploading/downloading media */
|
/** agent used for fetch requests -- uploading/downloading media */
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
import makeWASocket from './Socket/index'
|
import makeWASocket, { makeWASocketAutoVersion } from './Socket/index'
|
||||||
|
|
||||||
export * from '../WAProto/index.js'
|
export * from '../WAProto/index.js'
|
||||||
export * from './Utils/index'
|
export * from './Utils/index'
|
||||||
@@ -9,5 +9,5 @@ export * from './WAM/index'
|
|||||||
export * from './WAUSync/index'
|
export * from './WAUSync/index'
|
||||||
|
|
||||||
export type WASocket = ReturnType<typeof makeWASocket>
|
export type WASocket = ReturnType<typeof makeWASocket>
|
||||||
export { makeWASocket }
|
export { makeWASocket, makeWASocketAutoVersion }
|
||||||
export default makeWASocket
|
export default makeWASocket
|
||||||
|
|||||||
Reference in New Issue
Block a user