@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.
Files changed (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +600 -0
  3. package/dist/advanced/features.d.ts +211 -0
  4. package/dist/advanced/features.d.ts.map +1 -0
  5. package/dist/advanced/features.js +671 -0
  6. package/dist/advanced/features.js.map +1 -0
  7. package/dist/auth/auth-state.d.ts +89 -0
  8. package/dist/auth/auth-state.d.ts.map +1 -0
  9. package/dist/auth/auth-state.js +330 -0
  10. package/dist/auth/auth-state.js.map +1 -0
  11. package/dist/auth/pairing-code.d.ts +78 -0
  12. package/dist/auth/pairing-code.d.ts.map +1 -0
  13. package/dist/auth/pairing-code.js +191 -0
  14. package/dist/auth/pairing-code.js.map +1 -0
  15. package/dist/auth/qr-code.d.ts +60 -0
  16. package/dist/auth/qr-code.d.ts.map +1 -0
  17. package/dist/auth/qr-code.js +151 -0
  18. package/dist/auth/qr-code.js.map +1 -0
  19. package/dist/calls/handler.d.ts +61 -0
  20. package/dist/calls/handler.d.ts.map +1 -0
  21. package/dist/calls/handler.js +117 -0
  22. package/dist/calls/handler.js.map +1 -0
  23. package/dist/core/binary.d.ts +74 -0
  24. package/dist/core/binary.d.ts.map +1 -0
  25. package/dist/core/binary.js +448 -0
  26. package/dist/core/binary.js.map +1 -0
  27. package/dist/core/crypto.d.ts +60 -0
  28. package/dist/core/crypto.d.ts.map +1 -0
  29. package/dist/core/crypto.js +170 -0
  30. package/dist/core/crypto.js.map +1 -0
  31. package/dist/core/noise.d.ts +106 -0
  32. package/dist/core/noise.d.ts.map +1 -0
  33. package/dist/core/noise.js +307 -0
  34. package/dist/core/noise.js.map +1 -0
  35. package/dist/events/emitter.d.ts +44 -0
  36. package/dist/events/emitter.d.ts.map +1 -0
  37. package/dist/events/emitter.js +79 -0
  38. package/dist/events/emitter.js.map +1 -0
  39. package/dist/features/index.d.ts +342 -0
  40. package/dist/features/index.d.ts.map +1 -0
  41. package/dist/features/index.js +755 -0
  42. package/dist/features/index.js.map +1 -0
  43. package/dist/fixes/index.d.ts +333 -0
  44. package/dist/fixes/index.d.ts.map +1 -0
  45. package/dist/fixes/index.js +762 -0
  46. package/dist/fixes/index.js.map +1 -0
  47. package/dist/groups/management.d.ts +86 -0
  48. package/dist/groups/management.d.ts.map +1 -0
  49. package/dist/groups/management.js +443 -0
  50. package/dist/groups/management.js.map +1 -0
  51. package/dist/index.d.ts +65 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +236 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/messages/media.d.ts +93 -0
  56. package/dist/messages/media.d.ts.map +1 -0
  57. package/dist/messages/media.js +252 -0
  58. package/dist/messages/media.js.map +1 -0
  59. package/dist/messages/message-encoder.d.ts +70 -0
  60. package/dist/messages/message-encoder.d.ts.map +1 -0
  61. package/dist/messages/message-encoder.js +453 -0
  62. package/dist/messages/message-encoder.js.map +1 -0
  63. package/dist/messages/send.d.ts +101 -0
  64. package/dist/messages/send.d.ts.map +1 -0
  65. package/dist/messages/send.js +409 -0
  66. package/dist/messages/send.js.map +1 -0
  67. package/dist/recovery/index.d.ts +125 -0
  68. package/dist/recovery/index.d.ts.map +1 -0
  69. package/dist/recovery/index.js +584 -0
  70. package/dist/recovery/index.js.map +1 -0
  71. package/dist/skdm/index.d.ts +220 -0
  72. package/dist/skdm/index.d.ts.map +1 -0
  73. package/dist/skdm/index.js +600 -0
  74. package/dist/skdm/index.js.map +1 -0
  75. package/dist/socket/hybrid.d.ts +118 -0
  76. package/dist/socket/hybrid.d.ts.map +1 -0
  77. package/dist/socket/hybrid.js +352 -0
  78. package/dist/socket/hybrid.js.map +1 -0
  79. package/dist/socket/wa-socket.d.ts +300 -0
  80. package/dist/socket/wa-socket.d.ts.map +1 -0
  81. package/dist/socket/wa-socket.js +1094 -0
  82. package/dist/socket/wa-socket.js.map +1 -0
  83. package/dist/socket/ws-socket.d.ts +96 -0
  84. package/dist/socket/ws-socket.d.ts.map +1 -0
  85. package/dist/socket/ws-socket.js +302 -0
  86. package/dist/socket/ws-socket.js.map +1 -0
  87. package/dist/types/index.d.ts +444 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +7 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/utils/jid.d.ts +46 -0
  92. package/dist/utils/jid.d.ts.map +1 -0
  93. package/dist/utils/jid.js +152 -0
  94. package/dist/utils/jid.js.map +1 -0
  95. package/dist/utils/logger.d.ts +45 -0
  96. package/dist/utils/logger.d.ts.map +1 -0
  97. package/dist/utils/logger.js +79 -0
  98. package/dist/utils/logger.js.map +1 -0
  99. package/dist/utils/retry.d.ts +43 -0
  100. package/dist/utils/retry.d.ts.map +1 -0
  101. package/dist/utils/retry.js +175 -0
  102. package/dist/utils/retry.js.map +1 -0
  103. package/docs/API.md +745 -0
  104. package/docs/ARCHITECTURE.md +307 -0
  105. package/docs/BAILEYS_FIXES.md +360 -0
  106. package/docs/FEATURES.md +532 -0
  107. package/docs/PROTOCOL.md +489 -0
  108. package/docs/RECOVERY.md +409 -0
  109. package/docs/SKDM.md +233 -0
  110. package/examples/ai-bot/index.ts +479 -0
  111. package/examples/ai-bot/package.json +17 -0
  112. package/examples/echo-bot/index.ts +171 -0
  113. package/examples/echo-bot/package.json +18 -0
  114. package/examples/group-bot/index.ts +557 -0
  115. package/examples/group-bot/package.json +17 -0
  116. package/examples/rest-gateway/index.ts +499 -0
  117. package/examples/rest-gateway/package.json +19 -0
  118. package/package.json +75 -0
  119. package/src/advanced/features.ts +817 -0
  120. package/src/auth/auth-state.ts +342 -0
  121. package/src/auth/pairing-code.ts +246 -0
  122. package/src/auth/qr-code.ts +191 -0
  123. package/src/calls/handler.ts +153 -0
  124. package/src/core/binary.ts +464 -0
  125. package/src/core/crypto.ts +189 -0
  126. package/src/core/noise.ts +406 -0
  127. package/src/events/emitter.ts +88 -0
  128. package/src/features/index.ts +921 -0
  129. package/src/fixes/index.ts +882 -0
  130. package/src/groups/management.ts +497 -0
  131. package/src/index.ts +274 -0
  132. package/src/messages/media.ts +372 -0
  133. package/src/messages/message-encoder.ts +520 -0
  134. package/src/messages/send.ts +521 -0
  135. package/src/recovery/index.ts +704 -0
  136. package/src/skdm/index.ts +693 -0
  137. package/src/socket/hybrid.ts +414 -0
  138. package/src/socket/wa-socket.ts +1347 -0
  139. package/src/socket/ws-socket.ts +355 -0
  140. package/src/types/index.ts +457 -0
  141. package/src/utils/jid.ts +156 -0
  142. package/src/utils/logger.ts +84 -0
  143. package/src/utils/retry.ts +205 -0
  144. 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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"}