@link-os/whatsapp 0.1.0 → 0.1.2

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 (54) hide show
  1. package/dist/client.d.ts +24 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +254 -64
  4. package/dist/client.js.map +1 -1
  5. package/dist/normalize.d.ts +17 -0
  6. package/dist/normalize.d.ts.map +1 -0
  7. package/dist/normalize.js +61 -0
  8. package/dist/normalize.js.map +1 -0
  9. package/package.json +2 -2
  10. package/src/client.ts +285 -67
  11. package/src/normalize.ts +70 -0
  12. package/tsconfig.tsbuildinfo +1 -1
  13. package/auth_info_baileys/app-state-sync-key-AAAAANpA.json +0 -1
  14. package/auth_info_baileys/app-state-sync-key-AAAAANpB.json +0 -1
  15. package/auth_info_baileys/app-state-sync-key-AAAAANpC.json +0 -1
  16. package/auth_info_baileys/app-state-sync-key-AAAAANpD.json +0 -1
  17. package/auth_info_baileys/app-state-sync-key-AAAAANpE.json +0 -1
  18. package/auth_info_baileys/app-state-sync-key-AAAAANpF.json +0 -1
  19. package/auth_info_baileys/app-state-sync-key-AAAAANpG.json +0 -1
  20. package/auth_info_baileys/app-state-sync-key-AAAAANpI.json +0 -1
  21. package/auth_info_baileys/app-state-sync-key-AAAAANpJ.json +0 -1
  22. package/auth_info_baileys/app-state-sync-key-ADMAANpI.json +0 -1
  23. package/auth_info_baileys/app-state-sync-version-regular_low.json +0 -1
  24. package/auth_info_baileys/creds.json +0 -1
  25. package/auth_info_baileys/pre-key-1.json +0 -1
  26. package/auth_info_baileys/pre-key-10.json +0 -1
  27. package/auth_info_baileys/pre-key-11.json +0 -1
  28. package/auth_info_baileys/pre-key-12.json +0 -1
  29. package/auth_info_baileys/pre-key-13.json +0 -1
  30. package/auth_info_baileys/pre-key-14.json +0 -1
  31. package/auth_info_baileys/pre-key-15.json +0 -1
  32. package/auth_info_baileys/pre-key-16.json +0 -1
  33. package/auth_info_baileys/pre-key-17.json +0 -1
  34. package/auth_info_baileys/pre-key-18.json +0 -1
  35. package/auth_info_baileys/pre-key-19.json +0 -1
  36. package/auth_info_baileys/pre-key-2.json +0 -1
  37. package/auth_info_baileys/pre-key-20.json +0 -1
  38. package/auth_info_baileys/pre-key-22.json +0 -1
  39. package/auth_info_baileys/pre-key-23.json +0 -1
  40. package/auth_info_baileys/pre-key-24.json +0 -1
  41. package/auth_info_baileys/pre-key-25.json +0 -1
  42. package/auth_info_baileys/pre-key-26.json +0 -1
  43. package/auth_info_baileys/pre-key-27.json +0 -1
  44. package/auth_info_baileys/pre-key-28.json +0 -1
  45. package/auth_info_baileys/pre-key-29.json +0 -1
  46. package/auth_info_baileys/pre-key-3.json +0 -1
  47. package/auth_info_baileys/pre-key-30.json +0 -1
  48. package/auth_info_baileys/pre-key-4.json +0 -1
  49. package/auth_info_baileys/pre-key-5.json +0 -1
  50. package/auth_info_baileys/pre-key-6.json +0 -1
  51. package/auth_info_baileys/pre-key-7.json +0 -1
  52. package/auth_info_baileys/pre-key-8.json +0 -1
  53. package/auth_info_baileys/pre-key-9.json +0 -1
  54. package/auth_info_baileys/session-918477881793.0.json +0 -1
package/dist/client.d.ts CHANGED
@@ -1,7 +1,14 @@
1
1
  import type { PlatformClient } from '@link-os/types';
