@kangwifi-pro/waliwa 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +600 -0
  3. package/dist/advanced/features.d.ts +211 -0
  4. package/dist/advanced/features.d.ts.map +1 -0
  5. package/dist/advanced/features.js +671 -0
  6. package/dist/advanced/features.js.map +1 -0
  7. package/dist/auth/auth-state.d.ts +89 -0
  8. package/dist/auth/auth-state.d.ts.map +1 -0
  9. package/dist/auth/auth-state.js +330 -0
  10. package/dist/auth/auth-state.js.map +1 -0
  11. package/dist/auth/pairing-code.d.ts +78 -0
  12. package/dist/auth/pairing-code.d.ts.map +1 -0
  13. package/dist/auth/pairing-code.js +191 -0
  14. package/dist/auth/pairing-code.js.map +1 -0
  15. package/dist/auth/qr-code.d.ts +60 -0
  16. package/dist/auth/qr-code.d.ts.map +1 -0
  17. package/dist/auth/qr-code.js +151 -0
  18. package/dist/auth/qr-code.js.map +1 -0
  19. package/dist/calls/handler.d.ts +61 -0
  20. package/dist/calls/handler.d.ts.map +1 -0
  21. package/dist/calls/handler.js +117 -0
  22. package/dist/calls/handler.js.map +1 -0
  23. package/dist/core/binary.d.ts +74 -0
  24. package/dist/core/binary.d.ts.map +1 -0
  25. package/dist/core/binary.js +448 -0
  26. package/dist/core/binary.js.map +1 -0
  27. package/dist/core/crypto.d.ts +60 -0
  28. package/dist/core/crypto.d.ts.map +1 -0
  29. package/dist/core/crypto.js +170 -0
  30. package/dist/core/crypto.js.map +1 -0
  31. package/dist/core/noise.d.ts +106 -0
  32. package/dist/core/noise.d.ts.map +1 -0
  33. package/dist/core/noise.js +307 -0
  34. package/dist/core/noise.js.map +1 -0
  35. package/dist/events/emitter.d.ts +44 -0
  36. package/dist/events/emitter.d.ts.map +1 -0
  37. package/dist/events/emitter.js +79 -0
  38. package/dist/events/emitter.js.map +1 -0
  39. package/dist/features/index.d.ts +342 -0
  40. package/dist/features/index.d.ts.map +1 -0
  41. package/dist/features/index.js +755 -0
  42. package/dist/features/index.js.map +1 -0
  43. package/dist/fixes/index.d.ts +333 -0
  44. package/dist/fixes/index.d.ts.map +1 -0
  45. package/dist/fixes/index.js +762 -0
  46. package/dist/fixes/index.js.map +1 -0
  47. package/dist/groups/management.d.ts +86 -0
  48. package/dist/groups/management.d.ts.map +1 -0
  49. package/dist/groups/management.js +443 -0
  50. package/dist/groups/management.js.map +1 -0
  51. package/dist/index.d.ts +65 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +236 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/messages/media.d.ts +93 -0
  56. package/dist/messages/media.d.ts.map +1 -0
  57. package/dist/messages/media.js +252 -0
  58. package/dist/messages/media.js.map +1 -0
  59. package/dist/messages/message-encoder.d.ts +70 -0
  60. package/dist/messages/message-encoder.d.ts.map +1 -0
  61. package/dist/messages/message-encoder.js +453 -0
  62. package/dist/messages/message-encoder.js.map +1 -0
  63. package/dist/messages/send.d.ts +101 -0
  64. package/dist/messages/send.d.ts.map +1 -0
  65. package/dist/messages/send.js +409 -0
  66. package/dist/messages/send.js.map +1 -0
  67. package/dist/recovery/index.d.ts +125 -0
  68. package/dist/recovery/index.d.ts.map +1 -0
  69. package/dist/recovery/index.js +584 -0
  70. package/dist/recovery/index.js.map +1 -0
  71. package/dist/skdm/index.d.ts +220 -0
  72. package/dist/skdm/index.d.ts.map +1 -0
  73. package/dist/skdm/index.js +600 -0
  74. package/dist/skdm/index.js.map +1 -0
  75. package/dist/socket/hybrid.d.ts +118 -0
  76. package/dist/socket/hybrid.d.ts.map +1 -0
  77. package/dist/socket/hybrid.js +352 -0
  78. package/dist/socket/hybrid.js.map +1 -0
  79. package/dist/socket/wa-socket.d.ts +300 -0
  80. package/dist/socket/wa-socket.d.ts.map +1 -0
  81. package/dist/socket/wa-socket.js +1094 -0
  82. package/dist/socket/wa-socket.js.map +1 -0
  83. package/dist/socket/ws-socket.d.ts +96 -0
  84. package/dist/socket/ws-socket.d.ts.map +1 -0
  85. package/dist/socket/ws-socket.js +302 -0
  86. package/dist/socket/ws-socket.js.map +1 -0
  87. package/dist/types/index.d.ts +444 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +7 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/utils/jid.d.ts +46 -0
  92. package/dist/utils/jid.d.ts.map +1 -0
  93. package/dist/utils/jid.js +152 -0
  94. package/dist/utils/jid.js.map +1 -0
  95. package/dist/utils/logger.d.ts +45 -0
  96. package/dist/utils/logger.d.ts.map +1 -0
  97. package/dist/utils/logger.js +79 -0
  98. package/dist/utils/logger.js.map +1 -0
  99. package/dist/utils/retry.d.ts +43 -0
  100. package/dist/utils/retry.d.ts.map +1 -0
  101. package/dist/utils/retry.js +175 -0
  102. package/dist/utils/retry.js.map +1 -0
  103. package/docs/API.md +745 -0
  104. package/docs/ARCHITECTURE.md +307 -0
  105. package/docs/BAILEYS_FIXES.md +360 -0
  106. package/docs/FEATURES.md +532 -0
  107. package/docs/PROTOCOL.md +489 -0
  108. package/docs/RECOVERY.md +409 -0
  109. package/docs/SKDM.md +233 -0
  110. package/examples/ai-bot/index.ts +479 -0
  111. package/examples/ai-bot/package.json +17 -0
  112. package/examples/echo-bot/index.ts +171 -0
  113. package/examples/echo-bot/package.json +18 -0
  114. package/examples/group-bot/index.ts +557 -0
  115. package/examples/group-bot/package.json +17 -0
  116. package/examples/rest-gateway/index.ts +499 -0
  117. package/examples/rest-gateway/package.json +19 -0
  118. package/package.json +75 -0
  119. package/src/advanced/features.ts +817 -0
  120. package/src/auth/auth-state.ts +342 -0
  121. package/src/auth/pairing-code.ts +246 -0
  122. package/src/auth/qr-code.ts +191 -0
  123. package/src/calls/handler.ts +153 -0
  124. package/src/core/binary.ts +464 -0
  125. package/src/core/crypto.ts +189 -0
  126. package/src/core/noise.ts +406 -0
  127. package/src/events/emitter.ts +88 -0
  128. package/src/features/index.ts +921 -0
  129. package/src/fixes/index.ts +882 -0
  130. package/src/groups/management.ts +497 -0
  131. package/src/index.ts +274 -0
  132. package/src/messages/media.ts +372 -0
  133. package/src/messages/message-encoder.ts +520 -0
  134. package/src/messages/send.ts +521 -0
  135. package/src/recovery/index.ts +704 -0
  136. package/src/skdm/index.ts +693 -0
  137. package/src/socket/hybrid.ts +414 -0
  138. package/src/socket/wa-socket.ts +1347 -0
  139. package/src/socket/ws-socket.ts +355 -0
  140. package/src/types/index.ts +457 -0
  141. package/src/utils/jid.ts +156 -0
  142. package/src/utils/logger.ts +84 -0
  143. package/src/utils/retry.ts +205 -0
  144. package/tsconfig.json +30 -0
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Waliwa - Event emitter untuk WebSocket events
4
+ * Typed event emitter untuk WhatsApp events (messages, presence, calls, dll)
5
+ *
6
+ * RAM optimization: gunakan Map untuk handlers, weakly referenced jika possible
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.StrictEventEmitter = exports.WAEventEmitter = void 0;
10
+ const events_1 = require("events");
11
+ class WAEventEmitter extends events_1.EventEmitter {
12
+ /**
13
+ * Listen untuk specific event
14
+ */
15
+ on(event, listener) {
16
+ return super.on(event, listener);
17
+ }
18
+ /**
19
+ * Listen once
20
+ */
21
+ once(event, listener) {
22
+ return super.once(event, listener);
23
+ }
24
+ /**
25
+ * Listen dengan off support
26
+ */
27
+ addListener(event, listener) {
28
+ return super.addListener(event, listener);
29
+ }
30
+ /**
31
+ * Emit event ke all listeners
32
+ */
33
+ emit(event, payload) {
34
+ return super.emit(event, payload);
35
+ }
36
+ /**
37
+ * Remove listener
38
+ */
39
+ off(event, listener) {
40
+ return super.off(event, listener);
41
+ }
42
+ /**
43
+ * Wait for event dengan timeout
44
+ */
45
+ async waitFor(event, timeoutMs = 30000) {
46
+ return new Promise((resolve, reject) => {
47
+ const timeout = setTimeout(() => {
48
+ this.off(event, handler);
49
+ reject(new Error(`Timeout waiting for ${String(event)}`));
50
+ }, timeoutMs);
51
+ const handler = (payload) => {
52
+ clearTimeout(timeout);
53
+ this.off(event, handler);
54
+ resolve(payload);
55
+ };
56
+ this.on(event, handler);
57
+ });
58
+ }
59
+ }
60
+ exports.WAEventEmitter = WAEventEmitter;
61
+ /**
62
+ * Strict event emitter - hanya registered events yang di-allow
63
+ * Berguna untuk catching typos dalam event names
64
+ */
65
+ class StrictEventEmitter extends WAEventEmitter {
66
+ knownEvents;
67
+ constructor(events) {
68
+ super();
69
+ this.knownEvents = new Set(events);
70
+ }
71
+ emit(event, payload) {
72
+ if (!this.knownEvents.has(event)) {
73
+ throw new Error(`Unknown event: ${String(event)}`);
74
+ }
75
+ return super.emit(event, payload);
76
+ }
77
+ }
78
+ exports.StrictEventEmitter = StrictEventEmitter;
79
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/events/emitter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,mCAAsC;AAGtC,MAAa,cAAe,SAAQ,qBAAY;IAC9C;;OAEG;IACH,EAAE,CAA6B,KAAQ,EAAE,QAA0C;QACjF,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAe,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAI,CAA6B,KAAQ,EAAE,QAA0C;QACnF,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAe,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,WAAW,CAA6B,KAAQ,EAAE,QAA0C;QAC1F,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,QAAe,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,IAAI,CAA6B,KAAQ,EAAE,OAAsB;QAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,GAAG,CAA6B,KAAQ,EAAE,QAA0C;QAClF,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAe,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,KAAQ,EACR,YAAoB,KAAK;QAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACzB,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,MAAM,OAAO,GAAG,CAAC,OAAsB,EAAE,EAAE;gBACzC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACzB,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAzDD,wCAyDC;AAED;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,cAAc;IAC5C,WAAW,CAAc;IAEjC,YAAY,MAA4B;QACtC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,MAAkB,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAA6B,KAAQ,EAAE,OAAsB;QAC/D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAe,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAdD,gDAcC"}
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Waliwa - New Features Module
3
+ *
4
+ * Module yang berisi fitur-fitur baru yang gak ada di Baileys:
5
+ *
6
+ * 1. Health Monitor - real-time health tracking dengan auto-recovery
7
+ * 2. Multi-account Manager - manage multiple WhatsApp accounts
8
+ * 3. Webhook System - reliable webhooks dengan retry + HMAC signature
9
+ * 4. Circuit Breaker - prevent retry storms untuk failed sends
10
+ * 5. Rate Limit Tracker - per-recipient rate limit tracking
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ import type { WALogger, JIDLike } from '../types/index.js';
14
+ export interface HealthStatus {
15
+ status: 'healthy' | 'degraded' | 'unhealthy';
16
+ score: number;
17
+ connection: {
18
+ connected: boolean;
19
+ uptime: number;
20
+ lastPingTime: number;
21
+ reconnectCount: number;
22
+ };
23
+ metrics: {
24
+ messagesSent: number;
25
+ messagesReceived: number;
26
+ sendFailures: number;
27
+ avgLatencyMs: number;
28
+ };
29
+ resources: {
30
+ memoryUsageMb: number;
31
+ pendingSends: number;
32
+ queueSize: number;
33
+ };
34
+ issues: string[];
35
+ timestamp: number;
36
+ }
37
+ export declare class HealthMonitor extends EventEmitter {
38
+ private logger;
39
+ private startTime;
40
+ private lastPingTime;
41
+ private reconnectCount;
42
+ private messagesSent;
43
+ private messagesReceived;
44
+ private sendFailures;
45
+ private latencies;
46
+ private maxLatencySamples;
47
+ private checkInterval;
48
+ private autoRecoveryEnabled;
49
+ constructor(opts?: {
50
+ logger?: WALogger;
51
+ autoRecovery?: boolean;
52
+ });
53
+ /**
54
+ * Start monitoring - periodic health checks
55
+ */
56
+ start(intervalMs?: number): void;
57
+ stop(): void;
58
+ recordPing(): void;
59
+ recordReconnect(): void;
60
+ recordSend(latencyMs: number, success?: boolean): void;
61
+ recordReceive(): void;
62
+ getHealth(): HealthStatus;
63
+ reset(): void;
64
+ }
65
+ export interface AccountConfig {
66
+ id: string;
67
+ name: string;
68
+ authFolder: string;
69
+ enabled: boolean;
70
+ config: any;
71
+ }
72
+ export interface AccountStatus {
73
+ id: string;
74
+ name: string;
75
+ connected: boolean;
76
+ user?: {
77
+ id: string;
78
+ name?: string;
79
+ };
80
+ lastActive: number;
81
+ messagesSent: number;
82
+ messagesReceived: number;
83
+ }
84
+ /**
85
+ * MultiAccountManager - manage multiple WhatsApp accounts dari satu process.
86
+ * Berguna untuk: customer service bots, multiple business accounts, dll.
87
+ *
88
+ * RAM optimization: lazy-load accounts, only active ones consume resources.
89
+ */
90
+ export declare class MultiAccountManager extends EventEmitter {
91
+ private accounts;
92
+ private logger;
93
+ private maxAccounts;
94
+ constructor(opts?: {
95
+ maxAccounts?: number;
96
+ logger?: WALogger;
97
+ });
98
+ /**
99
+ * Register new account
100
+ */
101
+ registerAccount(config: AccountConfig): void;
102
+ /**
103
+ * Connect account by ID
104
+ */
105
+ connectAccount(accountId: string): Promise<void>;
106
+ /**
107
+ * Disconnect account
108
+ */
109
+ disconnectAccount(accountId: string): Promise<void>;
110
+ /**
111
+ * Get account socket (untuk send messages)
112
+ */
113
+ getSocket(accountId: string): any;
114
+ /**
115
+ * List all accounts dengan status
116
+ */
117
+ listAccounts(): AccountStatus[];
118
+ /**
119
+ * Send message from specific account
120
+ */
121
+ sendMessageFrom(accountId: string, jid: JIDLike, content: any): Promise<any>;
122
+ /**
123
+ * Broadcast message dari multiple accounts
124
+ */
125
+ broadcast(jid: JIDLike, content: any, accountIds?: string[]): Promise<void>;
126
+ /**
127
+ * Disconnect all accounts
128
+ */
129
+ disconnectAll(): Promise<void>;
130
+ }
131
+ export interface WebhookConfig {
132
+ url: string;
133
+ events: string[];
134
+ secret?: string;
135
+ enabled: boolean;
136
+ retryCount: number;
137
+ retryDelayMs: number;
138
+ timeoutMs: number;
139
+ }
140
+ interface PendingWebhook {
141
+ id: string;
142
+ url: string;
143
+ payload: any;
144
+ secret?: string;
145
+ attempts: number;
146
+ nextRetryAt: number;
147
+ }
148
+ /**
149
+ * WebhookManager - reliable webhook delivery dengan retry + HMAC signature.
150
+ * Fix common Baileys issue: webhooks tidak reliable.
151
+ *
152
+ * Strategy:
153
+ * - HMAC-SHA256 signature untuk verify authenticity
154
+ * - Exponential backoff retry
155
+ * - Queue pending webhooks jika network issue
156
+ * - Dead letter queue untuk permanent failures
157
+ */
158
+ export declare class WebhookManager {
159
+ private webhooks;
160
+ private pendingQueue;
161
+ private deadLetterQueue;
162
+ private logger;
163
+ private processingTimer;
164
+ private isProcessing;
165
+ private stats;
166
+ constructor(opts?: {
167
+ logger?: WALogger;
168
+ });
169
+ /**
170
+ * Register webhook
171
+ */
172
+ register(config: WebhookConfig): void;
173
+ /**
174
+ * Unregister webhook
175
+ */
176
+ unregister(url: string): void;
177
+ /**
178
+ * Trigger webhook delivery
179
+ */
180
+ trigger(event: string, payload: any): void;
181
+ private processQueue;
182
+ private deliver;
183
+ getStats(): {
184
+ sent: number;
185
+ failed: number;
186
+ retried: number;
187
+ pending: number;
188
+ deadLettered: number;
189
+ };
190
+ /**
191
+ * Get dead letter queue (untuk manual retry)
192
+ */
193
+ getDeadLetterQueue(): PendingWebhook[];
194
+ /**
195
+ * Retry dari DLQ
196
+ */
197
+ retryDeadLetter(id?: string): void;
198
+ destroy(): void;
199
+ }
200
+ /**
201
+ * CircuitBreaker - prevent retry storms untuk failed recipients.
202
+ * Fix Baileys issue: failed sends terus retry, flood server, get banned.
203
+ *
204
+ * Strategy:
205
+ * - Track failure count per recipient
206
+ * - When threshold reached, open circuit (stop sending)
207
+ * - After cooldown, try again (half-open state)
208
+ * - If success, close circuit; if fail, re-open
209
+ */
210
+ export declare class CircuitBreaker {
211
+ private states;
212
+ private failureThreshold;
213
+ private cooldownMs;
214
+ private logger;
215
+ constructor(opts?: {
216
+ failureThreshold?: number;
217
+ cooldownMs?: number;
218
+ logger?: WALogger;
219
+ });
220
+ /**
221
+ * Check if can send to recipient
222
+ */
223
+ canSend(recipientJid: string): boolean;
224
+ /**
225
+ * Record successful send
226
+ */
227
+ recordSuccess(recipientJid: string): void;
228
+ /**
229
+ * Record failed send
230
+ */
231
+ recordFailure(recipientJid: string): void;
232
+ /**
233
+ * Manually reset circuit untuk recipient
234
+ */
235
+ reset(recipientJid: string): void;
236
+ /**
237
+ * Get circuit state untuk recipient
238
+ */
239
+ getState(recipientJid: string): 'closed' | 'open' | 'half-open';
240
+ /**
241
+ * Get all open circuits (untuk monitoring)
242
+ */
243
+ getOpenCircuits(): Array<{
244
+ jid: string;
245
+ failureCount: number;
246
+ lastFailureTime: number;
247
+ }>;
248
+ /**
249
+ * Cleanup expired circuits (cooldown elapsed and still open)
250
+ */
251
+ cleanup(): void;
252
+ }
253
+ /**
254
+ * RateLimitTracker - per-recipient rate limiting.
255
+ * Berguna untuk: prevent spam, comply dengan WA server limits.
256
+ *
257
+ * WhatsApp server limits (approximate):
258
+ * - 5 messages/sec per recipient
259
+ * - 60 messages/min per recipient
260
+ * - 1000 messages/hour per recipient
261
+ */
262
+ export declare class RateLimitTracker {
263
+ private counts;
264
+ private limits;
265
+ private logger;
266
+ constructor(opts?: {
267
+ perSecond?: number;
268
+ perMinute?: number;
269
+ perHour?: number;
270
+ logger?: WALogger;
271
+ });
272
+ /**
273
+ * Check if can send to recipient (and increment counter)
274
+ */
275
+ canSend(recipientJid: string): boolean;
276
+ /**
277
+ * Get remaining quota untuk recipient
278
+ */
279
+ getRemainingQuota(recipientJid: string): {
280
+ second: number;
281
+ minute: number;
282
+ hour: number;
283
+ };
284
+ /**
285
+ * Reset counter untuk recipient (e.g., on successful interaction)
286
+ */
287
+ reset(recipientJid: string): void;
288
+ /**
289
+ * Cleanup inactive recipients (no sends in last hour)
290
+ */
291
+ cleanup(): void;
292
+ getStats(): {
293
+ trackedRecipients: number;
294
+ limits: {
295
+ perSecond: number;
296
+ perMinute: number;
297
+ perHour: number;
298
+ };
299
+ };
300
+ }
301
+ /**
302
+ * MessagePersistence - persist outgoing messages untuk survive restarts.
303
+ * Fix Baileys issue: pending messages lost on restart.
304
+ */
305
+ export interface PersistedMessage {
306
+ id: string;
307
+ recipientJid: string;
308
+ content: any;
309
+ status: 'pending' | 'sent' | 'failed';
310
+ attempts: number;
311
+ createdAt: number;
312
+ updatedAt: number;
313
+ lastError?: string;
314
+ }
315
+ export declare class MessagePersistence {
316
+ private messages;
317
+ private maxRetention;
318
+ private logger;
319
+ constructor(opts?: {
320
+ maxRetention?: number;
321
+ logger?: WALogger;
322
+ });
323
+ save(message: PersistedMessage): void;
324
+ get(id: string): PersistedMessage | undefined;
325
+ update(id: string, update: Partial<PersistedMessage>): void;
326
+ /**
327
+ * Get all pending messages (untuk retry on restart)
328
+ */
329
+ getPending(): PersistedMessage[];
330
+ /**
331
+ * Get all failed messages (untuk manual retry)
332
+ */
333
+ getFailed(): PersistedMessage[];
334
+ delete(id: string): void;
335
+ /**
336
+ * Cleanup old messages (older than X ms)
337
+ */
338
+ cleanup(maxAgeMs?: number): number;
339
+ size(): number;
340
+ }
341
+ export {};
342
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"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"}