@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,89 @@
1
+ /**
2
+ * Waliwa - Contacts Manager (Community Request)
3
+ *
4
+ * Fitur yang sering diminta komunitas Baileys:
5
+ * - Sync contacts dari phonebook
6
+ * - Check if contact is registered on WhatsApp
7
+ * - Get contact info (name, picture, about)
8
+ * - Block/unblock contacts
9
+ * - Search contacts by name/number
10
+ * - Register phone numbers (check if registered)
11
+ *
12
+ * Fix Baileys issues:
13
+ * - Contact sync tidak reliable
14
+ * - Tidak bisa check jika nomor terdaftar di WhatsApp
15
+ */
16
+ import type { WALogger } from '../types/index.js';
17
+ import { BinaryNode } from '../core/binary.js';
18
+ export interface ContactInfo {
19
+ jid: string;
20
+ phoneNumber: string;
21
+ name?: string;
22
+ pushName?: string;
23
+ isRegistered: boolean;
24
+ isBusiness?: boolean;
25
+ about?: string;
26
+ profilePictureUrl?: string;
27
+ }
28
+ export interface ContactsManagerOptions {
29
+ send: (data: Uint8Array) => void;
30
+ registerIqHandler: (id: string, handler: (node: BinaryNode) => void) => void;
31
+ logger?: WALogger;
32
+ ownJid?: string;
33
+ }
34
+ export declare class ContactsManager {
35
+ private send;
36
+ private registerIqHandler;
37
+ private logger;
38
+ private ownJid?;
39
+ private contactsCache;
40
+ constructor(opts: ContactsManagerOptions);
41
+ /**
42
+ * Sync contacts dari phonebook (check if registered on WhatsApp)
43
+ * Fix Baileys issue: contact sync tidak reliable
44
+ */
45
+ syncContacts(phoneNumbers: string[]): Promise<Map<string, ContactInfo>>;
46
+ /**
47
+ * Check if single phone number is registered on WhatsApp
48
+ */
49
+ checkRegistered(phoneNumber: string): Promise<boolean>;
50
+ /**
51
+ * Check multiple phone numbers sekaligus
52
+ */
53
+ checkRegisteredBatch(phoneNumbers: string[]): Promise<Map<string, ContactInfo>>;
54
+ /**
55
+ * Get contact info (with caching)
56
+ */
57
+ getContactInfo(phoneOrJid: string, useCache?: boolean): Promise<ContactInfo>;
58
+ /**
59
+ * Search contacts by name or phone
60
+ */
61
+ searchContacts(query: string, limit?: number): ContactInfo[];
62
+ /**
63
+ * Get all cached contacts
64
+ */
65
+ getAllContacts(): ContactInfo[];
66
+ /**
67
+ * Get contacts count
68
+ */
69
+ getContactsCount(): number;
70
+ /**
71
+ * Add contact ke cache
72
+ */
73
+ cacheContact(info: ContactInfo): void;
74
+ /**
75
+ * Remove contact dari cache
76
+ */
77
+ removeContact(jid: string): void;
78
+ /**
79
+ * Update contact name in cache
80
+ */
81
+ updateContactName(jid: string, name: string): void;
82
+ /**
83
+ * Clear all cached contacts
84
+ */
85
+ clearCache(): void;
86
+ private findChild;
87
+ private sendIqAndWait;
88
+ }
89
+ //# sourceMappingURL=contacts-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-manager.d.ts","sourceRoot":"","sources":["../../src/community/contacts-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAoB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKjE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACjC,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7E,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,iBAAiB,CAA4D;IACrF,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,aAAa,CAAuC;gBAEhD,IAAI,EAAE,sBAAsB;IAOxC;;;OAGG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAmB7E;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5D;;OAEG;IACG,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAuErF;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBxF;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,WAAW,EAAE;IAkBhE;;OAEG;IACH,cAAc,IAAI,WAAW,EAAE;IAI/B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIrC;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlD;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,aAAa;CAoBtB"}
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ /**
3
+ * Waliwa - Contacts Manager (Community Request)
4
+ *
5
+ * Fitur yang sering diminta komunitas Baileys:
6
+ * - Sync contacts dari phonebook
7
+ * - Check if contact is registered on WhatsApp
8
+ * - Get contact info (name, picture, about)
9
+ * - Block/unblock contacts
10
+ * - Search contacts by name/number
11
+ * - Register phone numbers (check if registered)
12
+ *
13
+ * Fix Baileys issues:
14
+ * - Contact sync tidak reliable
15
+ * - Tidak bisa check jika nomor terdaftar di WhatsApp
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ContactsManager = void 0;
19
+ const binary_js_1 = require("../core/binary.js");
20
+ const message_encoder_js_1 = require("../messages/message-encoder.js");
21
+ const logger_js_1 = require("../utils/logger.js");
22
+ class ContactsManager {
23
+ send;
24
+ registerIqHandler;
25
+ logger;
26
+ ownJid;
27
+ contactsCache = new Map();
28
+ constructor(opts) {
29
+ this.send = opts.send;
30
+ this.registerIqHandler = opts.registerIqHandler;
31
+ this.logger = opts.logger ?? new logger_js_1.SilentLogger();
32
+ this.ownJid = opts.ownJid;
33
+ }
34
+ /**
35
+ * Sync contacts dari phonebook (check if registered on WhatsApp)
36
+ * Fix Baileys issue: contact sync tidak reliable
37
+ */
38
+ async syncContacts(phoneNumbers) {
39
+ const result = new Map();
40
+ // Process in batches of 100 untuk avoid server limits
41
+ const batchSize = 100;
42
+ for (let i = 0; i < phoneNumbers.length; i += batchSize) {
43
+ const batch = phoneNumbers.slice(i, i + batchSize);
44
+ const batchResult = await this.checkRegisteredBatch(batch);
45
+ for (const [phone, info] of batchResult.entries()) {
46
+ result.set(phone, info);
47
+ this.contactsCache.set(info.jid, info);
48
+ }
49
+ }
50
+ this.logger.info(`Synced ${result.size} contacts (${result.size} registered)`);
51
+ return result;
52
+ }
53
+ /**
54
+ * Check if single phone number is registered on WhatsApp
55
+ */
56
+ async checkRegistered(phoneNumber) {
57
+ const info = await this.getContactInfo(phoneNumber);
58
+ return info.isRegistered;
59
+ }
60
+ /**
61
+ * Check multiple phone numbers sekaligus
62
+ */
63
+ async checkRegisteredBatch(phoneNumbers) {
64
+ const id = (0, message_encoder_js_1.generateStanzaId)();
65
+ const jids = phoneNumbers.map(p => `${p.replace(/[^0-9]/g, '')}@s.whatsapp.net`);
66
+ const node = {
67
+ tag: 'iq',
68
+ attrs: {
69
+ type: 'get',
70
+ to: 's.whatsapp.net',
71
+ id
72
+ },
73
+ content: [
74
+ {
75
+ tag: 'usync',
76
+ attrs: {
77
+ sid: id,
78
+ mode: 'query',
79
+ last: 'true',
80
+ index: '0',
81
+ context: 'interactive'
82
+ },
83
+ content: [
84
+ {
85
+ tag: 'query',
86
+ attrs: {},
87
+ content: [
88
+ { tag: 'contact', attrs: {} }
89
+ ]
90
+ },
91
+ {
92
+ tag: 'list',
93
+ attrs: {},
94
+ content: jids.map(jid => ({ tag: 'user', attrs: { jid } }))
95
+ }
96
+ ]
97
+ }
98
+ ]
99
+ };
100
+ const response = await this.sendIqAndWait(node, id);
101
+ const result = new Map();
102
+ const usyncNode = this.findChild(response, 'usync');
103
+ const listNode = this.findChild(usyncNode ?? response, 'list');
104
+ if (Array.isArray(listNode?.content)) {
105
+ for (const userNode of listNode.content) {
106
+ if (typeof userNode !== 'object' || userNode?.tag !== 'user')
107
+ continue;
108
+ const jid = userNode.attrs?.jid;
109
+ if (!jid)
110
+ continue;
111
+ const phone = jid.split('@')[0];
112
+ const contactNode = this.findChild(userNode, 'contact');
113
+ const isRegistered = contactNode?.attrs?.type === 'in';
114
+ const name = typeof contactNode?.content === 'string' ? contactNode.content : undefined;
115
+ const info = {
116
+ jid,
117
+ phoneNumber: phone,
118
+ name,
119
+ isRegistered
120
+ };
121
+ result.set(phone, info);
122
+ this.contactsCache.set(jid, info);
123
+ }
124
+ }
125
+ return result;
126
+ }
127
+ /**
128
+ * Get contact info (with caching)
129
+ */
130
+ async getContactInfo(phoneOrJid, useCache = true) {
131
+ const jid = phoneOrJid.includes('@')
132
+ ? phoneOrJid
133
+ : `${phoneOrJid.replace(/[^0-9]/g, '')}@s.whatsapp.net`;
134
+ if (useCache) {
135
+ const cached = this.contactsCache.get(jid);
136
+ if (cached)
137
+ return cached;
138
+ }
139
+ const result = await this.checkRegisteredBatch([jid.split('@')[0]]);
140
+ const info = result.get(jid.split('@')[0]);
141
+ if (!info) {
142
+ return {
143
+ jid,
144
+ phoneNumber: jid.split('@')[0],
145
+ isRegistered: false
146
+ };
147
+ }
148
+ return info;
149
+ }
150
+ /**
151
+ * Search contacts by name or phone
152
+ */
153
+ searchContacts(query, limit = 20) {
154
+ const q = query.toLowerCase();
155
+ const results = [];
156
+ for (const contact of this.contactsCache.values()) {
157
+ if (contact.name?.toLowerCase().includes(q) ||
158
+ contact.phoneNumber.includes(q) ||
159
+ contact.jid.includes(q)) {
160
+ results.push(contact);
161
+ if (results.length >= limit)
162
+ break;
163
+ }
164
+ }
165
+ return results;
166
+ }
167
+ /**
168
+ * Get all cached contacts
169
+ */
170
+ getAllContacts() {
171
+ return Array.from(this.contactsCache.values());
172
+ }
173
+ /**
174
+ * Get contacts count
175
+ */
176
+ getContactsCount() {
177
+ return this.contactsCache.size;
178
+ }
179
+ /**
180
+ * Add contact ke cache
181
+ */
182
+ cacheContact(info) {
183
+ this.contactsCache.set(info.jid, info);
184
+ }
185
+ /**
186
+ * Remove contact dari cache
187
+ */
188
+ removeContact(jid) {
189
+ this.contactsCache.delete(jid);
190
+ }
191
+ /**
192
+ * Update contact name in cache
193
+ */
194
+ updateContactName(jid, name) {
195
+ const contact = this.contactsCache.get(jid);
196
+ if (contact) {
197
+ contact.name = name;
198
+ this.contactsCache.set(jid, contact);
199
+ }
200
+ }
201
+ /**
202
+ * Clear all cached contacts
203
+ */
204
+ clearCache() {
205
+ this.contactsCache.clear();
206
+ }
207
+ // ============== Helpers ==============
208
+ findChild(node, tag) {
209
+ if (!node || !Array.isArray(node.content))
210
+ return null;
211
+ for (const child of node.content) {
212
+ if (typeof child === 'object' && child?.tag === tag)
213
+ return child;
214
+ }
215
+ return null;
216
+ }
217
+ sendIqAndWait(node, id, timeoutMs = 30000) {
218
+ return new Promise((resolve, reject) => {
219
+ const timeout = setTimeout(() => reject(new Error(`IQ ${id} timeout`)), timeoutMs);
220
+ this.registerIqHandler(id, (response) => {
221
+ clearTimeout(timeout);
222
+ const type = response.attrs?.type;
223
+ if (type === 'error') {
224
+ reject(new Error(`IQ error: ${JSON.stringify(response.attrs)}`));
225
+ }
226
+ else {
227
+ resolve(response);
228
+ }
229
+ });
230
+ try {
231
+ this.send((0, binary_js_1.encodeBinaryNode)(node));
232
+ }
233
+ catch (err) {
234
+ clearTimeout(timeout);
235
+ reject(err);
236
+ }
237
+ });
238
+ }
239
+ }
240
+ exports.ContactsManager = ContactsManager;
241
+ //# sourceMappingURL=contacts-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-manager.js","sourceRoot":"","sources":["../../src/community/contacts-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Waliwa - Disappearing Messages (Community Request)
3
+ *
4
+ * Fitur yang sering diminta komunitas Baileys:
5
+ * - Set disappearing messages timer per chat
6
+ * - Get current disappearing setting
7
+ * - Disable disappearing messages
8
+ * - Default disappearing timer
9
+ * - Disappearing messages for groups
10
+ *
11
+ * Fix Baileys issues:
12
+ * - Disappearing messages control tidak ada
13
+ * - Tidak bisa set timer per chat
14
+ */
15
+ import type { JIDLike, WALogger } from '../types/index.js';
16
+ import { BinaryNode } from '../core/binary.js';
17
+ export type DisappearingTimer = 'off' | '24_hours' | '7_days' | '90_days';
18
+ export declare const TIMER_TO_SECONDS: Record<DisappearingTimer, number>;
19
+ export declare const SECONDS_TO_TIMER: Record<number, DisappearingTimer>;
20
+ export interface DisappearingManagerOptions {
21
+ send: (data: Uint8Array) => void;
22
+ registerIqHandler: (id: string, handler: (node: BinaryNode) => void) => void;
23
+ logger?: WALogger;
24
+ }
25
+ export declare class DisappearingManager {
26
+ private send;
27
+ private registerIqHandler;
28
+ private logger;
29
+ private settingsCache;
30
+ constructor(opts: DisappearingManagerOptions);
31
+ /**
32
+ * Set disappearing messages timer untuk a chat
33
+ * Fix Baileys issue: tidak bisa set timer per chat
34
+ */
35
+ setTimer(jid: JIDLike, timer: DisappearingTimer): Promise<void>;
36
+ /**
37
+ * Disable disappearing messages untuk a chat
38
+ */
39
+ disable(jid: JIDLike): Promise<void>;
40
+ /**
41
+ * Get current disappearing setting untuk a chat
42
+ */
43
+ getSetting(jid: JIDLike, useCache?: boolean): Promise<DisappearingTimer>;
44
+ /**
45
+ * Set default disappearing timer untuk new chats
46
+ */
47
+ setDefaultTimer(timer: DisappearingTimer): Promise<void>;
48
+ /**
49
+ * Get all chats with disappearing messages enabled
50
+ */
51
+ getDisappearingChats(): Array<{
52
+ jid: string;
53
+ timer: DisappearingTimer;
54
+ seconds: number;
55
+ }>;
56
+ /**
57
+ * Clear cache untuk a chat atau semua
58
+ */
59
+ clearCache(jid?: JIDLike): void;
60
+ private findChild;
61
+ private sendIqAndWait;
62
+ }
63
+ //# sourceMappingURL=disappearing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disappearing.d.ts","sourceRoot":"","sources":["../../src/community/disappearing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAoB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKjE,MAAM,MAAM,iBAAiB,GACzB,KAAK,GACL,UAAU,GACV,QAAQ,GACR,SAAS,CAAC;AAEd,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAK9D,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAK9D,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACjC,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7E,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,iBAAiB,CAA4D;IACrF,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,aAAa,CAAkC;gBAE3C,IAAI,EAAE,0BAA0B;IAM5C;;;OAGG;IACG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBrE;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkCpF;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9D;;OAEG;IACH,oBAAoB,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAczF;;OAEG;IACH,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI;IAU/B,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,aAAa;CAoBtB"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ /**
3
+ * Waliwa - Disappearing Messages (Community Request)
4
+ *
5
+ * Fitur yang sering diminta komunitas Baileys:
6
+ * - Set disappearing messages timer per chat
7
+ * - Get current disappearing setting
8
+ * - Disable disappearing messages
9
+ * - Default disappearing timer
10
+ * - Disappearing messages for groups
11
+ *
12
+ * Fix Baileys issues:
13
+ * - Disappearing messages control tidak ada
14
+ * - Tidak bisa set timer per chat
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.DisappearingManager = exports.SECONDS_TO_TIMER = exports.TIMER_TO_SECONDS = void 0;
18
+ const binary_js_1 = require("../core/binary.js");
19
+ const jid_js_1 = require("../utils/jid.js");
20
+ const message_encoder_js_1 = require("../messages/message-encoder.js");
21
+ const logger_js_1 = require("../utils/logger.js");
22
+ exports.TIMER_TO_SECONDS = {
23
+ off: 0,
24
+ '24_hours': 86400,
25
+ '7_days': 604800,
26
+ '90_days': 7776000
27
+ };
28
+ exports.SECONDS_TO_TIMER = {
29
+ 0: 'off',
30
+ 86400: '24_hours',
31
+ 604800: '7_days',
32
+ 7776000: '90_days'
33
+ };
34
+ class DisappearingManager {
35
+ send;
36
+ registerIqHandler;
37
+ logger;
38
+ settingsCache = new Map(); // chatJid -> seconds
39
+ constructor(opts) {
40
+ this.send = opts.send;
41
+ this.registerIqHandler = opts.registerIqHandler;
42
+ this.logger = opts.logger ?? new logger_js_1.SilentLogger();
43
+ }
44
+ /**
45
+ * Set disappearing messages timer untuk a chat
46
+ * Fix Baileys issue: tidak bisa set timer per chat
47
+ */
48
+ async setTimer(jid, timer) {
49
+ const seconds = exports.TIMER_TO_SECONDS[timer];
50
+ const id = (0, message_encoder_js_1.generateStanzaId)();
51
+ const node = {
52
+ tag: 'iq',
53
+ attrs: {
54
+ type: 'set',
55
+ to: (0, jid_js_1.jidToString)(jid),
56
+ id
57
+ },
58
+ content: [
59
+ {
60
+ tag: 'ephemeral',
61
+ attrs: {
62
+ expiration: seconds.toString()
63
+ }
64
+ }
65
+ ]
66
+ };
67
+ await this.sendIqAndWait(node, id);
68
+ this.settingsCache.set((0, jid_js_1.jidToString)(jid), seconds);
69
+ this.logger.info(`Set disappearing timer for ${(0, jid_js_1.jidToString)(jid)}: ${timer} (${seconds}s)`);
70
+ }
71
+ /**
72
+ * Disable disappearing messages untuk a chat
73
+ */
74
+ async disable(jid) {
75
+ return this.setTimer(jid, 'off');
76
+ }
77
+ /**
78
+ * Get current disappearing setting untuk a chat
79
+ */
80
+ async getSetting(jid, useCache = true) {
81
+ const jidStr = (0, jid_js_1.jidToString)(jid);
82
+ if (useCache) {
83
+ const cached = this.settingsCache.get(jidStr);
84
+ if (cached !== undefined) {
85
+ return exports.SECONDS_TO_TIMER[cached] ?? 'off';
86
+ }
87
+ }
88
+ const id = (0, message_encoder_js_1.generateStanzaId)();
89
+ const node = {
90
+ tag: 'iq',
91
+ attrs: {
92
+ type: 'get',
93
+ to: jidStr,
94
+ id
95
+ },
96
+ content: [
97
+ {
98
+ tag: 'ephemeral',
99
+ attrs: {}
100
+ }
101
+ ]
102
+ };
103
+ const response = await this.sendIqAndWait(node, id);
104
+ const ephemeralNode = this.findChild(response, 'ephemeral');
105
+ const seconds = parseInt(ephemeralNode?.attrs?.expiration ?? '0', 10);
106
+ this.settingsCache.set(jidStr, seconds);
107
+ return exports.SECONDS_TO_TIMER[seconds] ?? 'off';
108
+ }
109
+ /**
110
+ * Set default disappearing timer untuk new chats
111
+ */
112
+ async setDefaultTimer(timer) {
113
+ const seconds = exports.TIMER_TO_SECONDS[timer];
114
+ const id = (0, message_encoder_js_1.generateStanzaId)();
115
+ const node = {
116
+ tag: 'iq',
117
+ attrs: {
118
+ type: 'set',
119
+ to: 's.whatsapp.net',
120
+ id
121
+ },
122
+ content: [
123
+ {
124
+ tag: 'default_ephemeral',
125
+ attrs: {
126
+ expiration: seconds.toString()
127
+ }
128
+ }
129
+ ]
130
+ };
131
+ await this.sendIqAndWait(node, id);
132
+ this.logger.info(`Default disappearing timer set to ${timer}`);
133
+ }
134
+ /**
135
+ * Get all chats with disappearing messages enabled
136
+ */
137
+ getDisappearingChats() {
138
+ const result = [];
139
+ for (const [jid, seconds] of this.settingsCache.entries()) {
140
+ if (seconds > 0) {
141
+ result.push({
142
+ jid,
143
+ timer: exports.SECONDS_TO_TIMER[seconds] ?? 'off',
144
+ seconds
145
+ });
146
+ }
147
+ }
148
+ return result;
149
+ }
150
+ /**
151
+ * Clear cache untuk a chat atau semua
152
+ */
153
+ clearCache(jid) {
154
+ if (jid) {
155
+ this.settingsCache.delete((0, jid_js_1.jidToString)(jid));
156
+ }
157
+ else {
158
+ this.settingsCache.clear();
159
+ }
160
+ }
161
+ // ============== Helpers ==============
162
+ findChild(node, tag) {
163
+ if (!Array.isArray(node.content))
164
+ return null;
165
+ for (const child of node.content) {
166
+ if (typeof child === 'object' && child?.tag === tag)
167
+ return child;
168
+ }
169
+ return null;
170
+ }
171
+ sendIqAndWait(node, id, timeoutMs = 15000) {
172
+ return new Promise((resolve, reject) => {
173
+ const timeout = setTimeout(() => reject(new Error(`IQ ${id} timeout`)), timeoutMs);
174
+ this.registerIqHandler(id, (response) => {
175
+ clearTimeout(timeout);
176
+ const type = response.attrs?.type;
177
+ if (type === 'error') {
178
+ reject(new Error(`IQ error: ${JSON.stringify(response.attrs)}`));
179
+ }
180
+ else {
181
+ resolve(response);
182
+ }
183
+ });
184
+ try {
185
+ this.send((0, binary_js_1.encodeBinaryNode)(node));
186
+ }
187
+ catch (err) {
188
+ clearTimeout(timeout);
189
+ reject(err);
190
+ }
191
+ });
192
+ }
193
+ }
194
+ exports.DisappearingManager = DisappearingManager;
195
+ //# sourceMappingURL=disappearing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disappearing.js","sourceRoot":"","sources":["../../src/community/disappearing.ts"],"names":[],"mappings":"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"}