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 = {
|
||||
version: version as WAVersion,
|
||||
fetchLatestVersion: false,
|
||||
browser: Browsers.macOS('Chrome'),
|
||||
waWebSocketUrl: 'wss://web.whatsapp.com/ws/chat',
|
||||
connectTimeoutMs: 20_000,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { DEFAULT_CONNECTION_CONFIG } from '../Defaults'
|
||||
import type { UserFacingSocketConfig } from '../Types'
|
||||
import { fetchLatestWaWebVersion } from '../Utils/generics'
|
||||
import { makeCommunitiesSocket } from './communities'
|
||||
|
||||
// export the last socket layer
|
||||
@@ -19,4 +20,48 @@ const makeWASocket = (config: UserFacingSocketConfig) => {
|
||||
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
|
||||
|
||||
@@ -49,6 +49,13 @@ export type SocketConfig = {
|
||||
logger: ILogger
|
||||
/** version to connect with */
|
||||
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 */
|
||||
browser: WABrowserDescription
|
||||
/** 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 './Utils/index'
|
||||
@@ -9,5 +9,5 @@ export * from './WAM/index'
|
||||
export * from './WAUSync/index'
|
||||
|
||||
export type WASocket = ReturnType<typeof makeWASocket>
|
||||
export { makeWASocket }
|
||||
export { makeWASocket, makeWASocketAutoVersion }
|
||||
export default makeWASocket
|
||||
|
||||
Reference in New Issue
Block a user