@kangwifi-pro/waliwa 1.0.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/LICENSE +21 -0
- package/README.md +600 -0
- package/dist/advanced/features.d.ts +211 -0
- package/dist/advanced/features.d.ts.map +1 -0
- package/dist/advanced/features.js +671 -0
- package/dist/advanced/features.js.map +1 -0
- package/dist/auth/auth-state.d.ts +89 -0
- package/dist/auth/auth-state.d.ts.map +1 -0
- package/dist/auth/auth-state.js +330 -0
- package/dist/auth/auth-state.js.map +1 -0
- package/dist/auth/pairing-code.d.ts +78 -0
- package/dist/auth/pairing-code.d.ts.map +1 -0
- package/dist/auth/pairing-code.js +191 -0
- package/dist/auth/pairing-code.js.map +1 -0
- package/dist/auth/qr-code.d.ts +60 -0
- package/dist/auth/qr-code.d.ts.map +1 -0
- package/dist/auth/qr-code.js +151 -0
- package/dist/auth/qr-code.js.map +1 -0
- package/dist/calls/handler.d.ts +61 -0
- package/dist/calls/handler.d.ts.map +1 -0
- package/dist/calls/handler.js +117 -0
- package/dist/calls/handler.js.map +1 -0
- package/dist/core/binary.d.ts +74 -0
- package/dist/core/binary.d.ts.map +1 -0
- package/dist/core/binary.js +448 -0
- package/dist/core/binary.js.map +1 -0
- package/dist/core/crypto.d.ts +60 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +170 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/core/noise.d.ts +106 -0
- package/dist/core/noise.d.ts.map +1 -0
- package/dist/core/noise.js +307 -0
- package/dist/core/noise.js.map +1 -0
- package/dist/events/emitter.d.ts +44 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +79 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/features/index.d.ts +342 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +755 -0
- package/dist/features/index.js.map +1 -0
- package/dist/fixes/index.d.ts +333 -0
- package/dist/fixes/index.d.ts.map +1 -0
- package/dist/fixes/index.js +762 -0
- package/dist/fixes/index.js.map +1 -0
- package/dist/groups/management.d.ts +86 -0
- package/dist/groups/management.d.ts.map +1 -0
- package/dist/groups/management.js +443 -0
- package/dist/groups/management.js.map +1 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +236 -0
- package/dist/index.js.map +1 -0
- package/dist/messages/media.d.ts +93 -0
- package/dist/messages/media.d.ts.map +1 -0
- package/dist/messages/media.js +252 -0
- package/dist/messages/media.js.map +1 -0
- package/dist/messages/message-encoder.d.ts +70 -0
- package/dist/messages/message-encoder.d.ts.map +1 -0
- package/dist/messages/message-encoder.js +453 -0
- package/dist/messages/message-encoder.js.map +1 -0
- package/dist/messages/send.d.ts +101 -0
- package/dist/messages/send.d.ts.map +1 -0
- package/dist/messages/send.js +409 -0
- package/dist/messages/send.js.map +1 -0
- package/dist/recovery/index.d.ts +125 -0
- package/dist/recovery/index.d.ts.map +1 -0
- package/dist/recovery/index.js +584 -0
- package/dist/recovery/index.js.map +1 -0
- package/dist/skdm/index.d.ts +220 -0
- package/dist/skdm/index.d.ts.map +1 -0
- package/dist/skdm/index.js +600 -0
- package/dist/skdm/index.js.map +1 -0
- package/dist/socket/hybrid.d.ts +118 -0
- package/dist/socket/hybrid.d.ts.map +1 -0
- package/dist/socket/hybrid.js +352 -0
- package/dist/socket/hybrid.js.map +1 -0
- package/dist/socket/wa-socket.d.ts +300 -0
- package/dist/socket/wa-socket.d.ts.map +1 -0
- package/dist/socket/wa-socket.js +1094 -0
- package/dist/socket/wa-socket.js.map +1 -0
- package/dist/socket/ws-socket.d.ts +96 -0
- package/dist/socket/ws-socket.d.ts.map +1 -0
- package/dist/socket/ws-socket.js +302 -0
- package/dist/socket/ws-socket.js.map +1 -0
- package/dist/types/index.d.ts +444 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/jid.d.ts +46 -0
- package/dist/utils/jid.d.ts.map +1 -0
- package/dist/utils/jid.js +152 -0
- package/dist/utils/jid.js.map +1 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +79 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +43 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +175 -0
- package/dist/utils/retry.js.map +1 -0
- package/docs/API.md +745 -0
- package/docs/ARCHITECTURE.md +307 -0
- package/docs/BAILEYS_FIXES.md +360 -0
- package/docs/FEATURES.md +532 -0
- package/docs/PROTOCOL.md +489 -0
- package/docs/RECOVERY.md +409 -0
- package/docs/SKDM.md +233 -0
- package/examples/ai-bot/index.ts +479 -0
- package/examples/ai-bot/package.json +17 -0
- package/examples/echo-bot/index.ts +171 -0
- package/examples/echo-bot/package.json +18 -0
- package/examples/group-bot/index.ts +557 -0
- package/examples/group-bot/package.json +17 -0
- package/examples/rest-gateway/index.ts +499 -0
- package/examples/rest-gateway/package.json +19 -0
- package/package.json +75 -0
- package/src/advanced/features.ts +817 -0
- package/src/auth/auth-state.ts +342 -0
- package/src/auth/pairing-code.ts +246 -0
- package/src/auth/qr-code.ts +191 -0
- package/src/calls/handler.ts +153 -0
- package/src/core/binary.ts +464 -0
- package/src/core/crypto.ts +189 -0
- package/src/core/noise.ts +406 -0
- package/src/events/emitter.ts +88 -0
- package/src/features/index.ts +921 -0
- package/src/fixes/index.ts +882 -0
- package/src/groups/management.ts +497 -0
- package/src/index.ts +274 -0
- package/src/messages/media.ts +372 -0
- package/src/messages/message-encoder.ts +520 -0
- package/src/messages/send.ts +521 -0
- package/src/recovery/index.ts +704 -0
- package/src/skdm/index.ts +693 -0
- package/src/socket/hybrid.ts +414 -0
- package/src/socket/wa-socket.ts +1347 -0
- package/src/socket/ws-socket.ts +355 -0
- package/src/types/index.ts +457 -0
- package/src/utils/jid.ts +156 -0
- package/src/utils/logger.ts +84 -0
- package/src/utils/retry.ts +205 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Waliwa - Lightweight WhatsApp library dengan hybrid protocol
|
|
4
|
+
*
|
|
5
|
+
* Lebih lengkap dari Baileys, lebih ringan dari ZapoJS, lebih hemat RAM.
|
|
6
|
+
* Menggunakan WhatsApp Web Multi-Device + Mobile API pairing.
|
|
7
|
+
*
|
|
8
|
+
* @example Basic usage
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { makeWASocket, useFileAuthState } from 'waliwa';
|
|
11
|
+
*
|
|
12
|
+
* const { state, saveCreds } = await useFileAuthState('./auth');
|
|
13
|
+
* const sock = makeWASocket({ authState: state, printQRInTerminal: true });
|
|
14
|
+
*
|
|
15
|
+
* sock.ev.on('connection.update', ({ connection }) => {
|
|
16
|
+
* if (connection === 'open') console.log('Connected!');
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* sock.ev.on('message.upsert', async ({ messages }) => {
|
|
20
|
+
* for (const msg of messages) {
|
|
21
|
+
* if (!msg.key.fromMe && msg.message?.text) {
|
|
22
|
+
* await sock.sendMessage(msg.key.remoteJid, { text: 'Hello!' });
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
32
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(o, k2, desc);
|
|
35
|
+
}) : (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
o[k2] = m[k];
|
|
38
|
+
}));
|
|
39
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
40
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.PendingMessageTracker = exports.MessageReceiver = exports.MessageSender = exports.WAWebSocket = exports.TAG_LIST = exports.unpackNibbles = exports.packNibbles = exports.binaryNodeToString = exports.decodeBinaryNode = exports.encodeBinaryNode = exports.BinaryDecoder = exports.BinaryEncoder = exports.buildClientPayload = exports.TrafficCipher = exports.NoiseHandshake = exports.constantTimeEqual = exports.areBytesEqual = exports.concatBytes = exports.getRandomBytes = exports.aesDecryptCBC = exports.aesEncryptCBC = exports.createAESCipher = exports.hkdfDerive = exports.hmacSha512 = exports.hmacSha256 = exports.sha1Hash = exports.sha512Hash = exports.sha256Hash = exports.curveVerify = exports.curveSign = exports.curveSharedSecret = exports.generateCurveKeyPair = exports.PairingCodeExpiry = exports.parsePairingResult = exports.buildPairingRequestNode = exports.normalizePhoneNumber = exports.isValidPairingCodeFormat = exports.normalizePairingCode = exports.generatePairingCode = exports.QRRefreshManager = exports.parseQRString = exports.buildQRString = exports.generateQRCodeData = exports.createDefaultCreds = exports.useFileAuthState = exports.FileAuthState = exports.MobileAPISocket = exports.HybridSocketManager = exports.WASocketImpl = exports.makeWASocket = void 0;
|
|
44
|
+
exports.retry = exports.defaultLogger = exports.SilentLogger = exports.DefaultLogger = exports.broadcastJid = exports.groupJid = exports.userJid = exports.phoneNumberToJid = exports.jidToPhoneNumber = exports.jidEqual = exports.isValidJid = exports.isLidJid = exports.isNewsletter = exports.isStatusJid = exports.isCallJid = exports.isBroadcastJid = exports.isUserJid = exports.isGroupJid = exports.jidServer = exports.jidUser = exports.jidToString = exports.parseJid = exports.StrictEventEmitter = exports.WAEventEmitter = exports.LabelsManager = exports.CatalogManager = exports.BusinessProfileManager = exports.StatusManager = exports.NewsletterManager = exports.PollManager = exports.CallHandler = exports.parseInviteLink = exports.buildInviteLink = exports.GroupManager = exports.bufferToStream = exports.streamToBuffer = exports.deriveMediaKeys = exports.decryptMedia = exports.encryptMedia = exports.MediaDownloader = exports.MediaUploader = exports.getMediaInfo = exports.hasMedia = exports.extractMessageText = exports.generateStanzaId = exports.generateMessageId = exports.decodeMessageNode = exports.encodeMessageNode = exports.buildChatPresenceNode = exports.buildReadReceiptNode = void 0;
|
|
45
|
+
exports.DEFAULT_CONFIG = exports.LIBRARY_NAME = exports.VERSION = exports.DEFAULT_RECOVERY_CONFIG = exports.DEFAULT_RECOVERY_BRANCHES = exports.getReasonDescription = exports.getActionDescription = exports.mapCodeToReason = exports.RecoveryManager = exports.MessagePersistence = exports.RateLimitTracker = exports.CircuitBreaker = exports.WebhookManager = exports.MultiAccountManager = exports.HealthMonitor = exports.SmarterReconnector = exports.ChunkedMediaUploader = exports.MessageQueue = exports.DecryptionRetryQueue = exports.HistorySyncManager = exports.GroupEventCoalescer = exports.IdempotencyCache = exports.ConnectionHeartbeat = exports.WeakEventEmitter = exports.AtomicFileWriter = exports.LRUCache = exports.AppStateKeyManager = exports.IdentityKeyManager = exports.SessionManager = exports.PreKeyManager = exports.SKDM = exports.throttle = exports.debounce = exports.PromiseQueue = exports.RateLimiter = exports.sleep = void 0;
|
|
46
|
+
// ============== Main Socket ==============
|
|
47
|
+
var wa_socket_js_1 = require("./socket/wa-socket.js");
|
|
48
|
+
Object.defineProperty(exports, "makeWASocket", { enumerable: true, get: function () { return wa_socket_js_1.makeWASocket; } });
|
|
49
|
+
Object.defineProperty(exports, "WASocketImpl", { enumerable: true, get: function () { return wa_socket_js_1.WASocketImpl; } });
|
|
50
|
+
// ============== Hybrid Socket ==============
|
|
51
|
+
var hybrid_js_1 = require("./socket/hybrid.js");
|
|
52
|
+
Object.defineProperty(exports, "HybridSocketManager", { enumerable: true, get: function () { return hybrid_js_1.HybridSocketManager; } });
|
|
53
|
+
Object.defineProperty(exports, "MobileAPISocket", { enumerable: true, get: function () { return hybrid_js_1.MobileAPISocket; } });
|
|
54
|
+
// ============== Auth State ==============
|
|
55
|
+
var auth_state_js_1 = require("./auth/auth-state.js");
|
|
56
|
+
Object.defineProperty(exports, "FileAuthState", { enumerable: true, get: function () { return auth_state_js_1.FileAuthState; } });
|
|
57
|
+
Object.defineProperty(exports, "useFileAuthState", { enumerable: true, get: function () { return auth_state_js_1.useFileAuthState; } });
|
|
58
|
+
Object.defineProperty(exports, "createDefaultCreds", { enumerable: true, get: function () { return auth_state_js_1.createDefaultCreds; } });
|
|
59
|
+
// ============== QR Code ==============
|
|
60
|
+
var qr_code_js_1 = require("./auth/qr-code.js");
|
|
61
|
+
Object.defineProperty(exports, "generateQRCodeData", { enumerable: true, get: function () { return qr_code_js_1.generateQRCodeData; } });
|
|
62
|
+
Object.defineProperty(exports, "buildQRString", { enumerable: true, get: function () { return qr_code_js_1.buildQRString; } });
|
|
63
|
+
Object.defineProperty(exports, "parseQRString", { enumerable: true, get: function () { return qr_code_js_1.parseQRString; } });
|
|
64
|
+
Object.defineProperty(exports, "QRRefreshManager", { enumerable: true, get: function () { return qr_code_js_1.QRRefreshManager; } });
|
|
65
|
+
// ============== Pairing Code ==============
|
|
66
|
+
var pairing_code_js_1 = require("./auth/pairing-code.js");
|
|
67
|
+
Object.defineProperty(exports, "generatePairingCode", { enumerable: true, get: function () { return pairing_code_js_1.generatePairingCode; } });
|
|
68
|
+
Object.defineProperty(exports, "normalizePairingCode", { enumerable: true, get: function () { return pairing_code_js_1.normalizePairingCode; } });
|
|
69
|
+
Object.defineProperty(exports, "isValidPairingCodeFormat", { enumerable: true, get: function () { return pairing_code_js_1.isValidPairingCodeFormat; } });
|
|
70
|
+
Object.defineProperty(exports, "normalizePhoneNumber", { enumerable: true, get: function () { return pairing_code_js_1.normalizePhoneNumber; } });
|
|
71
|
+
Object.defineProperty(exports, "buildPairingRequestNode", { enumerable: true, get: function () { return pairing_code_js_1.buildPairingRequestNode; } });
|
|
72
|
+
Object.defineProperty(exports, "parsePairingResult", { enumerable: true, get: function () { return pairing_code_js_1.parsePairingResult; } });
|
|
73
|
+
Object.defineProperty(exports, "PairingCodeExpiry", { enumerable: true, get: function () { return pairing_code_js_1.PairingCodeExpiry; } });
|
|
74
|
+
// ============== Core Crypto ==============
|
|
75
|
+
var crypto_js_1 = require("./core/crypto.js");
|
|
76
|
+
Object.defineProperty(exports, "generateCurveKeyPair", { enumerable: true, get: function () { return crypto_js_1.generateCurveKeyPair; } });
|
|
77
|
+
Object.defineProperty(exports, "curveSharedSecret", { enumerable: true, get: function () { return crypto_js_1.curveSharedSecret; } });
|
|
78
|
+
Object.defineProperty(exports, "curveSign", { enumerable: true, get: function () { return crypto_js_1.curveSign; } });
|
|
79
|
+
Object.defineProperty(exports, "curveVerify", { enumerable: true, get: function () { return crypto_js_1.curveVerify; } });
|
|
80
|
+
Object.defineProperty(exports, "sha256Hash", { enumerable: true, get: function () { return crypto_js_1.sha256Hash; } });
|
|
81
|
+
Object.defineProperty(exports, "sha512Hash", { enumerable: true, get: function () { return crypto_js_1.sha512Hash; } });
|
|
82
|
+
Object.defineProperty(exports, "sha1Hash", { enumerable: true, get: function () { return crypto_js_1.sha1Hash; } });
|
|
83
|
+
Object.defineProperty(exports, "hmacSha256", { enumerable: true, get: function () { return crypto_js_1.hmacSha256; } });
|
|
84
|
+
Object.defineProperty(exports, "hmacSha512", { enumerable: true, get: function () { return crypto_js_1.hmacSha512; } });
|
|
85
|
+
Object.defineProperty(exports, "hkdfDerive", { enumerable: true, get: function () { return crypto_js_1.hkdfDerive; } });
|
|
86
|
+
Object.defineProperty(exports, "createAESCipher", { enumerable: true, get: function () { return crypto_js_1.createAESCipher; } });
|
|
87
|
+
Object.defineProperty(exports, "aesEncryptCBC", { enumerable: true, get: function () { return crypto_js_1.aesEncryptCBC; } });
|
|
88
|
+
Object.defineProperty(exports, "aesDecryptCBC", { enumerable: true, get: function () { return crypto_js_1.aesDecryptCBC; } });
|
|
89
|
+
Object.defineProperty(exports, "getRandomBytes", { enumerable: true, get: function () { return crypto_js_1.getRandomBytes; } });
|
|
90
|
+
Object.defineProperty(exports, "concatBytes", { enumerable: true, get: function () { return crypto_js_1.concatBytes; } });
|
|
91
|
+
Object.defineProperty(exports, "areBytesEqual", { enumerable: true, get: function () { return crypto_js_1.areBytesEqual; } });
|
|
92
|
+
Object.defineProperty(exports, "constantTimeEqual", { enumerable: true, get: function () { return crypto_js_1.constantTimeEqual; } });
|
|
93
|
+
// ============== Noise Protocol ==============
|
|
94
|
+
var noise_js_1 = require("./core/noise.js");
|
|
95
|
+
Object.defineProperty(exports, "NoiseHandshake", { enumerable: true, get: function () { return noise_js_1.NoiseHandshake; } });
|
|
96
|
+
Object.defineProperty(exports, "TrafficCipher", { enumerable: true, get: function () { return noise_js_1.TrafficCipher; } });
|
|
97
|
+
Object.defineProperty(exports, "buildClientPayload", { enumerable: true, get: function () { return noise_js_1.buildClientPayload; } });
|
|
98
|
+
// ============== Binary Protocol ==============
|
|
99
|
+
var binary_js_1 = require("./core/binary.js");
|
|
100
|
+
Object.defineProperty(exports, "BinaryEncoder", { enumerable: true, get: function () { return binary_js_1.BinaryEncoder; } });
|
|
101
|
+
Object.defineProperty(exports, "BinaryDecoder", { enumerable: true, get: function () { return binary_js_1.BinaryDecoder; } });
|
|
102
|
+
Object.defineProperty(exports, "encodeBinaryNode", { enumerable: true, get: function () { return binary_js_1.encodeBinaryNode; } });
|
|
103
|
+
Object.defineProperty(exports, "decodeBinaryNode", { enumerable: true, get: function () { return binary_js_1.decodeBinaryNode; } });
|
|
104
|
+
Object.defineProperty(exports, "binaryNodeToString", { enumerable: true, get: function () { return binary_js_1.binaryNodeToString; } });
|
|
105
|
+
Object.defineProperty(exports, "packNibbles", { enumerable: true, get: function () { return binary_js_1.packNibbles; } });
|
|
106
|
+
Object.defineProperty(exports, "unpackNibbles", { enumerable: true, get: function () { return binary_js_1.unpackNibbles; } });
|
|
107
|
+
Object.defineProperty(exports, "TAG_LIST", { enumerable: true, get: function () { return binary_js_1.TAG_LIST; } });
|
|
108
|
+
// ============== WebSocket Layer ==============
|
|
109
|
+
var ws_socket_js_1 = require("./socket/ws-socket.js");
|
|
110
|
+
Object.defineProperty(exports, "WAWebSocket", { enumerable: true, get: function () { return ws_socket_js_1.WAWebSocket; } });
|
|
111
|
+
// ============== Messages ==============
|
|
112
|
+
var send_js_1 = require("./messages/send.js");
|
|
113
|
+
Object.defineProperty(exports, "MessageSender", { enumerable: true, get: function () { return send_js_1.MessageSender; } });
|
|
114
|
+
Object.defineProperty(exports, "MessageReceiver", { enumerable: true, get: function () { return send_js_1.MessageReceiver; } });
|
|
115
|
+
Object.defineProperty(exports, "PendingMessageTracker", { enumerable: true, get: function () { return send_js_1.PendingMessageTracker; } });
|
|
116
|
+
Object.defineProperty(exports, "buildReadReceiptNode", { enumerable: true, get: function () { return send_js_1.buildReadReceiptNode; } });
|
|
117
|
+
Object.defineProperty(exports, "buildChatPresenceNode", { enumerable: true, get: function () { return send_js_1.buildChatPresenceNode; } });
|
|
118
|
+
var message_encoder_js_1 = require("./messages/message-encoder.js");
|
|
119
|
+
Object.defineProperty(exports, "encodeMessageNode", { enumerable: true, get: function () { return message_encoder_js_1.encodeMessageNode; } });
|
|
120
|
+
Object.defineProperty(exports, "decodeMessageNode", { enumerable: true, get: function () { return message_encoder_js_1.decodeMessageNode; } });
|
|
121
|
+
Object.defineProperty(exports, "generateMessageId", { enumerable: true, get: function () { return message_encoder_js_1.generateMessageId; } });
|
|
122
|
+
Object.defineProperty(exports, "generateStanzaId", { enumerable: true, get: function () { return message_encoder_js_1.generateStanzaId; } });
|
|
123
|
+
Object.defineProperty(exports, "extractMessageText", { enumerable: true, get: function () { return message_encoder_js_1.extractMessageText; } });
|
|
124
|
+
Object.defineProperty(exports, "hasMedia", { enumerable: true, get: function () { return message_encoder_js_1.hasMedia; } });
|
|
125
|
+
Object.defineProperty(exports, "getMediaInfo", { enumerable: true, get: function () { return message_encoder_js_1.getMediaInfo; } });
|
|
126
|
+
var media_js_1 = require("./messages/media.js");
|
|
127
|
+
Object.defineProperty(exports, "MediaUploader", { enumerable: true, get: function () { return media_js_1.MediaUploader; } });
|
|
128
|
+
Object.defineProperty(exports, "MediaDownloader", { enumerable: true, get: function () { return media_js_1.MediaDownloader; } });
|
|
129
|
+
Object.defineProperty(exports, "encryptMedia", { enumerable: true, get: function () { return media_js_1.encryptMedia; } });
|
|
130
|
+
Object.defineProperty(exports, "decryptMedia", { enumerable: true, get: function () { return media_js_1.decryptMedia; } });
|
|
131
|
+
Object.defineProperty(exports, "deriveMediaKeys", { enumerable: true, get: function () { return media_js_1.deriveMediaKeys; } });
|
|
132
|
+
Object.defineProperty(exports, "streamToBuffer", { enumerable: true, get: function () { return media_js_1.streamToBuffer; } });
|
|
133
|
+
Object.defineProperty(exports, "bufferToStream", { enumerable: true, get: function () { return media_js_1.bufferToStream; } });
|
|
134
|
+
// ============== Groups ==============
|
|
135
|
+
var management_js_1 = require("./groups/management.js");
|
|
136
|
+
Object.defineProperty(exports, "GroupManager", { enumerable: true, get: function () { return management_js_1.GroupManager; } });
|
|
137
|
+
Object.defineProperty(exports, "buildInviteLink", { enumerable: true, get: function () { return management_js_1.buildInviteLink; } });
|
|
138
|
+
Object.defineProperty(exports, "parseInviteLink", { enumerable: true, get: function () { return management_js_1.parseInviteLink; } });
|
|
139
|
+
// ============== Calls ==============
|
|
140
|
+
var handler_js_1 = require("./calls/handler.js");
|
|
141
|
+
Object.defineProperty(exports, "CallHandler", { enumerable: true, get: function () { return handler_js_1.CallHandler; } });
|
|
142
|
+
// ============== Advanced Features ==============
|
|
143
|
+
var features_js_1 = require("./advanced/features.js");
|
|
144
|
+
Object.defineProperty(exports, "PollManager", { enumerable: true, get: function () { return features_js_1.PollManager; } });
|
|
145
|
+
Object.defineProperty(exports, "NewsletterManager", { enumerable: true, get: function () { return features_js_1.NewsletterManager; } });
|
|
146
|
+
Object.defineProperty(exports, "StatusManager", { enumerable: true, get: function () { return features_js_1.StatusManager; } });
|
|
147
|
+
Object.defineProperty(exports, "BusinessProfileManager", { enumerable: true, get: function () { return features_js_1.BusinessProfileManager; } });
|
|
148
|
+
Object.defineProperty(exports, "CatalogManager", { enumerable: true, get: function () { return features_js_1.CatalogManager; } });
|
|
149
|
+
Object.defineProperty(exports, "LabelsManager", { enumerable: true, get: function () { return features_js_1.LabelsManager; } });
|
|
150
|
+
// ============== Event Emitter ==============
|
|
151
|
+
var emitter_js_1 = require("./events/emitter.js");
|
|
152
|
+
Object.defineProperty(exports, "WAEventEmitter", { enumerable: true, get: function () { return emitter_js_1.WAEventEmitter; } });
|
|
153
|
+
Object.defineProperty(exports, "StrictEventEmitter", { enumerable: true, get: function () { return emitter_js_1.StrictEventEmitter; } });
|
|
154
|
+
// ============== Utils ==============
|
|
155
|
+
var jid_js_1 = require("./utils/jid.js");
|
|
156
|
+
Object.defineProperty(exports, "parseJid", { enumerable: true, get: function () { return jid_js_1.parseJid; } });
|
|
157
|
+
Object.defineProperty(exports, "jidToString", { enumerable: true, get: function () { return jid_js_1.jidToString; } });
|
|
158
|
+
Object.defineProperty(exports, "jidUser", { enumerable: true, get: function () { return jid_js_1.jidUser; } });
|
|
159
|
+
Object.defineProperty(exports, "jidServer", { enumerable: true, get: function () { return jid_js_1.jidServer; } });
|
|
160
|
+
Object.defineProperty(exports, "isGroupJid", { enumerable: true, get: function () { return jid_js_1.isGroupJid; } });
|
|
161
|
+
Object.defineProperty(exports, "isUserJid", { enumerable: true, get: function () { return jid_js_1.isUserJid; } });
|
|
162
|
+
Object.defineProperty(exports, "isBroadcastJid", { enumerable: true, get: function () { return jid_js_1.isBroadcastJid; } });
|
|
163
|
+
Object.defineProperty(exports, "isCallJid", { enumerable: true, get: function () { return jid_js_1.isCallJid; } });
|
|
164
|
+
Object.defineProperty(exports, "isStatusJid", { enumerable: true, get: function () { return jid_js_1.isStatusJid; } });
|
|
165
|
+
Object.defineProperty(exports, "isNewsletter", { enumerable: true, get: function () { return jid_js_1.isNewsletter; } });
|
|
166
|
+
Object.defineProperty(exports, "isLidJid", { enumerable: true, get: function () { return jid_js_1.isLidJid; } });
|
|
167
|
+
Object.defineProperty(exports, "isValidJid", { enumerable: true, get: function () { return jid_js_1.isValidJid; } });
|
|
168
|
+
Object.defineProperty(exports, "jidEqual", { enumerable: true, get: function () { return jid_js_1.jidEqual; } });
|
|
169
|
+
Object.defineProperty(exports, "jidToPhoneNumber", { enumerable: true, get: function () { return jid_js_1.jidToPhoneNumber; } });
|
|
170
|
+
Object.defineProperty(exports, "phoneNumberToJid", { enumerable: true, get: function () { return jid_js_1.phoneNumberToJid; } });
|
|
171
|
+
Object.defineProperty(exports, "userJid", { enumerable: true, get: function () { return jid_js_1.userJid; } });
|
|
172
|
+
Object.defineProperty(exports, "groupJid", { enumerable: true, get: function () { return jid_js_1.groupJid; } });
|
|
173
|
+
Object.defineProperty(exports, "broadcastJid", { enumerable: true, get: function () { return jid_js_1.broadcastJid; } });
|
|
174
|
+
var logger_js_1 = require("./utils/logger.js");
|
|
175
|
+
Object.defineProperty(exports, "DefaultLogger", { enumerable: true, get: function () { return logger_js_1.DefaultLogger; } });
|
|
176
|
+
Object.defineProperty(exports, "SilentLogger", { enumerable: true, get: function () { return logger_js_1.SilentLogger; } });
|
|
177
|
+
Object.defineProperty(exports, "defaultLogger", { enumerable: true, get: function () { return logger_js_1.defaultLogger; } });
|
|
178
|
+
var retry_js_1 = require("./utils/retry.js");
|
|
179
|
+
Object.defineProperty(exports, "retry", { enumerable: true, get: function () { return retry_js_1.retry; } });
|
|
180
|
+
Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return retry_js_1.sleep; } });
|
|
181
|
+
Object.defineProperty(exports, "RateLimiter", { enumerable: true, get: function () { return retry_js_1.RateLimiter; } });
|
|
182
|
+
Object.defineProperty(exports, "PromiseQueue", { enumerable: true, get: function () { return retry_js_1.PromiseQueue; } });
|
|
183
|
+
Object.defineProperty(exports, "debounce", { enumerable: true, get: function () { return retry_js_1.debounce; } });
|
|
184
|
+
Object.defineProperty(exports, "throttle", { enumerable: true, get: function () { return retry_js_1.throttle; } });
|
|
185
|
+
// ============== SKDM (Store Key Data Manager) ==============
|
|
186
|
+
var index_js_1 = require("./skdm/index.js");
|
|
187
|
+
Object.defineProperty(exports, "SKDM", { enumerable: true, get: function () { return index_js_1.SKDM; } });
|
|
188
|
+
Object.defineProperty(exports, "PreKeyManager", { enumerable: true, get: function () { return index_js_1.PreKeyManager; } });
|
|
189
|
+
Object.defineProperty(exports, "SessionManager", { enumerable: true, get: function () { return index_js_1.SessionManager; } });
|
|
190
|
+
Object.defineProperty(exports, "IdentityKeyManager", { enumerable: true, get: function () { return index_js_1.IdentityKeyManager; } });
|
|
191
|
+
Object.defineProperty(exports, "AppStateKeyManager", { enumerable: true, get: function () { return index_js_1.AppStateKeyManager; } });
|
|
192
|
+
Object.defineProperty(exports, "LRUCache", { enumerable: true, get: function () { return index_js_1.LRUCache; } });
|
|
193
|
+
Object.defineProperty(exports, "AtomicFileWriter", { enumerable: true, get: function () { return index_js_1.AtomicFileWriter; } });
|
|
194
|
+
// ============== Baileys Fixes ==============
|
|
195
|
+
var index_js_2 = require("./fixes/index.js");
|
|
196
|
+
Object.defineProperty(exports, "WeakEventEmitter", { enumerable: true, get: function () { return index_js_2.WeakEventEmitter; } });
|
|
197
|
+
Object.defineProperty(exports, "ConnectionHeartbeat", { enumerable: true, get: function () { return index_js_2.ConnectionHeartbeat; } });
|
|
198
|
+
Object.defineProperty(exports, "IdempotencyCache", { enumerable: true, get: function () { return index_js_2.IdempotencyCache; } });
|
|
199
|
+
Object.defineProperty(exports, "GroupEventCoalescer", { enumerable: true, get: function () { return index_js_2.GroupEventCoalescer; } });
|
|
200
|
+
Object.defineProperty(exports, "HistorySyncManager", { enumerable: true, get: function () { return index_js_2.HistorySyncManager; } });
|
|
201
|
+
Object.defineProperty(exports, "DecryptionRetryQueue", { enumerable: true, get: function () { return index_js_2.DecryptionRetryQueue; } });
|
|
202
|
+
Object.defineProperty(exports, "MessageQueue", { enumerable: true, get: function () { return index_js_2.MessageQueue; } });
|
|
203
|
+
Object.defineProperty(exports, "ChunkedMediaUploader", { enumerable: true, get: function () { return index_js_2.ChunkedMediaUploader; } });
|
|
204
|
+
Object.defineProperty(exports, "SmarterReconnector", { enumerable: true, get: function () { return index_js_2.SmarterReconnector; } });
|
|
205
|
+
// ============== New Features ==============
|
|
206
|
+
var index_js_3 = require("./features/index.js");
|
|
207
|
+
Object.defineProperty(exports, "HealthMonitor", { enumerable: true, get: function () { return index_js_3.HealthMonitor; } });
|
|
208
|
+
Object.defineProperty(exports, "MultiAccountManager", { enumerable: true, get: function () { return index_js_3.MultiAccountManager; } });
|
|
209
|
+
Object.defineProperty(exports, "WebhookManager", { enumerable: true, get: function () { return index_js_3.WebhookManager; } });
|
|
210
|
+
Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return index_js_3.CircuitBreaker; } });
|
|
211
|
+
Object.defineProperty(exports, "RateLimitTracker", { enumerable: true, get: function () { return index_js_3.RateLimitTracker; } });
|
|
212
|
+
Object.defineProperty(exports, "MessagePersistence", { enumerable: true, get: function () { return index_js_3.MessagePersistence; } });
|
|
213
|
+
// ============== Multi-Branch SKDM Recovery ==============
|
|
214
|
+
var index_js_4 = require("./recovery/index.js");
|
|
215
|
+
Object.defineProperty(exports, "RecoveryManager", { enumerable: true, get: function () { return index_js_4.RecoveryManager; } });
|
|
216
|
+
Object.defineProperty(exports, "mapCodeToReason", { enumerable: true, get: function () { return index_js_4.mapCodeToReason; } });
|
|
217
|
+
Object.defineProperty(exports, "getActionDescription", { enumerable: true, get: function () { return index_js_4.getActionDescription; } });
|
|
218
|
+
Object.defineProperty(exports, "getReasonDescription", { enumerable: true, get: function () { return index_js_4.getReasonDescription; } });
|
|
219
|
+
Object.defineProperty(exports, "DEFAULT_RECOVERY_BRANCHES", { enumerable: true, get: function () { return index_js_4.DEFAULT_RECOVERY_BRANCHES; } });
|
|
220
|
+
Object.defineProperty(exports, "DEFAULT_RECOVERY_CONFIG", { enumerable: true, get: function () { return index_js_4.DEFAULT_RECOVERY_CONFIG; } });
|
|
221
|
+
// ============== All Types ==============
|
|
222
|
+
__exportStar(require("./types/index.js"), exports);
|
|
223
|
+
// ============== Version ==============
|
|
224
|
+
exports.VERSION = '1.0.0';
|
|
225
|
+
exports.LIBRARY_NAME = 'waliwa';
|
|
226
|
+
// ============== Default Config ==============
|
|
227
|
+
exports.DEFAULT_CONFIG = {
|
|
228
|
+
wsURL: 'wss://web.whatsapp.com/ws/chat',
|
|
229
|
+
browser: ['Waliwa', 'WA', '1.0.0'],
|
|
230
|
+
connectTimeoutMs: 20000,
|
|
231
|
+
keepAliveIntervalMs: 20000,
|
|
232
|
+
maxReconnectAttempts: 10,
|
|
233
|
+
reconnectInterval: 2000,
|
|
234
|
+
ramOptimizationLevel: 2
|
|
235
|
+
};
|
|
236
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waliwa - Media upload/download
|
|
3
|
+
* Handle upload media ke WhatsApp CDN dan decrypt download
|
|
4
|
+
*
|
|
5
|
+
* Media encryption: AES-256-CBC + HMAC-SHA256, then upload ke WA CDN
|
|
6
|
+
* Download: reverse process - download encrypted blob, decrypt, return plain
|
|
7
|
+
*/
|
|
8
|
+
import { Readable } from 'stream';
|
|
9
|
+
import type { MediaUploadResult, MediaDownloadResult, WALogger } from '../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Derive media encryption keys dari random mediaKey + mediaType
|
|
12
|
+
*
|
|
13
|
+
* Spec WA: HKDF-SHA256 dengan salt=length + mediaType-appended
|
|
14
|
+
* Output: 4 keys - iv, cipherKey, macKey, refKey
|
|
15
|
+
*/
|
|
16
|
+
export declare function deriveMediaKeys(mediaKey: Uint8Array, mediaType: string): {
|
|
17
|
+
iv: Uint8Array;
|
|
18
|
+
cipherKey: Uint8Array;
|
|
19
|
+
macKey: Uint8Array;
|
|
20
|
+
refKey: Uint8Array;
|
|
21
|
+
};
|
|
22
|
+
export interface EncryptedMedia {
|
|
23
|
+
/** Encrypted media data */
|
|
24
|
+
ciphertext: Uint8Array;
|
|
25
|
+
/** MAC (HMAC-SHA256 dari encrypted data + IV) */
|
|
26
|
+
mac: Uint8Array;
|
|
27
|
+
/** Random mediaKey (32 bytes) */
|
|
28
|
+
mediaKey: Uint8Array;
|
|
29
|
+
/** SHA256 hash dari plaintext */
|
|
30
|
+
fileSha256: Uint8Array;
|
|
31
|
+
/** SHA256 hash dari encrypted data */
|
|
32
|
+
encFileSha256: Uint8Array;
|
|
33
|
+
/** Original file length */
|
|
34
|
+
fileLength: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Encrypt media untuk upload
|
|
38
|
+
* Spec: AES-256-CBC + HMAC-SHA256 untuk integrity
|
|
39
|
+
*/
|
|
40
|
+
export declare function encryptMedia(plaintext: Buffer | Uint8Array, mediaType: string): Promise<EncryptedMedia>;
|
|
41
|
+
/**
|
|
42
|
+
* Decrypt media hasil download
|
|
43
|
+
*/
|
|
44
|
+
export declare function decryptMedia(encryptedData: Uint8Array, mediaKey: Uint8Array, mediaType: string): Promise<Uint8Array>;
|
|
45
|
+
export interface MediaUploaderOptions {
|
|
46
|
+
logger?: WALogger;
|
|
47
|
+
/** Custom HTTP agent */
|
|
48
|
+
httpAgent?: any;
|
|
49
|
+
/** Timeout ms */
|
|
50
|
+
timeoutMs?: number;
|
|
51
|
+
}
|
|
52
|
+
export declare class MediaUploader {
|
|
53
|
+
private logger;
|
|
54
|
+
private httpAgent?;
|
|
55
|
+
private timeoutMs;
|
|
56
|
+
constructor(opts?: MediaUploaderOptions);
|
|
57
|
+
/**
|
|
58
|
+
* Upload media ke WhatsApp CDN
|
|
59
|
+
*/
|
|
60
|
+
upload(media: Buffer | Uint8Array, mediaType: string, mimetype: string, fileName?: string): Promise<MediaUploadResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Upload stream media (untuk large files)
|
|
63
|
+
*/
|
|
64
|
+
uploadStream(stream: Readable, mediaType: string, mimetype: string, fileLength: number): Promise<MediaUploadResult>;
|
|
65
|
+
}
|
|
66
|
+
export interface MediaDownloaderOptions {
|
|
67
|
+
logger?: WALogger;
|
|
68
|
+
httpAgent?: any;
|
|
69
|
+
timeoutMs?: number;
|
|
70
|
+
}
|
|
71
|
+
export declare class MediaDownloader {
|
|
72
|
+
private logger;
|
|
73
|
+
private httpAgent?;
|
|
74
|
+
private timeoutMs;
|
|
75
|
+
constructor(opts?: MediaDownloaderOptions);
|
|
76
|
+
/**
|
|
77
|
+
* Download media dari URL dan decrypt
|
|
78
|
+
*/
|
|
79
|
+
download(url: string, mediaKey: Uint8Array, mediaType: string, mimetype: string, fileName?: string): Promise<MediaDownloadResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Download dari direct path (alternative to URL)
|
|
82
|
+
*/
|
|
83
|
+
downloadFromDirectPath(directPath: string, mediaKey: Uint8Array, mediaType: string, mimetype: string, fileName?: string): Promise<MediaDownloadResult>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Convert Readable stream ke Buffer
|
|
87
|
+
*/
|
|
88
|
+
export declare function streamToBuffer(stream: Readable): Promise<Buffer>;
|
|
89
|
+
/**
|
|
90
|
+
* Convert Buffer ke Readable stream
|
|
91
|
+
*/
|
|
92
|
+
export declare function bufferToStream(buffer: Buffer): Readable;
|
|
93
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/messages/media.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Waliwa - Media upload/download
|
|
4
|
+
* Handle upload media ke WhatsApp CDN dan decrypt download
|
|
5
|
+
*
|
|
6
|
+
* Media encryption: AES-256-CBC + HMAC-SHA256, then upload ke WA CDN
|
|
7
|
+
* Download: reverse process - download encrypted blob, decrypt, return plain
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.MediaDownloader = exports.MediaUploader = void 0;
|
|
14
|
+
exports.deriveMediaKeys = deriveMediaKeys;
|
|
15
|
+
exports.encryptMedia = encryptMedia;
|
|
16
|
+
exports.decryptMedia = decryptMedia;
|
|
17
|
+
exports.streamToBuffer = streamToBuffer;
|
|
18
|
+
exports.bufferToStream = bufferToStream;
|
|
19
|
+
const axios_1 = __importDefault(require("axios"));
|
|
20
|
+
const stream_1 = require("stream");
|
|
21
|
+
const crypto_js_1 = require("../core/crypto.js");
|
|
22
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
23
|
+
// ============== Constants ==============
|
|
24
|
+
const WA_MEDIA_UPLOAD_URL = 'https://mmg.whatsapp.net/whatsapp/mmedia/mms';
|
|
25
|
+
const WA_MEDIA_DOWNLOAD_HOSTS = [
|
|
26
|
+
'mmg.whatsapp.net',
|
|
27
|
+
'mmg2.whatsapp.net',
|
|
28
|
+
'mmg3.whatsapp.net'
|
|
29
|
+
];
|
|
30
|
+
const MEDIA_KEY_TYPES = {
|
|
31
|
+
image: 1,
|
|
32
|
+
video: 2,
|
|
33
|
+
audio: 3,
|
|
34
|
+
document: 4,
|
|
35
|
+
sticker: 5,
|
|
36
|
+
'thumbnail-image': 6,
|
|
37
|
+
'thumbnail-video': 7,
|
|
38
|
+
'thumbnail-document': 8,
|
|
39
|
+
'md-msg-hist': 9,
|
|
40
|
+
'app-state': 10,
|
|
41
|
+
'link-thumbnail': 11,
|
|
42
|
+
'media-msg': 12
|
|
43
|
+
};
|
|
44
|
+
const CHUNK_SIZE = 64 * 1024; // 64KB chunks untuk upload
|
|
45
|
+
// ============== Media Key Derivation ==============
|
|
46
|
+
/**
|
|
47
|
+
* Derive media encryption keys dari random mediaKey + mediaType
|
|
48
|
+
*
|
|
49
|
+
* Spec WA: HKDF-SHA256 dengan salt=length + mediaType-appended
|
|
50
|
+
* Output: 4 keys - iv, cipherKey, macKey, refKey
|
|
51
|
+
*/
|
|
52
|
+
function deriveMediaKeys(mediaKey, mediaType) {
|
|
53
|
+
const mediaTypeNum = MEDIA_KEY_TYPES[mediaType] ?? 1;
|
|
54
|
+
const salt = new Uint8Array([mediaTypeNum]);
|
|
55
|
+
const info = new TextEncoder().encode(`WhatsApp ${mediaType} Keys`);
|
|
56
|
+
const derived = (0, crypto_js_1.hkdfDerive)(mediaKey, salt, info, 112); // 112 bytes total
|
|
57
|
+
return {
|
|
58
|
+
iv: derived.subarray(0, 16),
|
|
59
|
+
cipherKey: derived.subarray(16, 48),
|
|
60
|
+
macKey: derived.subarray(48, 80),
|
|
61
|
+
refKey: derived.subarray(80, 112)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Encrypt media untuk upload
|
|
66
|
+
* Spec: AES-256-CBC + HMAC-SHA256 untuk integrity
|
|
67
|
+
*/
|
|
68
|
+
async function encryptMedia(plaintext, mediaType) {
|
|
69
|
+
// 1. Generate random mediaKey
|
|
70
|
+
const mediaKey = (0, crypto_js_1.getRandomBytes)(32);
|
|
71
|
+
// 2. Derive keys
|
|
72
|
+
const { iv, cipherKey, macKey } = deriveMediaKeys(mediaKey, mediaType);
|
|
73
|
+
// 3. Compute plaintext hash
|
|
74
|
+
const fileSha256 = (0, crypto_js_1.sha256Hash)(plaintext);
|
|
75
|
+
// 4. Encrypt dengan AES-256-CBC
|
|
76
|
+
const ciphertext = (0, crypto_js_1.aesEncryptCBC)(plaintext, cipherKey, iv);
|
|
77
|
+
// 5. Compute MAC: HMAC-SHA256(macKey, iv + ciphertext)
|
|
78
|
+
const macInput = (0, crypto_js_1.concatBytes)(iv, ciphertext);
|
|
79
|
+
const mac = (0, crypto_js_1.hmacSha256)(macKey, macInput);
|
|
80
|
+
// 6. Compute encrypted file hash
|
|
81
|
+
const encFileSha256 = (0, crypto_js_1.sha256Hash)((0, crypto_js_1.concatBytes)(ciphertext, mac));
|
|
82
|
+
return {
|
|
83
|
+
ciphertext,
|
|
84
|
+
mac,
|
|
85
|
+
mediaKey,
|
|
86
|
+
fileSha256,
|
|
87
|
+
encFileSha256,
|
|
88
|
+
fileLength: plaintext.length
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// ============== Media Decryption ==============
|
|
92
|
+
/**
|
|
93
|
+
* Decrypt media hasil download
|
|
94
|
+
*/
|
|
95
|
+
async function decryptMedia(encryptedData, mediaKey, mediaType) {
|
|
96
|
+
if (encryptedData.length < 16) {
|
|
97
|
+
throw new Error('Encrypted media too short');
|
|
98
|
+
}
|
|
99
|
+
const { iv, cipherKey, macKey } = deriveMediaKeys(mediaKey, mediaType);
|
|
100
|
+
// Last 10 bytes = MAC (untuk CBC mode WA spec)
|
|
101
|
+
// Note: WhatsApp uses 10-byte MAC instead of full 32
|
|
102
|
+
const mac = encryptedData.subarray(encryptedData.length - 10);
|
|
103
|
+
const ciphertext = encryptedData.subarray(0, encryptedData.length - 10);
|
|
104
|
+
// Verify MAC
|
|
105
|
+
const expectedMac = (0, crypto_js_1.hmacSha256)(macKey, (0, crypto_js_1.concatBytes)(iv, ciphertext));
|
|
106
|
+
const expectedMacShort = expectedMac.subarray(0, 10);
|
|
107
|
+
if (!(0, crypto_js_1.areBytesEqual)(mac, expectedMacShort)) {
|
|
108
|
+
throw new Error('Media MAC verification failed');
|
|
109
|
+
}
|
|
110
|
+
// Decrypt
|
|
111
|
+
const plaintext = (0, crypto_js_1.aesDecryptCBC)(ciphertext, cipherKey, iv);
|
|
112
|
+
return plaintext;
|
|
113
|
+
}
|
|
114
|
+
class MediaUploader {
|
|
115
|
+
logger;
|
|
116
|
+
httpAgent;
|
|
117
|
+
timeoutMs;
|
|
118
|
+
constructor(opts = {}) {
|
|
119
|
+
this.logger = opts.logger ?? new logger_js_1.SilentLogger();
|
|
120
|
+
this.httpAgent = opts.httpAgent;
|
|
121
|
+
this.timeoutMs = opts.timeoutMs ?? 60000;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Upload media ke WhatsApp CDN
|
|
125
|
+
*/
|
|
126
|
+
async upload(media, mediaType, mimetype, fileName) {
|
|
127
|
+
this.logger.debug(`Encrypting ${media.length} bytes of ${mediaType} (${mimetype})`);
|
|
128
|
+
// Encrypt
|
|
129
|
+
const encrypted = await encryptMedia(media, mediaType);
|
|
130
|
+
// Build upload URL
|
|
131
|
+
const uploadUrl = `${WA_MEDIA_UPLOAD_URL}/${mediaType}`;
|
|
132
|
+
const params = {
|
|
133
|
+
hash: Buffer.from(encrypted.encFileSha256).toString('base64'),
|
|
134
|
+
type: mimetype,
|
|
135
|
+
size: encrypted.fileLength,
|
|
136
|
+
name: fileName
|
|
137
|
+
};
|
|
138
|
+
this.logger.debug(`Uploading to ${uploadUrl}`);
|
|
139
|
+
// Upload via POST
|
|
140
|
+
const response = await axios_1.default.post(uploadUrl, Buffer.from(encrypted.ciphertext), {
|
|
141
|
+
params,
|
|
142
|
+
headers: {
|
|
143
|
+
'Content-Type': 'application/octet-stream',
|
|
144
|
+
'Origin': 'https://web.whatsapp.com',
|
|
145
|
+
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
|
|
146
|
+
},
|
|
147
|
+
timeout: this.timeoutMs,
|
|
148
|
+
maxContentLength: Infinity,
|
|
149
|
+
maxBodyLength: Infinity
|
|
150
|
+
});
|
|
151
|
+
if (response.status !== 200 && response.status !== 201) {
|
|
152
|
+
throw new Error(`Upload failed: ${response.status} ${response.statusText}`);
|
|
153
|
+
}
|
|
154
|
+
const data = response.data;
|
|
155
|
+
if (!data || !data.url) {
|
|
156
|
+
throw new Error('Invalid upload response: missing URL');
|
|
157
|
+
}
|
|
158
|
+
this.logger.debug(`Upload successful: ${data.url}`);
|
|
159
|
+
return {
|
|
160
|
+
url: data.url,
|
|
161
|
+
directPath: data.direct_path || data.directPath || '',
|
|
162
|
+
mediaKey: encrypted.mediaKey,
|
|
163
|
+
encFileHash: encrypted.encFileSha256,
|
|
164
|
+
fileEncSHA256: encrypted.encFileSha256,
|
|
165
|
+
fileSHA256: encrypted.fileSha256,
|
|
166
|
+
fileLength: encrypted.fileLength,
|
|
167
|
+
mimetype
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Upload stream media (untuk large files)
|
|
172
|
+
*/
|
|
173
|
+
async uploadStream(stream, mediaType, mimetype, fileLength) {
|
|
174
|
+
// Collect stream ke buffer (untuk simplicity)
|
|
175
|
+
const chunks = [];
|
|
176
|
+
for await (const chunk of stream) {
|
|
177
|
+
chunks.push(Buffer.from(chunk));
|
|
178
|
+
}
|
|
179
|
+
const buffer = Buffer.concat(chunks);
|
|
180
|
+
return this.upload(buffer, mediaType, mimetype);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.MediaUploader = MediaUploader;
|
|
184
|
+
class MediaDownloader {
|
|
185
|
+
logger;
|
|
186
|
+
httpAgent;
|
|
187
|
+
timeoutMs;
|
|
188
|
+
constructor(opts = {}) {
|
|
189
|
+
this.logger = opts.logger ?? new logger_js_1.SilentLogger();
|
|
190
|
+
this.httpAgent = opts.httpAgent;
|
|
191
|
+
this.timeoutMs = opts.timeoutMs ?? 60000;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Download media dari URL dan decrypt
|
|
195
|
+
*/
|
|
196
|
+
async download(url, mediaKey, mediaType, mimetype, fileName) {
|
|
197
|
+
this.logger.debug(`Downloading media from ${url}`);
|
|
198
|
+
// Determine host
|
|
199
|
+
let downloadUrl = url;
|
|
200
|
+
if (!url.startsWith('http')) {
|
|
201
|
+
// Relative path, prepend host
|
|
202
|
+
const host = WA_MEDIA_DOWNLOAD_HOSTS[0];
|
|
203
|
+
downloadUrl = `https://${host}${url.startsWith('/') ? '' : '/'}${url}`;
|
|
204
|
+
}
|
|
205
|
+
const response = await axios_1.default.get(downloadUrl, {
|
|
206
|
+
responseType: 'arraybuffer',
|
|
207
|
+
timeout: this.timeoutMs,
|
|
208
|
+
headers: {
|
|
209
|
+
'Origin': 'https://web.whatsapp.com',
|
|
210
|
+
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
if (response.status !== 200) {
|
|
214
|
+
throw new Error(`Download failed: ${response.status}`);
|
|
215
|
+
}
|
|
216
|
+
const encryptedData = new Uint8Array(response.data);
|
|
217
|
+
// Decrypt
|
|
218
|
+
const plaintext = await decryptMedia(encryptedData, mediaKey, mediaType);
|
|
219
|
+
this.logger.debug(`Decrypted ${plaintext.length} bytes`);
|
|
220
|
+
return {
|
|
221
|
+
buffer: Buffer.from(plaintext),
|
|
222
|
+
mimetype,
|
|
223
|
+
fileLength: plaintext.length,
|
|
224
|
+
fileName
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Download dari direct path (alternative to URL)
|
|
229
|
+
*/
|
|
230
|
+
async downloadFromDirectPath(directPath, mediaKey, mediaType, mimetype, fileName) {
|
|
231
|
+
return this.download(directPath, mediaKey, mediaType, mimetype, fileName);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.MediaDownloader = MediaDownloader;
|
|
235
|
+
// ============== Helper ==============
|
|
236
|
+
/**
|
|
237
|
+
* Convert Readable stream ke Buffer
|
|
238
|
+
*/
|
|
239
|
+
async function streamToBuffer(stream) {
|
|
240
|
+
const chunks = [];
|
|
241
|
+
for await (const chunk of stream) {
|
|
242
|
+
chunks.push(Buffer.from(chunk));
|
|
243
|
+
}
|
|
244
|
+
return Buffer.concat(chunks);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Convert Buffer ke Readable stream
|
|
248
|
+
*/
|
|
249
|
+
function bufferToStream(buffer) {
|
|
250
|
+
return stream_1.Readable.from(buffer);
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/messages/media.ts"],"names":[],"mappings":"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"}
|