@oxidezap/baileyrs 0.0.7
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/LICENSE +21 -0
- package/README.md +490 -0
- package/WAProto/index.d.ts +13875 -0
- package/WAProto/index.js +175 -0
- package/lib/Defaults/index.d.ts +9 -0
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +32 -0
- package/lib/Defaults/index.js.map +1 -0
- package/lib/Socket/blocking.d.ts +6 -0
- package/lib/Socket/blocking.d.ts.map +1 -0
- package/lib/Socket/blocking.js +9 -0
- package/lib/Socket/blocking.js.map +1 -0
- package/lib/Socket/chat-actions.d.ts +32 -0
- package/lib/Socket/chat-actions.d.ts.map +1 -0
- package/lib/Socket/chat-actions.js +78 -0
- package/lib/Socket/chat-actions.js.map +1 -0
- package/lib/Socket/contacts.d.ts +10 -0
- package/lib/Socket/contacts.d.ts.map +1 -0
- package/lib/Socket/contacts.js +21 -0
- package/lib/Socket/contacts.js.map +1 -0
- package/lib/Socket/events.d.ts +10 -0
- package/lib/Socket/events.d.ts.map +1 -0
- package/lib/Socket/events.js +293 -0
- package/lib/Socket/events.js.map +1 -0
- package/lib/Socket/groups.d.ts +28 -0
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js +90 -0
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +202 -0
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js +378 -0
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/messages.d.ts +42 -0
- package/lib/Socket/messages.d.ts.map +1 -0
- package/lib/Socket/messages.js +172 -0
- package/lib/Socket/messages.js.map +1 -0
- package/lib/Socket/newsletter.d.ts +9 -0
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js +18 -0
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/presence.d.ts +7 -0
- package/lib/Socket/presence.d.ts.map +1 -0
- package/lib/Socket/presence.js +12 -0
- package/lib/Socket/presence.js.map +1 -0
- package/lib/Socket/profile.d.ts +14 -0
- package/lib/Socket/profile.d.ts.map +1 -0
- package/lib/Socket/profile.js +36 -0
- package/lib/Socket/profile.js.map +1 -0
- package/lib/Socket/transport.d.ts +12 -0
- package/lib/Socket/transport.d.ts.map +1 -0
- package/lib/Socket/transport.js +90 -0
- package/lib/Socket/transport.js.map +1 -0
- package/lib/Socket/types.d.ts +30 -0
- package/lib/Socket/types.d.ts.map +1 -0
- package/lib/Socket/types.js +3 -0
- package/lib/Socket/types.js.map +1 -0
- package/lib/Types/Auth.d.ts +144 -0
- package/lib/Types/Auth.d.ts.map +1 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Auth.js.map +1 -0
- package/lib/Types/BinaryNode.d.ts +15 -0
- package/lib/Types/BinaryNode.d.ts.map +1 -0
- package/lib/Types/BinaryNode.js +2 -0
- package/lib/Types/BinaryNode.js.map +1 -0
- package/lib/Types/Bussines.d.ts +25 -0
- package/lib/Types/Bussines.d.ts.map +1 -0
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Bussines.js.map +1 -0
- package/lib/Types/Call.d.ts +15 -0
- package/lib/Types/Call.d.ts.map +1 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Call.js.map +1 -0
- package/lib/Types/Chat.d.ts +123 -0
- package/lib/Types/Chat.d.ts.map +1 -0
- package/lib/Types/Chat.js +8 -0
- package/lib/Types/Chat.js.map +1 -0
- package/lib/Types/Contact.d.ts +24 -0
- package/lib/Types/Contact.d.ts.map +1 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Contact.js.map +1 -0
- package/lib/Types/Events.d.ts +238 -0
- package/lib/Types/Events.d.ts.map +1 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/Events.js.map +1 -0
- package/lib/Types/GroupMetadata.d.ts +67 -0
- package/lib/Types/GroupMetadata.d.ts.map +1 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/GroupMetadata.js.map +1 -0
- package/lib/Types/Label.d.ts +47 -0
- package/lib/Types/Label.d.ts.map +1 -0
- package/lib/Types/Label.js +25 -0
- package/lib/Types/Label.js.map +1 -0
- package/lib/Types/LabelAssociation.d.ts +30 -0
- package/lib/Types/LabelAssociation.d.ts.map +1 -0
- package/lib/Types/LabelAssociation.js +7 -0
- package/lib/Types/LabelAssociation.js.map +1 -0
- package/lib/Types/Message.d.ts +298 -0
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js +12 -0
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Newsletter.d.ts +98 -0
- package/lib/Types/Newsletter.d.ts.map +1 -0
- package/lib/Types/Newsletter.js +31 -0
- package/lib/Types/Newsletter.js.map +1 -0
- package/lib/Types/Socket.d.ts +54 -0
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js +2 -0
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +29 -0
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js +2 -0
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/index.d.ts +60 -0
- package/lib/Types/index.d.ts.map +1 -0
- package/lib/Types/index.js +25 -0
- package/lib/Types/index.js.map +1 -0
- package/lib/Utils/browser-utils.d.ts +3 -0
- package/lib/Utils/browser-utils.d.ts.map +1 -0
- package/lib/Utils/browser-utils.js +22 -0
- package/lib/Utils/browser-utils.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +7 -0
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +42 -0
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/generics.d.ts +13 -0
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +40 -0
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/index.d.ts +10 -0
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +10 -0
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/logger.d.ts +13 -0
- package/lib/Utils/logger.d.ts.map +1 -0
- package/lib/Utils/logger.js +3 -0
- package/lib/Utils/logger.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +51 -0
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +223 -0
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages.d.ts +88 -0
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +730 -0
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/use-bridge-store.d.ts +13 -0
- package/lib/Utils/use-bridge-store.d.ts.map +1 -0
- package/lib/Utils/use-bridge-store.js +124 -0
- package/lib/Utils/use-bridge-store.js.map +1 -0
- package/lib/Utils/use-memory-store.d.ts +9 -0
- package/lib/Utils/use-memory-store.d.ts.map +1 -0
- package/lib/Utils/use-memory-store.js +23 -0
- package/lib/Utils/use-memory-store.js.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +26 -0
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/wrap-legacy-store.d.ts +36 -0
- package/lib/Utils/wrap-legacy-store.d.ts.map +1 -0
- package/lib/Utils/wrap-legacy-store.js +708 -0
- package/lib/Utils/wrap-legacy-store.js.map +1 -0
- package/lib/WABinary/index.d.ts +2 -0
- package/lib/WABinary/index.d.ts.map +1 -0
- package/lib/WABinary/index.js +2 -0
- package/lib/WABinary/index.js.map +1 -0
- package/lib/WABinary/jid-utils.d.ts +20 -0
- package/lib/WABinary/jid-utils.d.ts.map +1 -0
- package/lib/WABinary/jid-utils.js +51 -0
- package/lib/WABinary/jid-utils.js.map +1 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -0
- package/lib/index.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export * from './Auth.js';
|
|
2
|
+
export * from './BinaryNode.js';
|
|
3
|
+
export * from './GroupMetadata.js';
|
|
4
|
+
export * from './Chat.js';
|
|
5
|
+
export * from './Contact.js';
|
|
6
|
+
export * from './State.js';
|
|
7
|
+
export * from './Message.js';
|
|
8
|
+
export * from './Socket.js';
|
|
9
|
+
export * from './Events.js';
|
|
10
|
+
export * from './Call.js';
|
|
11
|
+
export * from './Newsletter.js';
|
|
12
|
+
export var DisconnectReason;
|
|
13
|
+
(function (DisconnectReason) {
|
|
14
|
+
DisconnectReason[DisconnectReason["connectionClosed"] = 428] = "connectionClosed";
|
|
15
|
+
DisconnectReason[DisconnectReason["connectionLost"] = 499] = "connectionLost";
|
|
16
|
+
DisconnectReason[DisconnectReason["connectionReplaced"] = 440] = "connectionReplaced";
|
|
17
|
+
DisconnectReason[DisconnectReason["timedOut"] = 408] = "timedOut";
|
|
18
|
+
DisconnectReason[DisconnectReason["loggedOut"] = 401] = "loggedOut";
|
|
19
|
+
DisconnectReason[DisconnectReason["badSession"] = 500] = "badSession";
|
|
20
|
+
DisconnectReason[DisconnectReason["restartRequired"] = 515] = "restartRequired";
|
|
21
|
+
DisconnectReason[DisconnectReason["multideviceMismatch"] = 411] = "multideviceMismatch";
|
|
22
|
+
DisconnectReason[DisconnectReason["forbidden"] = 403] = "forbidden";
|
|
23
|
+
DisconnectReason[DisconnectReason["unavailableService"] = 503] = "unavailableService";
|
|
24
|
+
})(DisconnectReason || (DisconnectReason = {}));
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAe5B,MAAM,CAAN,IAAY,gBAWX;AAXD,WAAY,gBAAgB;IAC3B,iFAAsB,CAAA;IACtB,6EAAoB,CAAA;IACpB,qFAAwB,CAAA;IACxB,iEAAc,CAAA;IACd,mEAAe,CAAA;IACf,qEAAgB,CAAA;IAChB,+EAAqB,CAAA;IACrB,uFAAyB,CAAA;IACzB,mEAAe,CAAA;IACf,qFAAwB,CAAA;AACzB,CAAC,EAXW,gBAAgB,KAAhB,gBAAgB,QAW3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/browser-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAgBjD,eAAO,MAAM,QAAQ,EAAE,WAMtB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { platform, release } from 'node:os';
|
|
2
|
+
const PLATFORM_MAP = {
|
|
3
|
+
aix: 'AIX',
|
|
4
|
+
darwin: 'Mac OS',
|
|
5
|
+
win32: 'Windows',
|
|
6
|
+
android: 'Android',
|
|
7
|
+
freebsd: 'FreeBSD',
|
|
8
|
+
openbsd: 'OpenBSD',
|
|
9
|
+
sunos: 'Solaris',
|
|
10
|
+
linux: undefined,
|
|
11
|
+
haiku: undefined,
|
|
12
|
+
cygwin: undefined,
|
|
13
|
+
netbsd: undefined
|
|
14
|
+
};
|
|
15
|
+
export const Browsers = {
|
|
16
|
+
ubuntu: browser => ['Ubuntu', browser, '22.04.4'],
|
|
17
|
+
macOS: browser => ['Mac OS', browser, '14.4.1'],
|
|
18
|
+
baileys: browser => ['Baileys', browser, '6.5.0'],
|
|
19
|
+
windows: browser => ['Windows', browser, '10.0.22631'],
|
|
20
|
+
appropriate: browser => [PLATFORM_MAP[platform()] || 'Ubuntu', browser, release()]
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=browser-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-utils.js","sourceRoot":"","sources":["../../src/Utils/browser-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAG3C,MAAM,YAAY,GAAG;IACpB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CACjB,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACpC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;IACjD,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;IACtD,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;CAClF,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BaileysEventEmitter } from '../Types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Simple event emitter with `process()` support for Baileys events.
|
|
4
|
+
* The bridge handles event ordering internally — no buffering needed.
|
|
5
|
+
*/
|
|
6
|
+
export declare const makeEventBuffer: () => BaileysEventEmitter;
|
|
7
|
+
//# sourceMappingURL=event-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-buffer.d.ts","sourceRoot":"","sources":["../../src/Utils/event-buffer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,gBAAgB,CAAA;AAE1E;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,mBAuClC,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import EventEmitter from 'node:events';
|
|
2
|
+
/**
|
|
3
|
+
* Simple event emitter with `process()` support for Baileys events.
|
|
4
|
+
* The bridge handles event ordering internally — no buffering needed.
|
|
5
|
+
*/
|
|
6
|
+
export const makeEventBuffer = () => {
|
|
7
|
+
const ev = new EventEmitter();
|
|
8
|
+
ev.setMaxListeners(100);
|
|
9
|
+
const emitter = ev;
|
|
10
|
+
emitter.process = handler => {
|
|
11
|
+
const EVENTS = [
|
|
12
|
+
'connection.update',
|
|
13
|
+
'creds.update',
|
|
14
|
+
'messaging-history.set',
|
|
15
|
+
'chats.upsert',
|
|
16
|
+
'chats.update',
|
|
17
|
+
'chats.delete',
|
|
18
|
+
'contacts.upsert',
|
|
19
|
+
'contacts.update',
|
|
20
|
+
'messages.upsert',
|
|
21
|
+
'messages.update',
|
|
22
|
+
'messages.delete',
|
|
23
|
+
'messages.reaction',
|
|
24
|
+
'message-receipt.update',
|
|
25
|
+
'groups.upsert',
|
|
26
|
+
'groups.update',
|
|
27
|
+
'group-participants.update',
|
|
28
|
+
'blocklist.set',
|
|
29
|
+
'blocklist.update',
|
|
30
|
+
'presence.update',
|
|
31
|
+
'labels.edit',
|
|
32
|
+
'labels.association'
|
|
33
|
+
];
|
|
34
|
+
for (const event of EVENTS) {
|
|
35
|
+
ev.on(event, (data) => {
|
|
36
|
+
void handler({ [event]: data });
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
return emitter;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=event-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-buffer.js","sourceRoot":"","sources":["../../src/Utils/event-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AAGtC;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAwB,EAAE;IACxD,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAA;IAC7B,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IAEvB,MAAM,OAAO,GAAG,EAAoC,CAAA;IAEpD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE;QAC3B,MAAM,MAAM,GAA8B;YACzC,mBAAmB;YACnB,cAAc;YACd,uBAAuB;YACvB,cAAc;YACd,cAAc;YACd,cAAc;YACd,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,mBAAmB;YACnB,wBAAwB;YACxB,eAAe;YACf,eAAe;YACf,2BAA2B;YAC3B,eAAe;YACf,kBAAkB;YAClB,iBAAiB;YACjB,aAAa;YACb,oBAAoB;SACpB,CAAA;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAa,EAAE,EAAE;gBAC9B,KAAK,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAA8B,CAAC,CAAA;YAC5D,CAAC,CAAC,CAAA;QACH,CAAC;IACF,CAAC,CAAA;IAED,OAAO,OAAO,CAAA;AACf,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { WAVersion } from '../Types/index.js';
|
|
2
|
+
/** unix timestamp of a date in seconds */
|
|
3
|
+
export declare const unixTimestampSeconds: (date?: Date) => number;
|
|
4
|
+
export declare const fetchLatestWaWebVersion: (options?: RequestInit) => Promise<{
|
|
5
|
+
version: WAVersion;
|
|
6
|
+
isLatest: boolean;
|
|
7
|
+
error?: undefined;
|
|
8
|
+
} | {
|
|
9
|
+
version: WAVersion;
|
|
10
|
+
isLatest: boolean;
|
|
11
|
+
error: unknown;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=generics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../src/Utils/generics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,GAAI,OAAM,IAAiB,WAAsC,CAAA;AAElG,eAAO,MAAM,uBAAuB,GAAU,UAAS,WAAgB;aAiCnC,SAAS;;;;;;;EAM5C,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Boom } from '@hapi/boom';
|
|
2
|
+
import { DEFAULT_CONNECTION_CONFIG } from '../Defaults/index.js';
|
|
3
|
+
const baileysVersion = DEFAULT_CONNECTION_CONFIG.version;
|
|
4
|
+
/** unix timestamp of a date in seconds */
|
|
5
|
+
export const unixTimestampSeconds = (date = new Date()) => Math.floor(date.getTime() / 1000);
|
|
6
|
+
export const fetchLatestWaWebVersion = async (options = {}) => {
|
|
7
|
+
try {
|
|
8
|
+
const defaultHeaders = {
|
|
9
|
+
'sec-fetch-site': 'none',
|
|
10
|
+
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
|
|
11
|
+
};
|
|
12
|
+
const headers = { ...defaultHeaders, ...options.headers };
|
|
13
|
+
const response = await fetch('https://web.whatsapp.com/sw.js', {
|
|
14
|
+
...options,
|
|
15
|
+
method: 'GET',
|
|
16
|
+
headers
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
throw new Boom(`Failed to fetch sw.js: ${response.statusText}`, { statusCode: response.status });
|
|
20
|
+
}
|
|
21
|
+
const data = await response.text();
|
|
22
|
+
const regex = /\\?"client_revision\\?":\s*(\d+)/;
|
|
23
|
+
const match = data.match(regex);
|
|
24
|
+
if (!match?.[1]) {
|
|
25
|
+
return {
|
|
26
|
+
version: baileysVersion,
|
|
27
|
+
isLatest: false,
|
|
28
|
+
error: { message: 'Could not find client revision in the fetched content' }
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
version: [2, 3000, +match[1]],
|
|
33
|
+
isLatest: true
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return { version: baileysVersion, isLatest: false, error };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=generics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/Utils/generics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,MAAM,cAAc,GAAG,yBAAyB,CAAC,OAAO,CAAA;AAGxD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAa,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;AAElG,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,EAAE;IAC1E,IAAI,CAAC;QACJ,MAAM,cAAc,GAAG;YACtB,gBAAgB,EAAE,MAAM;YACxB,YAAY,EACX,uGAAuG;SACxG,CAAA;QAED,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAEzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,EAAE;YAC9D,GAAG,OAAO;YACV,MAAM,EAAE,KAAK;YACb,OAAO;SACP,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,IAAI,CAAC,0BAA0B,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACjG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,MAAM,KAAK,GAAG,kCAAkC,CAAA;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO;gBACN,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,EAAE,OAAO,EAAE,uDAAuD,EAAE;aAC3E,CAAA;QACF,CAAC;QAED,OAAO;YACN,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAc;YAC1C,QAAQ,EAAE,IAAI;SACd,CAAA;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IAC3D,CAAC;AACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './generics.js';
|
|
2
|
+
export * from './messages.js';
|
|
3
|
+
export * from './messages-media.js';
|
|
4
|
+
export * from './use-multi-file-auth-state.js';
|
|
5
|
+
export * from './event-buffer.js';
|
|
6
|
+
export * from './browser-utils.js';
|
|
7
|
+
export * from './use-bridge-store.js';
|
|
8
|
+
export * from './use-memory-store.js';
|
|
9
|
+
export * from './wrap-legacy-store.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './generics.js';
|
|
2
|
+
export * from './messages.js';
|
|
3
|
+
export * from './messages-media.js';
|
|
4
|
+
export * from './use-multi-file-auth-state.js';
|
|
5
|
+
export * from './event-buffer.js';
|
|
6
|
+
export * from './browser-utils.js';
|
|
7
|
+
export * from './use-bridge-store.js';
|
|
8
|
+
export * from './use-memory-store.js';
|
|
9
|
+
export * from './wrap-legacy-store.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import P from 'pino';
|
|
2
|
+
export interface ILogger {
|
|
3
|
+
level: string;
|
|
4
|
+
child(obj: Record<string, unknown>): ILogger;
|
|
5
|
+
trace(obj: unknown, msg?: string): void;
|
|
6
|
+
debug(obj: unknown, msg?: string): void;
|
|
7
|
+
info(obj: unknown, msg?: string): void;
|
|
8
|
+
warn(obj: unknown, msg?: string): void;
|
|
9
|
+
error(obj: unknown, msg?: string): void;
|
|
10
|
+
}
|
|
11
|
+
declare const _default: P.Logger<never, boolean>;
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAA;AAEpB,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC5C,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvC;;AAED,wBAAyE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAA;AAYpB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { Readable } from 'node:stream';
|
|
3
|
+
import type { WAMediaUpload } from '../Types/index.js';
|
|
4
|
+
import type { ILogger } from './logger.js';
|
|
5
|
+
export declare const extractImageThumb: (bufferOrFilePath: Readable | Buffer | string, width?: number) => Promise<{
|
|
6
|
+
buffer: any;
|
|
7
|
+
original: {
|
|
8
|
+
width: any;
|
|
9
|
+
height: any;
|
|
10
|
+
};
|
|
11
|
+
}>;
|
|
12
|
+
/** gets the SHA256 of the given media message */
|
|
13
|
+
export declare function getAudioDuration(buffer: Buffer | string | Readable): Promise<number | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts
|
|
16
|
+
*/
|
|
17
|
+
export declare function getAudioWaveform(buffer: Buffer | string | Readable, logger?: ILogger): Promise<Uint8Array<ArrayBuffer> | undefined>;
|
|
18
|
+
export declare const toReadable: (buffer: Buffer) => Readable;
|
|
19
|
+
export declare const toBuffer: (stream: Readable) => Promise<Buffer<ArrayBuffer>>;
|
|
20
|
+
export declare const getStream: (item: WAMediaUpload, opts?: RequestInit & {
|
|
21
|
+
maxContentLength?: number;
|
|
22
|
+
}) => Promise<{
|
|
23
|
+
readonly stream: Readable;
|
|
24
|
+
readonly type: "buffer";
|
|
25
|
+
} | {
|
|
26
|
+
readonly stream: Readable;
|
|
27
|
+
readonly type: "readable";
|
|
28
|
+
} | {
|
|
29
|
+
readonly stream: Readable;
|
|
30
|
+
readonly type: "remote";
|
|
31
|
+
} | {
|
|
32
|
+
readonly stream: import("fs").ReadStream;
|
|
33
|
+
readonly type: "file";
|
|
34
|
+
}>;
|
|
35
|
+
/** generates a thumbnail for a given media, if required */
|
|
36
|
+
export declare function generateThumbnail(bufferOrPath: Buffer | string, mediaType: 'video' | 'image', options: {
|
|
37
|
+
logger?: ILogger;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
thumbnail: string | undefined;
|
|
40
|
+
originalImageDimensions: {
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
} | undefined;
|
|
44
|
+
}>;
|
|
45
|
+
export declare const getHttpStream: (url: string | URL, options?: RequestInit & {
|
|
46
|
+
isStream?: true;
|
|
47
|
+
}) => Promise<Readable>;
|
|
48
|
+
export type MediaDownloadOptions = {
|
|
49
|
+
options?: RequestInit;
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=messages-media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages-media.d.ts","sourceRoot":"","sources":["../../src/Utils/messages-media.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAKpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AA0CvC,eAAO,MAAM,iBAAiB,GAAU,kBAAkB,QAAQ,GAAG,MAAM,GAAG,MAAM,EAAE,cAAU;;;;;;EA2C/F,CAAA;AAED,iDAAiD;AACjD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,+BAexE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,gDAyC1F;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,aAKxC,CAAA;AAED,eAAO,MAAM,QAAQ,GAAU,QAAQ,QAAQ,iCAQ9C,CAAA;AAED,eAAO,MAAM,SAAS,GAAU,MAAM,aAAa,EAAE,OAAO,WAAW,GAAG;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;EAqBtG,CAAA;AAED,2DAA2D;AAC3D,wBAAsB,iBAAiB,CACtC,YAAY,EAAE,MAAM,GAAG,MAAM,EAC7B,SAAS,EAAE,OAAO,GAAG,OAAO,EAC5B,OAAO,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;;;eAGqC,MAAM;gBAAU,MAAM;;GA8C5D;AAED,eAAO,MAAM,aAAa,GAAU,KAAK,MAAM,GAAG,GAAG,EAAE,UAAS,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAO,sBAYrG,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAClC,OAAO,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { Boom } from '@hapi/boom';
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
import { execFile } from 'node:child_process';
|
|
4
|
+
import { createReadStream, promises as fs } from 'node:fs';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { Readable } from 'node:stream';
|
|
8
|
+
const randomId = () => globalThis.crypto.randomUUID();
|
|
9
|
+
const getTmpFilesDirectory = () => tmpdir();
|
|
10
|
+
const getImageProcessingLibrary = async () => {
|
|
11
|
+
//@ts-ignore
|
|
12
|
+
const [jimp, sharp] = await Promise.all([import('jimp').catch(() => { }), import('sharp').catch(() => { })]);
|
|
13
|
+
if (sharp) {
|
|
14
|
+
return { sharp };
|
|
15
|
+
}
|
|
16
|
+
if (jimp) {
|
|
17
|
+
return { jimp };
|
|
18
|
+
}
|
|
19
|
+
throw new Boom('No image processing library available');
|
|
20
|
+
};
|
|
21
|
+
/** Extracts video thumb using FFMPEG */
|
|
22
|
+
const extractVideoThumb = async (path, destPath, time, size) => new Promise((resolve, reject) => {
|
|
23
|
+
execFile('ffmpeg', ['-ss', time, '-i', path, '-y', '-vf', `scale=${size.width}:-1`, '-vframes', '1', '-f', 'image2', destPath], err => {
|
|
24
|
+
if (err) {
|
|
25
|
+
reject(err);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
resolve();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
export const extractImageThumb = async (bufferOrFilePath, width = 32) => {
|
|
33
|
+
// TODO: Move entirely to sharp, removing jimp as it supports readable streams
|
|
34
|
+
// This will have positive speed and performance impacts as well as minimizing RAM usage.
|
|
35
|
+
if (bufferOrFilePath instanceof Readable) {
|
|
36
|
+
bufferOrFilePath = await toBuffer(bufferOrFilePath);
|
|
37
|
+
}
|
|
38
|
+
const lib = await getImageProcessingLibrary();
|
|
39
|
+
if ('sharp' in lib && typeof lib.sharp?.default === 'function') {
|
|
40
|
+
const img = lib.sharp.default(bufferOrFilePath);
|
|
41
|
+
const dimensions = await img.metadata();
|
|
42
|
+
const buffer = await img.resize(width).jpeg({ quality: 50 }).toBuffer();
|
|
43
|
+
return {
|
|
44
|
+
buffer,
|
|
45
|
+
original: {
|
|
46
|
+
width: dimensions.width,
|
|
47
|
+
height: dimensions.height
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
else if ('jimp' in lib && typeof lib.jimp?.Jimp === 'object') {
|
|
52
|
+
const JimpClass = lib.jimp.Jimp;
|
|
53
|
+
const jimp = await JimpClass.read(bufferOrFilePath);
|
|
54
|
+
const dimensions = {
|
|
55
|
+
width: jimp.width,
|
|
56
|
+
height: jimp.height
|
|
57
|
+
};
|
|
58
|
+
const buffer = await jimp
|
|
59
|
+
.resize({ w: width, mode: lib.jimp.ResizeStrategy.BILINEAR })
|
|
60
|
+
.getBuffer('image/jpeg', { quality: 50 });
|
|
61
|
+
return {
|
|
62
|
+
buffer,
|
|
63
|
+
original: dimensions
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw new Boom('No image processing library available');
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
/** gets the SHA256 of the given media message */
|
|
71
|
+
export async function getAudioDuration(buffer) {
|
|
72
|
+
const musicMetadata = await import('music-metadata');
|
|
73
|
+
let metadata;
|
|
74
|
+
const options = {
|
|
75
|
+
duration: true
|
|
76
|
+
};
|
|
77
|
+
if (Buffer.isBuffer(buffer)) {
|
|
78
|
+
metadata = await musicMetadata.parseBuffer(buffer, undefined, options);
|
|
79
|
+
}
|
|
80
|
+
else if (typeof buffer === 'string') {
|
|
81
|
+
metadata = await musicMetadata.parseFile(buffer, options);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
metadata = await musicMetadata.parseStream(buffer, undefined, options);
|
|
85
|
+
}
|
|
86
|
+
return metadata.format.duration;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts
|
|
90
|
+
*/
|
|
91
|
+
export async function getAudioWaveform(buffer, logger) {
|
|
92
|
+
try {
|
|
93
|
+
// @ts-ignore
|
|
94
|
+
const { default: decoder } = await import('audio-decode');
|
|
95
|
+
let audioData;
|
|
96
|
+
if (Buffer.isBuffer(buffer)) {
|
|
97
|
+
audioData = buffer;
|
|
98
|
+
}
|
|
99
|
+
else if (typeof buffer === 'string') {
|
|
100
|
+
const rStream = createReadStream(buffer);
|
|
101
|
+
audioData = await toBuffer(rStream);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
audioData = await toBuffer(buffer);
|
|
105
|
+
}
|
|
106
|
+
const audioBuffer = await decoder(audioData);
|
|
107
|
+
const rawData = audioBuffer.getChannelData(0); // We only need to work with one channel of data
|
|
108
|
+
const samples = 64; // Number of samples we want to have in our final data set
|
|
109
|
+
const blockSize = Math.floor(rawData.length / samples); // the number of samples in each subdivision
|
|
110
|
+
const filteredData = [];
|
|
111
|
+
for (let i = 0; i < samples; i++) {
|
|
112
|
+
const blockStart = blockSize * i; // the location of the first sample in the block
|
|
113
|
+
let sum = 0;
|
|
114
|
+
for (let j = 0; j < blockSize; j++) {
|
|
115
|
+
sum = sum + Math.abs(rawData[blockStart + j]); // find the sum of all the samples in the block
|
|
116
|
+
}
|
|
117
|
+
filteredData.push(sum / blockSize); // divide the sum by the block size to get the average
|
|
118
|
+
}
|
|
119
|
+
// This guarantees that the largest data point will be set to 1, and the rest of the data will scale proportionally.
|
|
120
|
+
const multiplier = Math.pow(Math.max(...filteredData), -1);
|
|
121
|
+
const normalizedData = filteredData.map(n => n * multiplier);
|
|
122
|
+
// Generate waveform like WhatsApp
|
|
123
|
+
const waveform = new Uint8Array(normalizedData.map(n => Math.floor(100 * n)));
|
|
124
|
+
return waveform;
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
logger?.debug('Failed to generate waveform: ' + e);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export const toReadable = (buffer) => {
|
|
131
|
+
const readable = new Readable({ read: () => { } });
|
|
132
|
+
readable.push(buffer);
|
|
133
|
+
readable.push(null);
|
|
134
|
+
return readable;
|
|
135
|
+
};
|
|
136
|
+
export const toBuffer = async (stream) => {
|
|
137
|
+
const chunks = [];
|
|
138
|
+
for await (const chunk of stream) {
|
|
139
|
+
chunks.push(chunk);
|
|
140
|
+
}
|
|
141
|
+
stream.destroy();
|
|
142
|
+
return Buffer.concat(chunks);
|
|
143
|
+
};
|
|
144
|
+
export const getStream = async (item, opts) => {
|
|
145
|
+
if (Buffer.isBuffer(item)) {
|
|
146
|
+
return { stream: toReadable(item), type: 'buffer' };
|
|
147
|
+
}
|
|
148
|
+
if ('stream' in item) {
|
|
149
|
+
return { stream: item.stream, type: 'readable' };
|
|
150
|
+
}
|
|
151
|
+
const urlStr = item.url.toString();
|
|
152
|
+
if (urlStr.startsWith('data:')) {
|
|
153
|
+
const buffer = Buffer.from(urlStr.split(',')[1], 'base64');
|
|
154
|
+
return { stream: toReadable(buffer), type: 'buffer' };
|
|
155
|
+
}
|
|
156
|
+
if (urlStr.startsWith('http://') || urlStr.startsWith('https://')) {
|
|
157
|
+
return { stream: await getHttpStream(item.url, opts), type: 'remote' };
|
|
158
|
+
}
|
|
159
|
+
return { stream: createReadStream(item.url), type: 'file' };
|
|
160
|
+
};
|
|
161
|
+
/** generates a thumbnail for a given media, if required */
|
|
162
|
+
export async function generateThumbnail(bufferOrPath, mediaType, options) {
|
|
163
|
+
let thumbnail;
|
|
164
|
+
let originalImageDimensions;
|
|
165
|
+
if (mediaType === 'image') {
|
|
166
|
+
const { buffer, original } = await extractImageThumb(bufferOrPath);
|
|
167
|
+
thumbnail = buffer.toString('base64');
|
|
168
|
+
if (original.width && original.height) {
|
|
169
|
+
originalImageDimensions = {
|
|
170
|
+
width: original.width,
|
|
171
|
+
height: original.height
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if (mediaType === 'video') {
|
|
176
|
+
// Video thumbnails need ffmpeg + file on disk
|
|
177
|
+
let filePath;
|
|
178
|
+
let needsCleanup = false;
|
|
179
|
+
if (Buffer.isBuffer(bufferOrPath)) {
|
|
180
|
+
filePath = join(getTmpFilesDirectory(), 'vid-' + randomId());
|
|
181
|
+
await fs.writeFile(filePath, bufferOrPath);
|
|
182
|
+
needsCleanup = true;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
filePath = bufferOrPath;
|
|
186
|
+
}
|
|
187
|
+
const imgFilename = join(getTmpFilesDirectory(), randomId() + '.jpg');
|
|
188
|
+
try {
|
|
189
|
+
await extractVideoThumb(filePath, imgFilename, '00:00:00', { width: 32, height: 32 });
|
|
190
|
+
const buff = await fs.readFile(imgFilename);
|
|
191
|
+
thumbnail = buff.toString('base64');
|
|
192
|
+
await fs.unlink(imgFilename);
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
options.logger?.debug('could not generate video thumb: ' + err);
|
|
196
|
+
}
|
|
197
|
+
if (needsCleanup) {
|
|
198
|
+
try {
|
|
199
|
+
await fs.unlink(filePath);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
/* ignore */
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
thumbnail,
|
|
208
|
+
originalImageDimensions
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
export const getHttpStream = async (url, options = {}) => {
|
|
212
|
+
const response = await fetch(url.toString(), {
|
|
213
|
+
dispatcher: options.dispatcher,
|
|
214
|
+
method: 'GET',
|
|
215
|
+
headers: options.headers
|
|
216
|
+
});
|
|
217
|
+
if (!response.ok) {
|
|
218
|
+
throw new Boom(`Failed to fetch stream from ${url}`, { statusCode: response.status, data: { url } });
|
|
219
|
+
}
|
|
220
|
+
// @ts-ignore Node18+ Readable.fromWeb exists
|
|
221
|
+
return response.body instanceof Readable ? response.body : Readable.fromWeb(response.body);
|
|
222
|
+
};
|
|
223
|
+
//# sourceMappingURL=messages-media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages-media.js","sourceRoot":"","sources":["../../src/Utils/messages-media.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { Readable } from 'node:stream';
|
|
3
|
+
import type { WasmWhatsAppClient } from 'whatsapp-rust-bridge';
|
|
4
|
+
import { proto } from '../../WAProto/index.js';
|
|
5
|
+
import type { AnyMediaMessageContent, AnyMessageContent, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, WAMessage, WAMessageContent } from '../Types/index.js';
|
|
6
|
+
import type { ILogger } from './logger.js';
|
|
7
|
+
import { type MediaDownloadOptions } from './messages-media.js';
|
|
8
|
+
type ExtractByKey<T, K extends PropertyKey> = T extends Record<K, unknown> ? T : never;
|
|
9
|
+
/**
|
|
10
|
+
* Uses a regex to test whether the string contains a URL, and returns the URL if it does.
|
|
11
|
+
* @param text eg. hello https://google.com
|
|
12
|
+
* @returns the URL, eg. https://google.com
|
|
13
|
+
*/
|
|
14
|
+
export declare const extractUrlFromText: (text: string) => string | undefined;
|
|
15
|
+
export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions["getUrlInfo"], logger: MessageGenerationOptions["logger"]) => Promise<import("../index.js").WAUrlInfo | undefined>;
|
|
16
|
+
export declare const prepareWAMessageMedia: (message: AnyMediaMessageContent, options: MessageContentGenerationOptions) => Promise<proto.Message>;
|
|
17
|
+
export declare const prepareDisappearingMessageSettingContent: (ephemeralExpiration?: number) => proto.Message;
|
|
18
|
+
/**
|
|
19
|
+
* Generate forwarded message content like WA does
|
|
20
|
+
* @param message the message to forward
|
|
21
|
+
* @param options.forceForward will show the message as forwarded even if it is from you
|
|
22
|
+
*/
|
|
23
|
+
export declare const generateForwardMessageContent: (message: WAMessage, forceForward?: boolean) => proto.IMessage;
|
|
24
|
+
export declare const hasNonNullishProperty: <K extends PropertyKey>(message: AnyMessageContent, key: K) => message is ExtractByKey<AnyMessageContent, K>;
|
|
25
|
+
export declare const generateWAMessageContent: (message: AnyMessageContent, options: MessageContentGenerationOptions) => Promise<proto.Message>;
|
|
26
|
+
export declare const generateWAMessageFromContent: (jid: string, message: WAMessageContent, options: MessageGenerationOptionsFromContent) => WAMessage;
|
|
27
|
+
export declare const generateWAMessage: (jid: string, content: AnyMessageContent, options: MessageGenerationOptions) => Promise<WAMessage>;
|
|
28
|
+
/** Get the key to access the true type of content */
|
|
29
|
+
export declare const getContentType: (content: proto.IMessage | undefined) => keyof proto.IMessage | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Normalizes ephemeral, view once messages to regular message content
|
|
32
|
+
* Eg. image messages in ephemeral messages, in view once messages etc.
|
|
33
|
+
* @param content
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
export declare const normalizeMessageContent: (content: WAMessageContent | null | undefined) => WAMessageContent | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Extract the true message content from a message
|
|
39
|
+
* Eg. extracts the inner message from a disappearing message/view once message
|
|
40
|
+
*/
|
|
41
|
+
export declare const extractMessageContent: (content: WAMessageContent | undefined | null) => WAMessageContent | undefined;
|
|
42
|
+
export type DownloadMediaMessageContext = {
|
|
43
|
+
reuploadRequest: (msg: WAMessage) => Promise<WAMessage>;
|
|
44
|
+
logger: ILogger;
|
|
45
|
+
/** Bridge client for media download — handles CDN failover, auth refresh,
|
|
46
|
+
* HMAC-SHA256 verification, and AES-256-CBC decryption internally. */
|
|
47
|
+
waClient: Pick<WasmWhatsAppClient, 'downloadMedia' | 'downloadMediaStream'>;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Downloads the given message. Throws an error if it's not a media message.
|
|
51
|
+
*
|
|
52
|
+
* Uses the Rust bridge for download — provides CDN failover, automatic auth
|
|
53
|
+
* refresh on 401/404, HMAC-SHA256 integrity verification, and AES-256-CBC
|
|
54
|
+
* decryption. Requires `ctx.waClient` (the bridge client).
|
|
55
|
+
*/
|
|
56
|
+
export declare const downloadMediaMessage: <Type extends "buffer" | "stream">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer<ArrayBufferLike> : Readable>;
|
|
57
|
+
type VoteAggregation = {
|
|
58
|
+
name: string;
|
|
59
|
+
voters: string[];
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Aggregate votes from a poll message.
|
|
63
|
+
*
|
|
64
|
+
* Takes a poll creation message and its accumulated poll updates (from
|
|
65
|
+
* `messages.update` events) and returns the vote tally per option.
|
|
66
|
+
*
|
|
67
|
+
* `pollUpdates` should contain pre-decrypted votes where `vote.selectedOptions`
|
|
68
|
+
* are the SHA-256 hashes of the voted option names.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* sock.ev.on('messages.update', event => {
|
|
73
|
+
* for (const { key, update } of event) {
|
|
74
|
+
* if (update.pollUpdates) {
|
|
75
|
+
* const pollMsg = await getMessageFromStore(key)
|
|
76
|
+
* const votes = getAggregateVotesInPollMessage({
|
|
77
|
+
* message: pollMsg.message,
|
|
78
|
+
* pollUpdates: pollMsg.pollUpdates
|
|
79
|
+
* })
|
|
80
|
+
* console.log(votes) // [{ name: 'Yes', voters: ['jid1'] }, ...]
|
|
81
|
+
* }
|
|
82
|
+
* }
|
|
83
|
+
* })
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function getAggregateVotesInPollMessage({ message, pollUpdates }: Pick<WAMessage, 'pollUpdates' | 'message'>, meId?: string): VoteAggregation[];
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/Utils/messages.ts"],"names":[],"mappings":"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"}
|