@rennzsync/baileys 10.2.3 → 10.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -26
- package/lib/Defaults/index.js +28 -3
- package/lib/Store/make-cache-manager-store.js +6 -1
- package/package.json +1 -1
- package/lib/Defaults/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# renzsync/baileys
|
|
4
4
|
|
|
5
5
|
**Lightweight WhatsApp Bot library — fully rebased onto `@whiskeysockets/baileys` 7.0.0-rc14**
|
|
6
6
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
A WhatsApp Multi-Device library rebased onto Baileys v7 rc14, using the original Signal Protocol engine (`libsignal`, GPL-3.0) — the same one stock `@whiskeysockets/baileys` rc14 ships with.
|
|
17
17
|
|
|
18
|
-
> **License note:** `
|
|
18
|
+
> **License note:** `renzsync/baileys`'s own code is MIT, but it depends on `libsignal` (GPL-3.0) at runtime for the Signal Protocol crypto. If you're publishing or redistributing this package, check what GPL-3.0 compliance means for your use case — this isn't legal advice.
|
|
19
19
|
|
|
20
20
|
Project focus: **multimedia WhatsApp bots** — audio, video, image and sticker pipelines, plus **Rich WebUI** (inline HTML interfaces rendered inside chat bubbles), with RAM-friendly defaults.
|
|
21
21
|
|
|
@@ -44,7 +44,7 @@ Platform support follows whatever `libsignal` (^6.0.0) supports on your system
|
|
|
44
44
|
## Installation
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
|
-
npm install @
|
|
47
|
+
npm install @renzsync/baileys
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### Optional dependencies (install per feature)
|
|
@@ -62,7 +62,7 @@ npm install @renz/baileys
|
|
|
62
62
|
## Quick Start
|
|
63
63
|
|
|
64
64
|
```js
|
|
65
|
-
import makeWASocket, { useMultiFileAuthState } from '@
|
|
65
|
+
import makeWASocket, { useMultiFileAuthState } from '@renzsync/baileys';
|
|
66
66
|
|
|
67
67
|
const { state, saveCreds } = await useMultiFileAuthState('auth_info');
|
|
68
68
|
|
|
@@ -113,7 +113,7 @@ await sock.sendMessage(jid, {
|
|
|
113
113
|
### Convert video/audio before sending (media-processor)
|
|
114
114
|
|
|
115
115
|
```js
|
|
116
|
-
import { convertToWhatsAppVideo, convertToOpusAudio, getVideoThumbnail, resizeImage } from '@
|
|
116
|
+
import { convertToWhatsAppVideo, convertToOpusAudio, getVideoThumbnail, resizeImage } from '@renzsync/baileys';
|
|
117
117
|
|
|
118
118
|
// Any video -> WhatsApp-compatible MP4/H.264 (requires fluent-ffmpeg)
|
|
119
119
|
const mp4 = await convertToWhatsAppVideo(rawBuffer);
|
|
@@ -130,7 +130,7 @@ const small = await resizeImage(imageBuffer, { width: 300, height: 300 });
|
|
|
130
130
|
### Probe media metadata
|
|
131
131
|
|
|
132
132
|
```js
|
|
133
|
-
import { probeMedia, getMp4Duration } from '@
|
|
133
|
+
import { probeMedia, getMp4Duration } from '@renzsync/baileys';
|
|
134
134
|
|
|
135
135
|
const meta = await probeMedia(buffer, 'audio/mpeg'); // { duration, bitrate, container, codec }
|
|
136
136
|
const dur = getMp4Duration(mp4Buffer); // no ffmpeg needed — parses atoms directly
|
|
@@ -143,7 +143,7 @@ const dur = getMp4Duration(mp4Buffer); // no ffmpeg needed — parses atoms dire
|
|
|
143
143
|
Send an HTML/CSS/JS interface that **renders directly inside the message bubble** — great for interactive menus, mini-apps and dashboards:
|
|
144
144
|
|
|
145
145
|
```js
|
|
146
|
-
import { sendInlineWebUI } from '@
|
|
146
|
+
import { sendInlineWebUI } from '@renzsync/baileys';
|
|
147
147
|
|
|
148
148
|
const html = `<!DOCTYPE html>
|
|
149
149
|
<html><head><style>body{background:#111b21;color:#fff;font-family:sans-serif;padding:16px}</style></head>
|
|
@@ -166,32 +166,32 @@ await sendInlineWebUI(sock, jid, html, 'Bot Menu', {
|
|
|
166
166
|
|
|
167
167
|
`interactiveMessage` + `nativeFlowMessage` cards are **no longer rendered** on many WhatsApp clients — `relayMessage` succeeds without error but the message silently doesn't appear. The classic `buttonsMessage` and `listMessage` templates render reliably on **every** client (Android/iOS/Web/Desktop).
|
|
168
168
|
|
|
169
|
-
`@
|
|
169
|
+
`@renzsync/baileys@10.0.2` ships ready-made builders in `lib/Utils/rich-classic.js`:
|
|
170
170
|
|
|
171
171
|
```js
|
|
172
|
-
import { buildButtonsMessage, buildListMessage, sendClassicMessage } from '@
|
|
172
|
+
import { buildButtonsMessage, buildListMessage, sendClassicMessage } from '@renzsync/baileys';
|
|
173
173
|
|
|
174
174
|
// 1-3 quick-reply buttons (optionally with a location+thumbnail header)
|
|
175
175
|
const buttons = buildButtonsMessage({
|
|
176
176
|
text: 'Hello Brother — pick an option',
|
|
177
177
|
footer: '© My Bot',
|
|
178
178
|
buttons: [
|
|
179
|
-
{ buttonId: '.owner', buttonText: '
|
|
180
|
-
{ buttonId: '.allmenu', buttonText: '
|
|
179
|
+
{ buttonId: '.owner', buttonText: 'Owner' },
|
|
180
|
+
{ buttonId: '.allmenu', buttonText: 'Allmenu' },
|
|
181
181
|
],
|
|
182
182
|
locationMessage: { jpegThumbnail, name: 'My Bot', address: 'v10.0.1' },
|
|
183
183
|
});
|
|
184
184
|
|
|
185
185
|
// Scrollable list with sections and rows
|
|
186
186
|
const list = buildListMessage({
|
|
187
|
-
title: '
|
|
187
|
+
title: 'Menu — 1271 commands',
|
|
188
188
|
description: 'Pick a category',
|
|
189
|
-
buttonText: '
|
|
189
|
+
buttonText: 'Pilih Kategori',
|
|
190
190
|
sections: [{
|
|
191
191
|
title: 'Categories',
|
|
192
192
|
rows: [
|
|
193
|
-
{ title: '
|
|
194
|
-
{ title: '
|
|
193
|
+
{ title: 'main', description: '19 commands', rowId: '.menucat main' },
|
|
194
|
+
{ title: 'sticker', description: '42 commands', rowId: '.menucat sticker' },
|
|
195
195
|
],
|
|
196
196
|
}],
|
|
197
197
|
});
|
|
@@ -211,15 +211,15 @@ Also exports `normalizeUserJid(sockOrUserOrJid)` — `sock.user.jid` never exist
|
|
|
211
211
|
`lib/Utils/rich-carousel.js` adds `interactiveMessage`/`carouselMessage` builders (the horizontal-scroll card format), for cases where you specifically need carousel or richer CTA button types (`cta_url`, `cta_call`, `cta_copy`, `cta_reminder`, `single_select`) that the classic templates above don't cover. Same rendering caveat as always: prefer `rich-classic.js` unless you specifically need these.
|
|
212
212
|
|
|
213
213
|
```js
|
|
214
|
-
import { buildCarouselMessage, sendCarouselMessage, sendInteractiveMessage } from '@
|
|
214
|
+
import { buildCarouselMessage, sendCarouselMessage, sendInteractiveMessage } from '@renzsync/baileys';
|
|
215
215
|
|
|
216
216
|
// single native-flow bubble (no carousel)
|
|
217
217
|
await sendInteractiveMessage(sock, jid, {
|
|
218
218
|
text: 'Choose an action:',
|
|
219
219
|
footer: '© My Bot',
|
|
220
220
|
buttons: [
|
|
221
|
-
{ type: 'quick_reply', displayText: '
|
|
222
|
-
{ type: 'cta_url', displayText: '
|
|
221
|
+
{ type: 'quick_reply', displayText: 'Owner', id: '.owner' },
|
|
222
|
+
{ type: 'cta_url', displayText: 'Docs', url: 'https://github.com/RennZSync/baileys' },
|
|
223
223
|
],
|
|
224
224
|
});
|
|
225
225
|
|
|
@@ -262,7 +262,7 @@ await sock.updateProfilePicture(sock.user.id, imageBuffer); // unchanged default
|
|
|
262
262
|
`lib/Store/*` ships a chat/contact/message store you can wire into `sock.ev`, plus two auth-state backends:
|
|
263
263
|
|
|
264
264
|
```js
|
|
265
|
-
import makeWASocket, { makeInMemoryStore, useSqliteAuthState, useMultiFileAuthState } from '@
|
|
265
|
+
import makeWASocket, { makeInMemoryStore, useSqliteAuthState, useMultiFileAuthState } from '@renzsync/baileys';
|
|
266
266
|
|
|
267
267
|
const store = makeInMemoryStore({});
|
|
268
268
|
store.readFromFile('./store.json');
|
|
@@ -289,7 +289,7 @@ sock.ev.on('creds.update', saveCreds);
|
|
|
289
289
|
Send a poll where each option is an image instead of plain text (`pollCreationMessageV3` with `pollContentType: IMAGE`, one `pollCreationOptionImageMessage` per option, associated back to the parent poll via `MEDIA_POLL`):
|
|
290
290
|
|
|
291
291
|
```js
|
|
292
|
-
import { generateWAMessageFromImagePoll } from '@
|
|
292
|
+
import { generateWAMessageFromImagePoll } from '@renzsync/baileys';
|
|
293
293
|
|
|
294
294
|
await generateWAMessageFromImagePoll(jid, {
|
|
295
295
|
name: 'Pilih gambar favorit',
|
|
@@ -318,9 +318,9 @@ const sock = makeWASocket({
|
|
|
318
318
|
|
|
319
319
|
---
|
|
320
320
|
|
|
321
|
-
## Breaking Changes from 9.x (legacy
|
|
321
|
+
## Breaking Changes from 9.x (legacy renzsync-baileys)
|
|
322
322
|
|
|
323
|
-
- Base rebased to Baileys **7.0.0-rc14**
|
|
323
|
+
- Base rebased to Baileys **7.0.0-rc14**
|
|
324
324
|
- Removed modules: `lib/VoIP/*` (WebRTC call client), `Modded/message_builder.js`, `Utils/rich-messages.js`, `Socket/dugong.js`, `Utils/sticker-pack.js`.
|
|
325
325
|
- `rejectCall` remains available (core `messages-recv`).
|
|
326
326
|
- Replacement for the old rich messages: `rich-webui.js` (`sendInlineWebUI`, `buildWebuiMessage`).
|
|
@@ -339,7 +339,7 @@ const sock = makeWASocket({
|
|
|
339
339
|
## Testing
|
|
340
340
|
|
|
341
341
|
```bash
|
|
342
|
-
npm test
|
|
342
|
+
npm test
|
|
343
343
|
```
|
|
344
344
|
|
|
345
345
|
Includes unit tests for: JID utils (PN/LID/hosted), Rich WebUI (build + proto encode/decode roundtrip).
|
|
@@ -348,12 +348,11 @@ Includes unit tests for: JID utils (PN/LID/hosted), Rich WebUI (build + proto en
|
|
|
348
348
|
|
|
349
349
|
## Credits
|
|
350
350
|
|
|
351
|
-
- **[RennZz-Dev](https://github.com/RennZSync)** — `
|
|
352
|
-
- **[KzorArsuy](https://github.com/rozzak2009)** — audit, rc14 rebase, optimization, multimedia & WebUI
|
|
351
|
+
- **[RennZz-Dev](https://github.com/RennZSync)** — `renzsync/baileys` maintainer: rebrand, ongoing upkeep & bot-focused tweaks
|
|
353
352
|
- **[WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)** — upstream library & original Signal Protocol wrapper (`libsignal`-based)
|
|
354
353
|
|
|
355
354
|
---
|
|
356
355
|
|
|
357
356
|
## License
|
|
358
357
|
|
|
359
|
-
**MIT** for `
|
|
358
|
+
**MIT** for `renzsync/baileys`'s own code — but it depends on `libsignal` (GPL-3.0) at runtime for Signal Protocol crypto. Check what that means for your use case before redistributing.
|
package/lib/Defaults/index.js
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
import { proto } from '../../WAProto/index.js';
|
|
2
2
|
import { makeLibSignalRepository } from '../Signal/libsignal.js';
|
|
3
3
|
import { Browsers } from '../Utils/browser-utils.js';
|
|
4
|
+
import { fetchLatestWaWebVersion } from '../Utils/generics.js';
|
|
4
5
|
import logger from '../Utils/logger.js';
|
|
5
|
-
|
|
6
|
+
// Last-known-good fallback. This goes stale over time (WhatsApp bumps its
|
|
7
|
+
// web client revision constantly), which is what causes "Couldn't link
|
|
8
|
+
// device" / pairing-code rejections once it's old enough — so it is only
|
|
9
|
+
// ever used when the live lookup below fails (offline host, blocked
|
|
10
|
+
// outbound network, etc). On every normal startup we replace it with the
|
|
11
|
+
// real current revision fetched from WhatsApp Web itself.
|
|
12
|
+
const FALLBACK_VERSION = [2, 3000, 1043857760];
|
|
13
|
+
const resolveStartupVersion = async () => {
|
|
14
|
+
try {
|
|
15
|
+
const controller = new AbortController();
|
|
16
|
+
const timeout = setTimeout(() => controller.abort(), 4000);
|
|
17
|
+
const { version: liveVersion, isLatest } = await fetchLatestWaWebVersion({ signal: controller.signal });
|
|
18
|
+
clearTimeout(timeout);
|
|
19
|
+
if (isLatest && Array.isArray(liveVersion)) {
|
|
20
|
+
return liveVersion;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// network unavailable at boot (offline / firewalled host) — fall back below
|
|
25
|
+
}
|
|
26
|
+
return FALLBACK_VERSION;
|
|
27
|
+
};
|
|
28
|
+
// Node ESM supports top-level await: this resolves once, at import time,
|
|
29
|
+
// so makeWASocket() keeps its existing synchronous API and every bot using
|
|
30
|
+
// this library gets a fresh version with zero code changes on their end.
|
|
31
|
+
const version = await resolveStartupVersion();
|
|
6
32
|
export const UNAUTHORIZED_CODES = [401, 403, 419];
|
|
7
33
|
export const DEFAULT_ORIGIN = 'https://web.whatsapp.com';
|
|
8
34
|
export const CALL_VIDEO_PREFIX = 'https://call.whatsapp.com/video/';
|
|
@@ -125,5 +151,4 @@ export const TimeMs = {
|
|
|
125
151
|
Hour: 60 * 60 * 1000,
|
|
126
152
|
Day: 24 * 60 * 60 * 1000,
|
|
127
153
|
Week: 7 * 24 * 60 * 60 * 1000
|
|
128
|
-
};
|
|
129
|
-
//# sourceMappingURL=index.js.map
|
|
154
|
+
};
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { createRequire } from "module";
|
|
2
2
|
const require = createRequire(import.meta.url);
|
|
3
|
-
const cacheManager = require("cache-manager");
|
|
4
3
|
import * as WAProto_1 from "../../WAProto/index.js";
|
|
5
4
|
import * as Utils_1 from "../Utils/index.js";
|
|
6
5
|
import logger from "../Utils/logger.js";
|
|
7
6
|
export default async function makeCacheManagerAuthState(store, sessionKey) {
|
|
7
|
+
let cacheManager;
|
|
8
|
+
try {
|
|
9
|
+
cacheManager = require("cache-manager");
|
|
10
|
+
} catch {
|
|
11
|
+
throw new Error("makeCacheManagerAuthState requires the optional 'cache-manager' package. Install it with: npm install cache-manager");
|
|
12
|
+
}
|
|
8
13
|
const defaultKey = file => `${sessionKey}:${file}`;
|
|
9
14
|
const databaseConn = await cacheManager.caching(store);
|
|
10
15
|
const writeData = async (file, data) => {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rennzsync/baileys",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "10.
|
|
4
|
+
"version": "10.4.0",
|
|
5
5
|
"description": "renz/baileys — WhatsApp Multi-Device library rebased @whiskeysockets/baileys 7.0.0-rc14, using the original libsignal (GPL-3.0) Signal Protocol engine. Maintained by RennZz-Dev. Focus: multimedia WhatsApp bots, low RAM footprint.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "RennZz-Dev (https://github.com/renzxhub)",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Defaults/index.ts"],"names":[],"mappings":"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"}
|