baileys-joss 1.0.0 → 1.0.2

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 (127) hide show
  1. package/README.md +2554 -78
  2. package/lib/Socket/business.d.ts +4 -0
  3. package/lib/Socket/business.d.ts.map +1 -1
  4. package/lib/Socket/chats.d.ts +4 -0
  5. package/lib/Socket/chats.d.ts.map +1 -1
  6. package/lib/Socket/chats.js +44 -1
  7. package/lib/Socket/chats.js.map +1 -1
  8. package/lib/Socket/communities.d.ts +4 -0
  9. package/lib/Socket/communities.d.ts.map +1 -1
  10. package/lib/Socket/groups.d.ts +4 -0
  11. package/lib/Socket/groups.d.ts.map +1 -1
  12. package/lib/Socket/index.d.ts +4 -0
  13. package/lib/Socket/index.d.ts.map +1 -1
  14. package/lib/Socket/messages-recv.d.ts +4 -0
  15. package/lib/Socket/messages-recv.d.ts.map +1 -1
  16. package/lib/Socket/messages-send.d.ts +4 -0
  17. package/lib/Socket/messages-send.d.ts.map +1 -1
  18. package/lib/Socket/messages-send.js +130 -1
  19. package/lib/Socket/messages-send.js.map +1 -1
  20. package/lib/Socket/newsletter.d.ts +4 -0
  21. package/lib/Socket/newsletter.d.ts.map +1 -1
  22. package/lib/Types/Message.d.ts +25 -1
  23. package/lib/Types/Message.d.ts.map +1 -1
  24. package/lib/Utils/activity-logger.d.ts +189 -0
  25. package/lib/Utils/activity-logger.d.ts.map +1 -0
  26. package/lib/Utils/activity-logger.js +418 -0
  27. package/lib/Utils/activity-logger.js.map +1 -0
  28. package/lib/Utils/anti-spam.d.ts +145 -0
  29. package/lib/Utils/anti-spam.d.ts.map +1 -0
  30. package/lib/Utils/anti-spam.js +398 -0
  31. package/lib/Utils/anti-spam.js.map +1 -0
  32. package/lib/Utils/auto-reply.d.ts +123 -0
  33. package/lib/Utils/auto-reply.d.ts.map +1 -0
  34. package/lib/Utils/auto-reply.js +234 -0
  35. package/lib/Utils/auto-reply.js.map +1 -0
  36. package/lib/Utils/broadcast.d.ts +121 -0
  37. package/lib/Utils/broadcast.d.ts.map +1 -0
  38. package/lib/Utils/broadcast.js +223 -0
  39. package/lib/Utils/broadcast.js.map +1 -0
  40. package/lib/Utils/bulk-messaging.d.ts +79 -0
  41. package/lib/Utils/bulk-messaging.d.ts.map +1 -0
  42. package/lib/Utils/bulk-messaging.js +148 -0
  43. package/lib/Utils/bulk-messaging.js.map +1 -0
  44. package/lib/Utils/chat-analytics.d.ts +92 -0
  45. package/lib/Utils/chat-analytics.d.ts.map +1 -0
  46. package/lib/Utils/chat-analytics.js +337 -0
  47. package/lib/Utils/chat-analytics.js.map +1 -0
  48. package/lib/Utils/chat-control.d.ts +156 -0
  49. package/lib/Utils/chat-control.d.ts.map +1 -0
  50. package/lib/Utils/chat-control.js +224 -0
  51. package/lib/Utils/chat-control.js.map +1 -0
  52. package/lib/Utils/chat-export.d.ts +75 -0
  53. package/lib/Utils/chat-export.d.ts.map +1 -0
  54. package/lib/Utils/chat-export.js +309 -0
  55. package/lib/Utils/chat-export.js.map +1 -0
  56. package/lib/Utils/content-detector.d.ts +199 -0
  57. package/lib/Utils/content-detector.d.ts.map +1 -0
  58. package/lib/Utils/content-detector.js +442 -0
  59. package/lib/Utils/content-detector.js.map +1 -0
  60. package/lib/Utils/index.d.ts +23 -0
  61. package/lib/Utils/index.d.ts.map +1 -1
  62. package/lib/Utils/index.js +52 -0
  63. package/lib/Utils/index.js.map +1 -1
  64. package/lib/Utils/link-scanner.d.ts +112 -0
  65. package/lib/Utils/link-scanner.d.ts.map +1 -0
  66. package/lib/Utils/link-scanner.js +433 -0
  67. package/lib/Utils/link-scanner.js.map +1 -0
  68. package/lib/Utils/media-downloader.d.ts +86 -0
  69. package/lib/Utils/media-downloader.d.ts.map +1 -0
  70. package/lib/Utils/media-downloader.js +269 -0
  71. package/lib/Utils/media-downloader.js.map +1 -0
  72. package/lib/Utils/meme-generator.d.ts +96 -0
  73. package/lib/Utils/meme-generator.d.ts.map +1 -0
  74. package/lib/Utils/meme-generator.js +368 -0
  75. package/lib/Utils/meme-generator.js.map +1 -0
  76. package/lib/Utils/message-search.d.ts +96 -0
  77. package/lib/Utils/message-search.d.ts.map +1 -0
  78. package/lib/Utils/message-search.js +261 -0
  79. package/lib/Utils/message-search.js.map +1 -0
  80. package/lib/Utils/messages-media.d.ts +20 -1
  81. package/lib/Utils/messages-media.d.ts.map +1 -1
  82. package/lib/Utils/messages-media.js +100 -5
  83. package/lib/Utils/messages-media.js.map +1 -1
  84. package/lib/Utils/messages.d.ts.map +1 -1
  85. package/lib/Utils/messages.js +14 -2
  86. package/lib/Utils/messages.js.map +1 -1
  87. package/lib/Utils/mini-games.d.ts +155 -0
  88. package/lib/Utils/mini-games.d.ts.map +1 -0
  89. package/lib/Utils/mini-games.js +445 -0
  90. package/lib/Utils/mini-games.js.map +1 -0
  91. package/lib/Utils/pomodoro.d.ts +139 -0
  92. package/lib/Utils/pomodoro.d.ts.map +1 -0
  93. package/lib/Utils/pomodoro.js +434 -0
  94. package/lib/Utils/pomodoro.js.map +1 -0
  95. package/lib/Utils/qr-generator.d.ts +95 -0
  96. package/lib/Utils/qr-generator.d.ts.map +1 -0
  97. package/lib/Utils/qr-generator.js +226 -0
  98. package/lib/Utils/qr-generator.js.map +1 -0
  99. package/lib/Utils/quotes.d.ts +110 -0
  100. package/lib/Utils/quotes.d.ts.map +1 -0
  101. package/lib/Utils/quotes.js +325 -0
  102. package/lib/Utils/quotes.js.map +1 -0
  103. package/lib/Utils/scheduling.d.ts +88 -0
  104. package/lib/Utils/scheduling.d.ts.map +1 -0
  105. package/lib/Utils/scheduling.js +163 -0
  106. package/lib/Utils/scheduling.js.map +1 -0
  107. package/lib/Utils/status-posting.d.ts +151 -0
  108. package/lib/Utils/status-posting.d.ts.map +1 -0
  109. package/lib/Utils/status-posting.js +162 -0
  110. package/lib/Utils/status-posting.js.map +1 -0
  111. package/lib/Utils/templates.d.ts +154 -0
  112. package/lib/Utils/templates.d.ts.map +1 -0
  113. package/lib/Utils/templates.js +368 -0
  114. package/lib/Utils/templates.js.map +1 -0
  115. package/lib/Utils/vcard.d.ts +86 -0
  116. package/lib/Utils/vcard.d.ts.map +1 -0
  117. package/lib/Utils/vcard.js +195 -0
  118. package/lib/Utils/vcard.js.map +1 -0
  119. package/lib/Utils/voice-note.d.ts +115 -0
  120. package/lib/Utils/voice-note.d.ts.map +1 -0
  121. package/lib/Utils/voice-note.js +212 -0
  122. package/lib/Utils/voice-note.js.map +1 -0
  123. package/lib/Utils/weather.d.ts +118 -0
  124. package/lib/Utils/weather.d.ts.map +1 -0
  125. package/lib/Utils/weather.js +362 -0
  126. package/lib/Utils/weather.js.map +1 -0
  127. package/package.json +6 -3
