@arcaelas/whatsapp 4.5.0 → 5.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 (95) hide show
  1. package/build/cjs/index.d.ts +6 -4
  2. package/build/cjs/index.js +22 -2
  3. package/build/cjs/index.js.map +1 -1
  4. package/build/cjs/lib/bot/decorator.d.ts +2 -0
  5. package/build/cjs/lib/bot/decorator.js +6 -0
  6. package/build/cjs/lib/bot/decorator.js.map +1 -1
  7. package/build/cjs/lib/chat/index.d.ts +340 -204
  8. package/build/cjs/lib/chat/index.js +225 -213
  9. package/build/cjs/lib/chat/index.js.map +1 -1
  10. package/build/cjs/lib/contact/index.d.ts +162 -179
  11. package/build/cjs/lib/contact/index.js +96 -190
  12. package/build/cjs/lib/contact/index.js.map +1 -1
  13. package/build/cjs/lib/internal.d.ts +40 -0
  14. package/build/cjs/lib/internal.js +39 -0
  15. package/build/cjs/lib/internal.js.map +1 -0
  16. package/build/cjs/lib/message/index.d.ts +462 -289
  17. package/build/cjs/lib/message/index.js +825 -741
  18. package/build/cjs/lib/message/index.js.map +1 -1
  19. package/build/cjs/lib/status/index.d.ts +60 -70
  20. package/build/cjs/lib/status/index.js +106 -111
  21. package/build/cjs/lib/status/index.js.map +1 -1
  22. package/build/cjs/lib/store/engine/index.d.ts +21 -7
  23. package/build/cjs/lib/store/engine/index.js +6 -3
  24. package/build/cjs/lib/store/engine/index.js.map +1 -1
  25. package/build/cjs/lib/store/engine/lib/file_system/index.d.ts +38 -8
  26. package/build/cjs/lib/store/engine/lib/file_system/index.js +92 -67
  27. package/build/cjs/lib/store/engine/lib/file_system/index.js.map +1 -1
  28. package/build/cjs/lib/store/engine/lib/index.d.ts +112 -0
  29. package/build/cjs/lib/store/engine/lib/index.js +213 -0
  30. package/build/cjs/lib/store/engine/lib/index.js.map +1 -0
  31. package/build/cjs/lib/store/engine/lib/redis/index.d.ts +28 -13
  32. package/build/cjs/lib/store/engine/lib/redis/index.js +56 -42
  33. package/build/cjs/lib/store/engine/lib/redis/index.js.map +1 -1
  34. package/build/cjs/lib/store/engine/lib/s3/index.d.ts +44 -1
  35. package/build/cjs/lib/store/engine/lib/s3/index.js +112 -64
  36. package/build/cjs/lib/store/engine/lib/s3/index.js.map +1 -1
  37. package/build/cjs/lib/store/engine/lib/sqlite/index.d.ts +98 -0
  38. package/build/cjs/lib/store/engine/lib/sqlite/index.js +114 -0
  39. package/build/cjs/lib/store/engine/lib/sqlite/index.js.map +1 -0
  40. package/build/cjs/lib/store/index.d.ts +7 -3
  41. package/build/cjs/lib/store/index.js +14 -4
  42. package/build/cjs/lib/store/index.js.map +1 -1
  43. package/build/cjs/lib/whatsapp/index.d.ts +106 -68
  44. package/build/cjs/lib/whatsapp/index.js +380 -170
  45. package/build/cjs/lib/whatsapp/index.js.map +1 -1
  46. package/build/cjs/test.js +5 -4
  47. package/build/cjs/test.js.map +1 -1
  48. package/build/esm/index.d.ts +6 -4
  49. package/build/esm/index.js +5 -2
  50. package/build/esm/index.js.map +1 -1
  51. package/build/esm/lib/bot/decorator.d.ts +2 -0
  52. package/build/esm/lib/bot/decorator.js +6 -0
  53. package/build/esm/lib/bot/decorator.js.map +1 -1
  54. package/build/esm/lib/chat/index.d.ts +340 -204
  55. package/build/esm/lib/chat/index.js +225 -213
  56. package/build/esm/lib/chat/index.js.map +1 -1
  57. package/build/esm/lib/contact/index.d.ts +162 -179
  58. package/build/esm/lib/contact/index.js +96 -189
  59. package/build/esm/lib/contact/index.js.map +1 -1
  60. package/build/esm/lib/internal.d.ts +40 -0
  61. package/build/esm/lib/internal.js +35 -0
  62. package/build/esm/lib/internal.js.map +1 -0
  63. package/build/esm/lib/message/index.d.ts +462 -289
  64. package/build/esm/lib/message/index.js +820 -736
  65. package/build/esm/lib/message/index.js.map +1 -1
  66. package/build/esm/lib/status/index.d.ts +60 -70
  67. package/build/esm/lib/status/index.js +105 -110
  68. package/build/esm/lib/status/index.js.map +1 -1
  69. package/build/esm/lib/store/engine/index.d.ts +21 -7
  70. package/build/esm/lib/store/engine/index.js +4 -2
  71. package/build/esm/lib/store/engine/index.js.map +1 -1
  72. package/build/esm/lib/store/engine/lib/file_system/index.d.ts +38 -8
  73. package/build/esm/lib/store/engine/lib/file_system/index.js +92 -67
  74. package/build/esm/lib/store/engine/lib/file_system/index.js.map +1 -1
  75. package/build/esm/lib/store/engine/lib/index.d.ts +112 -0
  76. package/build/esm/lib/store/engine/lib/index.js +206 -0
  77. package/build/esm/lib/store/engine/lib/index.js.map +1 -0
  78. package/build/esm/lib/store/engine/lib/redis/index.d.ts +28 -13
  79. package/build/esm/lib/store/engine/lib/redis/index.js +54 -40
  80. package/build/esm/lib/store/engine/lib/redis/index.js.map +1 -1
  81. package/build/esm/lib/store/engine/lib/s3/index.d.ts +44 -1
  82. package/build/esm/lib/store/engine/lib/s3/index.js +111 -63
  83. package/build/esm/lib/store/engine/lib/s3/index.js.map +1 -1
  84. package/build/esm/lib/store/engine/lib/sqlite/index.d.ts +98 -0
  85. package/build/esm/lib/store/engine/lib/sqlite/index.js +110 -0
  86. package/build/esm/lib/store/engine/lib/sqlite/index.js.map +1 -0
  87. package/build/esm/lib/store/index.d.ts +7 -3
  88. package/build/esm/lib/store/index.js +13 -4
  89. package/build/esm/lib/store/index.js.map +1 -1
  90. package/build/esm/lib/whatsapp/index.d.ts +106 -68
  91. package/build/esm/lib/whatsapp/index.js +382 -172
  92. package/build/esm/lib/whatsapp/index.js.map +1 -1
  93. package/build/esm/test.js +5 -4
  94. package/build/esm/test.js.map +1 -1
  95. package/package.json +2 -2
