@zapyapi/sdk 1.0.0-beta.4 → 1.0.0-beta.5
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/index.cjs +399 -23
- package/index.js +380 -24
- package/package.json +1 -1
- package/src/errors.d.ts +101 -5
- package/src/errors.d.ts.map +1 -1
- package/src/index.d.ts +4 -3
- package/src/index.d.ts.map +1 -1
- package/src/resources/base.resource.d.ts.map +1 -1
- package/src/types/events/contact.d.ts +65 -0
- package/src/types/events/contact.d.ts.map +1 -0
- package/src/types/events/index.d.ts +76 -0
- package/src/types/events/index.d.ts.map +1 -0
- package/src/types/events/instance-status.d.ts +20 -0
- package/src/types/events/instance-status.d.ts.map +1 -0
- package/src/types/events/presence.d.ts +31 -0
- package/src/types/events/presence.d.ts.map +1 -0
- package/src/types/events/qr-code.d.ts +9 -0
- package/src/types/events/qr-code.d.ts.map +1 -0
- package/src/types/events/reaction.d.ts +27 -0
- package/src/types/events/reaction.d.ts.map +1 -0
- package/src/types/index.d.ts +5 -0
- package/src/types/index.d.ts.map +1 -1
- package/src/types/message-events.types.d.ts +245 -0
- package/src/types/message-events.types.d.ts.map +1 -0
- package/src/version.d.ts +1 -1
package/index.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var axios = require('axios');
|
|
4
4
|
|
|
5
5
|
/** SDK version - auto-generated from package.json */
|
|
6
|
-
const SDK_VERSION = '1.0.0-beta.
|
|
6
|
+
const SDK_VERSION = '1.0.0-beta.5';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Custom error classes for @zapyapi/sdk
|
|
@@ -12,11 +12,30 @@ const SDK_VERSION = '1.0.0-beta.4';
|
|
|
12
12
|
* Base error class for all ZapyAPI errors
|
|
13
13
|
*/
|
|
14
14
|
class ZapyError extends Error {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Original error that caused this error (if any)
|
|
17
|
+
*/
|
|
18
|
+
cause;
|
|
19
|
+
constructor(message, cause) {
|
|
20
|
+
super(message, {
|
|
21
|
+
cause
|
|
22
|
+
});
|
|
17
23
|
this.name = 'ZapyError';
|
|
18
24
|
Object.setPrototypeOf(this, ZapyError.prototype);
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Get a detailed string representation of the error
|
|
28
|
+
*/
|
|
29
|
+
toDetailedString() {
|
|
30
|
+
let result = `${this.name}: ${this.message}`;
|
|
31
|
+
if (this.cause) {
|
|
32
|
+
result += `\nCaused by: ${this.cause.message}`;
|
|
33
|
+
if (this.cause.stack) {
|
|
34
|
+
result += `\n${this.cause.stack}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
20
39
|
}
|
|
21
40
|
/**
|
|
22
41
|
* Error thrown when the API returns an error response
|
|
@@ -38,13 +57,28 @@ class ZapyApiError extends ZapyError {
|
|
|
38
57
|
* Additional error details
|
|
39
58
|
*/
|
|
40
59
|
details;
|
|
41
|
-
|
|
42
|
-
|
|
60
|
+
/**
|
|
61
|
+
* HTTP method used in the request
|
|
62
|
+
*/
|
|
63
|
+
method;
|
|
64
|
+
/**
|
|
65
|
+
* URL that was requested
|
|
66
|
+
*/
|
|
67
|
+
url;
|
|
68
|
+
/**
|
|
69
|
+
* Raw response body (for debugging)
|
|
70
|
+
*/
|
|
71
|
+
responseBody;
|
|
72
|
+
constructor(message, statusCode, code, options) {
|
|
73
|
+
super(message, options?.cause);
|
|
43
74
|
this.name = 'ZapyApiError';
|
|
44
75
|
this.statusCode = statusCode;
|
|
45
76
|
this.code = code;
|
|
46
|
-
this.requestId = requestId;
|
|
47
|
-
this.details = details;
|
|
77
|
+
this.requestId = options?.requestId;
|
|
78
|
+
this.details = options?.details;
|
|
79
|
+
this.method = options?.method;
|
|
80
|
+
this.url = options?.url;
|
|
81
|
+
this.responseBody = options?.responseBody;
|
|
48
82
|
Object.setPrototypeOf(this, ZapyApiError.prototype);
|
|
49
83
|
}
|
|
50
84
|
/**
|
|
@@ -54,10 +88,81 @@ class ZapyApiError extends ZapyError {
|
|
|
54
88
|
const statusCode = error.response?.status ?? 500;
|
|
55
89
|
const data = error.response?.data;
|
|
56
90
|
const requestId = error.response?.headers?.['x-request-id'];
|
|
57
|
-
|
|
58
|
-
|
|
91
|
+
const method = error.config?.method?.toUpperCase();
|
|
92
|
+
const url = error.config?.url;
|
|
93
|
+
// Build a descriptive message
|
|
94
|
+
let message;
|
|
95
|
+
if (data && typeof data === 'object' && 'message' in data && data.message) {
|
|
96
|
+
message = data.message;
|
|
97
|
+
} else if (error.message) {
|
|
98
|
+
message = error.message;
|
|
99
|
+
} else {
|
|
100
|
+
message = `Request failed with status ${statusCode}`;
|
|
101
|
+
}
|
|
102
|
+
// Add context to the message
|
|
103
|
+
const context = [];
|
|
104
|
+
if (method && url) {
|
|
105
|
+
context.push(`${method} ${url}`);
|
|
106
|
+
}
|
|
107
|
+
if (statusCode) {
|
|
108
|
+
context.push(`Status: ${statusCode}`);
|
|
59
109
|
}
|
|
60
|
-
|
|
110
|
+
if (requestId) {
|
|
111
|
+
context.push(`Request ID: ${requestId}`);
|
|
112
|
+
}
|
|
113
|
+
const fullMessage = context.length > 0 ? `${message} [${context.join(' | ')}]` : message;
|
|
114
|
+
const code = data && typeof data === 'object' && 'code' in data && data.code ? data.code : 'UNKNOWN_ERROR';
|
|
115
|
+
const details = data && typeof data === 'object' && 'details' in data ? data.details : undefined;
|
|
116
|
+
return new ZapyApiError(fullMessage, statusCode, code, {
|
|
117
|
+
requestId: requestId || (data && typeof data === 'object' && 'requestId' in data ? data.requestId : undefined),
|
|
118
|
+
details,
|
|
119
|
+
method,
|
|
120
|
+
url,
|
|
121
|
+
responseBody: data,
|
|
122
|
+
cause: error
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get a detailed string representation for logging
|
|
127
|
+
*/
|
|
128
|
+
toDetailedString() {
|
|
129
|
+
const lines = [`${this.name}: ${this.message}`, ` Status Code: ${this.statusCode}`, ` Error Code: ${this.code}`];
|
|
130
|
+
if (this.method && this.url) {
|
|
131
|
+
lines.push(` Request: ${this.method} ${this.url}`);
|
|
132
|
+
}
|
|
133
|
+
if (this.requestId) {
|
|
134
|
+
lines.push(` Request ID: ${this.requestId}`);
|
|
135
|
+
}
|
|
136
|
+
if (this.details && Object.keys(this.details).length > 0) {
|
|
137
|
+
lines.push(` Details: ${JSON.stringify(this.details, null, 2)}`);
|
|
138
|
+
}
|
|
139
|
+
if (this.responseBody && typeof this.responseBody === 'object') {
|
|
140
|
+
lines.push(` Response Body: ${JSON.stringify(this.responseBody, null, 2)}`);
|
|
141
|
+
}
|
|
142
|
+
if (this.cause) {
|
|
143
|
+
lines.push(` Caused by: ${this.cause.message}`);
|
|
144
|
+
if (this.cause.stack) {
|
|
145
|
+
lines.push(` Stack: ${this.cause.stack.split('\n').slice(1, 4).join('\n ')}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return lines.join('\n');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Convert to a plain object for logging/serialization
|
|
152
|
+
*/
|
|
153
|
+
toJSON() {
|
|
154
|
+
return {
|
|
155
|
+
name: this.name,
|
|
156
|
+
message: this.message,
|
|
157
|
+
statusCode: this.statusCode,
|
|
158
|
+
code: this.code,
|
|
159
|
+
requestId: this.requestId,
|
|
160
|
+
method: this.method,
|
|
161
|
+
url: this.url,
|
|
162
|
+
details: this.details,
|
|
163
|
+
responseBody: this.responseBody,
|
|
164
|
+
cause: this.cause?.message
|
|
165
|
+
};
|
|
61
166
|
}
|
|
62
167
|
}
|
|
63
168
|
/**
|
|
@@ -74,16 +179,32 @@ class ValidationError extends ZapyError {
|
|
|
74
179
|
this.details = details;
|
|
75
180
|
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
76
181
|
}
|
|
182
|
+
toDetailedString() {
|
|
183
|
+
const fieldErrors = Object.entries(this.details).map(([field, errors]) => ` ${field}: ${errors.join(', ')}`).join('\n');
|
|
184
|
+
return `${this.name}: ${this.message}\n${fieldErrors}`;
|
|
185
|
+
}
|
|
186
|
+
toJSON() {
|
|
187
|
+
return {
|
|
188
|
+
name: this.name,
|
|
189
|
+
message: this.message,
|
|
190
|
+
details: this.details
|
|
191
|
+
};
|
|
192
|
+
}
|
|
77
193
|
}
|
|
78
194
|
/**
|
|
79
195
|
* Error thrown when an instance is not found
|
|
80
196
|
*/
|
|
81
197
|
class InstanceNotFoundError extends ZapyApiError {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
198
|
+
instanceId;
|
|
199
|
+
constructor(instanceId, options) {
|
|
200
|
+
super(`Instance '${instanceId}' not found`, 404, 'INSTANCE_NOT_FOUND', {
|
|
201
|
+
...options,
|
|
202
|
+
details: {
|
|
203
|
+
instanceId
|
|
204
|
+
}
|
|
85
205
|
});
|
|
86
206
|
this.name = 'InstanceNotFoundError';
|
|
207
|
+
this.instanceId = instanceId;
|
|
87
208
|
Object.setPrototypeOf(this, InstanceNotFoundError.prototype);
|
|
88
209
|
}
|
|
89
210
|
}
|
|
@@ -91,8 +212,8 @@ class InstanceNotFoundError extends ZapyApiError {
|
|
|
91
212
|
* Error thrown when authentication fails
|
|
92
213
|
*/
|
|
93
214
|
class AuthenticationError extends ZapyApiError {
|
|
94
|
-
constructor(message = 'Invalid or missing API key',
|
|
95
|
-
super(message, 401, 'UNAUTHORIZED',
|
|
215
|
+
constructor(message = 'Invalid or missing API key', options) {
|
|
216
|
+
super(message, 401, 'UNAUTHORIZED', options);
|
|
96
217
|
this.name = 'AuthenticationError';
|
|
97
218
|
Object.setPrototypeOf(this, AuthenticationError.prototype);
|
|
98
219
|
}
|
|
@@ -105,14 +226,89 @@ class RateLimitError extends ZapyApiError {
|
|
|
105
226
|
* Timestamp when the rate limit resets (Unix ms)
|
|
106
227
|
*/
|
|
107
228
|
retryAfter;
|
|
108
|
-
constructor(message = 'Rate limit exceeded', retryAfter,
|
|
109
|
-
super(message, 429, 'RATE_LIMIT_EXCEEDED',
|
|
110
|
-
|
|
229
|
+
constructor(message = 'Rate limit exceeded', retryAfter, options) {
|
|
230
|
+
super(message, 429, 'RATE_LIMIT_EXCEEDED', {
|
|
231
|
+
...options,
|
|
232
|
+
details: retryAfter ? {
|
|
233
|
+
retryAfter
|
|
234
|
+
} : undefined
|
|
111
235
|
});
|
|
112
236
|
this.name = 'RateLimitError';
|
|
113
237
|
this.retryAfter = retryAfter;
|
|
114
238
|
Object.setPrototypeOf(this, RateLimitError.prototype);
|
|
115
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Get the Date when the rate limit resets
|
|
242
|
+
*/
|
|
243
|
+
getRetryAfterDate() {
|
|
244
|
+
return this.retryAfter ? new Date(this.retryAfter) : undefined;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Error thrown when a network error occurs (no response received)
|
|
249
|
+
*/
|
|
250
|
+
class NetworkError extends ZapyError {
|
|
251
|
+
/**
|
|
252
|
+
* HTTP method used in the request
|
|
253
|
+
*/
|
|
254
|
+
method;
|
|
255
|
+
/**
|
|
256
|
+
* URL that was requested
|
|
257
|
+
*/
|
|
258
|
+
url;
|
|
259
|
+
/**
|
|
260
|
+
* Error code (e.g., ECONNREFUSED, ETIMEDOUT)
|
|
261
|
+
*/
|
|
262
|
+
code;
|
|
263
|
+
constructor(message, options) {
|
|
264
|
+
super(message, options?.cause);
|
|
265
|
+
this.name = 'NetworkError';
|
|
266
|
+
this.method = options?.method;
|
|
267
|
+
this.url = options?.url;
|
|
268
|
+
this.code = options?.code;
|
|
269
|
+
Object.setPrototypeOf(this, NetworkError.prototype);
|
|
270
|
+
}
|
|
271
|
+
toDetailedString() {
|
|
272
|
+
const lines = [`${this.name}: ${this.message}`];
|
|
273
|
+
if (this.code) {
|
|
274
|
+
lines.push(` Error Code: ${this.code}`);
|
|
275
|
+
}
|
|
276
|
+
if (this.method && this.url) {
|
|
277
|
+
lines.push(` Request: ${this.method} ${this.url}`);
|
|
278
|
+
}
|
|
279
|
+
if (this.cause) {
|
|
280
|
+
lines.push(` Caused by: ${this.cause.message}`);
|
|
281
|
+
}
|
|
282
|
+
return lines.join('\n');
|
|
283
|
+
}
|
|
284
|
+
toJSON() {
|
|
285
|
+
return {
|
|
286
|
+
name: this.name,
|
|
287
|
+
message: this.message,
|
|
288
|
+
code: this.code,
|
|
289
|
+
method: this.method,
|
|
290
|
+
url: this.url,
|
|
291
|
+
cause: this.cause?.message
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Error thrown when request times out
|
|
297
|
+
*/
|
|
298
|
+
class TimeoutError extends NetworkError {
|
|
299
|
+
/**
|
|
300
|
+
* Timeout duration in milliseconds
|
|
301
|
+
*/
|
|
302
|
+
timeout;
|
|
303
|
+
constructor(message = 'Request timed out', options) {
|
|
304
|
+
super(message, {
|
|
305
|
+
...options,
|
|
306
|
+
code: 'ETIMEDOUT'
|
|
307
|
+
});
|
|
308
|
+
this.name = 'TimeoutError';
|
|
309
|
+
this.timeout = options?.timeout;
|
|
310
|
+
Object.setPrototypeOf(this, TimeoutError.prototype);
|
|
311
|
+
}
|
|
116
312
|
}
|
|
117
313
|
|
|
118
314
|
/**
|
|
@@ -128,18 +324,58 @@ class BaseResource {
|
|
|
128
324
|
*/
|
|
129
325
|
handleError(error) {
|
|
130
326
|
if (this.isAxiosError(error)) {
|
|
131
|
-
const
|
|
132
|
-
const
|
|
327
|
+
const method = error.config?.method?.toUpperCase();
|
|
328
|
+
const url = error.config?.url;
|
|
329
|
+
const requestId = error.response?.headers?.['x-request-id'];
|
|
330
|
+
// Network errors (no response received)
|
|
331
|
+
if (!error.response) {
|
|
332
|
+
const code = error.code;
|
|
333
|
+
// Timeout errors
|
|
334
|
+
if (code === 'ECONNABORTED' || code === 'ETIMEDOUT' || error.message?.includes('timeout')) {
|
|
335
|
+
const timeout = error.config?.timeout;
|
|
336
|
+
throw new TimeoutError(`Request timed out${timeout ? ` after ${timeout}ms` : ''}`, {
|
|
337
|
+
method,
|
|
338
|
+
url,
|
|
339
|
+
timeout,
|
|
340
|
+
cause: error
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
// Other network errors (connection refused, DNS failure, etc.)
|
|
344
|
+
throw new NetworkError(error.message || 'Network error occurred', {
|
|
345
|
+
method,
|
|
346
|
+
url,
|
|
347
|
+
code,
|
|
348
|
+
cause: error
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
const statusCode = error.response.status;
|
|
352
|
+
const retryAfter = error.response.headers?.['retry-after'];
|
|
133
353
|
if (statusCode === 401) {
|
|
134
|
-
throw new AuthenticationError(error.response
|
|
354
|
+
throw new AuthenticationError(error.response.data?.message || 'Invalid or missing API key', {
|
|
355
|
+
requestId,
|
|
356
|
+
method,
|
|
357
|
+
url,
|
|
358
|
+
cause: error
|
|
359
|
+
});
|
|
135
360
|
}
|
|
136
361
|
if (statusCode === 429) {
|
|
137
|
-
|
|
362
|
+
const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : undefined;
|
|
363
|
+
throw new RateLimitError(error.response.data?.message || 'Rate limit exceeded', retryAfterMs, {
|
|
364
|
+
requestId,
|
|
365
|
+
method,
|
|
366
|
+
url,
|
|
367
|
+
cause: error
|
|
368
|
+
});
|
|
138
369
|
}
|
|
139
370
|
throw ZapyApiError.fromAxiosError(error);
|
|
140
371
|
}
|
|
372
|
+
if (error instanceof ZapyError) {
|
|
373
|
+
throw error;
|
|
374
|
+
}
|
|
141
375
|
if (error instanceof Error) {
|
|
142
|
-
throw new ZapyApiError(error.message, 500, 'UNKNOWN_ERROR'
|
|
376
|
+
throw new ZapyApiError(error.message, 500, 'UNKNOWN_ERROR', {
|
|
377
|
+
cause: error
|
|
378
|
+
});
|
|
143
379
|
}
|
|
144
380
|
throw new ZapyApiError('An unexpected error occurred', 500, 'UNKNOWN_ERROR');
|
|
145
381
|
}
|
|
@@ -1239,6 +1475,126 @@ function isContactDeduplicatedEvent(event) {
|
|
|
1239
1475
|
return event.event === 'contact-deduplicated';
|
|
1240
1476
|
}
|
|
1241
1477
|
|
|
1478
|
+
/**
|
|
1479
|
+
* WhatsApp Message Event Types
|
|
1480
|
+
* Comprehensive type definitions for all WhatsApp message types
|
|
1481
|
+
*/
|
|
1482
|
+
// ============================================================================
|
|
1483
|
+
// Message Status
|
|
1484
|
+
// ============================================================================
|
|
1485
|
+
exports.ZapyMessageStatusEnum = void 0;
|
|
1486
|
+
(function (ZapyMessageStatusEnum) {
|
|
1487
|
+
ZapyMessageStatusEnum["UNKNOWN"] = "UNKNOWN";
|
|
1488
|
+
ZapyMessageStatusEnum["ERROR"] = "ERROR";
|
|
1489
|
+
ZapyMessageStatusEnum["PENDING"] = "PENDING";
|
|
1490
|
+
ZapyMessageStatusEnum["SENT"] = "SENT";
|
|
1491
|
+
ZapyMessageStatusEnum["RECEIVED"] = "RECEIVED";
|
|
1492
|
+
ZapyMessageStatusEnum["READ"] = "READ";
|
|
1493
|
+
ZapyMessageStatusEnum["PLAYED"] = "PLAYED";
|
|
1494
|
+
})(exports.ZapyMessageStatusEnum || (exports.ZapyMessageStatusEnum = {}));
|
|
1495
|
+
exports.ZapyMessageType = void 0;
|
|
1496
|
+
(function (ZapyMessageType) {
|
|
1497
|
+
ZapyMessageType["TEXT"] = "text";
|
|
1498
|
+
ZapyMessageType["IMAGE"] = "image";
|
|
1499
|
+
ZapyMessageType["VIDEO"] = "video";
|
|
1500
|
+
ZapyMessageType["AUDIO"] = "audio";
|
|
1501
|
+
ZapyMessageType["DOCUMENT"] = "document";
|
|
1502
|
+
ZapyMessageType["STICKER"] = "sticker";
|
|
1503
|
+
ZapyMessageType["LOCATION"] = "location";
|
|
1504
|
+
ZapyMessageType["LIVE_LOCATION"] = "live_location";
|
|
1505
|
+
ZapyMessageType["CONTACT"] = "contact";
|
|
1506
|
+
ZapyMessageType["REACTION"] = "reaction";
|
|
1507
|
+
ZapyMessageType["EDITED"] = "edited";
|
|
1508
|
+
ZapyMessageType["DELETED"] = "deleted";
|
|
1509
|
+
ZapyMessageType["POLL"] = "poll";
|
|
1510
|
+
ZapyMessageType["POLL_VOTE"] = "poll_vote";
|
|
1511
|
+
ZapyMessageType["CALL"] = "call";
|
|
1512
|
+
ZapyMessageType["UNSUPPORTED"] = "unsupported";
|
|
1513
|
+
})(exports.ZapyMessageType || (exports.ZapyMessageType = {}));
|
|
1514
|
+
// ============================================================================
|
|
1515
|
+
// Type Guards
|
|
1516
|
+
// ============================================================================
|
|
1517
|
+
function isTextMessage(message) {
|
|
1518
|
+
return message.messageType === exports.ZapyMessageType.TEXT;
|
|
1519
|
+
}
|
|
1520
|
+
function isImageMessage(message) {
|
|
1521
|
+
return message.messageType === exports.ZapyMessageType.IMAGE;
|
|
1522
|
+
}
|
|
1523
|
+
function isVideoMessage(message) {
|
|
1524
|
+
return message.messageType === exports.ZapyMessageType.VIDEO;
|
|
1525
|
+
}
|
|
1526
|
+
function isAudioMessage(message) {
|
|
1527
|
+
return message.messageType === exports.ZapyMessageType.AUDIO;
|
|
1528
|
+
}
|
|
1529
|
+
function isDocumentMessage(message) {
|
|
1530
|
+
return message.messageType === exports.ZapyMessageType.DOCUMENT;
|
|
1531
|
+
}
|
|
1532
|
+
function isStickerMessage(message) {
|
|
1533
|
+
return message.messageType === exports.ZapyMessageType.STICKER;
|
|
1534
|
+
}
|
|
1535
|
+
function isLocationMessage(message) {
|
|
1536
|
+
return message.messageType === exports.ZapyMessageType.LOCATION;
|
|
1537
|
+
}
|
|
1538
|
+
function isLiveLocationMessage(message) {
|
|
1539
|
+
return message.messageType === exports.ZapyMessageType.LIVE_LOCATION;
|
|
1540
|
+
}
|
|
1541
|
+
function isContactMessage(message) {
|
|
1542
|
+
return message.messageType === exports.ZapyMessageType.CONTACT;
|
|
1543
|
+
}
|
|
1544
|
+
function isReactionMessage(message) {
|
|
1545
|
+
return message.messageType === exports.ZapyMessageType.REACTION;
|
|
1546
|
+
}
|
|
1547
|
+
function isEditedMessage(message) {
|
|
1548
|
+
return message.messageType === exports.ZapyMessageType.EDITED;
|
|
1549
|
+
}
|
|
1550
|
+
function isDeletedMessage(message) {
|
|
1551
|
+
return message.messageType === exports.ZapyMessageType.DELETED;
|
|
1552
|
+
}
|
|
1553
|
+
function isPollMessage(message) {
|
|
1554
|
+
return message.messageType === exports.ZapyMessageType.POLL;
|
|
1555
|
+
}
|
|
1556
|
+
function isPollVoteMessage(message) {
|
|
1557
|
+
return message.messageType === exports.ZapyMessageType.POLL_VOTE;
|
|
1558
|
+
}
|
|
1559
|
+
function isCallMessage(message) {
|
|
1560
|
+
return message.messageType === exports.ZapyMessageType.CALL;
|
|
1561
|
+
}
|
|
1562
|
+
function isUnsupportedMessage(message) {
|
|
1563
|
+
return message.messageType === exports.ZapyMessageType.UNSUPPORTED;
|
|
1564
|
+
}
|
|
1565
|
+
function isMediaMessage(message) {
|
|
1566
|
+
return [exports.ZapyMessageType.IMAGE, exports.ZapyMessageType.VIDEO, exports.ZapyMessageType.AUDIO, exports.ZapyMessageType.DOCUMENT, exports.ZapyMessageType.STICKER].includes(message.messageType);
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
exports.WhatsappInstanceStatus = void 0;
|
|
1570
|
+
(function (WhatsappInstanceStatus) {
|
|
1571
|
+
WhatsappInstanceStatus["STOPPED"] = "stopped";
|
|
1572
|
+
WhatsappInstanceStatus["MANUALLY_STOPPED"] = "manually_stopped";
|
|
1573
|
+
WhatsappInstanceStatus["CONNECTING"] = "connecting";
|
|
1574
|
+
WhatsappInstanceStatus["PENDING_QR_CODE_SCAN"] = "pending_qr_code_scan";
|
|
1575
|
+
WhatsappInstanceStatus["CONNECTED"] = "connected";
|
|
1576
|
+
WhatsappInstanceStatus["ERROR"] = "error";
|
|
1577
|
+
WhatsappInstanceStatus["CREATED"] = "created";
|
|
1578
|
+
WhatsappInstanceStatus["QR_TIMEOUT"] = "qr_timeout";
|
|
1579
|
+
WhatsappInstanceStatus["PAYMENT_PENDING"] = "payment_pending";
|
|
1580
|
+
})(exports.WhatsappInstanceStatus || (exports.WhatsappInstanceStatus = {}));
|
|
1581
|
+
|
|
1582
|
+
// Re-export all event types
|
|
1583
|
+
/**
|
|
1584
|
+
* Event type constants for type-safe event handling
|
|
1585
|
+
*/
|
|
1586
|
+
const ZapyEventTypes = {
|
|
1587
|
+
MESSAGE: 'message',
|
|
1588
|
+
MESSAGE_STATUS: 'message-status',
|
|
1589
|
+
REACTION: 'reaction',
|
|
1590
|
+
PRESENCE: 'presence',
|
|
1591
|
+
QR_CODE: 'qr-code',
|
|
1592
|
+
CONTACT_CREATED: 'contact-created',
|
|
1593
|
+
CONTACT_UPDATED: 'contact-updated',
|
|
1594
|
+
CONTACT_DEDUPLICATED: 'contact-deduplicated',
|
|
1595
|
+
INSTANCE_STATUS: 'instance-status'
|
|
1596
|
+
};
|
|
1597
|
+
|
|
1242
1598
|
/**
|
|
1243
1599
|
* Phone number utilities for @zapyapi/sdk
|
|
1244
1600
|
*/
|
|
@@ -1420,23 +1776,43 @@ exports.InstanceNotFoundError = InstanceNotFoundError;
|
|
|
1420
1776
|
exports.InstanceStatus = InstanceStatus;
|
|
1421
1777
|
exports.MessageAckStatus = MessageAckStatus;
|
|
1422
1778
|
exports.MessageType = MessageType;
|
|
1779
|
+
exports.NetworkError = NetworkError;
|
|
1423
1780
|
exports.RateLimitError = RateLimitError;
|
|
1781
|
+
exports.TimeoutError = TimeoutError;
|
|
1424
1782
|
exports.ValidationError = ValidationError;
|
|
1425
1783
|
exports.WebhookEventType = WebhookEventType;
|
|
1426
1784
|
exports.WebhookQueueStatus = WebhookQueueStatus;
|
|
1427
1785
|
exports.ZapyApiError = ZapyApiError;
|
|
1428
1786
|
exports.ZapyClient = ZapyClient;
|
|
1429
1787
|
exports.ZapyError = ZapyError;
|
|
1788
|
+
exports.ZapyEventTypes = ZapyEventTypes;
|
|
1430
1789
|
exports.createClient = createClient;
|
|
1431
1790
|
exports.extractPhone = extractPhone;
|
|
1791
|
+
exports.isAudioMessage = isAudioMessage;
|
|
1792
|
+
exports.isCallMessage = isCallMessage;
|
|
1432
1793
|
exports.isContactCreatedEvent = isContactCreatedEvent;
|
|
1433
1794
|
exports.isContactDeduplicatedEvent = isContactDeduplicatedEvent;
|
|
1795
|
+
exports.isContactMessage = isContactMessage;
|
|
1434
1796
|
exports.isContactUpdatedEvent = isContactUpdatedEvent;
|
|
1797
|
+
exports.isDeletedMessage = isDeletedMessage;
|
|
1798
|
+
exports.isDocumentMessage = isDocumentMessage;
|
|
1799
|
+
exports.isEditedMessage = isEditedMessage;
|
|
1435
1800
|
exports.isGroup = isGroup;
|
|
1801
|
+
exports.isImageMessage = isImageMessage;
|
|
1802
|
+
exports.isLiveLocationMessage = isLiveLocationMessage;
|
|
1803
|
+
exports.isLocationMessage = isLocationMessage;
|
|
1804
|
+
exports.isMediaMessage = isMediaMessage;
|
|
1436
1805
|
exports.isMessageEvent = isMessageEvent;
|
|
1437
1806
|
exports.isMessageStatusEvent = isMessageStatusEvent;
|
|
1807
|
+
exports.isPollMessage = isPollMessage;
|
|
1808
|
+
exports.isPollVoteMessage = isPollVoteMessage;
|
|
1438
1809
|
exports.isQRCodeEvent = isQRCodeEvent;
|
|
1810
|
+
exports.isReactionMessage = isReactionMessage;
|
|
1811
|
+
exports.isStickerMessage = isStickerMessage;
|
|
1812
|
+
exports.isTextMessage = isTextMessage;
|
|
1813
|
+
exports.isUnsupportedMessage = isUnsupportedMessage;
|
|
1439
1814
|
exports.isValidPhone = isValidPhone;
|
|
1815
|
+
exports.isVideoMessage = isVideoMessage;
|
|
1440
1816
|
exports.normalizePhone = normalizePhone;
|
|
1441
1817
|
exports.verifyWebhookSignature = verifyWebhookSignature;
|
|
1442
1818
|
exports.verifyWebhookSignatureAsync = verifyWebhookSignatureAsync;
|