@@ -0,0 +1,433 @@
1
+ /**
2
+ * Baileys-Joss: Link Scanner
3
+ *
4
+ * Scan dan validasi URL untuk keamanan:
5
+ * - Check domain reputation
6
+ * - Detect phishing patterns
7
+ * - URL shortener expansion
8
+ * - Safe browsing check
9
+ */
10
+ import https from 'https';
11
+ import http from 'http';
12
+ // =====================================================
13
+ // KNOWN DATA
14
+ // =====================================================
15
+ const URL_SHORTENERS = new Set([
16
+ 'bit.ly', 'bitly.com', 'tinyurl.com', 'goo.gl', 't.co',
17
+ 'ow.ly', 'is.gd', 'buff.ly', 'j.mp', 'rb.gy',
18
+ 'cutt.ly', 'short.link', 'tiny.cc', 'v.gd', 'clck.ru',
19
+ 's.id', 'shorturl.at', 'rebrand.ly', 'bl.ink', 'soo.gd'
20
+ ]);
21
+ const SUSPICIOUS_TLDS = new Set([
22
+ '.tk', '.ml', '.ga', '.cf', '.gq', '.xyz', '.top',
23
+ '.work', '.click', '.link', '.info', '.biz', '.cc'
24
+ ]);
25
+ const KNOWN_MALICIOUS_PATTERNS = [
26
+ /phish/i,
27
+ /scam/i,
28
+ /fake.*login/i,
29
+ /secure.*update/i,
30
+ /account.*verify/i,
31
+ /password.*reset.*urgent/i,
32
+ /suspended.*account/i,
33
+ /banking.*security/i
34
+ ];
35
+ const TRUSTED_DOMAINS = new Set([
36
+ 'google.com', 'facebook.com', 'instagram.com', 'twitter.com',
37
+ 'youtube.com', 'linkedin.com', 'github.com', 'microsoft.com',
38
+ 'apple.com', 'amazon.com', 'whatsapp.com', 'telegram.org',
39
+ 'wikipedia.org', 'reddit.com', 'stackoverflow.com'
40
+ ]);
41
+ const PHISHING_KEYWORDS = [
42
+ 'login', 'signin', 'verify', 'secure', 'account', 'update',
43
+ 'confirm', 'password', 'credential', 'bank', 'paypal',
44
+ 'apple', 'google', 'microsoft', 'facebook', 'instagram'
45
+ ];
46
+ // =====================================================
47
+ // LINK SCANNER CLASS
48
+ // =====================================================
49
+ export class LinkScanner {
50
+ constructor(options = {}) {
51
+ this.options = {
52
+ followRedirects: options.followRedirects ?? true,
53
+ maxRedirects: options.maxRedirects ?? 5,
54
+ timeout: options.timeout ?? 5000,
55
+ maliciousDomains: options.maliciousDomains ?? [],
56
+ safeDomains: options.safeDomains ?? [],
57
+ enablePhishingDetection: options.enablePhishingDetection ?? true
58
+ };
59
+ this.maliciousDomains = new Set(this.options.maliciousDomains);
60
+ this.safeDomains = new Set([...TRUSTED_DOMAINS, ...this.options.safeDomains]);
61
+ }
62
+ /**
63
+ * Scan a URL for security threats
64
+ */
65
+ async scan(url) {
66
+ const threats = [];
67
+ let riskScore = 0;
68
+ // Parse URL
69
+ let parsedUrl;
70
+ try {
71
+ parsedUrl = new URL(url);
72
+ }
73
+ catch {
74
+ return {
75
+ url,
76
+ safe: false,
77
+ riskLevel: 'critical',
78
+ riskScore: 100,
79
+ threats: ['Invalid URL format'],
80
+ details: {
81
+ isShortener: false,
82
+ domain: '',
83
+ isHttps: false,
84
+ hasIPAddress: false,
85
+ hasSuspiciousPath: false,
86
+ isKnownMalicious: false,
87
+ phishingScore: 0
88
+ },
89
+ scannedAt: new Date()
90
+ };
91
+ }
92
+ const domain = parsedUrl.hostname.toLowerCase();
93
+ const isHttps = parsedUrl.protocol === 'https:';
94
+ const isShortener = URL_SHORTENERS.has(domain);
95
+ const hasIPAddress = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(domain);
96
+ // Check if it's a known safe domain
97
+ if (this.safeDomains.has(domain) || this.isDomainSafe(domain)) {
98
+ return {
99
+ url,
100
+ safe: true,
101
+ riskLevel: 'safe',
102
+ riskScore: 0,
103
+ threats: [],
104
+ details: {
105
+ isShortener,
106
+ domain,
107
+ isHttps,
108
+ hasIPAddress: false,
109
+ hasSuspiciousPath: false,
110
+ isKnownMalicious: false,
111
+ phishingScore: 0
112
+ },
113
+ scannedAt: new Date()
114
+ };
115
+ }
116
+ // Check HTTPS
117
+ if (!isHttps) {
118
+ threats.push('No HTTPS encryption');
119
+ riskScore += 15;
120
+ }
121
+ // Check IP address instead of domain
122
+ if (hasIPAddress) {
123
+ threats.push('Uses IP address instead of domain name');
124
+ riskScore += 25;
125
+ }
126
+ // Check for URL shortener
127
+ if (isShortener) {
128
+ threats.push('URL shortener (may hide malicious destination)');
129
+ riskScore += 15;
130
+ }
131
+ // Check suspicious TLD
132
+ if (this.hasSuspiciousTLD(domain)) {
133
+ threats.push('Suspicious top-level domain');
134
+ riskScore += 20;
135
+ }
136
+ // Check known malicious domains
137
+ if (this.maliciousDomains.has(domain)) {
138
+ threats.push('Known malicious domain');
139
+ riskScore += 50;
140
+ }
141
+ // Check suspicious path patterns
142
+ const hasSuspiciousPath = this.checkSuspiciousPath(parsedUrl.pathname + parsedUrl.search);
143
+ if (hasSuspiciousPath) {
144
+ threats.push('Suspicious URL path pattern');
145
+ riskScore += 20;
146
+ }
147
+ // Phishing detection
148
+ let phishingScore = 0;
149
+ if (this.options.enablePhishingDetection) {
150
+ phishingScore = this.calculatePhishingScore(url, domain);
151
+ if (phishingScore >= 50) {
152
+ threats.push(`Phishing indicators detected (score: ${phishingScore})`);
153
+ riskScore += Math.min(phishingScore / 2, 30);
154
+ }
155
+ }
156
+ // Check for known malicious patterns
157
+ const isKnownMalicious = KNOWN_MALICIOUS_PATTERNS.some(pattern => pattern.test(url));
158
+ if (isKnownMalicious) {
159
+ threats.push('Matches known malicious pattern');
160
+ riskScore += 40;
161
+ }
162
+ // Follow redirects if enabled
163
+ let finalUrl;
164
+ if (this.options.followRedirects && isShortener) {
165
+ try {
166
+ finalUrl = await this.resolveRedirects(url);
167
+ if (finalUrl && finalUrl !== url) {
168
+ // Recursively scan the final URL
169
+ const finalResult = await this.scan(finalUrl);
170
+ if (!finalResult.safe) {
171
+ threats.push(...finalResult.threats.map(t => `[Final URL] ${t}`));
172
+ riskScore = Math.max(riskScore, finalResult.riskScore);
173
+ }
174
+ }
175
+ }
176
+ catch {
177
+ threats.push('Failed to resolve URL shortener');
178
+ riskScore += 10;
179
+ }
180
+ }
181
+ // Determine risk level
182
+ const riskLevel = this.getRiskLevel(riskScore);
183
+ return {
184
+ url,
185
+ safe: riskScore < 30,
186
+ riskLevel,
187
+ riskScore: Math.min(riskScore, 100),
188
+ threats,
189
+ details: {
190
+ isShortener,
191
+ finalUrl,
192
+ domain,
193
+ isHttps,
194
+ hasIPAddress,
195
+ hasSuspiciousPath,
196
+ isKnownMalicious,
197
+ phishingScore
198
+ },
199
+ scannedAt: new Date()
200
+ };
201
+ }
202
+ /**
203
+ * Batch scan multiple URLs
204
+ */
205
+ async scanMultiple(urls) {
206
+ return Promise.all(urls.map(url => this.scan(url)));
207
+ }
208
+ /**
209
+ * Quick check if URL is suspicious
210
+ */
211
+ quickCheck(url) {
212
+ const reasons = [];
213
+ try {
214
+ const parsedUrl = new URL(url);
215
+ const domain = parsedUrl.hostname.toLowerCase();
216
+ if (!parsedUrl.protocol.startsWith('https')) {
217
+ reasons.push('No HTTPS');
218
+ }
219
+ if (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(domain)) {
220
+ reasons.push('IP address');
221
+ }
222
+ if (URL_SHORTENERS.has(domain)) {
223
+ reasons.push('URL shortener');
224
+ }
225
+ if (this.hasSuspiciousTLD(domain)) {
226
+ reasons.push('Suspicious TLD');
227
+ }
228
+ if (this.maliciousDomains.has(domain)) {
229
+ reasons.push('Known malicious');
230
+ }
231
+ }
232
+ catch {
233
+ reasons.push('Invalid URL');
234
+ }
235
+ return {
236
+ suspicious: reasons.length > 0,
237
+ reasons
238
+ };
239
+ }
240
+ /**
241
+ * Add domain to malicious list
242
+ */
243
+ addMaliciousDomain(domain) {
244
+ this.maliciousDomains.add(domain.toLowerCase());
245
+ }
246
+ /**
247
+ * Add domain to safe list
248
+ */
249
+ addSafeDomain(domain) {
250
+ this.safeDomains.add(domain.toLowerCase());
251
+ }
252
+ /**
253
+ * Remove domain from malicious list
254
+ */
255
+ removeMaliciousDomain(domain) {
256
+ this.maliciousDomains.delete(domain.toLowerCase());
257
+ }
258
+ /**
259
+ * Check if domain is safe
260
+ */
261
+ isDomainSafe(domain) {
262
+ // Check if it's a subdomain of a trusted domain
263
+ for (const trusted of this.safeDomains) {
264
+ if (domain === trusted || domain.endsWith(`.${trusted}`)) {
265
+ return true;
266
+ }
267
+ }
268
+ return false;
269
+ }
270
+ /**
271
+ * Check for suspicious TLD
272
+ */
273
+ hasSuspiciousTLD(domain) {
274
+ for (const tld of SUSPICIOUS_TLDS) {
275
+ if (domain.endsWith(tld)) {
276
+ return true;
277
+ }
278
+ }
279
+ return false;
280
+ }
281
+ /**
282
+ * Check for suspicious path patterns
283
+ */
284
+ checkSuspiciousPath(path) {
285
+ const lowerPath = path.toLowerCase();
286
+ // Check for common phishing path patterns
287
+ const suspiciousPatterns = [
288
+ /\/login\//i,
289
+ /\/signin\//i,
290
+ /\/verify\//i,
291
+ /\/secure\//i,
292
+ /\/account\//i,
293
+ /\.php\?.*(?:user|pass|login|token)/i,
294
+ /\/wp-(?:admin|login)/i,
295
+ /\/administrator/i
296
+ ];
297
+ return suspiciousPatterns.some(pattern => pattern.test(lowerPath));
298
+ }
299
+ /**
300
+ * Calculate phishing score
301
+ */
302
+ calculatePhishingScore(url, domain) {
303
+ let score = 0;
304
+ const lowerUrl = url.toLowerCase();
305
+ const lowerDomain = domain.toLowerCase();
306
+ // Check for brand impersonation
307
+ for (const keyword of PHISHING_KEYWORDS) {
308
+ // Brand name in subdomain (like google.malicious.com)
309
+ if (lowerDomain.includes(keyword) && !this.safeDomains.has(domain)) {
310
+ score += 20;
311
+ }
312
+ // Brand name in path
313
+ if (lowerUrl.includes(keyword)) {
314
+ score += 5;
315
+ }
316
+ }
317
+ // Check for lookalike domains
318
+ const lookalikePairs = [
319
+ ['google', ['g00gle', 'googie', 'go0gle', 'goog1e']],
320
+ ['facebook', ['faceb00k', 'facebok', 'faceboook']],
321
+ ['microsoft', ['micr0soft', 'mircosoft', 'microsft']],
322
+ ['apple', ['app1e', 'appie', 'aple']],
323
+ ['paypal', ['paypa1', 'paypai', 'paypaI']]
324
+ ];
325
+ for (const [, lookalikes] of lookalikePairs) {
326
+ for (const lookalike of lookalikes) {
327
+ if (lowerDomain.includes(lookalike)) {
328
+ score += 40;
329
+ }
330
+ }
331
+ }
332
+ // Check for excessive subdomains
333
+ const subdomainCount = domain.split('.').length - 2;
334
+ if (subdomainCount > 2) {
335
+ score += 10 * (subdomainCount - 2);
336
+ }
337
+ // Check for suspicious characters
338
+ if (/[@]/.test(url.split('?')[0] || '')) {
339
+ score += 30;
340
+ }
341
+ // Check for encoded characters that look suspicious
342
+ if (/%[0-9a-f]{2}/i.test(domain)) {
343
+ score += 20;
344
+ }
345
+ return Math.min(score, 100);
346
+ }
347
+ /**
348
+ * Get risk level from score
349
+ */
350
+ getRiskLevel(score) {
351
+ if (score < 15)
352
+ return 'safe';
353
+ if (score < 30)
354
+ return 'low';
355
+ if (score < 50)
356
+ return 'medium';
357
+ if (score < 75)
358
+ return 'high';
359
+ return 'critical';
360
+ }
361
+ /**
362
+ * Resolve URL redirects
363
+ */
364
+ resolveRedirects(url, depth = 0) {
365
+ return new Promise((resolve, reject) => {
366
+ if (depth >= this.options.maxRedirects) {
367
+ resolve(url);
368
+ return;
369
+ }
370
+ const protocol = url.startsWith('https') ? https : http;
371
+ const request = protocol.get(url, {
372
+ timeout: this.options.timeout,
373
+ headers: { 'User-Agent': 'Mozilla/5.0' }
374
+ }, (response) => {
375
+ if (response.statusCode && response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {
376
+ const redirectUrl = response.headers.location.startsWith('http')
377
+ ? response.headers.location
378
+ : new URL(response.headers.location, url).toString();
379
+ this.resolveRedirects(redirectUrl, depth + 1)
380
+ .then(resolve)
381
+ .catch(reject);
382
+ }
383
+ else {
384
+ resolve(url);
385
+ }
386
+ });
387
+ request.on('error', reject);
388
+ request.on('timeout', () => {
389
+ request.destroy();
390
+ resolve(url);
391
+ });
392
+ });
393
+ }
394
+ }
395
+ // =====================================================
396
+ // FACTORY FUNCTION
397
+ // =====================================================
398
+ export const createLinkScanner = (options) => {
399
+ return new LinkScanner(options);
400
+ };
401
+ // =====================================================
402
+ // QUICK FUNCTIONS
403
+ // =====================================================
404
+ /**
405
+ * Quick check if URL is a shortener
406
+ */
407
+ export const isUrlShortener = (url) => {
408
+ try {
409
+ const domain = new URL(url).hostname.toLowerCase();
410
+ return URL_SHORTENERS.has(domain);
411
+ }
412
+ catch {
413
+ return false;
414
+ }
415
+ };
416
+ /**
417
+ * Extract domain from URL
418
+ */
419
+ export const extractDomain = (url) => {
420
+ try {
421
+ return new URL(url).hostname.toLowerCase();
422
+ }
423
+ catch {
424
+ return null;
425
+ }
426
+ };
427
+ /**
428
+ * Check if domain is trusted
429
+ */
430
+ export const isTrustedDomain = (domain) => {
431
+ return TRUSTED_DOMAINS.has(domain.toLowerCase());
432
+ };
433
+ //# sourceMappingURL=link-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-scanner.js","sourceRoot":"","sources":["../../src/Utils/link-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Baileys-Joss: Media Downloader
3
+ *
4
+ * Download semua media dari chat
5
+ */
6
+ import type { WAMessage } from '../Types/index.js';
7
+ export type DownloadMediaType = 'image' | 'video' | 'audio' | 'document' | 'sticker' | 'all';
8
+ export interface DownloadOptions {
9
+ /** Output directory */
10
+ outputDir: string;
11
+ /** Media types to download */
12
+ types?: DownloadMediaType[];
13
+ /** Create subfolder for each type */
14
+ createSubfolders?: boolean;
15
+ /** Custom filename template */
16
+ filenameTemplate?: string;
17
+ /** Skip existing files */
18
+ skipExisting?: boolean;
19
+ /** Maximum file size in bytes (0 = no limit) */
20
+ maxFileSize?: number;
21
+ /** Progress callback */
22
+ onProgress?: (current: number, total: number, filename: string) => void;
23
+ /** Error callback */
24
+ onError?: (message: WAMessage, error: Error) => void;
25
+ /** Delay between downloads in ms */
26
+ delay?: number;
27
+ }
28
+ export interface DownloadResult {
29
+ messageId: string;
30
+ type: DownloadMediaType;
31
+ filename: string;
32
+ filepath: string;
33
+ size: number;
34
+ success: boolean;
35
+ error?: string;
36
+ }
37
+ export interface DownloadSummary {
38
+ total: number;
39
+ successful: number;
40
+ failed: number;
41
+ skipped: number;
42
+ totalSize: number;
43
+ results: DownloadResult[];
44
+ startedAt: Date;
45
+ completedAt: Date;
46
+ }
47
+ /**
48
+ * Media Downloader
49
+ */
50
+ export declare class MediaDownloader {
51
+ private getMessage;
52
+ constructor(getMessage: (key: {
53
+ remoteJid: string;
54
+ id: string;
55
+ }) => Promise<WAMessage | undefined>);
56
+ /**
57
+ * Filter messages that have downloadable media
58
+ */
59
+ filterMediaMessages(messages: WAMessage[], types?: DownloadMediaType[]): WAMessage[];
60
+ /**
61
+ * Download media from a single message
62
+ */
63
+ downloadSingle(message: WAMessage, outputDir: string, options?: Omit<DownloadOptions, 'outputDir'>): Promise<DownloadResult>;
64
+ /**
65
+ * Download media from multiple messages
66
+ */
67
+ downloadMultiple(messages: WAMessage[], options: DownloadOptions): Promise<DownloadSummary>;
68
+ /**
69
+ * Download all media from a chat
70
+ */
71
+ downloadFromChat(jid: string, messages: WAMessage[], options: Omit<DownloadOptions, 'outputDir'> & {
72
+ outputDir?: string;
73
+ }): Promise<DownloadSummary>;
74
+ }
75
+ /**
76
+ * Create media downloader
77
+ */
78
+ export declare const createMediaDownloader: (getMessage: (key: {
79
+ remoteJid: string;
80
+ id: string;
81
+ }) => Promise<WAMessage | undefined>) => MediaDownloader;
82
+ /**
83
+ * Quick download helper
84
+ */
85
+ export declare const downloadAllMedia: (messages: WAMessage[], outputDir: string, options?: Omit<DownloadOptions, "outputDir">) => Promise<DownloadSummary>;
86
+ //# sourceMappingURL=media-downloader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-downloader.d.ts","sourceRoot":"","sources":["../../src/Utils/media-downloader.ts"],"names":[],"mappings":"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"}