@@ -3,12 +3,10 @@
3
3
  * @description Orquestador principal del cliente WhatsApp v3.
4
4
  * Main orchestrator of the WhatsApp v3 client.
5
5
  */
6
- import { type WASocket } from 'baileys';
7
- import { EventEmitter } from 'node:events';
8
- import { chat } from '../../lib/chat/index.js';
9
- import { contact } from '../../lib/contact/index.js';
10
- import { message, Message } from '../../lib/message/index.js';
11
- import Feed from '../../lib/status/index.js';
6
+ import { chat, Chat } from '../../lib/chat/index.js';
7
+ import { contact, Contact } from '../../lib/contact/index.js';
8
+ import { Audio, Document, Event, Image, Location, Message, Poll, Sticker, Text, VCard, Video } from '../../lib/message/index.js';
9
+ import { Feed } from '../../lib/status/index.js';
12
10
  import { type Engine } from '../../lib/store/index.js';
13
11
  /**
14
12
  * Opciones del cliente WhatsApp.
@@ -30,14 +28,17 @@ export type ReconnectOption = boolean | number | {
30
28
  export interface IWhatsApp {
31
29
  /** Motor de almacenamiento. / Storage engine. */
32
30
  engine: Engine;
33
- /** Teléfono para emparejamiento por PIN (OTP). / Phone for PIN pairing (OTP). */
31
+ /**
32
+ * Teléfono de la cuenta. Su presencia habilita el emparejamiento por PIN; sin él la
33
+ * vinculación es siempre por QR.
34
+ * Account phone. Its presence enables PIN pairing; without it linking is always by QR.
35
+ */
34
36
  phone?: number | string;
