@arcaelas/whatsapp 1.2.2 → 1.4.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 (72) hide show
  1. package/build/{Chat.js → cjs/Chat.js} +1 -1
  2. package/build/cjs/Chat.js.map +1 -0
  3. package/build/{Contact.d.ts → cjs/Contact.d.ts} +28 -0
  4. package/build/{Contact.js → cjs/Contact.js} +6 -5
  5. package/build/cjs/Contact.js.map +1 -0
  6. package/build/{Message.d.ts → cjs/Message.d.ts} +62 -7
  7. package/build/{Message.js → cjs/Message.js} +42 -22
  8. package/build/cjs/Message.js.map +1 -0
  9. package/build/{WhatsApp.js → cjs/WhatsApp.js} +11 -6
  10. package/build/cjs/WhatsApp.js.map +1 -0
  11. package/build/cjs/index.js +17 -0
  12. package/build/cjs/index.js.map +1 -0
  13. package/build/cjs/package.json +1 -0
  14. package/build/{store → cjs/store}/driver/FileEngine.d.ts +1 -1
  15. package/build/{store → cjs/store}/driver/FileEngine.js +2 -2
  16. package/build/cjs/store/driver/FileEngine.js.map +1 -0
  17. package/build/{store → cjs/store}/driver/RedisEngine.d.ts +1 -1
  18. package/build/cjs/store/driver/RedisEngine.js.map +1 -0
  19. package/build/cjs/store/engine.js.map +1 -0
  20. package/build/cjs/store/index.d.ts +8 -0
  21. package/build/{store → cjs/store}/index.js +2 -2
  22. package/build/cjs/store/index.js.map +1 -0
  23. package/build/esm/Chat.d.ts +335 -0
  24. package/build/esm/Chat.js +390 -0
  25. package/build/esm/Chat.js.map +1 -0
  26. package/build/esm/Contact.d.ts +856 -0
  27. package/build/esm/Contact.js +183 -0
  28. package/build/esm/Contact.js.map +1 -0
  29. package/build/esm/Message.d.ts +580 -0
  30. package/build/esm/Message.js +459 -0
  31. package/build/esm/Message.js.map +1 -0
  32. package/build/esm/WhatsApp.d.ts +68 -0
  33. package/build/esm/WhatsApp.js +364 -0
  34. package/build/esm/WhatsApp.js.map +1 -0
  35. package/build/esm/index.d.ts +13 -0
  36. package/build/esm/index.js +10 -0
  37. package/build/esm/index.js.map +1 -0
  38. package/build/esm/package.json +1 -0
  39. package/build/esm/store/driver/FileEngine.d.ts +23 -0
  40. package/build/esm/store/driver/FileEngine.js +86 -0
  41. package/build/esm/store/driver/FileEngine.js.map +1 -0
  42. package/build/esm/store/driver/RedisEngine.d.ts +38 -0
  43. package/build/esm/store/driver/RedisEngine.js +65 -0
  44. package/build/esm/store/driver/RedisEngine.js.map +1 -0
  45. package/build/esm/store/engine.d.ts +54 -0
  46. package/build/esm/store/engine.js +6 -0
  47. package/build/{store → esm/store}/engine.js.map +1 -1
  48. package/build/esm/store/index.d.ts +8 -0
  49. package/build/esm/store/index.js +7 -0
  50. package/build/esm/store/index.js.map +1 -0
  51. package/package.json +70 -58
  52. package/API.md +0 -776
  53. package/CHANGELOG.md +0 -53
  54. package/DOC.md +0 -532
  55. package/build/Chat.js.map +0 -1
  56. package/build/Contact.js.map +0 -1
  57. package/build/Message.js.map +0 -1
  58. package/build/WhatsApp.js.map +0 -1
  59. package/build/index.js +0 -2
  60. package/build/index.js.map +0 -7
  61. package/build/store/driver/FileEngine.js.map +0 -1
  62. package/build/store/driver/RedisEngine.js.map +0 -1
  63. package/build/store/index.d.ts +0 -8
  64. package/build/store/index.js.map +0 -1
  65. package/context7.json +0 -4
  66. package/tsconfig.json +0 -27
  67. /package/build/{Chat.d.ts → cjs/Chat.d.ts} +0 -0
  68. /package/build/{WhatsApp.d.ts → cjs/WhatsApp.d.ts} +0 -0
  69. /package/build/{index.d.ts → cjs/index.d.ts} +0 -0
  70. /package/build/{store → cjs/store}/driver/RedisEngine.js +0 -0
  71. /package/build/{store → cjs/store}/engine.d.ts +0 -0
  72. /package/build/{store → cjs/store}/engine.js +0 -0
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @file Contact.ts
3
+ * @description Clase Contact para gestión de contactos de WhatsApp
4
+ */
5
+ import { BufferJSON, jidNormalizedUser } from 'baileys';
6
+ /**
7
+ * @description
8
+ * Clase base para representar un contacto de WhatsApp.
9
+ * Usar Contact.get() para obtener instancias.
10
+ */
11
+ export class Contact {
12
+ constructor(data) {
13
+ this.raw = data.raw;
14
+ }
15
+ /** JID único del contacto */
16
+ get id() {
17
+ return this.raw.id;
18
+ }
19
+ /** Nombre del contacto */
20
+ get name() {
21
+ return this.raw.name ?? this.raw.notify ?? this.raw.id.split('@')[0];
22
+ }
23
+ /** URL de la foto de perfil o null */
24
+ get photo() {
25
+ return this.raw.imgUrl ?? null;
26
+ }
27
+ /** Número de teléfono sin formato */
28
+ get phone() {
29
+ return this.raw.id.split('@')[0];
30
+ }
31
+ /** Bio del contacto */
32
+ get content() {
33
+ return this.raw.status ?? '';
34
+ }
35
+ }
36
+ /**
37
+ * @description Construye IContact desde raw.
38
+ * @param raw Objeto raw del contacto.
39
+ * @returns IContact normalizado.
40
+ */
41
+ export function build_contact(raw) {
42
+ return {
43
+ id: raw.id,
44
+ name: raw.name ?? raw.notify ?? raw.id.split('@')[0],
45
+ photo: raw.imgUrl ?? null,
46
+ phone: raw.id.split('@')[0],
47
+ content: raw.status ?? '',
48
+ raw,
49
+ };
50
+ }
51
+ /**
52
+ * @description Factory que retorna la clase Contact enlazada al contexto.
53
+ * @param wa Instancia de WhatsApp.
54
+ * @returns Clase _Contact que extiende Contact.
55
+ */
56
+ export function contact(wa) {
57
+ return class _Contact extends Contact {
58
+ /**
59
+ * @description Obtiene un contacto por su ID.
60
+ * @param uid JID del contacto (@s.whatsapp.net) o número de teléfono.
61
+ * @returns Contacto o null si no existe.
62
+ */
63
+ static async get(uid) {
64
+ const jid = uid.includes('@') ? uid : `${uid}@s.whatsapp.net`;
65
+ const stored = await wa.engine.get(`contact/${jid}/index`);
66
+ if (stored)
67
+ return new _Contact(JSON.parse(stored, BufferJSON.reviver));
68
+ if (!wa.socket)
69
+ return null;
70
+ const found = (await wa.socket.onWhatsApp(jid.split('@')[0]))?.[0];
71
+ if (!found?.exists)
72
+ return null;
73
+ const id = jidNormalizedUser(found.jid);
74
+ const raw = { id, name: null, notify: null, imgUrl: null, status: null };
75
+ // Obtener foto de perfil
76
+ try {
77
+ raw.imgUrl = (await wa.socket.profilePictureUrl(id, 'image')) ?? null;
78
+ }
79
+ catch { /* profile picture may not exist */ }
80
+ // Obtener estado/bio
81
+ try {
82
+ const result = await wa.socket.fetchStatus(id);
83
+ const status_data = result?.[0];
84
+ raw.status = status_data?.status?.status ?? null;
85
+ }
86
+ catch { /* status fetch may fail */ }
87
+ const data = build_contact(raw);
88
+ await wa.engine.set(`contact/${id}/index`, JSON.stringify(data, BufferJSON.replacer));
89
+ return new _Contact(data);
90
+ }
91
+ /**
92
+ * @description Actualiza los datos del perfil desde WhatsApp.
93
+ * @param uid JID del contacto.
94
+ * @returns Contacto actualizado o null.
95
+ */
96
+ static async refresh(uid) {
97
+ const jid = uid.includes('@') ? uid : `${uid}@s.whatsapp.net`;
98
+ if (!wa.socket)
99
+ return null;
100
+ const stored = await wa.engine.get(`contact/${jid}/index`);
101
+ const data = stored ? JSON.parse(stored, BufferJSON.reviver) : build_contact({ id: jid });
102
+ // Obtener foto de perfil
103
+ try {
104
+ data.raw.imgUrl = (await wa.socket.profilePictureUrl(jid, 'image')) ?? null;
105
+ data.photo = data.raw.imgUrl;
106
+ }
107
+ catch { /* profile picture may not exist */ }
108
+ // Obtener estado/bio
109
+ try {
110
+ const result = await wa.socket.fetchStatus(jid);
111
+ const status_data = result?.[0];
112
+ data.raw.status = status_data?.status?.status ?? null;
113
+ data.content = data.raw.status ?? '';
114
+ }
115
+ catch { /* status fetch may fail */ }
116
+ await wa.engine.set(`contact/${jid}/index`, JSON.stringify(data, BufferJSON.replacer));
117
+ return new _Contact(data);
118
+ }
119
+ /**
120
+ * @description Cambia el nombre de un contacto.
121
+ * @param uid JID del contacto.
122
+ * @param name Nuevo nombre.
123
+ * @returns true si se guardó correctamente.
124
+ */
125
+ static async rename(uid, name) {
126
+ const jid = uid.includes('@') ? uid : `${uid}@s.whatsapp.net`;
127
+ const stored = await wa.engine.get(`contact/${jid}/index`);
128
+ if (!stored)
129
+ return false;
130
+ const data = JSON.parse(stored, BufferJSON.reviver);
131
+ data.raw.name = name;
132
+ data.name = name;
133
+ await wa.engine.set(`contact/${jid}/index`, JSON.stringify(data, BufferJSON.replacer));
134
+ return true;
135
+ }
136
+ /**
137
+ * @description Obtiene contactos paginados.
138
+ * @param offset Inicio de paginación.
139
+ * @param limit Cantidad máxima de resultados.
140
+ * @returns Array de contactos.
141
+ */
142
+ static async paginate(offset = 0, limit = 50) {
143
+ const contacts = [];
144
+ for (const key of await wa.engine.list('contact/', offset, limit, '/index')) {
145
+ const stored = await wa.engine.get(key);
146
+ if (stored)
147
+ contacts.push(new _Contact(JSON.parse(stored, BufferJSON.reviver)));
148
+ }
149
+ return contacts;
150
+ }
151
+ /**
152
+ * @description Cambia el nombre del contacto.
153
+ * @param name Nuevo nombre.
154
+ * @returns true si se guardó correctamente.
155
+ */
156
+ async rename(name) {
157
+ const result = await _Contact.rename(this.id, name);
158
+ if (result)
159
+ this.raw.name = name;
160
+ return result;
161
+ }
162
+ /**
163
+ * @description Actualiza los datos del perfil desde WhatsApp.
164
+ * @returns this con datos actualizados, o null si falla.
165
+ */
166
+ async refresh() {
167
+ const updated = await _Contact.refresh(this.id);
168
+ if (!updated)
169
+ return null;
170
+ // Actualizar raw con los nuevos datos
171
+ Object.assign(this.raw, updated.raw);
172
+ return this;
173
+ }
174
+ /**
175
+ * @description Obtiene o crea el chat con este contacto.
176
+ * @returns Chat asociado al contacto.
177
+ */
178
+ async chat() {
179
+ return wa.Chat.get(this.id);
180
+ }
181
+ };
182
+ }
183
+ //# sourceMappingURL=Contact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Contact.js","sourceRoot":"","sources":["../../src/Contact.ts"],"names":[],"mappings":"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"}