@kangwifi-pro/waliwa 1.0.2 → 1.1.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 (76) hide show
  1. package/dist/community/audio-transcription.d.ts +46 -0
  2. package/dist/community/audio-transcription.d.ts.map +1 -0
  3. package/dist/community/audio-transcription.js +108 -0
  4. package/dist/community/audio-transcription.js.map +1 -0
  5. package/dist/community/bulk-operations.d.ts +87 -0
  6. package/dist/community/bulk-operations.d.ts.map +1 -0
  7. package/dist/community/bulk-operations.js +223 -0
  8. package/dist/community/bulk-operations.js.map +1 -0
  9. package/dist/community/community-fixes.d.ts +306 -0
  10. package/dist/community/community-fixes.d.ts.map +1 -0
  11. package/dist/community/community-fixes.js +630 -0
  12. package/dist/community/community-fixes.js.map +1 -0
  13. package/dist/community/contacts-manager.d.ts +89 -0
  14. package/dist/community/contacts-manager.d.ts.map +1 -0
  15. package/dist/community/contacts-manager.js +241 -0
  16. package/dist/community/contacts-manager.js.map +1 -0
  17. package/dist/community/disappearing.d.ts +63 -0
  18. package/dist/community/disappearing.d.ts.map +1 -0
  19. package/dist/community/disappearing.js +195 -0
  20. package/dist/community/disappearing.js.map +1 -0
  21. package/dist/community/index.d.ts +101 -0
  22. package/dist/community/index.d.ts.map +1 -0
  23. package/dist/community/index.js +113 -0
  24. package/dist/community/index.js.map +1 -0
  25. package/dist/community/live-location.d.ts +85 -0
  26. package/dist/community/live-location.d.ts.map +1 -0
  27. package/dist/community/live-location.js +238 -0
  28. package/dist/community/live-location.js.map +1 -0
  29. package/dist/community/message-extras.d.ts +110 -0
  30. package/dist/community/message-extras.d.ts.map +1 -0
  31. package/dist/community/message-extras.js +472 -0
  32. package/dist/community/message-extras.js.map +1 -0
  33. package/dist/community/newsletter-extended.d.ts +142 -0
  34. package/dist/community/newsletter-extended.d.ts.map +1 -0
  35. package/dist/community/newsletter-extended.js +543 -0
  36. package/dist/community/newsletter-extended.js.map +1 -0
  37. package/dist/community/privacy-manager.d.ts +98 -0
  38. package/dist/community/privacy-manager.d.ts.map +1 -0
  39. package/dist/community/privacy-manager.js +273 -0
  40. package/dist/community/privacy-manager.js.map +1 -0
  41. package/dist/community/profile-manager.d.ts +94 -0
  42. package/dist/community/profile-manager.d.ts.map +1 -0
  43. package/dist/community/profile-manager.js +363 -0
  44. package/dist/community/profile-manager.js.map +1 -0
  45. package/dist/community/status-extended.d.ts +119 -0
  46. package/dist/community/status-extended.d.ts.map +1 -0
  47. package/dist/community/status-extended.js +444 -0
  48. package/dist/community/status-extended.js.map +1 -0
  49. package/dist/community/sticker-manager.d.ts +73 -0
  50. package/dist/community/sticker-manager.d.ts.map +1 -0
  51. package/dist/community/sticker-manager.js +251 -0
  52. package/dist/community/sticker-manager.js.map +1 -0
  53. package/dist/index.d.ts +4 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +33 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/socket/wa-socket.d.ts +77 -0
  58. package/dist/socket/wa-socket.d.ts.map +1 -1
  59. package/dist/socket/wa-socket.js +149 -3
  60. package/dist/socket/wa-socket.js.map +1 -1
  61. package/package.json +2 -2
  62. package/src/community/audio-transcription.ts +121 -0
  63. package/src/community/bulk-operations.ts +329 -0
  64. package/src/community/community-fixes.ts +771 -0
  65. package/src/community/contacts-manager.ts +282 -0
  66. package/src/community/disappearing.ts +218 -0
  67. package/src/community/index.ts +169 -0
  68. package/src/community/live-location.ts +287 -0
  69. package/src/community/message-extras.ts +523 -0
  70. package/src/community/newsletter-extended.ts +614 -0
  71. package/src/community/privacy-manager.ts +310 -0
  72. package/src/community/profile-manager.ts +402 -0
  73. package/src/community/status-extended.ts +518 -0
  74. package/src/community/sticker-manager.ts +305 -0
  75. package/src/index.ts +67 -2
  76. package/src/socket/wa-socket.ts +183 -4
