@kangwifi-pro/waliwa 1.1.13 → 1.1.14

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 (70) hide show
  1. package/dist/core/client-payload.d.ts +30 -0
  2. package/dist/core/client-payload.d.ts.map +1 -0
  3. package/dist/core/client-payload.js +203 -0
  4. package/dist/core/client-payload.js.map +1 -0
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/socket/wa-socket.d.ts.map +1 -1
  8. package/dist/socket/wa-socket.js +3 -5
  9. package/dist/socket/wa-socket.js.map +1 -1
  10. package/dist/socket/ws-socket.d.ts +4 -1
  11. package/dist/socket/ws-socket.d.ts.map +1 -1
  12. package/dist/socket/ws-socket.js +21 -18
  13. package/dist/socket/ws-socket.js.map +1 -1
  14. package/package.json +16 -10
  15. package/proto/WAProto.proto +3344 -0
  16. package/docs/API.md +0 -745
  17. package/docs/ARCHITECTURE.md +0 -307
  18. package/docs/BAILEYS_FIXES.md +0 -360
  19. package/docs/COMMUNITY.md +0 -613
  20. package/docs/FEATURES.md +0 -532
  21. package/docs/PROTOCOL.md +0 -489
  22. package/docs/RECOVERY.md +0 -409
  23. package/docs/SKDM.md +0 -233
  24. package/examples/ai-bot/index.ts +0 -479
  25. package/examples/ai-bot/package.json +0 -17
  26. package/examples/echo-bot/index.ts +0 -171
  27. package/examples/echo-bot/package.json +0 -18
  28. package/examples/group-bot/index.ts +0 -557
  29. package/examples/group-bot/package.json +0 -17
  30. package/examples/rest-gateway/index.ts +0 -499
  31. package/examples/rest-gateway/package.json +0 -19
  32. package/src/advanced/features.ts +0 -817
  33. package/src/auth/auth-state.ts +0 -342
  34. package/src/auth/pairing-code.ts +0 -246
  35. package/src/auth/qr-code.ts +0 -191
  36. package/src/calls/handler.ts +0 -153
  37. package/src/community/audio-transcription.ts +0 -121
  38. package/src/community/bulk-operations.ts +0 -329
  39. package/src/community/community-fixes.ts +0 -771
  40. package/src/community/contacts-manager.ts +0 -282
  41. package/src/community/disappearing.ts +0 -218
  42. package/src/community/index.ts +0 -169
  43. package/src/community/live-location.ts +0 -287
  44. package/src/community/message-extras.ts +0 -523
  45. package/src/community/newsletter-extended.ts +0 -614
  46. package/src/community/privacy-manager.ts +0 -310
  47. package/src/community/profile-manager.ts +0 -402
  48. package/src/community/status-extended.ts +0 -518
  49. package/src/community/sticker-manager.ts +0 -305
  50. package/src/core/binary.ts +0 -464
  51. package/src/core/crypto.ts +0 -197
  52. package/src/core/noise.ts +0 -421
  53. package/src/events/emitter.ts +0 -88
  54. package/src/features/index.ts +0 -921
  55. package/src/fixes/index.ts +0 -882
  56. package/src/groups/management.ts +0 -497
  57. package/src/index.ts +0 -339
  58. package/src/messages/media.ts +0 -372
  59. package/src/messages/message-encoder.ts +0 -520
  60. package/src/messages/send.ts +0 -521
  61. package/src/recovery/index.ts +0 -704
  62. package/src/skdm/index.ts +0 -693
  63. package/src/socket/hybrid.ts +0 -414
  64. package/src/socket/wa-socket.ts +0 -1735
  65. package/src/socket/ws-socket.ts +0 -486
  66. package/src/types/index.ts +0 -457
  67. package/src/utils/jid.ts +0 -156
  68. package/src/utils/logger.ts +0 -84
  69. package/src/utils/retry.ts +0 -205
  70. package/tsconfig.json +0 -30