35
37
  /**
36
- * Fuerza el método de vinculación. Tiene precedencia sobre la heurística por `phone`:
37
- * `auth = method ?? (phone ? 'otp' : 'qr')`. `otp` requiere `phone`.
38
- *
39
- * Forces the linking method, taking precedence over the phone heuristic:
40
- * `auth = method ?? (phone ? 'otp' : 'qr')`. `otp` requires `phone`.
38
+ * Elige el canal de vinculación **cuando hay `phone`**: `otp` (default) o `qr`. Sin
39
+ * `phone` la opción se ignora, porque el PIN no puede pedirse sin número.
40
+ * Picks the linking channel **when `phone` is set**: `otp` (default) or `qr`. Without
41
+ * `phone` it is ignored, since a PIN cannot be requested without a number.
41
42
  */
42
43
  method?: 'qr' | 'otp';
43
44
  /**
@@ -64,11 +65,13 @@ export interface IWhatsApp {
64
65
  * Disconnect options.
65
66
  */
66
67
  export interface DisconnectOptions {
67
- /** No emitir evento de cierre. / Suppress close emission. */
68
+ /** No emitir el evento `disconnected` de este cierre. / Suppress this close's `disconnected` event. */
68
69
  silent?: boolean;
69
70
  /** Vaciar el engine tras cerrar. / Clear the engine after closing. */
70
71
  destroy?: boolean;
71
72
  }
73
+ /** Argumentos de un estático de envío sin el cliente ni el cid. / Send-static arguments without client and cid. */
74
+ type Tail<P extends unknown[]> = P extends [unknown, unknown, ...infer R] ? R : never;
72
75
  type MessageInstance = Message;
73
76
  type ChatInstance = InstanceType<ReturnType<typeof chat>>;
74
77
  type ContactInstance = InstanceType<ReturnType<typeof contact>>;