@@ -0,0 +1,630 @@
1
+ "use strict";
2
+ /**
3
+ * Waliwa - Community Fixes (Community Request)
4
+ *
5
+ * Fix issues yang sering dikeluhkan komunitas Baileys:
6
+ *
7
+ * 1. Message status tidak real-time → Polling fix dengan proper event emission
8
+ * 2. Read receipts tidak reliable → Retry queue + persistent tracking
9
+ * 3. Group description update tidak terdeteksi → Event emission
10
+ * 4. Self message detection → Skip self messages
11
+ * 5. Archive/unarchive tidak reliable → Persist state + verify
12
+ * 6. Chat pin tidak reliable → Persist state + verify
13
+ * 7. Last seen tidak bisa di-get → Presence subscription tracker
14
+ * 8. Battery status tidak terdeteksi → Battery event handler
15
+ * 9. Phone info tidak bisa di-get → Device info fetch
16
+ * 10. Typing indicator tidak reliable → Track per chat
17
+ * 11. Reconnect loses pending messages → Message recovery
18
+ * 12. Group subject change tidak terdeteksi → Event emission
19
+ * 13. Group announce mode change → Event emission
20
+ * 14. Blocklist tidak sync → Sync on connect
21
+ * 15. Contact presence tidak reliable → Periodic refresh
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.GroupEventsTracker = exports.DeviceInfoTracker = exports.ChatStateManager = exports.SelfMessageFilter = exports.MessageStatusTracker = exports.LastSeenTracker = exports.TypingIndicatorTracker = void 0;
25
+ exports.parseGroupInviteInfo = parseGroupInviteInfo;
26
+ const events_1 = require("events");
27
+ const jid_js_1 = require("../utils/jid.js");
28
+ const logger_js_1 = require("../utils/logger.js");
29
+ const index_js_1 = require("../skdm/index.js");
30
+ // ============== Typing Indicator Tracker ==============
31
+ /**
32
+ * Track typing indicator per chat
33
+ * Fix Baileys issue: typing indicator tidak reliable
34
+ */
35
+ class TypingIndicatorTracker extends events_1.EventEmitter {
36
+ typingUsers = new Map();
37
+ typingTimeouts = new Map();
38
+ logger;
39
+ timeoutMs = 10000; // 10s default typing timeout
40
+ constructor(logger) {
41
+ super();
42
+ this.logger = logger ?? new logger_js_1.SilentLogger();
43
+ }
44
+ /**
45
+ * Update typing status untuk a user
46
+ */
47
+ updateTyping(jid, type) {
48
+ const existing = this.typingUsers.get(jid);
49
+ const isTyping = type === 'composing';
50
+ const isRecording = type === 'recording';
51
+ // Clear existing timeout
52
+ const existingTimeout = this.typingTimeouts.get(jid);
53
+ if (existingTimeout) {
54
+ clearTimeout(existingTimeout);
55
+ }
56
+ if (type === 'paused') {
57
+ this.typingUsers.delete(jid);
58
+ this.typingTimeouts.delete(jid);
59
+ this.emit('typing:stop', { jid, timestamp: Date.now() });
60
+ return;
61
+ }
62
+ this.typingUsers.set(jid, {
63
+ jid,
64
+ isTyping,
65
+ isRecording,
66
+ timestamp: Date.now()
67
+ });
68
+ this.emit('typing:start', { jid, type, timestamp: Date.now() });
69
+ // Auto-timeout
70
+ const timeout = setTimeout(() => {
71
+ this.typingUsers.delete(jid);
72
+ this.typingTimeouts.delete(jid);
73
+ this.emit('typing:stop', { jid, timestamp: Date.now(), reason: 'timeout' });
74
+ }, this.timeoutMs);
75
+ this.typingTimeouts.set(jid, timeout);
76
+ }
77
+ /**
78
+ * Check if user is typing
79
+ */
80
+ isTyping(jid) {
81
+ return this.typingUsers.get(jid)?.isTyping ?? false;
82
+ }
83
+ /**
84
+ * Check if user is recording voice
85
+ */
86
+ isRecording(jid) {
87
+ return this.typingUsers.get(jid)?.isRecording ?? false;
88
+ }
89
+ /**
90
+ * Get all users currently typing
91
+ */
92
+ getAllTyping() {
93
+ return Array.from(this.typingUsers.values())
94
+ .filter(u => u.isTyping || u.isRecording)
95
+ .map(u => ({
96
+ jid: u.jid,
97
+ type: u.isRecording ? 'recording' : 'composing',
98
+ timestamp: u.timestamp
99
+ }));
100
+ }
101
+ destroy() {
102
+ for (const timeout of this.typingTimeouts.values()) {
103
+ clearTimeout(timeout);
104
+ }
105
+ this.typingTimeouts.clear();
106
+ this.typingUsers.clear();
107
+ }
108
+ }
109
+ exports.TypingIndicatorTracker = TypingIndicatorTracker;
110
+ // ============== Last Seen Tracker ==============
111
+ /**
112
+ * Track last seen untuk users
113
+ * Fix Baileys issue: last seen tidak bisa di-get
114
+ */
115
+ class LastSeenTracker {
116
+ lastSeen;
117
+ available;
118
+ logger;
119
+ constructor(logger) {
120
+ this.logger = logger ?? new logger_js_1.SilentLogger();
121
+ this.lastSeen = new index_js_1.LRUCache(1000);
122
+ this.available = new index_js_1.LRUCache(1000);
123
+ }
124
+ /**
125
+ * Update last seen untuk user
126
+ */
127
+ update(jid, timestamp, isAvailable = false) {
128
+ this.lastSeen.set(jid, timestamp);
129
+ this.available.set(jid, isAvailable);
130
+ if (isAvailable) {
131
+ this.logger.debug(`${jid} is now online`);
132
+ }
133
+ else {
134
+ this.logger.debug(`${jid} last seen: ${new Date(timestamp).toISOString()}`);
135
+ }
136
+ }
137
+ /**
138
+ * Get last seen untuk user
139
+ */
140
+ getLastSeen(jid) {
141
+ return this.lastSeen.get(jid);
142
+ }
143
+ /**
144
+ * Check if user is currently online
145
+ */
146
+ isOnline(jid) {
147
+ return this.available.get(jid) ?? false;
148
+ }
149
+ /**
150
+ * Get formatted last seen
151
+ */
152
+ getFormattedLastSeen(jid) {
153
+ const timestamp = this.lastSeen.get(jid);
154
+ if (!timestamp)
155
+ return 'unknown';
156
+ const isOnline = this.available.get(jid);
157
+ if (isOnline)
158
+ return 'online now';
159
+ const diffMs = Date.now() - timestamp;
160
+ const diffMins = Math.floor(diffMs / 60000);
161
+ const diffHours = Math.floor(diffMs / 3600000);
162
+ const diffDays = Math.floor(diffMs / 86400000);
163
+ if (diffMins < 1)
164
+ return 'just now';
165
+ if (diffMins < 60)
166
+ return `${diffMins} minutes ago`;
167
+ if (diffHours < 24)
168
+ return `${diffHours} hours ago`;
169
+ if (diffDays < 7)
170
+ return `${diffDays} days ago`;
171
+ return new Date(timestamp).toLocaleDateString();
172
+ }
173
+ clear() {
174
+ this.lastSeen.clear();
175
+ this.available.clear();
176
+ }
177
+ }
178
+ exports.LastSeenTracker = LastSeenTracker;
179
+ // ============== Message Status Tracker ==============
180
+ /**
181
+ * Track message status real-time
182
+ * Fix Baileys issue: message status tidak real-time
183
+ */
184
+ class MessageStatusTracker extends events_1.EventEmitter {
185
+ status = new Map();
186
+ logger;
187
+ retryQueue = new Map(); // messageId -> retry count
188
+ constructor(logger) {
189
+ super();
190
+ this.logger = logger ?? new logger_js_1.SilentLogger();
191
+ }
192
+ /**
193
+ * Update message status
194
+ */
195
+ updateStatus(key, status, recipient) {
196
+ const existing = this.status.get(key.id);
197
+ const timestamp = Date.now();
198
+ if (!existing) {
199
+ this.status.set(key.id, {
200
+ key,
201
+ status,
202
+ timestamp,
203
+ deliveredTo: status === 'delivered' || status === 'read' ? new Set(recipient ? [recipient] : []) : new Set(),
204
+ readBy: status === 'read' ? new Set(recipient ? [recipient] : []) : new Set()
205
+ });
206
+ }
207
+ else {
208
+ // Status priority: pending < sent < delivered < read < played
209
+ const priority = {
210
+ pending: 0,
211
+ sent: 1,
212
+ delivered: 2,
213
+ read: 3,
214
+ played: 4,
215
+ error: -1
216
+ };
217
+ if (priority[status] > priority[existing.status]) {
218
+ existing.status = status;
219
+ existing.timestamp = timestamp;
220
+ }
221
+ if (recipient) {
222
+ if (status === 'delivered')
223
+ existing.deliveredTo.add(recipient);
224
+ if (status === 'read')
225
+ existing.readBy.add(recipient);
226
+ }
227
+ }
228
+ this.emit('status:update', { key, status, timestamp, recipient });
229
+ this.logger.debug(`Message ${key.id} status: ${status}`);
230
+ }
231
+ /**
232
+ * Get message status
233
+ */
234
+ getStatus(messageId) {
235
+ return this.status.get(messageId)?.status;
236
+ }
237
+ /**
238
+ * Get detailed status info
239
+ */
240
+ getStatusInfo(messageId) {
241
+ const entry = this.status.get(messageId);
242
+ if (!entry)
243
+ return undefined;
244
+ return {
245
+ status: entry.status,
246
+ timestamp: entry.timestamp,
247
+ deliveredTo: Array.from(entry.deliveredTo),
248
+ readBy: Array.from(entry.readBy)
249
+ };
250
+ }
251
+ /**
252
+ * Mark message untuk retry (when status not updating)
253
+ */
254
+ markForRetry(messageId) {
255
+ const count = (this.retryQueue.get(messageId) ?? 0) + 1;
256
+ this.retryQueue.set(messageId, count);
257
+ return count;
258
+ }
259
+ /**
260
+ * Clear retry tracking
261
+ */
262
+ clearRetry(messageId) {
263
+ this.retryQueue.delete(messageId);
264
+ }
265
+ /**
266
+ * Get messages yang status-nya stuck (pending/sent > 5 minutes)
267
+ */
268
+ getStuckMessages(maxAgeMs = 5 * 60 * 1000) {
269
+ const now = Date.now();
270
+ const stuck = [];
271
+ for (const [id, entry] of this.status.entries()) {
272
+ if ((entry.status === 'pending' || entry.status === 'sent') &&
273
+ now - entry.timestamp > maxAgeMs) {
274
+ stuck.push(entry.key);
275
+ }
276
+ }
277
+ return stuck;
278
+ }
279
+ /**
280
+ * Clear old entries
281
+ */
282
+ cleanup(maxAgeMs = 24 * 60 * 60 * 1000) {
283
+ const now = Date.now();
284
+ let cleaned = 0;
285
+ for (const [id, entry] of this.status.entries()) {
286
+ if (now - entry.timestamp > maxAgeMs) {
287
+ this.status.delete(id);
288
+ cleaned++;
289
+ }
290
+ }
291
+ return cleaned;
292
+ }
293
+ size() {
294
+ return this.status.size;
295
+ }
296
+ }
297
+ exports.MessageStatusTracker = MessageStatusTracker;
298
+ // ============== Self Message Filter ==============
299
+ /**
300
+ * Filter self messages
301
+ * Fix Baileys issue: self message detection missing
302
+ */
303
+ class SelfMessageFilter {
304
+ ownJid = null;
305
+ ownJids = new Set(); // include device variants
306
+ setOwnJid(jid) {
307
+ this.ownJid = jid;
308
+ this.ownJids.add(jid);
309
+ // Also add device variants
310
+ const parsed = (0, jid_js_1.parseJid)(jid);
311
+ for (let device = 0; device < 10; device++) {
312
+ this.ownJids.add(`${parsed.user}:${device}@${parsed.server}`);
313
+ }
314
+ this.ownJids.add(`${parsed.user}@${parsed.server}`);
315
+ }
316
+ isSelfMessage(jid) {
317
+ if (!this.ownJid)
318
+ return false;
319
+ return this.ownJids.has((0, jid_js_1.jidToString)(jid));
320
+ }
321
+ isSelfKey(key) {
322
+ return key.fromMe || this.isSelfMessage(key.remoteJid);
323
+ }
324
+ filterSelfMessages(messages) {
325
+ return messages.filter(msg => !this.isSelfKey(msg.key));
326
+ }
327
+ getOwnJid() {
328
+ return this.ownJid;
329
+ }
330
+ }
331
+ exports.SelfMessageFilter = SelfMessageFilter;
332
+ class ChatStateManager {
333
+ states = new Map();
334
+ logger;
335
+ constructor(logger) {
336
+ this.logger = logger ?? new logger_js_1.SilentLogger();
337
+ }
338
+ /**
339
+ * Update chat state
340
+ */
341
+ updateState(jid, updates) {
342
+ const existing = this.states.get(jid) ?? {
343
+ jid,
344
+ isArchived: false,
345
+ isPinned: false,
346
+ isMuted: false,
347
+ isRead: true,
348
+ updatedAt: Date.now()
349
+ };
350
+ const updated = { ...existing, ...updates, updatedAt: Date.now() };
351
+ this.states.set(jid, updated);
352
+ return updated;
353
+ }
354
+ /**
355
+ * Get chat state
356
+ */
357
+ getState(jid) {
358
+ return this.states.get(jid);
359
+ }
360
+ /**
361
+ * Archive chat
362
+ */
363
+ archive(jid) {
364
+ this.updateState(jid, { isArchived: true });
365
+ }
366
+ /**
367
+ * Unarchive chat
368
+ */
369
+ unarchive(jid) {
370
+ this.updateState(jid, { isArchived: false });
371
+ }
372
+ /**
373
+ * Pin chat
374
+ */
375
+ pin(jid, durationMs) {
376
+ this.updateState(jid, {
377
+ isPinned: true,
378
+ pinExpiration: durationMs ? Date.now() + durationMs : undefined
379
+ });
380
+ }
381
+ /**
382
+ * Unpin chat
383
+ */
384
+ unpin(jid) {
385
+ this.updateState(jid, { isPinned: false, pinExpiration: undefined });
386
+ }
387
+ /**
388
+ * Mute chat
389
+ */
390
+ mute(jid, durationMs) {
391
+ this.updateState(jid, {
392
+ isMuted: true,
393
+ muteExpiration: durationMs ? Date.now() + durationMs : undefined
394
+ });
395
+ }
396
+ /**
397
+ * Unmute chat
398
+ */
399
+ unmute(jid) {
400
+ this.updateState(jid, { isMuted: false, muteExpiration: undefined });
401
+ }
402
+ /**
403
+ * Mark chat as read
404
+ */
405
+ markAsRead(jid) {
406
+ this.updateState(jid, { isRead: true });
407
+ }
408
+ /**
409
+ * Mark chat as unread
410
+ */
411
+ markAsUnread(jid) {
412
+ this.updateState(jid, { isRead: false });
413
+ }
414
+ /**
415
+ * Get all archived chats
416
+ */
417
+ getArchivedChats() {
418
+ return Array.from(this.states.values())
419
+ .filter(s => s.isArchived)
420
+ .map(s => s.jid);
421
+ }
422
+ /**
423
+ * Get all pinned chats
424
+ */
425
+ getPinnedChats() {
426
+ const now = Date.now();
427
+ return Array.from(this.states.values())
428
+ .filter(s => s.isPinned && (!s.pinExpiration || s.pinExpiration > now))
429
+ .map(s => s.jid);
430
+ }
431
+ /**
432
+ * Get all muted chats
433
+ */
434
+ getMutedChats() {
435
+ const now = Date.now();
436
+ return Array.from(this.states.values())
437
+ .filter(s => s.isMuted && (!s.muteExpiration || s.muteExpiration > now))
438
+ .map(s => s.jid);
439
+ }
440
+ /**
441
+ * Cleanup expired states
442
+ */
443
+ cleanup() {
444
+ const now = Date.now();
445
+ let cleaned = 0;
446
+ for (const [jid, state] of this.states.entries()) {
447
+ // Unpin expired
448
+ if (state.isPinned && state.pinExpiration && state.pinExpiration < now) {
449
+ state.isPinned = false;
450
+ state.pinExpiration = undefined;
451
+ cleaned++;
452
+ }
453
+ // Unmute expired
454
+ if (state.isMuted && state.muteExpiration && state.muteExpiration < now) {
455
+ state.isMuted = false;
456
+ state.muteExpiration = undefined;
457
+ cleaned++;
458
+ }
459
+ }
460
+ return cleaned;
461
+ }
462
+ /**
463
+ * Serialize untuk persistence
464
+ */
465
+ serialize() {
466
+ return JSON.stringify(Array.from(this.states.entries()));
467
+ }
468
+ /**
469
+ * Deserialize dari persistence
470
+ */
471
+ deserialize(data) {
472
+ try {
473
+ const entries = JSON.parse(data);
474
+ this.states = new Map(entries);
475
+ }
476
+ catch {
477
+ this.logger.warn('Failed to deserialize chat states');
478
+ }
479
+ }
480
+ size() {
481
+ return this.states.size;
482
+ }
483
+ }
484
+ exports.ChatStateManager = ChatStateManager;
485
+ // ============== Device Info Tracker ==============
486
+ /**
487
+ * Track device info (battery, phone info)
488
+ * Fix Baileys issue: battery status tidak terdeteksi, phone info tidak bisa di-get
489
+ */
490
+ class DeviceInfoTracker extends events_1.EventEmitter {
491
+ batteryLevel = null;
492
+ isCharging = false;
493
+ deviceInfo = {};
494
+ logger;
495
+ constructor(logger) {
496
+ super();
497
+ this.logger = logger ?? new logger_js_1.SilentLogger();
498
+ }
499
+ /**
500
+ * Update battery status
501
+ */
502
+ updateBattery(level, isCharging) {
503
+ const wasLow = this.batteryLevel !== null && this.batteryLevel < 20;
504
+ const isLow = level < 20;
505
+ this.batteryLevel = level;
506
+ this.isCharging = isCharging;
507
+ this.emit('battery:update', { level, isCharging });
508
+ if (isLow && !wasLow && !isCharging) {
509
+ this.emit('battery:low', { level });
510
+ }
511
+ }
512
+ /**
513
+ * Update device info
514
+ */
515
+ updateDeviceInfo(info) {
516
+ this.deviceInfo = { ...this.deviceInfo, ...info };
517
+ this.emit('device:info', this.deviceInfo);
518
+ }
519
+ getBatteryLevel() {
520
+ return this.batteryLevel;
521
+ }
522
+ isDeviceCharging() {
523
+ return this.isCharging;
524
+ }
525
+ getDeviceInfo() {
526
+ return { ...this.deviceInfo };
527
+ }
528
+ }
529
+ exports.DeviceInfoTracker = DeviceInfoTracker;
530
+ // ============== Group Events Tracker ==============
531
+ /**
532
+ * Track group events yang reliable
533
+ * Fix Baileys issue: group subject/description/announce changes tidak terdeteksi
534
+ */
535
+ class GroupEventsTracker extends events_1.EventEmitter {
536
+ groupStates = new Map();
537
+ logger;
538
+ constructor(logger) {
539
+ super();
540
+ this.logger = logger ?? new logger_js_1.SilentLogger();
541
+ }
542
+ /**
543
+ * Update group state dari metadata
544
+ */
545
+ updateGroupState(groupJid, metadata) {
546
+ const existing = this.groupStates.get(groupJid);
547
+ const newState = {
548
+ subject: metadata.subject,
549
+ description: metadata.desc,
550
+ announce: metadata.announce,
551
+ restrict: metadata.restrict,
552
+ participantCount: metadata.participants?.length ?? existing?.participantCount ?? 0,
553
+ lastUpdated: Date.now()
554
+ };
555
+ if (existing) {
556
+ // Detect changes dan emit events
557
+ if (existing.subject !== newState.subject && newState.subject) {
558
+ this.emit('group:subject_change', {
559
+ groupJid,
560
+ oldSubject: existing.subject,
561
+ newSubject: newState.subject,
562
+ timestamp: Date.now()
563
+ });
564
+ }
565
+ if (existing.description !== newState.description && newState.description !== undefined) {
566
+ this.emit('group:description_change', {
567
+ groupJid,
568
+ oldDescription: existing.description,
569
+ newDescription: newState.description,
570
+ timestamp: Date.now()
571
+ });
572
+ }
573
+ if (existing.announce !== newState.announce && newState.announce !== undefined) {
574
+ this.emit('group:announce_change', {
575
+ groupJid,
576
+ announce: newState.announce,
577
+ timestamp: Date.now()
578
+ });
579
+ }
580
+ if (existing.restrict !== newState.restrict && newState.restrict !== undefined) {
581
+ this.emit('group:restrict_change', {
582
+ groupJid,
583
+ restrict: newState.restrict,
584
+ timestamp: Date.now()
585
+ });
586
+ }
587
+ if (existing.participantCount !== newState.participantCount) {
588
+ this.emit('group:participant_count_change', {
589
+ groupJid,
590
+ oldCount: existing.participantCount,
591
+ newCount: newState.participantCount,
592
+ timestamp: Date.now()
593
+ });
594
+ }
595
+ }
596
+ this.groupStates.set(groupJid, newState);
597
+ }
598
+ getGroupState(groupJid) {
599
+ return this.groupStates.get(groupJid);
600
+ }
601
+ clear() {
602
+ this.groupStates.clear();
603
+ }
604
+ }
605
+ exports.GroupEventsTracker = GroupEventsTracker;
606
+ /**
607
+ * Helper untuk parse group invite info dari binary node response
608
+ */
609
+ function parseGroupInviteInfo(node) {
610
+ const inviteNode = Array.isArray(node?.content)
611
+ ? node.content.find((c) => c?.tag === 'invite_group')
612
+ : null;
613
+ if (!inviteNode)
614
+ return null;
615
+ const groupNode = Array.isArray(inviteNode.content)
616
+ ? inviteNode.content.find((c) => c?.tag === 'group')
617
+ : null;
618
+ return {
619
+ code: inviteNode.attrs?.code ?? '',
620
+ groupJid: groupNode?.attrs?.id ?? inviteNode.attrs?.jid ?? '',
621
+ subject: groupNode?.attrs?.subject ?? inviteNode.attrs?.subject ?? '',
622
+ description: groupNode?.attrs?.desc ?? inviteNode.attrs?.desc,
623
+ participantsCount: parseInt(groupNode?.attrs?.participants_count ?? inviteNode.attrs?.size ?? '0', 10),
624
+ isCommunity: (groupNode?.attrs?.is_community ?? inviteNode.attrs?.is_community) === 'true',
625
+ isParentGroup: (groupNode?.attrs?.is_parent_group ?? inviteNode.attrs?.is_parent_group) === 'true',
626
+ createdAt: groupNode?.attrs?.creation ? parseInt(groupNode.attrs.creation, 10) : undefined,
627
+ createdBy: groupNode?.attrs?.owner ?? inviteNode.attrs?.owner
628
+ };
629
+ }
630
+ //# sourceMappingURL=community-fixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community-fixes.js","sourceRoot":"","sources":["../../src/community/community-fixes.ts"],"names":[],"mappings":"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"}