2
+ export interface AllowedContext {
3
+ allowedJid: string;
4
+ name: string;
5
+ type: string;
6
+ image?: string;
7
+ }
2
8
  export interface WhatsAppClientOptions {
3
9
  sessionId: string;
4
10
  authDir?: string;
11
+ allowedContexts?: AllowedContext[];
5
12
  }
6
13
  export declare class WhatsAppClient implements PlatformClient {
7
14
  readonly platform: "whatsapp";
@@ -12,11 +19,28 @@ export declare class WhatsAppClient implements PlatformClient {
12
19
  private messageHandler?;
13
20
  private statusHandler?;
14
21
  private stopped;
22
+ private isStarting;
23
+ private reconnectAttempts;
24
+ private maxReconnectAttempts;
25
+ private resetTimeout;
26
+ private allowedJids;
15
27
  constructor(options: WhatsAppClientOptions);
16
28
  on(event: 'message' | 'status', handler: any): void;
17
29
  start(): Promise<void>;
18
30
  private extractMessageContent;
19
31
  sendMessage(to: string, text: string): Promise<void>;
32
+ startTyping(jid: string): Promise<void>;
33
+ stopTyping(jid: string): Promise<void>;
34
+ reactToMessage(jid: string, key: any, emoji: string): Promise<void>;
35
+ markRead(jid: string, key: any): Promise<void>;
36
+ updateConfiguration(config: Partial<WhatsAppClientOptions>): Promise<void>;
20
37
  stop(): Promise<void>;
38
+ deleteSession(): Promise<void>;
39
+ getAvailableContexts(): Promise<{
40
+ id: string;
41
+ name: string;
42
+ type: 'group' | 'user';
43
+ image?: string;
44
+ }[]>;
21
45
  }
22
46
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAA4B,MAAM,gBAAgB,CAAC;AAI/E,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAe,YAAW,cAAc;IACjD,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IACxC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAA2G;IACzH,OAAO,CAAC,cAAc,CAAC,CAA6C;IACpE,OAAO,CAAC,aAAa,CAAC,CAAiD;IACvE,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,qBAAqB;IAO1C,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAQ7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4G5B,OAAO,CAAC,qBAAqB;IAcvB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO9B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAA4B,MAAM,gBAAgB,CAAC;AAK/E,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACtC;AAED,qBAAa,cAAe,YAAW,cAAc;IACjD,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IACxC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAA2G;IACzH,OAAO,CAAC,cAAc,CAAC,CAA6C;IACpE,OAAO,CAAC,aAAa,CAAC,CAAiD;IACvE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,WAAW,CAAgB;gBAIvB,OAAO,EAAE,qBAAqB;IAgB1C,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;IAQ7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuN5B,OAAO,CAAC,qBAAqB;IAcvB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAarB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B,oBAAoB,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAgChH"}
package/dist/client.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import makeWASocket, { DisconnectReason, useMultiFileAuthState, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, } from '@whiskeysockets/baileys';
3
3
  import qrcode from 'qrcode-terminal';
4
4
  import pino from 'pino';
5
+ import { normalizeWhatsAppTarget } from './normalize.js';
5
6
  const VERSION = '0.1.0';
6
7
  export class WhatsAppClient {
7
8
  platform = 'whatsapp';
@@ -12,11 +13,27 @@ export class WhatsAppClient {
12
13
  messageHandler;
13
14
  statusHandler;
14
15
  stopped = false;
16
+ isStarting = false;
17
+ reconnectAttempts = 0;
18
+ maxReconnectAttempts = 3;
19
+ resetTimeout = null;
20
+ allowedJids = [];
21
+ // TODO: Implement persistent storage to save contacts across restarts.
22
+ // Currently, contacts are only in-memory and lost on restart.
15
23
  constructor(options) {
16
24
  this.options = {
17
25
  authDir: options.authDir || `.auth/whatsapp/${options.sessionId}`,
18
26
  ...options
19
27
  };
28
+ // Initialize allowedJids from allowedContexts
29
+ if (options.allowedContexts && options.allowedContexts.length > 0) {
30
+ this.allowedJids = options.allowedContexts
31
+ .map(ctx => normalizeWhatsAppTarget(ctx.allowedJid))
32
+ .filter((jid) => !!jid);
33
+ }
34
+ else {
35
+ this.allowedJids = [];
36
+ }
20
37
  }
21
38
  on(event, handler) {
22
39
  if (event === 'message') {
@@ -27,70 +44,113 @@ export class WhatsAppClient {
27
44
  }
28
45
  }
29
46
  async start() {
47
+ if (this.isStarting) {
48
+ return;
49
+ }
50
+ this.isStarting = true;
30
51
  this.stopped = false;
31
- const { state, saveCreds } = await useMultiFileAuthState(this.options.authDir);
32
- const { version } = await fetchLatestBaileysVersion();
33
- console.log(`Using Baileys version: ${version.join('.')}`);
34
- this.sock = makeWASocket.default ? makeWASocket.default({
35
- auth: {
36
- creds: state.creds,
37
- keys: makeCacheableSignalKeyStore(state.keys, this.logger),
38
- },
39
- version,
40
- logger: this.logger,
41
- printQRInTerminal: false,
42
- browser: ['linkos', 'cli', VERSION],
43
- syncFullHistory: false,
44
- markOnlineOnConnect: false,
45
- shouldIgnoreJid: (jid) => jid.includes('@broadcast') || jid.includes('@newsletter')
46
- }) : makeWASocket({
47
- auth: {
48
- creds: state.creds,
49
- keys: makeCacheableSignalKeyStore(state.keys, this.logger),
50
- },
51
- version,
52
- logger: this.logger,
53
- printQRInTerminal: false,
54
- browser: ['linkos', 'cli', VERSION],
55
- syncFullHistory: false,
56
- markOnlineOnConnect: false,
57
- shouldIgnoreJid: (jid) => jid.includes('@broadcast') || jid.includes('@newsletter')
58
- });
59
- if (this.sock.ws && typeof this.sock.ws.on === 'function') {
60
- this.sock.ws.on('error', (err) => {
61
- console.error('WebSocket error:', err.message);
62
- });
52
+ // Clear any pending reset
53
+ if (this.resetTimeout) {
54
+ clearTimeout(this.resetTimeout);
55
+ this.resetTimeout = null;
63
56
  }
64
- this.sock.ev.on('connection.update', async (update) => {
65
- const { connection, lastDisconnect, qr } = update;
66
- if (qr) {
67
- console.log('\n📱 Scan this QR code with WhatsApp (Linked Devices):\n');
68
- qrcode.generate(qr, { small: true });
69
- if (this.statusHandler) {
70
- this.statusHandler({ type: 'qr', data: qr });
71
- }
57
+ try {
58
+ console.log(`[WhatsAppClient] Initializing auth state for ${this.options.sessionId}...`);
59
+ const { state, saveCreds } = await useMultiFileAuthState(this.options.authDir);
60
+ console.log(`[WhatsAppClient] Fetching latest Baileys version...`);
61
+ const { version } = await fetchLatestBaileysVersion();
62
+ console.log(`Using Baileys version: ${version.join('.')}`);
63
+ // ... (rest of start)
64
+ if (this.allowedJids.length > 0) {
65
+ console.log(`🔒 Allowlist enabled: ${this.allowedJids.length} IDs allowed.`);
72
66
  }
73
- if (connection === 'close') {
74
- const statusCode = lastDisconnect?.error?.output?.statusCode;
75
- const shouldReconnect = statusCode !== DisconnectReason.loggedOut;
76
- console.log(`Connection closed. Status: ${statusCode}, Will reconnect: ${shouldReconnect}`);
77
- if (shouldReconnect && !this.reconnecting && !this.stopped) {
78
- this.reconnecting = true;
79
- console.log('Reconnecting in 5 seconds...');
80
- setTimeout(() => {
81
- this.reconnecting = false;
82
- this.start();
83
- }, 5000);
84
- }
67
+ const isDefaultImport = !!makeWASocket.default;
68
+ const sockOptions = {
69
+ auth: {
70
+ creds: state.creds,
71
+ keys: makeCacheableSignalKeyStore(state.keys, this.logger),
72
+ },
73
+ version,
74
+ logger: this.logger,
75
+ printQRInTerminal: false,
76
+ browser: ['Linkos', 'Chrome', '121.0.6167.140'],
77
+ syncFullHistory: false,
78
+ markOnlineOnConnect: true,
79
+ connectTimeoutMs: 60000,
80
+ defaultQueryTimeoutMs: 60000,
81
+ };
82
+ this.sock = isDefaultImport ? makeWASocket.default(sockOptions) : makeWASocket(sockOptions);
83
+ if (this.sock.ws && typeof this.sock.ws.on === 'function') {
84
+ this.sock.ws.on('error', (err) => {
85
+ console.error('WebSocket error:', err.message);
86
+ });
85
87
  }
86
- else if (connection === 'open') {
87
- console.log('✅ Connected to WhatsApp');
88
- if (this.statusHandler) {
89
- this.statusHandler({ type: 'connected' });
88
+ this.sock.ev.on('connection.update', async (update) => {
89
+ const { connection, lastDisconnect, qr } = update;
90
+ if (qr) {
91
+ console.log('\n📱 Scan this QR code with WhatsApp (Linked Devices):\n');
92
+ qrcode.generate(qr, { small: true });
93
+ if (this.statusHandler) {
94
+ this.statusHandler({ type: 'qr', data: qr });
95
+ }
96
+ }
97
+ if (connection === 'close') {
98
+ const statusCode = lastDisconnect?.error?.output?.statusCode;
99
+ const shouldReconnect = statusCode !== DisconnectReason.loggedOut;
100
+ console.log(`Connection closed. Status: ${statusCode}, Will reconnect: ${shouldReconnect}`);
101
+ if (this.resetTimeout) {
102
+ clearTimeout(this.resetTimeout);
103
+ this.resetTimeout = null;
104
+ }
105
+ if (shouldReconnect && !this.reconnecting && !this.stopped) {
106
+ if (this.reconnectAttempts < this.maxReconnectAttempts) {
107
+ this.reconnectAttempts++;
108
+ this.reconnecting = true;
109
+ if (this.statusHandler) {
110
+ this.statusHandler({ type: 'reconnecting', data: { attempt: this.reconnectAttempts, max: this.maxReconnectAttempts } });
111
+ }
112
+ console.log(`Reconnecting (Attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts}) in 5 seconds...`);
113
+ setTimeout(() => {
114
+ this.reconnecting = false;
115
+ this.start();
116
+ }, 5000);
117
+ }
118
+ else {
119
+ console.error(`[WhatsApp] Max reconnection attempts (${this.maxReconnectAttempts}) reached. Stopping.`);
120
+ if (this.statusHandler) {
121
+ this.statusHandler({ type: 'disconnected', data: { reason: 'max_retries' } });
122
+ }
123
+ this.stop();
124
+ }
125
+ }
126
+ else if (this.statusHandler && !shouldReconnect) {
127
+ this.statusHandler({ type: 'disconnected' });
128
+ }
90
129
  }
130
+ else if (connection === 'open') {
131
+ console.log('✅ Connected to WhatsApp');
132
+ this.isStarting = false;
133
+ // Only reset attempts after 10 seconds of stable connection
134
+ if (this.resetTimeout)
135
+ clearTimeout(this.resetTimeout);
136
+ this.resetTimeout = setTimeout(() => {
137
+ this.reconnectAttempts = 0;
138
+ this.resetTimeout = null;
139
+ }, 10000);
140
+ if (this.statusHandler) {
141
+ this.statusHandler({ type: 'connected' });
142
+ }
143
+ }
144
+ });
145
+ this.sock.ev.on('creds.update', saveCreds);
146
+ }
147
+ catch (error) {
148
+ this.isStarting = false;
149
+ console.error('[WhatsApp] Failed to start:', error);
150
+ if (this.statusHandler) {
151
+ this.statusHandler({ type: 'error', data: error });
91
152
  }
92
- });
93
- this.sock.ev.on('creds.update', saveCreds);
153
+ }
94
154
  this.sock.ev.on('messages.upsert', async ({ messages, type }) => {
95
155
  if (type !== 'notify')
96
156
  return;
@@ -99,26 +159,75 @@ export class WhatsAppClient {
99
159
  continue;
100
160
  if (msg.key.remoteJid === 'status@broadcast')
101
161
  continue;
162
+ const remoteJid = msg.key.remoteJid;
163
+ const participant = msg.key.participant || remoteJid;
164
+ const isGroup = remoteJid?.endsWith('@g.us') || false;
165
+ // Allowlist Check
166
+ if (this.allowedJids.length > 0) {
167
+ const isAllowed = this.allowedJids.some(allowed => remoteJid?.includes(allowed) || participant?.includes(allowed));
168
+ if (!isAllowed) {
169
+ // console.log(`🚫 Ignoring message from unauthorized source: ${remoteJid}`);
170
+ continue;
171
+ }
172
+ }
173
+ // Group Mention Policy: Only respond if tagged
174
+ if (isGroup && this.sock?.user?.id) {
175
+ const botJid = normalizeWhatsAppTarget(this.sock.user.id);
176
+ const botLid = this.sock.user.lid ? normalizeWhatsAppTarget(this.sock.user.lid) : null;
177
+ const message = msg.message;
178
+ const contextInfo = message?.extendedTextMessage?.contextInfo ||
179
+ message?.imageMessage?.contextInfo ||
180
+ message?.videoMessage?.contextInfo ||
181
+ message?.documentMessage?.contextInfo ||
182
+ message?.audioMessage?.contextInfo ||
183
+ message?.contextInfo;
184
+ const mentions = contextInfo?.mentionedJid || [];
185
+ // Normalize all mentions and the bot ID for comparison
186
+ const isMentioned = mentions.some((m) => {
187
+ const normM = normalizeWhatsAppTarget(m);
188
+ const match = (botJid && normM === botJid) ||
189
+ (botLid && normM === botLid) ||
190
+ m === this.sock.user.id ||
191
+ (this.sock.user.lid && m === this.sock.user.lid);
192
+ return match;
193
+ });
194
+ // Check if it's a reply to the bot
195
+ const quotedParticipant = contextInfo?.participant;
196
+ const isReplyToBot = quotedParticipant && (normalizeWhatsAppTarget(quotedParticipant) === botJid ||
197
+ normalizeWhatsAppTarget(quotedParticipant) === botLid ||
198
+ quotedParticipant === this.sock.user.id ||
199
+ (this.sock.user.lid && quotedParticipant === this.sock.user.lid));
200
+ if (!isMentioned && !isReplyToBot) {
201
+ continue;
202
+ }
203
+ }
102
204
  const content = this.extractMessageContent(msg);
103
205
  if (!content)
104
206
  continue;
105
207
  if (!this.messageHandler)
106
208
  continue;
107
- const isGroup = msg.key.remoteJid?.endsWith('@g.us') || false;
108
209
  const unifiedMessage = {
109
210
  id: msg.key.id || `wa_${Date.now()}`,
110
211
  platform: 'whatsapp',
111
- userId: msg.key.remoteJid?.replace('@s.whatsapp.net', '') || '',
212
+ userId: remoteJid || '',
112
213
  sessionId: this.options.sessionId,
113
214
  content,
114
215
  messageType: 'text',
115
216
  timestamp: new Date(msg.messageTimestamp * 1000),
116
217
  metadata: {
117
- pushName: msg.pushName,
118
- jid: msg.key.remoteJid,
119
- isGroup
218
+ pushName: msg.pushName || 'Unknown User',
219
+ isGroup,
220
+ participant: isGroup ? participant : undefined,
221
+ jid: remoteJid
120
222
  }
121
223
  };
224
+ // Typing indicator (optional, but keep for UX if stable)
225
+ try {
226
+ // Only start typing if jid is valid
227
+ if (remoteJid)
228
+ await this.startTyping(remoteJid);
229
+ }
230
+ catch (e) { /* ignore */ }
122
231
  await this.messageHandler(unifiedMessage);
123
232
  }
124
233
  });
@@ -144,15 +253,96 @@ export class WhatsAppClient {
144
253
  async sendMessage(to, text) {
145
254
  if (!this.sock)
146
255
  throw new Error('Not connected');
147
- const jid = to.includes('@') ? to : `${to}@s.whatsapp.net`;
256
+ const jid = normalizeWhatsAppTarget(to);
257
+ if (!jid) {
258
+ console.error(`[WhatsApp] Invalid message target: ${to}`);
259
+ return;
260
+ }
148
261
  await this.sock.sendMessage(jid, { text });
149
262
  }
263
+ async startTyping(jid) {
264
+ if (!this.sock)
265
+ return;
266
+ await this.sock.sendPresenceUpdate('composing', jid);
267
+ }
268
+ async stopTyping(jid) {
269
+ if (!this.sock)
270
+ return;
271
+ await this.sock.sendPresenceUpdate('paused', jid);
272
+ }
273
+ async reactToMessage(jid, key, emoji) {
274
+ if (!this.sock)
275
+ return;
276
+ await this.sock.sendMessage(jid, { react: { text: emoji, key } });
277
+ }
278
+ async markRead(jid, key) {
279
+ if (!this.sock)
280
+ return;
281
+ await this.sock.readMessages([key]);
282
+ }
283
+ async updateConfiguration(config) {
284
+ if (config.allowedContexts) {
285
+ this.allowedJids = config.allowedContexts
286
+ .map(ctx => normalizeWhatsAppTarget(ctx.allowedJid))
287
+ .filter((jid) => !!jid);
288
+ console.log(`🔄 Configuration updated: Allowlist now has ${this.allowedJids.length} normalized IDs.`);
289
+ }
290
+ }
150
291
  async stop() {
151
292
  this.stopped = true;
293
+ this.isStarting = false;
294
+ if (this.resetTimeout) {
295
+ clearTimeout(this.resetTimeout);
296
+ this.resetTimeout = null;
297
+ }
152
298
  if (this.sock) {
153
299
  this.sock.end(undefined);
154
300
  this.sock = null;
155
301
  }
156
302
  }
303
+ async deleteSession() {
304
+ await this.stop();
305
+ if (this.options.authDir) {
306
+ const fs = await import('fs/promises');
307
+ try {
308
+ await fs.rm(this.options.authDir, { recursive: true, force: true });
309
+ console.log(`Deleted session directory: ${this.options.authDir}`);
310
+ }
311
+ catch (error) {
312
+ console.error(`Failed to delete session directory: ${error.message}`);
313
+ }
314
+ }
315
+ }
316
+ async getAvailableContexts() {
317
+ if (!this.sock)
318
+ return [];
319
+ const contexts = [];
320
+ try {
321
+ // 1. Groups from direct fetch (most reliable for groups)
322
+ const groups = await this.sock.groupFetchAllParticipating();
323
+ for (const [id, metadata] of Object.entries(groups)) {
324
+ contexts.push({
325
+ id,
326
+ name: metadata.subject || 'Unknown Group',
327
+ type: 'group'
328
+ });
329
+ }
330
+ }
331
+ catch (error) {
332
+ console.error('Failed to fetch contexts:', error);
333
+ }
334
+ // Fetch Profile Pictures (best effort, parallel)
335
+ await Promise.all(contexts.map(async (ctx) => {
336
+ try {
337
+ // Only fetch if we don't have one or to refresh
338
+ ctx.image = await this.sock.profilePictureUrl(ctx.id, 'preview');
339
+ }
340
+ catch (e) {
341
+ // Ignore error (no profile pic or privacy restricted)
342
+ ctx.image = undefined;
343
+ }
344
+ }));
345
+ return contexts;
346
+ }
157
347
  }
158
348
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * WhatsApp JID Normalization following OpenClaw/Baileys patterns.
3
+ */
4
+ /**
5
+ * Clean phone numbers to digits only.
6
+ */
7
+ export declare function normalizeE164(value: string): string;
8
+ /**
9
+ * Check if the JID belongs to a group.
10
+ */
11
+ export declare function isWhatsAppGroupJid(value: string): boolean;
12
+ /**
13
+ * Normalize input string into a valid Baileys JID.
14
+ * Handles phone numbers, group IDs, and existing JIDs with device suffixes.
15
+ */
16
+ export declare function normalizeWhatsAppTarget(value: string): string | null;
17
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AACA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAaD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BpE"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * WhatsApp JID Normalization following OpenClaw/Baileys patterns.
3
+ */
4
+ const WHATSAPP_USER_JID_RE = /^(\d+)(?::\d+)?@s\.whatsapp\.net$/i;
5
+ const WHATSAPP_LID_RE = /^(\d+)(?::\d+)?@lid$/i;
6
+ /**
7
+ * Clean phone numbers to digits only.
8
+ */
9
+ export function normalizeE164(value) {
10
+ return value.replace(/\D/g, "");
11
+ }
12
+ function stripWhatsAppTargetPrefixes(value) {
13
+ let candidate = value.trim();
14
+ for (;;) {
15
+ const before = candidate;
16
+ candidate = candidate.replace(/^whatsapp:/i, "").trim();
17
+ if (candidate === before) {
18
+ return candidate;
19
+ }
20
+ }
21
+ }
22
+ /**
23
+ * Check if the JID belongs to a group.
24
+ */
25
+ export function isWhatsAppGroupJid(value) {
26
+ const candidate = stripWhatsAppTargetPrefixes(value);
27
+ const lower = candidate.toLowerCase();
28
+ return lower.endsWith("@g.us");
29
+ }
30
+ /**
31
+ * Normalize input string into a valid Baileys JID.
32
+ * Handles phone numbers, group IDs, and existing JIDs with device suffixes.
33
+ */
34
+ export function normalizeWhatsAppTarget(value) {
35
+ const candidate = stripWhatsAppTargetPrefixes(value);
36
+ if (!candidate)
37
+ return null;
38
+ // Handle Groups
39
+ if (isWhatsAppGroupJid(candidate)) {
40
+ const localPart = candidate.slice(0, candidate.length - "@g.us".length);
41
+ return `${localPart}@g.us`;
42
+ }
43
+ // Handle standard user JIDs (strip device suffixes like :5)
44
+ if (WHATSAPP_USER_JID_RE.test(candidate)) {
45
+ const match = candidate.match(WHATSAPP_USER_JID_RE);
46
+ return `${match[1]}@s.whatsapp.net`;
47
+ }
48
+ // Handle LIDs
49
+ if (WHATSAPP_LID_RE.test(candidate)) {
50
+ const match = candidate.match(WHATSAPP_LID_RE);
51
+ return `${match[1]}@lid`;
52
+ }
53
+ // Handle raw phone numbers or strings without @
54
+ if (!candidate.includes("@")) {
55
+ const normalized = normalizeE164(candidate);
56
+ // Only accept if it has at least 5 digits (sanity check for phone numbers)
57
+ return normalized.length >= 5 ? `${normalized}@s.whatsapp.net` : null;
58
+ }
59
+ return null;
60
+ }
61
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,MAAM,oBAAoB,GAAG,oCAAoC,CAAC;AAClE,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAa;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,SAAU,CAAC;QACP,MAAM,MAAM,GAAG,SAAS,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC5C,MAAM,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACjD,MAAM,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,gBAAgB;IAChB,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACxE,OAAO,GAAG,SAAS,OAAO,CAAC;IAC/B,CAAC;IAED,4DAA4D;IAC5D,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpD,OAAO,GAAG,KAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACzC,CAAC;IAED,cAAc;IACd,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,OAAO,GAAG,KAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAC5C,2EAA2E;QAC3E,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@link-os/whatsapp",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  }
12
12
  },
13
13
  "dependencies": {
14
- "@whiskeysockets/baileys": "^6.6.0",
14
+ "@whiskeysockets/baileys": "^7.0.0-rc.9",
15
15
  "@hapi/boom": "^10.0.1",
16
16
  "ws": "^8.16.0",
17
17
  "qrcode-terminal": "^0.12.0",