@@ -113,26 +116,69 @@ interface WhatsAppEventMap {
113
116
  * await wa.connect((code) => console.log(code));
114
117
  */
115
118
  export declare class WhatsApp {
116
- private readonly _phone?;
117
- private readonly _method?;
118
- /** @internal */
119
- readonly _event: EventEmitter<WhatsAppEventMap>;
120
- private readonly _autoclean;
121
- private readonly _reconnect;
122
- private readonly _sync;
123
- /** @internal */
124
- _socket: WASocket | null;
125
- private _intentional_close;
126
- private _has_connected;
127
- private _retry_timer;
128
- private _retry_count;
119
+ #private;
120
+ /** Motor de almacenamiento de la sesión. / Session storage engine. */
129
121
  readonly engine: Engine;
122
+ /** Entidad `Contact` ligada a este cliente. / `Contact` entity bound to this client. */
130
123
  readonly Contact: ReturnType<typeof contact>;
124
+ /** Entidad `Chat` ligada a este cliente. / `Chat` entity bound to this client. */
131
125
  readonly Chat: ReturnType<typeof chat>;
132
- readonly Message: ReturnType<typeof message>;
126
+ /**
127
+ * Entidad `Message` ligada a este cliente: los mismos estáticos de `Message` sin repetir
128
+ * la instancia, más las subclases para `instanceof`.
129
+ * `Message` entity bound to this client: the same `Message` statics without repeating the
130
+ * instance, plus the subclasses for `instanceof`.
131
+ */
132
+ readonly Message: {
133
+ get: (cid: string, mid: string) => ReturnType<typeof Message.get>;
134
+ list: (cid: string, offset?: number, limit?: number) => ReturnType<typeof Message.list>;
135
+ text: (cid: string, ...rest: Tail<Parameters<typeof Message.text>>) => ReturnType<typeof Message.text>;
136
+ image: (cid: string, ...rest: Tail<Parameters<typeof Message.image>>) => ReturnType<typeof Message.image>;
137
+ video: (cid: string, ...rest: Tail<Parameters<typeof Message.video>>) => ReturnType<typeof Message.video>;
138
+ audio: (cid: string, ...rest: Tail<Parameters<typeof Message.audio>>) => ReturnType<typeof Message.audio>;
139
+ location: (cid: string, ...rest: Tail<Parameters<typeof Message.location>>) => ReturnType<typeof Message.location>;
140
+ poll: (cid: string, ...rest: Tail<Parameters<typeof Message.poll>>) => ReturnType<typeof Message.poll>;
141
+ document: (cid: string, ...rest: Tail<Parameters<typeof Message.document>>) => ReturnType<typeof Message.document>;
142
+ vcard: (cid: string, ...rest: Tail<Parameters<typeof Message.vcard>>) => ReturnType<typeof Message.vcard>;
143
+ event: (cid: string, ...rest: Tail<Parameters<typeof Message.event>>) => ReturnType<typeof Message.event>;
144
+ react: (cid: string, mid: string, emoji: string) => Promise<boolean>;
145
+ star: (cid: string, mid: string, value: boolean) => Promise<boolean>;
146
+ seen: (cid: string, mid: string) => Promise<boolean>;
147
+ edit: (cid: string, mid: string, caption: string) => Promise<boolean>;
148
+ forward: (cid: string, mid: string, target: string | Chat | Contact) => Promise<boolean>;
149
+ delete: (cid: string, mid: string, all?: boolean) => Promise<boolean>;
150
+ reactions: (cid: string, mid: string) => Promise<{
151
+ emoji: string;
152
+ count: number;
153
+ }[]>;
154
+ Text: typeof Text;
155
+ Image: typeof Image;
156
+ Video: typeof Video;
157
+ Audio: typeof Audio;
158
+ Sticker: typeof Sticker;
159
+ Document: typeof Document;
160
+ Location: typeof Location;
161
+ Poll: typeof Poll;
162
+ VCard: typeof VCard;
163
+ Event: typeof Event;
164
+ };
133
165
  constructor(options: IWhatsApp);
134
- /** @internal */
135
- private _parse_reconnect;
166
+ /**
167
+ * Contacto de la cuenta autenticada, o null mientras no hay sesión abierta.
168
+ * Authenticated account's contact, or null while there is no open session.
169
+ */
170
+ get contact(): InstanceType<ReturnType<typeof contact>> | null;
171
+ /**
172
+ * Emite un evento del cliente. Lo usan las entidades de la librería para propagar los
173
+ * cambios que provocan; el consumidor puede emitir los suyos para pruebas.
174
+ * Emits a client event. Library entities use it to propagate the changes they cause;
175
+ * consumers may emit their own for testing.
176
+ *
177
+ * @param event - Nombre del evento / Event name
178
+ * @param args - Argumentos del evento / Event arguments
179
+ * @returns true si había listeners / true when listeners were present
180
+ */
181
+ emit<E extends keyof WhatsAppEventMap>(event: E, ...args: WhatsAppEventMap[E]): boolean;
136
182
  /**
137
183
  * Registra un listener de evento. Retorna función para desuscribirse.
138
184
  * Registers an event listener. Returns an unsubscribe function.
@@ -148,12 +194,6 @@ export declare class WhatsApp {
148
194
  * Registers a one-shot listener. Returns an unsubscribe function.
149
195
  */
150
196
  once<E extends keyof WhatsAppEventMap>(event: E, handler: (...args: WhatsAppEventMap[E]) => void): () => void;
151
- /**
152
- * @internal
153
- * Normaliza cualquier identificador (JID, LID, número, etc.) a JID canónico.
154
- * Uso interno de la librería — no forma parte de la API pública.
155
- */
156
- _resolve_jid(uid: string): Promise<string | null>;
157
197
  /**
158
198
  * Inicia la conexión. El callback recibe el PIN (string) si se configuró `phone`, o el QR (Buffer PNG) si no.
159
199
  * Resuelve cuando la sesión sincroniza; reintenta automáticamente en cierres no-loggedOut.
@@ -163,44 +203,42 @@ export declare class WhatsApp {
163
203
  */
164
204
  connect(callback: (auth: string | Buffer) => void | Promise<void>): Promise<void>;
165
205
  /**
166
- * Cierra la conexión. Con `destroy: true` vacía el engine completo.
167
- * Closes the connection. With `destroy: true` clears the engine entirely.
206
+ * Actualiza el perfil de la cuenta en WhatsApp: nombre público, bio y/o foto. Sólo se
207
+ * envía lo que llega en el parche; `photo: null` elimina la foto actual.
208
+ * Updates the account profile on WhatsApp: public name, bio and/or picture. Only the
209
+ * given fields are sent; `photo: null` removes the current picture.
210
+ *
211
+ * @param patch - Campos a actualizar / Fields to update
212
+ * @returns true si todo lo pedido se envió / true when everything requested was sent
213
+ * @throws ERR_PROFILE_PICTURE_LIB si falta `sharp` o `jimp` para procesar la foto / when `sharp` or `jimp` is missing to process the picture
168
214
  */
169
- disconnect(options?: DisconnectOptions): Promise<void>;
215
+ profile(patch: {
216
+ name?: string;
217
+ content?: string;
218
+ photo?: string | Buffer | null;
219
+ }): Promise<boolean>;
170
220
  /**
171
- * Conecta los handlers de eventos de baileys: contactos, chats y mensajes.
172
- * Wires baileys event handlers: contacts, chats and messages.
221
+ * Publica un estado (status broadcast). Con sólo `caption` publica texto; con `content`
222
+ * publica imagen o video (el tipo se deduce del binario) usando `caption` como pie.
223
+ * `contacts` es la audiencia: WhatsApp no reparte el estado a quien no esté en la lista.
224
+ * Publishes a status broadcast. With only `caption` it posts text; with `content` it
225
+ * posts an image or video (type inferred from the binary) using `caption` as its footer.
226
+ * `contacts` is the audience: WhatsApp does not deliver the status to anyone outside it.
173
227
  *
174
- * @internal
228
+ * @param post - Contenido, pie y audiencia / Content, caption and audience
229
+ * @returns Publicación creada, o null si no hay sesión / Created post, or null without a session
230
+ * @throws ERR_FEED_EMPTY sin `content` ni `caption` / when neither `content` nor `caption` is given
231
+ * @throws ERR_FEED_MEDIA si el binario no es imagen ni video / when the binary is neither image nor video
175
232
  */
176
- private _attach_business_handlers;
233
+ feed(post: {
234
+ content?: Buffer;
235
+ caption?: string;
236
+ contacts: (string | number)[];
237
+ }): Promise<Feed | null>;
177
238
  /**
178
- * Persiste un contacto y su índice LID; emite `contact:created` solo si es nuevo.
179
- * Persists a contact and its LID index; emits `contact:created` only when new.
180
- *
181
- * @param raw - Documento del contacto a persistir / Contact document to persist
182
- * @internal
239
+ * Cierra la conexión. Con `destroy: true` vacía el engine completo.
240
+ * Closes the connection. With `destroy: true` clears the engine entirely.
183
241
  */
184
- private _persist_contact;
185
- /** @internal */
186
- private _handle_contacts_upsert;
187
- /** @internal */
188
- private _handle_contacts_update;
189
- /** @internal */
190
- private _handle_lid_mapping;
191
- /** @internal */
192
- private _handle_chats_upsert;
193
- /** @internal */
194
- private _handle_chats_update;
195
- /** @internal */
196
- private _handle_chats_delete;
197
- /** @internal */
198
- private _handle_message_receipt;
199
- /** @internal */
200
- private _handle_messages_upsert;
201
- /** @internal */
202
- private _handle_messages_update;
203
- /** @internal */
204
- private _handle_messages_reaction;
242
+ disconnect(options?: DisconnectOptions): Promise<void>;
205
243
  }
206
244
  export default WhatsApp;