package/docs/COMMUNITY.md DELETED
@@ -1,613 +0,0 @@
1
- # Community Features & Fixes (v1.1.0)
2
-
3
- Module `community/` berisi fitur-fitur yang sering diminta komunitas Baileys + fix untuk issue-issue yang dilaporkan.
4
-
5
- ## 📋 Daftar Lengkap
6
-
7
- ### Fitur Baru (10 managers)
8
-
9
- #### 1. ProfileManager (`sock.profileManager`)
10
- Update profile picture, about text, display name. Get profile info dengan caching.
11
-
12
- **Fix issues:**
13
- - Baileys: profile picture URL tidak bisa didapat
14
- - Baileys: about text tidak bisa di-get
15
- - Baileys: business account detection missing
16
-
17
- ```typescript
18
- // Update profile picture
19
- await sock.profileManager.updateProfilePicture(jid, imageBuffer);
20
-
21
- // Update about text
22
- await sock.profileManager.updateAbout("Hey there! I'm using Waliwa");
23
-
24
- // Update display name
25
- await sock.profileManager.updateName("My Name");
26
-
27
- // Get profile info (cached)
28
- const info = await sock.profileManager.getProfileInfo(jid);
29
- console.log(info.name, info.about, info.profilePictureUrl, info.isBusiness);
30
-
31
- // Download profile picture
32
- await sock.profileManager.downloadProfilePicture(jid, './profile.jpg');
33
- ```
34
-
35
- #### 2. PrivacyManager (`sock.privacyManager`)
36
- Block/unblock users, privacy settings (last seen, profile photo, about, status, read receipts).
37
-
38
- **Fix issues:**
39
- - Baileys: block/unblock tidak ada
40
- - Baileys: privacy settings tidak bisa diubah
41
-
42
- ```typescript
43
- // Block/unblock
44
- await sock.privacyManager.block('user@s.whatsapp.net');
45
- await sock.privacyManager.unblock('user@s.whatsapp.net');
46
-
47
- // Get blocklist
48
- const blocked = await sock.privacyManager.getBlocklist();
49
-
50
- // Set privacy settings
51
- await sock.privacyManager.setLastSeenPrivacy('contacts'); // all | contacts | contact_blacklist | none
52
- await sock.privacyManager.setProfilePhotoPrivacy('contacts');
53
- await sock.privacyManager.setAboutPrivacy('contacts');
54
- await sock.privacyManager.setStatusPrivacy('contacts');
55
- await sock.privacyManager.setReadReceiptsPrivacy('none'); // Disable blue ticks
56
-
57
- // Get current privacy
58
- const privacy = await sock.privacyManager.getPrivacySettings();
59
- ```
60
-
61
- #### 3. NewsletterManagerExtended (`sock.newsletterManager`)
62
- Full newsletter support - create, post, mute, metadata, subscribers, verification.
63
-
64
- **Fix issues:**
65
- - Baileys: newsletter support sangat terbatas
66
- - Baileys: newsletter mute tidak ada
67
- - Baileys: subscriber count tidak bisa di-get
68
-
69
- ```typescript
70
- // Create newsletter
71
- const nl = await sock.newsletterManager.create('My Channel', 'Description');
72
-
73
- // Subscribe/unsubscribe
74
- await sock.newsletterManager.subscribe(nl.id);
75
- await sock.newsletterManager.unsubscribe(nl.id);
76
-
77
- // Mute/unmute
78
- await sock.newsletterManager.mute(nl.id);
79
- await sock.newsletterManager.unmute(nl.id);
80
-
81
- // Get metadata (subscriber count, verification, dll)
82
- const meta = await sock.newsletterManager.getMetadata(nl.id);
83
- console.log(meta.subscribersCount, meta.verification, meta.isOwner);
84
-
85
- // Post to newsletter
86
- await sock.newsletterManager.postText(nl.id, 'Hello channel!');
87
- await sock.newsletterManager.postMedia(nl.id, 'image', 'https://...', 'caption');
88
-
89
- // React to post
90
- await sock.newsletterManager.reactToPost(nl.id, postId, '👍');
91
-
92
- // Get posts
93
- const posts = await sock.newsletterManager.getPosts(nl.id, 20);
94
-
95
- // Admin: mute user
96
- await sock.newsletterManager.muteUser(nl.id, userJid, 3600000);
97
-
98
- // Owner: transfer ownership
99
- await sock.newsletterManager.transferOwnership(nl.id, newOwnerJid);
100
-
101
- // Delete newsletter
102
- await sock.newsletterManager.delete(nl.id);
103
- ```
104
-
105
- #### 4. StatusExtended (`sock.statusManager`)
106
- Status/Stories reply, view tracking, privacy settings, album upload.
107
-
108
- **Fix issues:**
109
- - Baileys: status reply tidak support
110
- - Baileys: status view tracking missing
111
- - Baileys: status privacy settings tidak ada
112
-
113
- ```typescript
114
- // Reply ke status
115
- await sock.statusManager.replyToStatus(authorJid, statusId, 'Nice status!');
116
-
117
- // React to status
118
- await sock.statusManager.reactToStatus(authorJid, statusId, '❤️');
119
-
120
- // Get who viewed your status
121
- const views = await sock.statusManager.getStatusViews(statusId);
122
- console.log(`${views.length} people viewed your status`);
123
-
124
- // Get recent statuses dari contacts
125
- const statuses = await sock.statusManager.getRecentStatuses(50);
126
-
127
- // Upload text status with background
128
- await sock.statusManager.sendTextStatus('Hello!', { backgroundColor: '#FF0000' });
129
-
130
- // Upload status album (multiple items sekaligus)
131
- await sock.statusManager.sendStatusAlbum([
132
- { type: 'image', mediaUrl: 'https://...', caption: 'Photo 1' },
133
- { type: 'text', text: 'Caption', backgroundColor: '#0000FF' },
134
- { type: 'video', mediaUrl: 'https://...' }
135
- ]);
136
-
137
- // Get/Set status privacy
138
- const privacy = await sock.statusManager.getPrivacy();
139
- await sock.statusManager.setPrivacy({
140
- whoCanSee: 'whitelist',
141
- whitelist: ['user1@s.whatsapp.net', 'user2@s.whatsapp.net']
142
- });
143
-
144
- // Forward status to contacts
145
- await sock.statusManager.forwardStatus(authorJid, statusId, [user1, user2]);
146
-
147
- // Mark status as seen
148
- await sock.statusManager.markAsSeen(authorJid, [statusId1, statusId2]);
149
-
150
- // Delete own status
151
- await sock.statusManager.deleteStatus(statusId);
152
- ```
153
-
154
- #### 5. ContactsManager (`sock.contactsManager`)
155
- Sync contacts, check if registered, search.
156
-
157
- **Fix issues:**
158
- - Baileys: contact sync tidak reliable
159
- - Baileys: tidak bisa check jika nomor terdaftar di WhatsApp
160
-
161
- ```typescript
162
- // Sync multiple contacts (check if registered)
163
- const contacts = await sock.contactsManager.syncContacts([
164
- '6281234567890',
165
- '6289876543210',
166
- '621234567890'
167
- ]);
168
-
169
- for (const [phone, info] of contacts.entries()) {
170
- console.log(`${phone}: ${info.isRegistered ? '✓ registered' : '✗ not registered'}`);
171
- }
172
-
173
- // Check single number
174
- const isRegistered = await sock.contactsManager.checkRegistered('6281234567890');
175
-
176
- // Get contact info
177
- const info = await sock.contactsManager.getContactInfo('6281234567890');
178
-
179
- // Search contacts by name/number
180
- const results = sock.contactsManager.searchContacts('John', 20);
181
-
182
- // Get all cached contacts
183
- const all = sock.contactsManager.getAllContacts();
184
- ```
185
-
186
- #### 6. BulkOperations (`sock.bulkOps`)
187
- Bulk send, broadcast, album send dengan rate limiting.
188
-
189
- **Fix issues:**
190
- - Baileys: bulk send tidak ada
191
- - Baileys: broadcast tidak ada delay control
192
- - Baileys: multi-file send tidak support
193
-
194
- ```typescript
195
- // Bulk send multiple messages dengan delay
196
- const items = [
197
- { jid: 'user1@s.whatsapp.net', content: { text: 'Hello 1' } },
198
- { jid: 'user2@s.whatsapp.net', content: { text: 'Hello 2' } },
199
- { jid: 'user3@s.whatsapp.net', content: { text: 'Hello 3' } }
200
- ];
201
-
202
- const results = await sock.bulkOps.bulkSend(items, {
203
- delayMs: 1000, // 1s delay between sends
204
- concurrency: 5, // Max 5 concurrent
205
- stopOnError: false, // Continue on failure
206
- onProgress: (current, total) => console.log(`${current}/${total}`)
207
- });
208
-
209
- // Broadcast same message to multiple recipients
210
- await sock.bulkOps.broadcast(
211
- { text: 'Announcement!' },
212
- ['user1@s.whatsapp.net', 'user2@s.whatsapp.net'],
213
- { delayMs: 2000 }
214
- );
215
-
216
- // Send album (multiple media files)
217
- await sock.bulkOps.sendAlbum(jid, [
218
- { type: 'image', stream: image1, mimetype: 'image/jpeg', caption: 'Photo 1' },
219
- { type: 'image', stream: image2, mimetype: 'image/jpeg', caption: 'Photo 2' },
220
- { type: 'video', stream: video, mimetype: 'video/mp4' }
221
- ]);
222
-
223
- // Send with retry
224
- const result = await sock.bulkOps.sendWithRetry(jid, content, 3, 2000);
225
- ```
226
-
227
- #### 7. MessageExtras (`sock.messageExtras`)
228
- Edit message, star/unstar, pin, view-once download, message info.
229
-
230
- **Fix issues:**
231
- - Baileys: edit message tidak support
232
- - Baileys: star messages tidak ada
233
- - Baileys: view once media tidak bisa didownload
234
- - Baileys: message read/delivery info missing
235
-
236
- ```typescript
237
- // Edit message yang sudah dikirim
238
- await sock.messageExtras.editMessage(jid, key, 'Edited text');
239
-
240
- // Star/unstar message
241
- await sock.messageExtras.starMessage(key, true); // star
242
- await sock.messageExtras.starMessage(key, false); // unstar
243
-
244
- // Get starred messages in a chat
245
- const starred = await sock.messageExtras.getStarredMessages(jid, 50);
246
-
247
- // Pin message in chat
248
- await sock.messageExtras.pinMessage(key, 24 * 60 * 60 * 1000); // pin for 24h
249
- await sock.messageExtras.unpinMessage(key);
250
-
251
- // Mark chat as unread
252
- await sock.messageExtras.markChatAsUnread(jid);
253
-
254
- // Get message info (read by, delivered to)
255
- const info = await sock.messageExtras.getMessageInfo(key);
256
- console.log('Status:', info.status);
257
- console.log('Delivered to:', info.deliveredTo);
258
- console.log('Read by:', info.readBy);
259
- console.log('Played by:', info.playedBy);
260
-
261
- // Download view-once media (bypass protection)
262
- const buffer = await sock.messageExtras.downloadViewOnceMedia(message);
263
-
264
- // Remove reaction
265
- await sock.messageExtras.removeReaction(key);
266
-
267
- // Forward with additional context
268
- await sock.messageExtras.forwardWithContext(toJid, originalMessage, 'Check this out!');
269
- ```
270
-
271
- #### 8. DisappearingManager (`sock.disappearingManager`)
272
- Set disappearing messages timer per chat.
273
-
274
- **Fix issues:**
275
- - Baileys: disappearing messages control tidak ada
276
- - Baileys: tidak bisa set timer per chat
277
-
278
- ```typescript
279
- // Set timer for a chat
280
- await sock.disappearingManager.setTimer(jid, '24_hours');
281
- await sock.disappearingManager.setTimer(jid, '7_days');
282
- await sock.disappearingManager.setTimer(jid, '90_days');
283
- await sock.disappearingManager.setTimer(jid, 'off'); // disable
284
-
285
- // Get current setting
286
- const timer = await sock.disappearingManager.getSetting(jid);
287
-
288
- // Set default timer untuk new chats
289
- await sock.disappearingManager.setDefaultTimer('7_days');
290
-
291
- // Get all chats with disappearing enabled
292
- const chats = sock.disappearingManager.getDisappearingChats();
293
- ```
294
-
295
- #### 9. LiveLocationManager (`sock.liveLocationManager`)
296
- Share live location dengan real-time updates.
297
-
298
- **Fix issues:**
299
- - Baileys: live location tidak support
300
- - Baileys: tidak bisa stop live location
301
-
302
- ```typescript
303
- // Start sharing live location
304
- await sock.liveLocationManager.startSharing(jid, {
305
- latitude: -6.2088,
306
- longitude: 106.8456,
307
- accuracy: 10,
308
- speed: 0,
309
- heading: 180,
310
- altitude: 50,
311
- expiration: 3600, // 1 hour
312
- caption: 'On my way!'
313
- });
314
-
315
- // Update location
316
- await sock.liveLocationManager.updateLocation(jid, {
317
- latitude: -6.2090,
318
- longitude: 106.8460
319
- });
320
-
321
- // Stop sharing
322
- await sock.liveLocationManager.stopSharing(jid);
323
-
324
- // Stop all active sharing
325
- await sock.liveLocationManager.stopAllSharing();
326
-
327
- // Send static location (non-live)
328
- await sock.liveLocationManager.sendStaticLocation(jid, -6.2088, 106.8456, {
329
- name: 'Jakarta',
330
- address: 'Indonesia'
331
- });
332
-
333
- // Parse incoming live location
334
- const loc = sock.liveLocationManager.parseLiveLocationMessage(message);
335
- ```
336
-
337
- #### 10. StickerManager (`sock.stickerManager`)
338
- Create dan send custom stickers, sticker packs.
339
-
340
- **Fix issues:**
341
- - Baileys: custom sticker support kurang
342
- - Baileys: sticker pack tidak support
343
-
344
- ```typescript
345
- // Send sticker dari image buffer (WebP format)
346
- await sock.stickerManager.sendSticker(jid, webpBuffer, {
347
- packName: 'My Pack',
348
- author: 'Me',
349
- emojis: ['😀'],
350
- isAnimated: false
351
- });
352
-
353
- // Create sticker pack dari multiple images
354
- const pack = await sock.stickerManager.createStickerPack(
355
- 'My Sticker Pack',
356
- 'Author Name',
357
- [
358
- { buffer: webp1, emojis: ['😀'] },
359
- { buffer: webp2, emojis: ['😂'], isAnimated: true },
360
- { buffer: webp3, emojis: ['😍'] }
361
- ]
362
- );
363
-
364
- // Get sticker pack info
365
- const info = await sock.stickerManager.getStickerPack(pack.id);
366
-
367
- // Delete sticker pack
368
- await sock.stickerManager.deleteStickerPack(pack.id);
369
-
370
- // Favorite a sticker
371
- await sock.stickerManager.favoriteSticker(stickerId, fileSha256);
372
- ```
373
-
374
- #### 11. AudioTranscriptionManager
375
- Audio transcription dengan pluggable provider (Whisper, Google, dll).
376
-
377
- ```typescript
378
- import { AudioTranscriptionManager } from '@kangwifi-pro/waliwa';
379
-
380
- const atm = new AudioTranscriptionManager();
381
-
382
- // Use Whisper API
383
- atm.setProvider(AudioTranscriptionManager.whisperProvider(process.env.OPENAI_API_KEY));
384
-
385
- // Transcribe audio
386
- const result = await atm.transcribe(audioBuffer, 'audio/ogg', 'audio-msg-123');
387
- console.log(result.text); // "Hello, this is a voice message"
388
- ```
389
-
390
- ---
391
-
392
- ### Fixes (7 trackers)
393
-
394
- #### 1. TypingIndicatorTracker (`sock.typingTracker`)
395
- Reliable typing indicator dengan auto-timeout.
396
-
397
- **Fix:** Baileys issue - typing indicator tidak reliable
398
-
399
- ```typescript
400
- sock.typingTracker.on('typing:start', ({ jid, type, timestamp }) => {
401
- console.log(`${jid} is ${type}...`);
402
- });
403
-
404
- sock.typingTracker.on('typing:stop', ({ jid, reason }) => {
405
- console.log(`${jid} stopped typing (${reason})`);
406
- });
407
-
408
- // Manual check
409
- if (sock.typingTracker.isTyping('user@s.whatsapp.net')) {
410
- console.log('User is typing');
411
- }
412
-
413
- // Get all currently typing users
414
- const typing = sock.typingTracker.getAllTyping();
415
- ```
416
-
417
- #### 2. LastSeenTracker (`sock.lastSeenTracker`)
418
- Track last seen timestamps.
419
-
420
- **Fix:** Baileys issue - last seen tidak bisa di-get
421
-
422
- ```typescript
423
- // Auto-updated dari presence events
424
- const lastSeen = sock.lastSeenTracker.getLastSeen('user@s.whatsapp.net');
425
- const isOnline = sock.lastSeenTracker.isOnline('user@s.whatsapp.net');
426
-
427
- // Formatted
428
- const formatted = sock.lastSeenTracker.getFormattedLastSeen('user@s.whatsapp.net');
429
- // "online now" | "5 minutes ago" | "2 hours ago" | "3 days ago"
430
- ```
431
-
432
- #### 3. MessageStatusTracker (`sock.messageStatusTracker`)
433
- Real-time message status tracking dengan detailed info.
434
-
435
- **Fix:** Baileys issue - message status tidak real-time
436
-
437
- ```typescript
438
- sock.messageStatusTracker.on('status:update', ({ key, status, timestamp }) => {
439
- console.log(`Message ${key.id}: ${status} at ${new Date(timestamp).toISOString()}`);
440
- });
441
-
442
- // Get detailed info
443
- const info = sock.messageStatusTracker.getStatusInfo(messageId);
444
- // { status: 'read', timestamp, deliveredTo: [...], readBy: [...] }
445
-
446
- // Find stuck messages (pending > 5 min)
447
- const stuck = sock.messageStatusTracker.getStuckMessages();
448
- ```
449
-
450
- #### 4. SelfMessageFilter (`sock.selfFilter`)
451
- Filter self messages otomatis.
452
-
453
- **Fix:** Baileys issue - self message detection missing
454
-
455
- ```typescript
456
- // Auto-set dari creds.me
457
- sock.selfFilter.setOwnJid('6281@s.whatsapp.net');
458
-
459
- // Check if message is from self
460
- const isSelf = sock.selfFilter.isSelfMessage(jid);
461
- const isSelfKey = sock.selfFilter.isSelfKey(message.key);
462
-
463
- // Filter batch
464
- const filtered = sock.selfFilter.filterSelfMessages(messages);
465
- ```
466
-
467
- #### 5. ChatStateManager (`sock.chatStateManager`)
468
- Reliable chat state persistence (archive, pin, mute).
469
-
470
- **Fix:** Baileys issue - archive/pin tidak reliable (lost on restart)
471
-
472
- ```typescript
473
- // Archive/unarchive
474
- sock.chatStateManager.archive(jid);
475
- sock.chatStateManager.unarchive(jid);
476
-
477
- // Pin/unpin (with optional duration)
478
- sock.chatStateManager.pin(jid, 7 * 24 * 60 * 60 * 1000); // pin for 7 days
479
- sock.chatStateManager.unpin(jid);
480
-
481
- // Mute/unmute
482
- sock.chatStateManager.mute(jid, 8 * 60 * 60 * 1000); // mute for 8 hours
483
- sock.chatStateManager.unmute(jid);
484
-
485
- // Mark as read/unread
486
- sock.chatStateManager.markAsRead(jid);
487
- sock.chatStateManager.markAsUnread(jid);
488
-
489
- // Get lists
490
- const archived = sock.chatStateManager.getArchivedChats();
491
- const pinned = sock.chatStateManager.getPinnedChats();
492
- const muted = sock.chatStateManager.getMutedChats();
493
-
494
- // Serialize untuk persistence
495
- const data = sock.chatStateManager.serialize();
496
- // Save to file/DB...
497
-
498
- // Restore on restart
499
- sock.chatStateManager.deserialize(savedData);
500
- ```
501
-
502
- #### 6. DeviceInfoTracker (`sock.deviceInfoTracker`)
503
- Battery status dan device info tracking.
504
-
505
- **Fix:** Baileys issue - battery status tidak terdeteksi, phone info tidak bisa di-get
506
-
507
- ```typescript
508
- sock.deviceInfoTracker.on('battery:update', ({ level, isCharging }) => {
509
- console.log(`Battery: ${level}% ${isCharging ? '⚡' : ''}`);
510
- });
511
-
512
- sock.deviceInfoTracker.on('battery:low', ({ level }) => {
513
- console.warn(`⚠️ Battery low: ${level}%`);
514
- });
515
-
516
- // Manual check
517
- const level = sock.deviceInfoTracker.getBatteryLevel();
518
- const isCharging = sock.deviceInfoTracker.isDeviceCharging();
519
- const deviceInfo = sock.deviceInfoTracker.getDeviceInfo();
520
- ```
521
-
522
- #### 7. GroupEventsTracker (`sock.groupEventsTracker`)
523
- Detect group changes (subject, description, announce, restrict, participant count).
524
-
525
- **Fix:** Baileys issue - group subject/description/announce changes tidak terdeteksi
526
-
527
- ```typescript
528
- sock.groupEventsTracker.on('group:subject_change', ({ groupJid, oldSubject, newSubject }) => {
529
- console.log(`Group ${groupJid}: ${oldSubject} -> ${newSubject}`);
530
- });
531
-
532
- sock.groupEventsTracker.on('group:description_change', ({ groupJid, oldDescription, newDescription }) => {
533
- console.log(`Group ${groupJid} description changed`);
534
- });
535
-
536
- sock.groupEventsTracker.on('group:announce_change', ({ groupJid, announce }) => {
537
- console.log(`Group ${groupJid} ${announce ? 'now admins only' : 'all can send'}`);
538
- });
539
-
540
- sock.groupEventsTracker.on('group:restrict_change', ({ groupJid, restrict }) => {
541
- console.log(`Group ${groupJid} ${restrict ? 'now restricted' : 'now open'}`);
542
- });
543
-
544
- sock.groupEventsTracker.on('group:participant_count_change', ({ groupJid, oldCount, newCount }) => {
545
- console.log(`Group ${groupJid}: ${oldCount} -> ${newCount} participants`);
546
- });
547
- ```
548
-
549
- ---
550
-
551
- ### Helper Functions
552
-
553
- #### parseGroupInviteInfo
554
- Parse info dari group invite link.
555
-
556
- ```typescript
557
- import { parseGroupInviteInfo } from '@kangwifi-pro/waliwa';
558
-
559
- // Get info dari invite link (returns GroupInviteInfo)
560
- const info = parseGroupInviteInfo(responseNode);
561
- // { code, groupJid, subject, description, participantsCount, isCommunity, ... }
562
- ```
563
-
564
- #### detectLanguageFromText
565
- Detect language dari text.
566
-
567
- ```typescript
568
- import { detectLanguageFromText } from '@kangwifi-pro/waliwa';
569
-
570
- detectLanguageFromText('Hello world'); // 'en'
571
- detectLanguageFromText('こんにちは'); // 'ja'
572
- detectLanguageFromText('مرحبا'); // 'ar'
573
- detectLanguageFromText('你好'); // 'zh'
574
- ```
575
-
576
- ---
577
-
578
- ## Ringkasan Perbaikan Issue Baileys
579
-
580
- | Issue Baileys | Fix | Module |
581
- |--------------|-----|--------|
582
- | Profile picture URL tidak bisa didapat | ProfileManager.fetchProfilePictureUrl | profile-manager |
583
- | About text tidak bisa di-get | ProfileManager.fetchAbout | profile-manager |
584
- | Business account detection missing | ProfileManager.checkBusinessAccount | profile-manager |
585
- | Block/unblock tidak ada | PrivacyManager.block/unblock | privacy-manager |
586
- | Privacy settings tidak bisa diubah | PrivacyManager.setPrivacy | privacy-manager |
587
- | Newsletter support terbatas | NewsletterManagerExtended (10 methods) | newsletter-extended |
588
- | Status reply tidak support | StatusExtended.replyToStatus | status-extended |
589
- | Status view tracking missing | StatusExtended.getStatusViews | status-extended |
590
- | Status privacy settings tidak ada | StatusExtended.getPrivacy/setPrivacy | status-extended |
591
- | Contact sync tidak reliable | ContactsManager.syncContacts | contacts-manager |
592
- | Tidak bisa check nomor terdaftar | ContactsManager.checkRegistered | contacts-manager |
593
- | Bulk send tidak ada | BulkOperations.bulkSend | bulk-operations |
594
- | Multi-file send tidak support | BulkOperations.sendAlbum | bulk-operations |
595
- | Edit message tidak support | MessageExtras.editMessage | message-extras |
596
- | Star messages tidak ada | MessageExtras.starMessage | message-extras |
597
- | View once media tidak bisa didownload | MessageExtras.downloadViewOnceMedia | message-extras |
598
- | Message read/delivery info missing | MessageExtras.getMessageInfo | message-extras |
599
- | Disappearing messages control tidak ada | DisappearingManager.setTimer | disappearing |
600
- | Live location tidak support | LiveLocationManager.startSharing | live-location |
601
- | Custom sticker support kurang | StickerManager.sendSticker | sticker-manager |
602
- | Sticker pack tidak support | StickerManager.createStickerPack | sticker-manager |
603
- | Typing indicator tidak reliable | TypingIndicatorTracker | community-fixes |
604
- | Last seen tidak bisa di-get | LastSeenTracker | community-fixes |
605
- | Message status tidak real-time | MessageStatusTracker | community-fixes |
606
- | Self message detection missing | SelfMessageFilter | community-fixes |
607
- | Archive/pin tidak reliable | ChatStateManager | community-fixes |
608
- | Battery status tidak terdeteksi | DeviceInfoTracker | community-fixes |
609
- | Phone info tidak bisa di-get | DeviceInfoTracker | community-fixes |
610
- | Group changes tidak terdeteksi | GroupEventsTracker | community-fixes |
611
- | Group invite link info tidak support | parseGroupInviteInfo | community-fixes |
612
-
613
- **Total: 28+ issue Baileys di-fix di v1.1.0**