@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,300 @@
1
+ /**
2
+ * Waliwa - Main WASocket interface
3
+ * Entry point untuk WhatsApp bot - gabungin semua components (WebSocket, Auth, Messages, Groups, Calls)
4
+ *
5
+ * API Baileys-style dengan RAM optimization:
6
+ * - Lazy initialization
7
+ * - Buffer pooling
8
+ * - Debounced writes
9
+ * - Event-driven (no polling overhead)
10
+ */
11
+ import { WAEventEmitter } from '../events/emitter.js';
12
+ import { SKDM } from '../skdm/index.js';
13
+ import { HealthMonitor, WebhookManager, CircuitBreaker, RateLimitTracker, MessagePersistence } from '../features/index.js';
14
+ import { RecoveryManager, type DisconnectReason } from '../recovery/index.js';
15
+ import type { WaliwaConfig, QRGenerationData, PairingCodeResult, MessageContent, WAMessage, WAMessageKey, JIDLike, SendMessageResult, WAGroupMetadata, GroupCreateOptions, PresenceType, AuthState } from '../types/index.js';
16
+ export interface WASocket {
17
+ /** Event emitter untuk semua WhatsApp events */
18
+ ev: WAEventEmitter;
19
+ /** Auth state */
20
+ authState: AuthState;
21
+ /** Logger */
22
+ user: {
23
+ id: string;
24
+ name?: string;
25
+ } | undefined;
26
+ /** Logout dan clear session */
27
+ logout(): Promise<void>;
28
+ /** Refetch QR code */
29
+ refreshQR(): Promise<QRGenerationData>;
30
+ /** Request pairing code (Mobile API mode) */
31
+ requestPairingCode(phoneNumber: string): Promise<PairingCodeResult>;
32
+ sendMessage(jid: JIDLike, content: MessageContent, opts?: any): Promise<SendMessageResult>;
33
+ forwardMessage(to: JIDLike, message: WAMessage): Promise<SendMessageResult>;
34
+ deleteMessage(jid: JIDLike, key: WAMessageKey, opts?: {
35
+ revokeEveryone?: boolean;
36
+ }): Promise<SendMessageResult>;
37
+ reactToMessage(jid: JIDLike, key: WAMessageKey, emoji: string): Promise<SendMessageResult>;
38
+ /** Send read receipt */
39
+ sendReadReceipt(jid: JIDLike, messageIds: string[], participant?: JIDLike): Promise<void>;
40
+ /** Send typing indicator */
41
+ sendPresenceUpdate(jid: JIDLike, presence: PresenceType): Promise<void>;
42
+ /** Update presence (online/offline) */
43
+ updatePresence(presence: 'available' | 'unavailable'): Promise<void>;
44
+ uploadMedia(media: Buffer | Uint8Array, mediaType: string, mimetype: string, fileName?: string): Promise<any>;
45
+ downloadMedia(url: string, mediaKey: Uint8Array, mediaType: string, mimetype: string, fileName?: string): Promise<any>;
46
+ groupCreate(opts: GroupCreateOptions): Promise<WAGroupMetadata>;
47
+ groupMetadata(jid: JIDLike): Promise<WAGroupMetadata>;
48
+ groupUpdateSubject(jid: JIDLike, subject: string): Promise<void>;
49
+ groupUpdateDescription(jid: JIDLike, desc: string): Promise<void>;
50
+ groupParticipantsUpdate(jid: JIDLike, participants: JIDLike[], action: 'add' | 'remove' | 'promote' | 'demote'): Promise<void>;
51
+ groupLeave(jid: JIDLike): Promise<void>;
52
+ groupInviteCode(jid: JIDLike): Promise<string>;
53
+ groupRevokeInvite(jid: JIDLike): Promise<string>;
54
+ groupJoinViaCode(code: string): Promise<JIDLike>;
55
+ groupSettingUpdate(jid: JIDLike, setting: 'restrict' | 'announce', value: boolean): Promise<void>;
56
+ rejectCall(callId: string, from: JIDLike): Promise<void>;
57
+ chatModify(modification: any, jid: JIDLike): Promise<void>;
58
+ /** Mark chat sebagai read */
59
+ readChat(jid: JIDLike): Promise<void>;
60
+ /** Archive chat */
61
+ archiveChat(jid: JIDLike, archive: boolean): Promise<void>;
62
+ /** Mute chat */
63
+ muteChat(jid: JIDLike, durationMs: number): Promise<void>;
64
+ /** Pin chat */
65
+ pinChat(jid: JIDLike, durationMs: number): Promise<void>;
66
+ /** Delete chat */
67
+ deleteChat(jid: JIDLike): Promise<void>;
68
+ presenceSubscribe(jids: JIDLike[]): Promise<void>;
69
+ end(newConnection?: boolean): Promise<void>;
70
+ /** Get connection state */
71
+ getConnectionState(): 'close' | 'open' | 'connecting';
72
+ }
73
+ export declare class WASocketImpl implements WASocket {
74
+ ev: WAEventEmitter;
75
+ authState: AuthState;
76
+ user: {
77
+ id: string;
78
+ name?: string;
79
+ } | undefined;
80
+ private logger;
81
+ private ws;
82
+ private config;
83
+ private messageSender;
84
+ private messageReceiver;
85
+ private mediaUploader;
86
+ private mediaDownloader;
87
+ private groupManager;
88
+ private callHandler;
89
+ private pendingTracker;
90
+ private iqHandlers;
91
+ private qrRefreshManager;
92
+ private rateLimiter;
93
+ private connectionState;
94
+ skdm: SKDM | null;
95
+ private heartbeat;
96
+ private idempotencyCache;
97
+ private groupEventCoalescer;
98
+ private historySyncManager;
99
+ private decryptionRetryQueue;
100
+ private messageQueue;
101
+ private chunkedUploader;
102
+ private reconnector;
103
+ healthMonitor: HealthMonitor;
104
+ webhookManager: WebhookManager;
105
+ circuitBreaker: CircuitBreaker;
106
+ rateLimitTracker: RateLimitTracker;
107
+ messagePersistence: MessagePersistence;
108
+ recoveryManager: RecoveryManager;
109
+ private reconnectTimer;
110
+ private reconnectAttempts;
111
+ constructor(config: WaliwaConfig | undefined, authState: AuthState);
112
+ /**
113
+ * Setup recovery handlers - bind ke internal WASocket methods
114
+ */
115
+ private setupRecoveryHandlers;
116
+ /**
117
+ * Start connection ke WhatsApp server
118
+ */
119
+ connect(): Promise<void>;
120
+ /**
121
+ * Handle incoming data dari WebSocket
122
+ */
123
+ private handleIncomingData;
124
+ private handleChatNode;
125
+ private handlePresenceNode;
126
+ private handleNotificationNode;
127
+ private handleDisconnect;
128
+ /**
129
+ * Start QR-based authentication
130
+ */
131
+ private startQRAuth;
132
+ /**
133
+ * Send login message untuk existing session
134
+ */
135
+ private sendLogin;
136
+ private send;
137
+ logout(): Promise<void>;
138
+ refreshQR(): Promise<QRGenerationData>;
139
+ requestPairingCode(phoneNumber: string): Promise<PairingCodeResult>;
140
+ sendMessage(jid: JIDLike, content: MessageContent, opts?: any): Promise<SendMessageResult>;
141
+ forwardMessage(to: JIDLike, message: WAMessage): Promise<SendMessageResult>;
142
+ deleteMessage(jid: JIDLike, key: WAMessageKey, opts?: {
143
+ revokeEveryone?: boolean;
144
+ }): Promise<SendMessageResult>;
145
+ reactToMessage(jid: JIDLike, key: WAMessageKey, emoji: string): Promise<SendMessageResult>;
146
+ sendReadReceipt(jid: JIDLike, messageIds: string[], participant?: JIDLike): Promise<void>;
147
+ sendPresenceUpdate(jid: JIDLike, presence: PresenceType): Promise<void>;
148
+ updatePresence(presence: 'available' | 'unavailable'): Promise<void>;
149
+ uploadMedia(media: Buffer | Uint8Array, mediaType: string, mimetype: string, fileName?: string): Promise<any>;
150
+ downloadMedia(url: string, mediaKey: Uint8Array, mediaType: string, mimetype: string, fileName?: string): Promise<any>;
151
+ groupCreate(opts: GroupCreateOptions): Promise<WAGroupMetadata>;
152
+ groupMetadata(jid: JIDLike): Promise<WAGroupMetadata>;
153
+ groupUpdateSubject(jid: JIDLike, subject: string): Promise<void>;
154
+ groupUpdateDescription(jid: JIDLike, desc: string): Promise<void>;
155
+ groupParticipantsUpdate(jid: JIDLike, participants: JIDLike[], action: 'add' | 'remove' | 'promote' | 'demote'): Promise<void>;
156
+ groupLeave(jid: JIDLike): Promise<void>;
157
+ groupInviteCode(jid: JIDLike): Promise<string>;
158
+ groupRevokeInvite(jid: JIDLike): Promise<string>;
159
+ groupJoinViaCode(code: string): Promise<JIDLike>;
160
+ groupSettingUpdate(jid: JIDLike, setting: 'restrict' | 'announce', value: boolean): Promise<void>;
161
+ rejectCall(callId: string, from: JIDLike): Promise<void>;
162
+ chatModify(modification: any, jid: JIDLike): Promise<void>;
163
+ readChat(jid: JIDLike): Promise<void>;
164
+ archiveChat(jid: JIDLike, archive: boolean): Promise<void>;
165
+ muteChat(jid: JIDLike, durationMs: number): Promise<void>;
166
+ pinChat(jid: JIDLike, durationMs: number): Promise<void>;
167
+ deleteChat(jid: JIDLike): Promise<void>;
168
+ presenceSubscribe(jids: JIDLike[]): Promise<void>;
169
+ end(newConnection?: boolean): Promise<void>;
170
+ /**
171
+ * Get SKDM (Store Key Data Manager) instance
172
+ */
173
+ getSKDM(): SKDM | null;
174
+ /**
175
+ * Get health status
176
+ */
177
+ getHealth(): import("../features/index.js").HealthStatus;
178
+ /**
179
+ * Get SKDM stats (pre-keys, sessions, identities)
180
+ */
181
+ getSKDMStats(): import("../skdm/index.js").SKDMStats | undefined;
182
+ /**
183
+ * Get system stats (queue size, circuit breakers, rate limits)
184
+ */
185
+ getSystemStats(): {
186
+ messageQueue: {
187
+ totalQueues: number;
188
+ totalPending: number;
189
+ activeCount: number;
190
+ maxConcurrency: number;
191
+ };
192
+ circuitBreakers: {
193
+ jid: string;
194
+ failureCount: number;
195
+ lastFailureTime: number;
196
+ }[];
197
+ rateLimits: {
198
+ trackedRecipients: number;
199
+ limits: {
200
+ perSecond: number;
201
+ perMinute: number;
202
+ perHour: number;
203
+ };
204
+ };
205
+ webhooks: {
206
+ sent: number;
207
+ failed: number;
208
+ retried: number;
209
+ pending: number;
210
+ deadLettered: number;
211
+ };
212
+ messagePersistence: {
213
+ total: number;
214
+ pending: number;
215
+ failed: number;
216
+ };
217
+ idempotency: {
218
+ size: number;
219
+ hits: number;
220
+ misses: number;
221
+ hitRate: number;
222
+ };
223
+ historySync: {
224
+ isSyncing: boolean;
225
+ totalSynced: number;
226
+ chatsSynced: number;
227
+ durationMs: number;
228
+ };
229
+ health: import("../features/index.js").HealthStatus;
230
+ recovery: {
231
+ totalRecoveries: number;
232
+ successfulRecoveries: number;
233
+ failedRecoveries: number;
234
+ successRate: number;
235
+ byReason: Record<string, {
236
+ success: number;
237
+ failure: number;
238
+ }>;
239
+ };
240
+ };
241
+ /**
242
+ * Get recovery stats - shows recovery success/failure rate per disconnect reason
243
+ */
244
+ getRecoveryStats(): {
245
+ totalRecoveries: number;
246
+ successfulRecoveries: number;
247
+ failedRecoveries: number;
248
+ successRate: number;
249
+ byReason: Record<string, {
250
+ success: number;
251
+ failure: number;
252
+ }>;
253
+ };
254
+ /**
255
+ * Get current recovery context (jika lagi recovering)
256
+ */
257
+ getCurrentRecovery(): import("../recovery/index.js").RecoveryContext | null;
258
+ /**
259
+ * Check apakah lagi dalam proses recovery
260
+ */
261
+ isRecovering(): boolean;
262
+ /**
263
+ * Manually trigger recovery untuk a reason (untuk testing)
264
+ */
265
+ triggerRecovery(reason: DisconnectReason, code?: number, message?: string): Promise<boolean>;
266
+ /**
267
+ * Register webhook
268
+ */
269
+ registerWebhook(config: import('../features/index.js').WebhookConfig): void;
270
+ /**
271
+ * Retry failed messages dari persistence
272
+ */
273
+ retryFailedMessages(): Promise<void>;
274
+ /**
275
+ * Reset circuit breaker untuk a recipient
276
+ */
277
+ resetCircuitBreaker(recipientJid: string): void;
278
+ getConnectionState(): 'close' | 'open' | 'connecting';
279
+ }
280
+ /**
281
+ * Create WhatsApp socket - main entry point
282
+ * Mirip Baileys' makeWASocket()
283
+ *
284
+ * @example
285
+ * ```ts
286
+ * import { makeWASocket, useFileAuthState } from 'waliwa';
287
+ *
288
+ * const { state } = await useFileAuthState('./auth');
289
+ * const sock = makeWASocket({ authState: state, printQRInTerminal: true });
290
+ * await sock.connect();
291
+ *
292
+ * sock.ev.on('message.upsert', async ({ messages }) => {
293
+ * for (const msg of messages) {
294
+ * console.log('Got message:', msg);
295
+ * }
296
+ * });
297
+ * ```
298
+ */
299
+ export declare function makeWASocket(config: WaliwaConfig): WASocket;
300
+ //# sourceMappingURL=wa-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wa-socket.d.ts","sourceRoot":"","sources":["../../src/socket/wa-socket.ts"],"names":[],"mappings":"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"}