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