@zapyapi/sdk 1.0.0-beta.1 → 1.0.0-beta.11

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 (43) hide show
  1. package/README.md +131 -30
  2. package/index.cjs +1536 -151
  3. package/index.js +1516 -142
  4. package/package.json +1 -2
  5. package/src/client.d.ts +1 -1
  6. package/src/errors.d.ts +101 -5
  7. package/src/errors.d.ts.map +1 -1
  8. package/src/generated/Api.d.ts +637 -7
  9. package/src/generated/Api.d.ts.map +1 -1
  10. package/src/index.d.ts +13 -8
  11. package/src/index.d.ts.map +1 -1
  12. package/src/resources/base.resource.d.ts.map +1 -1
  13. package/src/resources/instances.resource.d.ts +106 -1
  14. package/src/resources/instances.resource.d.ts.map +1 -1
  15. package/src/resources/messages.resource.d.ts +70 -1
  16. package/src/resources/messages.resource.d.ts.map +1 -1
  17. package/src/types/enums.d.ts +6 -87
  18. package/src/types/enums.d.ts.map +1 -1
  19. package/src/types/events/contact.d.ts +65 -0
  20. package/src/types/events/contact.d.ts.map +1 -0
  21. package/src/types/events/index.d.ts +76 -0
  22. package/src/types/events/index.d.ts.map +1 -0
  23. package/src/types/events/instance-status.d.ts +10 -0
  24. package/src/types/events/instance-status.d.ts.map +1 -0
  25. package/src/types/events/presence.d.ts +18 -0
  26. package/src/types/events/presence.d.ts.map +1 -0
  27. package/src/types/events/qr-code.d.ts +9 -0
  28. package/src/types/events/qr-code.d.ts.map +1 -0
  29. package/src/types/events/reaction.d.ts +14 -0
  30. package/src/types/events/reaction.d.ts.map +1 -0
  31. package/src/types/index.d.ts +8 -5
  32. package/src/types/index.d.ts.map +1 -1
  33. package/src/types/instances.types.d.ts +99 -0
  34. package/src/types/instances.types.d.ts.map +1 -1
  35. package/src/types/message-events.types.d.ts +250 -0
  36. package/src/types/message-events.types.d.ts.map +1 -0
  37. package/src/types/messages.types.d.ts +68 -1
  38. package/src/types/messages.types.d.ts.map +1 -1
  39. package/src/utils/phone.d.ts +1 -1
  40. package/src/version.d.ts +1 -1
  41. package/src/version.d.ts.map +1 -1
  42. package/src/types/webhook-events.types.d.ts +0 -232
  43. package/src/types/webhook-events.types.d.ts.map +0 -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.1';
6
+ const SDK_VERSION = '1.0.0-beta.11';
7
7
 
8
8
  /**
9
9
  * Custom error classes for @zapyapi/sdk
@@ -12,11 +12,30 @@ const SDK_VERSION = '1.0.0-beta.1';
12
12
  * Base error class for all ZapyAPI errors
13
13
  */
14
14
  class ZapyError extends Error {
15
- constructor(message) {
16
- super(message);
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
- constructor(message, statusCode, code, requestId, details) {
42
- super(message);
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
- if (data && typeof data === 'object' && 'code' in data) {
58
- return new ZapyApiError(data.message || error.message, statusCode, data.code, requestId || data.requestId, data.details);
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
- return new ZapyApiError(error.message || 'An unexpected error occurred', statusCode, 'UNKNOWN_ERROR', requestId);
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
- constructor(instanceId, requestId) {
83
- super(`Instance '${instanceId}' not found`, 404, 'INSTANCE_NOT_FOUND', requestId, {
84
- instanceId
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', requestId) {
95
- super(message, 401, 'UNAUTHORIZED', requestId);
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, requestId) {
109
- super(message, 429, 'RATE_LIMIT_EXCEEDED', requestId, {
110
- retryAfter
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 statusCode = error.response?.status;
132
- const retryAfter = error.response?.headers?.['retry-after'];
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?.data?.message || 'Invalid or missing API key', error.response?.headers?.['x-request-id']);
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
- throw new RateLimitError(error.response?.data?.message || 'Rate limit exceeded', retryAfter ? parseInt(retryAfter, 10) * 1000 : undefined, error.response?.headers?.['x-request-id']);
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
  }
@@ -199,10 +435,13 @@ class MessagesResource extends BaseResource {
199
435
  */
200
436
  async sendImage(instanceId, options) {
201
437
  try {
438
+ const image = options.url || options.base64;
439
+ if (!image) {
440
+ throw new Error('Either url or base64 must be provided');
441
+ }
202
442
  const response = await this.http.post(`/message/${instanceId}/image`, {
203
443
  to: options.to,
204
- url: options.url,
205
- base64: options.base64,
444
+ image,
206
445
  caption: options.caption,
207
446
  quoteMessageId: options.quotedMessageId
208
447
  });
@@ -227,10 +466,13 @@ class MessagesResource extends BaseResource {
227
466
  */
228
467
  async sendVideo(instanceId, options) {
229
468
  try {
469
+ const video = options.url || options.base64;
470
+ if (!video) {
471
+ throw new Error('Either url or base64 must be provided');
472
+ }
230
473
  const response = await this.http.post(`/message/${instanceId}/video`, {
231
474
  to: options.to,
232
- url: options.url,
233
- base64: options.base64,
475
+ video,
234
476
  caption: options.caption,
235
477
  quoteMessageId: options.quotedMessageId
236
478
  });
@@ -254,10 +496,13 @@ class MessagesResource extends BaseResource {
254
496
  */
255
497
  async sendAudioNote(instanceId, options) {
256
498
  try {
499
+ const audio = options.url || options.base64;
500
+ if (!audio) {
501
+ throw new Error('Either url or base64 must be provided');
502
+ }
257
503
  const response = await this.http.post(`/message/${instanceId}/audio-note`, {
258
504
  to: options.to,
259
- url: options.url,
260
- base64: options.base64,
505
+ audio,
261
506
  quoteMessageId: options.quotedMessageId
262
507
  });
263
508
  return response.data;
@@ -280,10 +525,13 @@ class MessagesResource extends BaseResource {
280
525
  */
281
526
  async sendAudioFile(instanceId, options) {
282
527
  try {
528
+ const audio = options.url || options.base64;
529
+ if (!audio) {
530
+ throw new Error('Either url or base64 must be provided');
531
+ }
283
532
  const response = await this.http.post(`/message/${instanceId}/audio-file`, {
284
533
  to: options.to,
285
- url: options.url,
286
- base64: options.base64,
534
+ audio,
287
535
  quoteMessageId: options.quotedMessageId
288
536
  });
289
537
  return response.data;
@@ -308,11 +556,14 @@ class MessagesResource extends BaseResource {
308
556
  */
309
557
  async sendDocument(instanceId, options) {
310
558
  try {
559
+ const document = options.url || options.base64;
560
+ if (!document) {
561
+ throw new Error('Either url or base64 must be provided');
562
+ }
311
563
  const response = await this.http.post(`/message/${instanceId}/document`, {
312
564
  to: options.to,
313
- url: options.url,
314
- base64: options.base64,
315
- filename: options.filename,
565
+ document,
566
+ fileName: options.filename,
316
567
  caption: options.caption,
317
568
  quoteMessageId: options.quotedMessageId
318
569
  });
@@ -428,6 +679,124 @@ class MessagesResource extends BaseResource {
428
679
  this.handleError(error);
429
680
  }
430
681
  }
682
+ /**
683
+ * Send a location message
684
+ *
685
+ * @param instanceId - Instance ID
686
+ * @param options - Location message options
687
+ * @returns Message response with ID and status
688
+ *
689
+ * @example
690
+ * await client.messages.sendLocation('my-instance', {
691
+ * to: '5511999999999',
692
+ * latitude: -23.5505,
693
+ * longitude: -46.6333,
694
+ * name: 'São Paulo',
695
+ * address: 'São Paulo, Brazil'
696
+ * });
697
+ */
698
+ async sendLocation(instanceId, options) {
699
+ try {
700
+ const response = await this.http.post(`/message/${instanceId}/location`, {
701
+ to: options.to,
702
+ latitude: options.latitude,
703
+ longitude: options.longitude,
704
+ name: options.name,
705
+ address: options.address,
706
+ quoteMessageId: options.quotedMessageId
707
+ });
708
+ return response.data;
709
+ } catch (error) {
710
+ this.handleError(error);
711
+ }
712
+ }
713
+ /**
714
+ * Send a contact card message
715
+ *
716
+ * @param instanceId - Instance ID
717
+ * @param options - Contact message options
718
+ * @returns Message response with ID and status
719
+ *
720
+ * @example
721
+ * await client.messages.sendContact('my-instance', {
722
+ * to: '5511999999999',
723
+ * contact: {
724
+ * fullName: 'John Doe',
725
+ * phoneNumber: '+5511988887777',
726
+ * organization: 'Acme Inc'
727
+ * }
728
+ * });
729
+ */
730
+ async sendContact(instanceId, options) {
731
+ try {
732
+ const response = await this.http.post(`/message/${instanceId}/contact`, {
733
+ to: options.to,
734
+ contact: options.contact,
735
+ quoteMessageId: options.quotedMessageId
736
+ });
737
+ return response.data;
738
+ } catch (error) {
739
+ this.handleError(error);
740
+ }
741
+ }
742
+ /**
743
+ * Send a sticker message
744
+ *
745
+ * @param instanceId - Instance ID
746
+ * @param options - Sticker message options
747
+ * @returns Message response with ID and status
748
+ *
749
+ * @example
750
+ * await client.messages.sendSticker('my-instance', {
751
+ * to: '5511999999999',
752
+ * url: 'https://example.com/sticker.webp'
753
+ * });
754
+ */
755
+ async sendSticker(instanceId, options) {
756
+ try {
757
+ const sticker = options.url || options.base64;
758
+ if (!sticker) {
759
+ throw new Error('Either url or base64 must be provided');
760
+ }
761
+ const response = await this.http.post(`/message/${instanceId}/sticker`, {
762
+ to: options.to,
763
+ sticker,
764
+ quoteMessageId: options.quotedMessageId
765
+ });
766
+ return response.data;
767
+ } catch (error) {
768
+ this.handleError(error);
769
+ }
770
+ }
771
+ /**
772
+ * Send a reaction to a message
773
+ *
774
+ * @param instanceId - Instance ID
775
+ * @param options - Reaction options
776
+ *
777
+ * @example
778
+ * // Add a reaction
779
+ * await client.messages.sendReaction('my-instance', {
780
+ * messageId: 'ABC123...',
781
+ * reaction: '👍'
782
+ * });
783
+ *
784
+ * // Remove a reaction
785
+ * await client.messages.sendReaction('my-instance', {
786
+ * messageId: 'ABC123...',
787
+ * reaction: ''
788
+ * });
789
+ */
790
+ async sendReaction(instanceId, options) {
791
+ try {
792
+ await this.http.post(`/message/${instanceId}/reaction`, {
793
+ messageId: options.messageId,
794
+ reaction: options.reaction
795
+ });
796
+ } catch (error) {
797
+ this.handleError(error);
798
+ }
799
+ }
431
800
  }
432
801
 
433
802
  /**
@@ -691,6 +1060,155 @@ class InstancesResource extends BaseResource {
691
1060
  this.handleError(error);
692
1061
  }
693
1062
  }
1063
+ /**
1064
+ * Check if phone numbers are registered on WhatsApp
1065
+ *
1066
+ * This method verifies if the provided phone numbers are registered on WhatsApp.
1067
+ * Useful for validating contacts before sending messages.
1068
+ *
1069
+ * @param instanceId - Instance ID (must be connected)
1070
+ * @param numbers - Array of phone numbers to check (with country code, e.g., "5511999999999")
1071
+ * @returns Results indicating which numbers are registered on WhatsApp
1072
+ *
1073
+ * @example
1074
+ * const result = await client.instances.checkNumbers('my-instance', [
1075
+ * '5511999999999',
1076
+ * '5521888888888'
1077
+ * ]);
1078
+ *
1079
+ * for (const check of result.results) {
1080
+ * if (check.exists) {
1081
+ * console.log(`${check.number} is on WhatsApp (JID: ${check.jid})`);
1082
+ * } else {
1083
+ * console.log(`${check.number} is NOT on WhatsApp`);
1084
+ * }
1085
+ * }
1086
+ */
1087
+ async checkNumbers(instanceId, numbers) {
1088
+ try {
1089
+ const response = await this.http.post(`/instances/${instanceId}/check-numbers`, {
1090
+ numbers
1091
+ });
1092
+ return response.data;
1093
+ } catch (error) {
1094
+ this.handleError(error);
1095
+ }
1096
+ }
1097
+ /**
1098
+ * Send a presence update (typing indicator, online status, etc.)
1099
+ *
1100
+ * Use this to show typing indicators or update online status for a contact.
1101
+ *
1102
+ * @param instanceId - Instance ID (must be connected)
1103
+ * @param options - Presence options
1104
+ *
1105
+ * @example
1106
+ * // Show typing indicator
1107
+ * await client.instances.sendPresence('my-instance', {
1108
+ * to: '5511999999999',
1109
+ * presence: 'composing'
1110
+ * });
1111
+ *
1112
+ * // Show recording audio indicator
1113
+ * await client.instances.sendPresence('my-instance', {
1114
+ * to: '5511999999999',
1115
+ * presence: 'recording'
1116
+ * });
1117
+ *
1118
+ * // Stop typing indicator
1119
+ * await client.instances.sendPresence('my-instance', {
1120
+ * to: '5511999999999',
1121
+ * presence: 'paused'
1122
+ * });
1123
+ */
1124
+ async sendPresence(instanceId, options) {
1125
+ try {
1126
+ await this.http.post(`/instances/${instanceId}/presence`, {
1127
+ to: options.to,
1128
+ presence: options.presence
1129
+ });
1130
+ } catch (error) {
1131
+ this.handleError(error);
1132
+ }
1133
+ }
1134
+ /**
1135
+ * Get profile picture URL for a contact
1136
+ *
1137
+ * @param instanceId - Instance ID (must be connected)
1138
+ * @param phone - Phone number or JID of the contact
1139
+ * @returns Profile picture response with URL (null if not available)
1140
+ *
1141
+ * @example
1142
+ * const result = await client.instances.getProfilePicture('my-instance', '5511999999999');
1143
+ * if (result.url) {
1144
+ * console.log('Profile picture:', result.url);
1145
+ * } else {
1146
+ * console.log('No profile picture available');
1147
+ * }
1148
+ */
1149
+ async getProfilePicture(instanceId, phone) {
1150
+ try {
1151
+ const response = await this.http.get(`/instances/${instanceId}/contacts/${phone}/profile-picture`);
1152
+ return response.data;
1153
+ } catch (error) {
1154
+ this.handleError(error);
1155
+ }
1156
+ }
1157
+ /**
1158
+ * Block a contact
1159
+ *
1160
+ * @param instanceId - Instance ID (must be connected)
1161
+ * @param phone - Phone number or JID of the contact to block
1162
+ *
1163
+ * @example
1164
+ * await client.instances.blockContact('my-instance', '5511999999999');
1165
+ */
1166
+ async blockContact(instanceId, phone) {
1167
+ try {
1168
+ await this.http.post(`/instances/${instanceId}/contacts/${phone}/block`);
1169
+ } catch (error) {
1170
+ this.handleError(error);
1171
+ }
1172
+ }
1173
+ /**
1174
+ * Unblock a contact
1175
+ *
1176
+ * @param instanceId - Instance ID (must be connected)
1177
+ * @param phone - Phone number or JID of the contact to unblock
1178
+ *
1179
+ * @example
1180
+ * await client.instances.unblockContact('my-instance', '5511999999999');
1181
+ */
1182
+ async unblockContact(instanceId, phone) {
1183
+ try {
1184
+ await this.http.delete(`/instances/${instanceId}/contacts/${phone}/block`);
1185
+ } catch (error) {
1186
+ this.handleError(error);
1187
+ }
1188
+ }
1189
+ /**
1190
+ * Get group metadata
1191
+ *
1192
+ * @param instanceId - Instance ID (must be connected)
1193
+ * @param groupId - Group JID (e.g., "120363123456789012@g.us")
1194
+ * @returns Group metadata including participants
1195
+ *
1196
+ * @example
1197
+ * const metadata = await client.instances.getGroupMetadata('my-instance', '120363123456789012@g.us');
1198
+ * console.log(`Group: ${metadata.subject}`);
1199
+ * console.log(`Participants: ${metadata.participants.length}`);
1200
+ * for (const p of metadata.participants) {
1201
+ * console.log(` - ${p.id} (${p.admin || 'member'})`);
1202
+ * }
1203
+ */
1204
+ async getGroupMetadata(instanceId, groupId) {
1205
+ try {
1206
+ const response = await this.http.get(`/instances/${instanceId}/groups/${groupId}`);
1207
+ return response.data;
1208
+ } catch (error) {
1209
+ this.handleError(error);
1210
+ }
1211
+ }
694
1212
  }
695
1213
 
696
1214
  /**
@@ -701,7 +1219,7 @@ class InstancesResource extends BaseResource {
701
1219
  *
702
1220
  * @example
703
1221
  * ```typescript
704
- * import { ZapyClient, WebhookEventType, isMessageEvent } from '@zapyapi/sdk';
1222
+ * import { ZapyClient, ZapyEventTypes, isTextMessage } from '@zapyapi/sdk';
705
1223
  *
706
1224
  * const client = new ZapyClient({
707
1225
  * apiKey: 'your-api-key',
@@ -811,42 +1329,21 @@ function createClient(options) {
811
1329
  /**
812
1330
  * SDK Enums - Type-safe enums for ZapyAPI SDK
813
1331
  *
814
- * These enums can be imported and used for type-safe comparisons and
815
- * webhook event handling.
816
- *
817
1332
  * @example
818
1333
  * ```typescript
819
- * import { WebhookEventType, InstanceStatus, MessageAckStatus } from '@zapyapi/sdk';
820
- *
821
- * // Type-safe event handling
822
- * if (event.event === WebhookEventType.MESSAGE) {
823
- * // Handle message event
824
- * }
1334
+ * import { InstanceStatus, ZapyEventTypes, ZapyMessageType } from '@zapyapi/sdk';
825
1335
  *
826
1336
  * // Check instance status
827
1337
  * if (instance.status === InstanceStatus.CONNECTED) {
828
1338
  * // Instance is ready
829
1339
  * }
1340
+ *
1341
+ * // Handle webhook events
1342
+ * if (payload.event === ZapyEventTypes.MESSAGE) {
1343
+ * // Handle message
1344
+ * }
830
1345
  * ```
831
1346
  */
832
- /**
833
- * Webhook event types sent by ZapyAPI
834
- * These are the event types you'll receive in webhook payloads
835
- */
836
- const WebhookEventType = {
837
- /** New message received */
838
- MESSAGE: 'message',
839
- /** Message delivery status update */
840
- MESSAGE_STATUS: 'message-status',
841
- /** QR code generated for authentication */
842
- QR_CODE: 'qr-code',
843
- /** New contact discovered */
844
- CONTACT_CREATED: 'contact-created',
845
- /** Contact information updated */
846
- CONTACT_UPDATED: 'contact-updated',
847
- /** Duplicate contacts merged */
848
- CONTACT_DEDUPLICATED: 'contact-deduplicated'
849
- };
850
1347
  /**
851
1348
  * Instance status values
852
1349
  * Represents the current state of a WhatsApp instance
@@ -871,48 +1368,6 @@ const InstanceStatus = {
871
1368
  /** Payment pending for this instance */
872
1369
  PAYMENT_PENDING: 'payment_pending'
873
1370
  };
874
- /**
875
- * Message acknowledgment status
876
- * Represents the delivery status of a sent message
877
- */
878
- const MessageAckStatus = {
879
- /** Message is pending to be sent */
880
- PENDING: 'pending',
881
- /** Message was sent to server */
882
- SENT: 'sent',
883
- /** Message was delivered to recipient */
884
- DELIVERED: 'delivered',
885
- /** Message was read by recipient */
886
- READ: 'read',
887
- /** Audio/video message was played */
888
- PLAYED: 'played'
889
- };
890
- /**
891
- * Message types for incoming messages
892
- * Identifies the type of content in a received message
893
- */
894
- const MessageType = {
895
- /** Text message */
896
- TEXT: 'text',
897
- /** Image message */
898
- IMAGE: 'image',
899
- /** Video message */
900
- VIDEO: 'video',
901
- /** Audio message (voice note or file) */
902
- AUDIO: 'audio',
903
- /** Document/file message */
904
- DOCUMENT: 'document',
905
- /** Sticker message */
906
- STICKER: 'sticker',
907
- /** Location message */
908
- LOCATION: 'location',
909
- /** Contact card message */
910
- CONTACT: 'contact',
911
- /** Poll message */
912
- POLL: 'poll',
913
- /** Reaction message */
914
- REACTION: 'reaction'
915
- };
916
1371
  /**
917
1372
  * Webhook queue item status
918
1373
  * Used for monitoring webhook delivery status
@@ -929,49 +1384,113 @@ const WebhookQueueStatus = {
929
1384
  /** Webhook delivery is paused due to repeated failures */
930
1385
  PAUSED: 'paused'
931
1386
  };
932
- /**
933
- * Connection status for webhook events
934
- * Sent in connection.update webhook events
935
- */
936
- const ConnectionStatus = {
937
- /** Instance is connecting */
938
- CONNECTING: 'connecting',
939
- /** Instance is connected */
940
- CONNECTED: 'connected',
941
- /** Instance disconnected */
942
- DISCONNECTED: 'disconnected',
943
- /** Connection error occurred */
944
- ERROR: 'error'
945
- };
946
1387
 
947
1388
  /**
948
- * Webhook event type definitions
949
- * Types for webhook payloads sent by ZapyAPI
1389
+ * WhatsApp Message Event Types
1390
+ * Comprehensive type definitions for all WhatsApp message types
950
1391
  */
951
- /** Type guard for message events */
952
- function isMessageEvent(event) {
953
- return event.event === 'message';
1392
+ // ============================================================================
1393
+ // Message Status
1394
+ // ============================================================================
1395
+ exports.ZapyMessageStatusEnum = void 0;
1396
+ (function (ZapyMessageStatusEnum) {
1397
+ ZapyMessageStatusEnum["UNKNOWN"] = "UNKNOWN";
1398
+ ZapyMessageStatusEnum["ERROR"] = "ERROR";
1399
+ ZapyMessageStatusEnum["PENDING"] = "PENDING";
1400
+ ZapyMessageStatusEnum["SENT"] = "SENT";
1401
+ ZapyMessageStatusEnum["RECEIVED"] = "RECEIVED";
1402
+ ZapyMessageStatusEnum["READ"] = "READ";
1403
+ ZapyMessageStatusEnum["PLAYED"] = "PLAYED";
1404
+ })(exports.ZapyMessageStatusEnum || (exports.ZapyMessageStatusEnum = {}));
1405
+ exports.ZapyMessageType = void 0;
1406
+ (function (ZapyMessageType) {
1407
+ ZapyMessageType["TEXT"] = "text";
1408
+ ZapyMessageType["IMAGE"] = "image";
1409
+ ZapyMessageType["VIDEO"] = "video";
1410
+ ZapyMessageType["AUDIO"] = "audio";
1411
+ ZapyMessageType["DOCUMENT"] = "document";
1412
+ ZapyMessageType["STICKER"] = "sticker";
1413
+ ZapyMessageType["LOCATION"] = "location";
1414
+ ZapyMessageType["LIVE_LOCATION"] = "live_location";
1415
+ ZapyMessageType["CONTACT"] = "contact";
1416
+ ZapyMessageType["REACTION"] = "reaction";
1417
+ ZapyMessageType["EDITED"] = "edited";
1418
+ ZapyMessageType["DELETED"] = "deleted";
1419
+ ZapyMessageType["POLL"] = "poll";
1420
+ ZapyMessageType["POLL_VOTE"] = "poll_vote";
1421
+ ZapyMessageType["CALL"] = "call";
1422
+ ZapyMessageType["UNSUPPORTED"] = "unsupported";
1423
+ })(exports.ZapyMessageType || (exports.ZapyMessageType = {}));
1424
+ // ============================================================================
1425
+ // Type Guards
1426
+ // ============================================================================
1427
+ function isTextMessage(message) {
1428
+ return message.messageType === exports.ZapyMessageType.TEXT;
1429
+ }
1430
+ function isImageMessage(message) {
1431
+ return message.messageType === exports.ZapyMessageType.IMAGE;
1432
+ }
1433
+ function isVideoMessage(message) {
1434
+ return message.messageType === exports.ZapyMessageType.VIDEO;
1435
+ }
1436
+ function isAudioMessage(message) {
1437
+ return message.messageType === exports.ZapyMessageType.AUDIO;
1438
+ }
1439
+ function isDocumentMessage(message) {
1440
+ return message.messageType === exports.ZapyMessageType.DOCUMENT;
1441
+ }
1442
+ function isStickerMessage(message) {
1443
+ return message.messageType === exports.ZapyMessageType.STICKER;
1444
+ }
1445
+ function isLocationMessage(message) {
1446
+ return message.messageType === exports.ZapyMessageType.LOCATION;
1447
+ }
1448
+ function isLiveLocationMessage(message) {
1449
+ return message.messageType === exports.ZapyMessageType.LIVE_LOCATION;
1450
+ }
1451
+ function isContactMessage(message) {
1452
+ return message.messageType === exports.ZapyMessageType.CONTACT;
954
1453
  }
955
- /** Type guard for message status events */
956
- function isMessageStatusEvent(event) {
957
- return event.event === 'message-status';
1454
+ function isReactionMessage(message) {
1455
+ return message.messageType === exports.ZapyMessageType.REACTION;
958
1456
  }
959
- /** Type guard for QR code events */
960
- function isQRCodeEvent(event) {
961
- return event.event === 'qr-code';
1457
+ function isEditedMessage(message) {
1458
+ return message.messageType === exports.ZapyMessageType.EDITED;
962
1459
  }
963
- /** Type guard for contact created events */
964
- function isContactCreatedEvent(event) {
965
- return event.event === 'contact-created';
1460
+ function isDeletedMessage(message) {
1461
+ return message.messageType === exports.ZapyMessageType.DELETED;
966
1462
  }
967
- /** Type guard for contact updated events */
968
- function isContactUpdatedEvent(event) {
969
- return event.event === 'contact-updated';
1463
+ function isPollMessage(message) {
1464
+ return message.messageType === exports.ZapyMessageType.POLL;
970
1465
  }
971
- /** Type guard for contact deduplicated events */
972
- function isContactDeduplicatedEvent(event) {
973
- return event.event === 'contact-deduplicated';
1466
+ function isPollVoteMessage(message) {
1467
+ return message.messageType === exports.ZapyMessageType.POLL_VOTE;
974
1468
  }
1469
+ function isCallMessage(message) {
1470
+ return message.messageType === exports.ZapyMessageType.CALL;
1471
+ }
1472
+ function isUnsupportedMessage(message) {
1473
+ return message.messageType === exports.ZapyMessageType.UNSUPPORTED;
1474
+ }
1475
+ function isMediaMessage(message) {
1476
+ return [exports.ZapyMessageType.IMAGE, exports.ZapyMessageType.VIDEO, exports.ZapyMessageType.AUDIO, exports.ZapyMessageType.DOCUMENT, exports.ZapyMessageType.STICKER].includes(message.messageType);
1477
+ }
1478
+
1479
+ // Re-export all event types
1480
+ /**
1481
+ * Event type constants for type-safe event handling
1482
+ */
1483
+ const ZapyEventTypes = {
1484
+ MESSAGE: 'message',
1485
+ MESSAGE_STATUS: 'message-status',
1486
+ REACTION: 'reaction',
1487
+ PRESENCE: 'presence',
1488
+ QR_CODE: 'qr-code',
1489
+ CONTACT_CREATED: 'contact-created',
1490
+ CONTACT_UPDATED: 'contact-updated',
1491
+ CONTACT_DEDUPLICATED: 'contact-deduplicated',
1492
+ INSTANCE_STATUS: 'instance-status'
1493
+ };
975
1494
 
976
1495
  /**
977
1496
  * Phone number utilities for @zapyapi/sdk
@@ -986,7 +1505,7 @@ function isContactDeduplicatedEvent(event) {
986
1505
  * normalizePhone('11999999999') // '5511999999999'
987
1506
  * normalizePhone('5511999999999') // '5511999999999'
988
1507
  * normalizePhone('+5511999999999') // '5511999999999'
989
- * normalizePhone('5511999999999@c.us') // '5511999999999@c.us'
1508
+ * normalizePhone('5511999999999@s.whatsapp.net') // '5511999999999@s.whatsapp.net'
990
1509
  */
991
1510
  function normalizePhone(phone) {
992
1511
  // If it's already a WhatsApp ID, return as-is
@@ -1015,7 +1534,7 @@ function normalizePhone(phone) {
1015
1534
  function isValidPhone(phone) {
1016
1535
  // WhatsApp IDs are valid
1017
1536
  if (phone.includes('@')) {
1018
- return phone.endsWith('@c.us') || phone.endsWith('@g.us') || phone.endsWith('@lid');
1537
+ return phone.endsWith('@s.whatsapp.net') || phone.endsWith('@c.us') || phone.endsWith('@g.us') || phone.endsWith('@lid');
1019
1538
  }
1020
1539
  // Clean and check if it's a valid number
1021
1540
  const cleaned = phone.replace(/[^\d]/g, '');
@@ -1081,7 +1600,6 @@ function extractPhone(jid) {
1081
1600
  function verifyWebhookSignature(payload, signature, secret) {
1082
1601
  if (!signature || !secret) return false;
1083
1602
  try {
1084
- // eslint-disable-next-line @typescript-eslint/no-require-imports
1085
1603
  const crypto = require('crypto');
1086
1604
  return verifySignatureWithCrypto(crypto, payload, signature, secret);
1087
1605
  } catch {
@@ -1148,29 +1666,896 @@ function verifySignatureWithCrypto(crypto, payload, signature, secret) {
1148
1666
  return crypto.timingSafeEqual(Buffer.from(signature, 'utf8'), Buffer.from(expectedSignature, 'utf8'));
1149
1667
  }
1150
1668
 
1669
+ /* eslint-disable */
1670
+ /* tslint:disable */
1671
+ // @ts-nocheck
1672
+ /*
1673
+ * ---------------------------------------------------------------
1674
+ * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
1675
+ * ## ##
1676
+ * ## AUTHOR: acacode ##
1677
+ * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
1678
+ * ---------------------------------------------------------------
1679
+ */
1680
+ var ContentType;
1681
+ (function (ContentType) {
1682
+ ContentType["Json"] = "application/json";
1683
+ ContentType["JsonApi"] = "application/vnd.api+json";
1684
+ ContentType["FormData"] = "multipart/form-data";
1685
+ ContentType["UrlEncoded"] = "application/x-www-form-urlencoded";
1686
+ ContentType["Text"] = "text/plain";
1687
+ })(ContentType || (ContentType = {}));
1688
+ class HttpClient {
1689
+ instance;
1690
+ securityData = null;
1691
+ securityWorker;
1692
+ secure;
1693
+ format;
1694
+ constructor({
1695
+ securityWorker,
1696
+ secure,
1697
+ format,
1698
+ ...axiosConfig
1699
+ } = {}) {
1700
+ this.instance = axios.create({
1701
+ ...axiosConfig,
1702
+ baseURL: axiosConfig.baseURL || ""
1703
+ });
1704
+ this.secure = secure;
1705
+ this.format = format;
1706
+ this.securityWorker = securityWorker;
1707
+ }
1708
+ setSecurityData = data => {
1709
+ this.securityData = data;
1710
+ };
1711
+ mergeRequestParams(params1, params2) {
1712
+ const method = params1.method || params2 && params2.method;
1713
+ return {
1714
+ ...this.instance.defaults,
1715
+ ...params1,
1716
+ ...(params2 || {}),
1717
+ headers: {
1718
+ ...(method && this.instance.defaults.headers[method.toLowerCase()] || {}),
1719
+ ...(params1.headers || {}),
1720
+ ...(params2 && params2.headers || {})
1721
+ }
1722
+ };
1723
+ }
1724
+ stringifyFormItem(formItem) {
1725
+ if (typeof formItem === "object" && formItem !== null) {
1726
+ return JSON.stringify(formItem);
1727
+ } else {
1728
+ return `${formItem}`;
1729
+ }
1730
+ }
1731
+ createFormData(input) {
1732
+ if (input instanceof FormData) {
1733
+ return input;
1734
+ }
1735
+ return Object.keys(input || {}).reduce((formData, key) => {
1736
+ const property = input[key];
1737
+ const propertyContent = property instanceof Array ? property : [property];
1738
+ for (const formItem of propertyContent) {
1739
+ const isFileType = formItem instanceof Blob || formItem instanceof File;
1740
+ formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem));
1741
+ }
1742
+ return formData;
1743
+ }, new FormData());
1744
+ }
1745
+ request = async ({
1746
+ secure,
1747
+ path,
1748
+ type,
1749
+ query,
1750
+ format,
1751
+ body,
1752
+ ...params
1753
+ }) => {
1754
+ const secureParams = (typeof secure === "boolean" ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData)) || {};
1755
+ const requestParams = this.mergeRequestParams(params, secureParams);
1756
+ const responseFormat = format || this.format || undefined;
1757
+ if (type === ContentType.FormData && body && body !== null && typeof body === "object") {
1758
+ body = this.createFormData(body);
1759
+ }
1760
+ if (type === ContentType.Text && body && body !== null && typeof body !== "string") {
1761
+ body = JSON.stringify(body);
1762
+ }
1763
+ return this.instance.request({
1764
+ ...requestParams,
1765
+ headers: {
1766
+ ...(requestParams.headers || {}),
1767
+ ...(type ? {
1768
+ "Content-Type": type
1769
+ } : {})
1770
+ },
1771
+ params: query,
1772
+ responseType: responseFormat,
1773
+ data: body,
1774
+ url: path
1775
+ });
1776
+ };
1777
+ }
1778
+ /**
1779
+ * @title Zapy API - Gerenciador de Instâncias WhatsApp
1780
+ * @version 1.0.0
1781
+ * @contact Suporte Zapy API <contato@zapyapi.com> (http://app.zapyapi.com/)
1782
+ *
1783
+ *
1784
+ * Formatos de Mensagem
1785
+ * - Números de Telefone: Formato brasileiro (11999999999) ou internacional (5511999999999)
1786
+ * - IDs do WhatsApp: Pessoal (@s.whatsapp.net), Grupos (@g.us), LIDs (@lid)
1787
+ * - Mídia: Arquivos codificados em Base64 ou URLs públicas
1788
+ *
1789
+ * Suporte
1790
+ * Para suporte técnico e documentação, visite nosso site.
1791
+ * https://app.zapyapi.com/
1792
+ *
1793
+ */
1794
+ class Api extends HttpClient {
1795
+ instances = {
1796
+ /**
1797
+ * @description Lista todas as instâncias do WhatsApp
1798
+ *
1799
+ * @tags Instâncias
1800
+ * @name ManagerInstancesControllerListInstances
1801
+ * @summary Listar Instâncias
1802
+ * @request GET:/api/instances
1803
+ * @secure
1804
+ * @response `200` `(ResponsePaginated & {
1805
+ data?: (ListInstancesResponseDto)[],
1806
+ })` Lista paginada de instâncias obtida com sucesso
1807
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1808
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
1809
+ */
1810
+ managerInstancesControllerListInstances: (query, params = {}) => this.request({
1811
+ path: `/api/instances`,
1812
+ method: "GET",
1813
+ query: query,
1814
+ secure: true,
1815
+ format: "json",
1816
+ ...params
1817
+ }),
1818
+ /**
1819
+ * No description
1820
+ *
1821
+ * @tags Instâncias
1822
+ * @name ManagerInstancesControllerCreateInstance
1823
+ * @summary Create a new WhatsApp instance (Partner only - post-paid subscriptions required)
1824
+ * @request POST:/api/instances
1825
+ * @secure
1826
+ * @response `201` `ManagerInstanceResponseDto` Instance created successfully
1827
+ * @response `400` `void` Bad request
1828
+ */
1829
+ managerInstancesControllerCreateInstance: (data, params = {}) => this.request({
1830
+ path: `/api/instances`,
1831
+ method: "POST",
1832
+ body: data,
1833
+ secure: true,
1834
+ type: ContentType.Json,
1835
+ format: "json",
1836
+ ...params
1837
+ }),
1838
+ /**
1839
+ * @description Obtém o código QR para conectar a instância do WhatsApp
1840
+ *
1841
+ * @tags Instâncias
1842
+ * @name ManagerInstancesControllerGetQrCode
1843
+ * @summary Obter Código QR
1844
+ * @request GET:/api/instances/{instanceId}/qr
1845
+ * @secure
1846
+ * @response `200` `QRCodeResponseDto` Código QR obtido com sucesso
1847
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1848
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1849
+ */
1850
+ managerInstancesControllerGetQrCode: ({
1851
+ instanceId,
1852
+ ...query
1853
+ }, params = {}) => this.request({
1854
+ path: `/api/instances/${instanceId}/qr`,
1855
+ method: "GET",
1856
+ secure: true,
1857
+ format: "json",
1858
+ ...params
1859
+ }),
1860
+ /**
1861
+ * @description Reinicia uma instância do WhatsApp
1862
+ *
1863
+ * @tags Instâncias
1864
+ * @name ManagerInstancesControllerRestartInstance
1865
+ * @summary Reiniciar Instância do WhatsApp
1866
+ * @request POST:/api/instances/{instanceId}/restart
1867
+ * @secure
1868
+ * @response `200` `EmptyResponseDto` Instância reiniciada com sucesso
1869
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1870
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1871
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1872
+ */
1873
+ managerInstancesControllerRestartInstance: ({
1874
+ instanceId,
1875
+ ...query
1876
+ }, params = {}) => this.request({
1877
+ path: `/api/instances/${instanceId}/restart`,
1878
+ method: "POST",
1879
+ secure: true,
1880
+ format: "json",
1881
+ ...params
1882
+ }),
1883
+ /**
1884
+ * @description Desloga uma instância do WhatsApp
1885
+ *
1886
+ * @tags Instâncias
1887
+ * @name ManagerInstancesControllerLogoutInstance
1888
+ * @summary Deslogar Instância do WhatsApp
1889
+ * @request POST:/api/instances/{instanceId}/logout
1890
+ * @secure
1891
+ * @response `200` `EmptyResponseDto` Instância deslogada com sucesso
1892
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1893
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1894
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1895
+ */
1896
+ managerInstancesControllerLogoutInstance: ({
1897
+ instanceId,
1898
+ ...query
1899
+ }, params = {}) => this.request({
1900
+ path: `/api/instances/${instanceId}/logout`,
1901
+ method: "POST",
1902
+ secure: true,
1903
+ format: "json",
1904
+ ...params
1905
+ }),
1906
+ /**
1907
+ * @description Exclui permanentemente uma instância do WhatsApp. Esta ação é irreversível.
1908
+ *
1909
+ * @tags Instâncias
1910
+ * @name ManagerInstancesControllerDeleteInstance
1911
+ * @summary Excluir Instância do WhatsApp (Somente Parceiros)
1912
+ * @request DELETE:/api/instances/{instanceId}
1913
+ * @secure
1914
+ * @response `204` `void` Instância excluída com sucesso
1915
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1916
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1917
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1918
+ */
1919
+ managerInstancesControllerDeleteInstance: ({
1920
+ instanceId,
1921
+ ...query
1922
+ }, params = {}) => this.request({
1923
+ path: `/api/instances/${instanceId}`,
1924
+ method: "DELETE",
1925
+ secure: true,
1926
+ ...params
1927
+ }),
1928
+ /**
1929
+ * @description Verifica se uma lista de números de telefone está registrada no WhatsApp
1930
+ *
1931
+ * @tags Instâncias
1932
+ * @name ManagerInstancesControllerCheckNumbers
1933
+ * @summary Verificar Números no WhatsApp
1934
+ * @request POST:/api/instances/{instanceId}/check-numbers
1935
+ * @secure
1936
+ * @response `200` `CheckNumbersResponseDto` Números verificados com sucesso
1937
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1938
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1939
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1940
+ */
1941
+ managerInstancesControllerCheckNumbers: ({
1942
+ instanceId,
1943
+ ...query
1944
+ }, data, params = {}) => this.request({
1945
+ path: `/api/instances/${instanceId}/check-numbers`,
1946
+ method: "POST",
1947
+ body: data,
1948
+ secure: true,
1949
+ type: ContentType.Json,
1950
+ format: "json",
1951
+ ...params
1952
+ }),
1953
+ /**
1954
+ * @description Envia um indicador de presença (digitando, gravando, online, etc.) para um contato
1955
+ *
1956
+ * @tags Instâncias
1957
+ * @name ManagerInstancesControllerSendPresence
1958
+ * @summary Enviar Indicador de Presença
1959
+ * @request POST:/api/instances/{instanceId}/presence
1960
+ * @secure
1961
+ * @response `204` `void` Presença enviada com sucesso
1962
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1963
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1964
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1965
+ */
1966
+ managerInstancesControllerSendPresence: ({
1967
+ instanceId,
1968
+ ...query
1969
+ }, data, params = {}) => this.request({
1970
+ path: `/api/instances/${instanceId}/presence`,
1971
+ method: "POST",
1972
+ body: data,
1973
+ secure: true,
1974
+ type: ContentType.Json,
1975
+ ...params
1976
+ }),
1977
+ /**
1978
+ * @description Obtém a URL da foto de perfil de um contato
1979
+ *
1980
+ * @tags Instâncias
1981
+ * @name ManagerInstancesControllerGetProfilePicture
1982
+ * @summary Obter Foto de Perfil
1983
+ * @request GET:/api/instances/{instanceId}/contacts/{phone}/profile-picture
1984
+ * @secure
1985
+ * @response `200` `void` Foto de perfil obtida com sucesso
1986
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1987
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1988
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1989
+ */
1990
+ managerInstancesControllerGetProfilePicture: ({
1991
+ instanceId,
1992
+ phone,
1993
+ ...query
1994
+ }, params = {}) => this.request({
1995
+ path: `/api/instances/${instanceId}/contacts/${phone}/profile-picture`,
1996
+ method: "GET",
1997
+ secure: true,
1998
+ ...params
1999
+ }),
2000
+ /**
2001
+ * @description Bloqueia um contato no WhatsApp
2002
+ *
2003
+ * @tags Instâncias
2004
+ * @name ManagerInstancesControllerBlockContact
2005
+ * @summary Bloquear Contato
2006
+ * @request POST:/api/instances/{instanceId}/contacts/{phone}/block
2007
+ * @secure
2008
+ * @response `204` `void` Contato bloqueado com sucesso
2009
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
2010
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
2011
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
2012
+ */
2013
+ managerInstancesControllerBlockContact: ({
2014
+ instanceId,
2015
+ phone,
2016
+ ...query
2017
+ }, params = {}) => this.request({
2018
+ path: `/api/instances/${instanceId}/contacts/${phone}/block`,
2019
+ method: "POST",
2020
+ secure: true,
2021
+ ...params
2022
+ }),
2023
+ /**
2024
+ * @description Desbloqueia um contato no WhatsApp
2025
+ *
2026
+ * @tags Instâncias
2027
+ * @name ManagerInstancesControllerUnblockContact
2028
+ * @summary Desbloquear Contato
2029
+ * @request DELETE:/api/instances/{instanceId}/contacts/{phone}/block
2030
+ * @secure
2031
+ * @response `204` `void` Contato desbloqueado com sucesso
2032
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
2033
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
2034
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
2035
+ */
2036
+ managerInstancesControllerUnblockContact: ({
2037
+ instanceId,
2038
+ phone,
2039
+ ...query
2040
+ }, params = {}) => this.request({
2041
+ path: `/api/instances/${instanceId}/contacts/${phone}/block`,
2042
+ method: "DELETE",
2043
+ secure: true,
2044
+ ...params
2045
+ }),
2046
+ /**
2047
+ * @description Obtém informações detalhadas sobre um grupo do WhatsApp
2048
+ *
2049
+ * @tags Instâncias
2050
+ * @name ManagerInstancesControllerGetGroupMetadata
2051
+ * @summary Obter Metadados do Grupo
2052
+ * @request GET:/api/instances/{instanceId}/groups/{groupId}
2053
+ * @secure
2054
+ * @response `200` `void` Metadados do grupo obtidos com sucesso
2055
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
2056
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
2057
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
2058
+ */
2059
+ managerInstancesControllerGetGroupMetadata: ({
2060
+ instanceId,
2061
+ groupId,
2062
+ ...query
2063
+ }, params = {}) => this.request({
2064
+ path: `/api/instances/${instanceId}/groups/${groupId}`,
2065
+ method: "GET",
2066
+ secure: true,
2067
+ ...params
2068
+ })
2069
+ };
2070
+ webhooks = {
2071
+ /**
2072
+ * @description Get the webhook configuration for the authenticated user. Returns null if no webhook is configured.
2073
+ *
2074
+ * @tags Webhooks
2075
+ * @name WebhookControllerGetConfig
2076
+ * @summary Get Webhook Configuration
2077
+ * @request GET:/api/webhooks/config
2078
+ * @secure
2079
+ * @response `200` `WebhookConfigResponseDto` Webhook configuration retrieved successfully
2080
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2081
+ */
2082
+ webhookControllerGetConfig: (params = {}) => this.request({
2083
+ path: `/api/webhooks/config`,
2084
+ method: "GET",
2085
+ secure: true,
2086
+ format: "json",
2087
+ ...params
2088
+ }),
2089
+ /**
2090
+ * @description Create or update the webhook configuration for the authenticated user. Only one webhook URL can be configured per user, and all instance events will be sent to this URL.
2091
+ *
2092
+ * @tags Webhooks
2093
+ * @name WebhookControllerUpsertConfig
2094
+ * @summary Configure Webhook
2095
+ * @request PUT:/api/webhooks/config
2096
+ * @secure
2097
+ * @response `200` `WebhookConfigResponseDto` Webhook configuration saved successfully
2098
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
2099
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2100
+ */
2101
+ webhookControllerUpsertConfig: (data, params = {}) => this.request({
2102
+ path: `/api/webhooks/config`,
2103
+ method: "PUT",
2104
+ body: data,
2105
+ secure: true,
2106
+ type: ContentType.Json,
2107
+ format: "json",
2108
+ ...params
2109
+ }),
2110
+ /**
2111
+ * @description Delete the webhook configuration and all queued webhooks for the authenticated user.
2112
+ *
2113
+ * @tags Webhooks
2114
+ * @name WebhookControllerDeleteConfig
2115
+ * @summary Delete Webhook Configuration
2116
+ * @request DELETE:/api/webhooks/config
2117
+ * @secure
2118
+ * @response `204` `void` Webhook configuration deleted successfully
2119
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2120
+ */
2121
+ webhookControllerDeleteConfig: (params = {}) => this.request({
2122
+ path: `/api/webhooks/config`,
2123
+ method: "DELETE",
2124
+ secure: true,
2125
+ ...params
2126
+ }),
2127
+ /**
2128
+ * @description Get the status of the webhook delivery queue, including counts of pending, failed, paused, and delivered webhooks.
2129
+ *
2130
+ * @tags Webhooks
2131
+ * @name WebhookControllerGetQueueStatus
2132
+ * @summary Get Queue Status
2133
+ * @request GET:/api/webhooks/queue/status
2134
+ * @secure
2135
+ * @response `200` `WebhookQueueStatusResponseDto` Queue status retrieved successfully
2136
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2137
+ */
2138
+ webhookControllerGetQueueStatus: (params = {}) => this.request({
2139
+ path: `/api/webhooks/queue/status`,
2140
+ method: "GET",
2141
+ secure: true,
2142
+ format: "json",
2143
+ ...params
2144
+ }),
2145
+ /**
2146
+ * @description Resume all paused and failed webhooks. This will unpause the webhook configuration and reset all paused/failed items to pending.
2147
+ *
2148
+ * @tags Webhooks
2149
+ * @name WebhookControllerResumeAll
2150
+ * @summary Resume Webhooks
2151
+ * @request POST:/api/webhooks/queue/resume
2152
+ * @secure
2153
+ * @response `200` `WebhookResumeResponseDto` Webhooks resumed successfully
2154
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2155
+ */
2156
+ webhookControllerResumeAll: (params = {}) => this.request({
2157
+ path: `/api/webhooks/queue/resume`,
2158
+ method: "POST",
2159
+ secure: true,
2160
+ format: "json",
2161
+ ...params
2162
+ })
2163
+ };
2164
+ message = {
2165
+ /**
2166
+ * @description Envia uma mensagem de texto para um contato ou grupo do WhatsApp
2167
+ *
2168
+ * @tags Mensagens
2169
+ * @name SendMessageControllerSendTextMessage
2170
+ * @summary Enviar Mensagem de Texto
2171
+ * @request POST:/api/message/{instanceId}/text
2172
+ * @secure
2173
+ * @response `201` `CommonSendMessageResponseDto` Mensagem enviada com sucesso
2174
+ * @response `400` `void` Dados da requisição inválidos
2175
+ * @response `404` `void` Instância do WhatsApp não encontrada
2176
+ */
2177
+ sendMessageControllerSendTextMessage: ({
2178
+ instanceId,
2179
+ ...query
2180
+ }, data, params = {}) => this.request({
2181
+ path: `/api/message/${instanceId}/text`,
2182
+ method: "POST",
2183
+ body: data,
2184
+ secure: true,
2185
+ type: ContentType.Json,
2186
+ format: "json",
2187
+ ...params
2188
+ }),
2189
+ /**
2190
+ * @description Envia uma mensagem de imagem para um contato ou grupo do WhatsApp
2191
+ *
2192
+ * @tags Mensagens
2193
+ * @name SendMessageControllerSendImageMessage
2194
+ * @summary Enviar Mensagem de Imagem
2195
+ * @request POST:/api/message/{instanceId}/image
2196
+ * @secure
2197
+ * @response `201` `CommonSendMessageResponseDto` Mensagem de imagem enviada com sucesso
2198
+ * @response `400` `void` Dados da requisição inválidos ou formato de imagem inválido
2199
+ * @response `404` `void` Instância do WhatsApp não encontrada
2200
+ */
2201
+ sendMessageControllerSendImageMessage: ({
2202
+ instanceId,
2203
+ ...query
2204
+ }, data, params = {}) => this.request({
2205
+ path: `/api/message/${instanceId}/image`,
2206
+ method: "POST",
2207
+ body: data,
2208
+ secure: true,
2209
+ type: ContentType.Json,
2210
+ format: "json",
2211
+ ...params
2212
+ }),
2213
+ /**
2214
+ * @description Envia uma mensagem de vídeo para um contato ou grupo do WhatsApp
2215
+ *
2216
+ * @tags Mensagens
2217
+ * @name SendMessageControllerSendVideoMessage
2218
+ * @summary Enviar Mensagem de Vídeo
2219
+ * @request POST:/api/message/{instanceId}/video
2220
+ * @secure
2221
+ * @response `201` `CommonSendMessageResponseDto` Mensagem de vídeo enviada com sucesso
2222
+ * @response `400` `void` Dados da requisição inválidos ou formato de vídeo inválido
2223
+ * @response `404` `void` Instância do WhatsApp não encontrada
2224
+ */
2225
+ sendMessageControllerSendVideoMessage: ({
2226
+ instanceId,
2227
+ ...query
2228
+ }, data, params = {}) => this.request({
2229
+ path: `/api/message/${instanceId}/video`,
2230
+ method: "POST",
2231
+ body: data,
2232
+ secure: true,
2233
+ type: ContentType.Json,
2234
+ format: "json",
2235
+ ...params
2236
+ }),
2237
+ /**
2238
+ * @description Envia uma nota de voz para um contato ou grupo do WhatsApp
2239
+ *
2240
+ * @tags Mensagens
2241
+ * @name SendMessageControllerSendAudioNoteMessage
2242
+ * @summary Enviar Mensagem de Áudio (Nota de Voz)
2243
+ * @request POST:/api/message/{instanceId}/audio-note
2244
+ * @secure
2245
+ * @response `201` `CommonSendMessageResponseDto` Nota de voz enviada com sucesso
2246
+ * @response `400` `void` Dados da requisição inválidos ou formato de áudio inválido
2247
+ * @response `404` `void` Instância do WhatsApp não encontrada
2248
+ */
2249
+ sendMessageControllerSendAudioNoteMessage: ({
2250
+ instanceId,
2251
+ ...query
2252
+ }, data, params = {}) => this.request({
2253
+ path: `/api/message/${instanceId}/audio-note`,
2254
+ method: "POST",
2255
+ body: data,
2256
+ secure: true,
2257
+ type: ContentType.Json,
2258
+ format: "json",
2259
+ ...params
2260
+ }),
2261
+ /**
2262
+ * @description Envia um arquivo de áudio para um contato ou grupo do WhatsApp
2263
+ *
2264
+ * @tags Mensagens
2265
+ * @name SendMessageControllerSendAudioFileMessage
2266
+ * @summary Enviar Arquivo de Áudio
2267
+ * @request POST:/api/message/{instanceId}/audio-file
2268
+ * @secure
2269
+ * @response `201` `CommonSendMessageResponseDto` Arquivo de áudio enviado com sucesso
2270
+ * @response `400` `void` Dados da requisição inválidos ou formato de áudio inválido
2271
+ * @response `404` `void` Instância do WhatsApp não encontrada
2272
+ */
2273
+ sendMessageControllerSendAudioFileMessage: ({
2274
+ instanceId,
2275
+ ...query
2276
+ }, data, params = {}) => this.request({
2277
+ path: `/api/message/${instanceId}/audio-file`,
2278
+ method: "POST",
2279
+ body: data,
2280
+ secure: true,
2281
+ type: ContentType.Json,
2282
+ format: "json",
2283
+ ...params
2284
+ }),
2285
+ /**
2286
+ * @description Envia um arquivo de documento para um contato ou grupo do WhatsApp
2287
+ *
2288
+ * @tags Mensagens
2289
+ * @name SendMessageControllerSendDocumentMessage
2290
+ * @summary Enviar Documento
2291
+ * @request POST:/api/message/{instanceId}/document
2292
+ * @secure
2293
+ * @response `201` `CommonSendMessageResponseDto` Documento enviado com sucesso
2294
+ * @response `400` `void` Dados da requisição inválidos ou formato de documento inválido
2295
+ * @response `404` `void` Instância do WhatsApp não encontrada
2296
+ */
2297
+ sendMessageControllerSendDocumentMessage: ({
2298
+ instanceId,
2299
+ ...query
2300
+ }, data, params = {}) => this.request({
2301
+ path: `/api/message/${instanceId}/document`,
2302
+ method: "POST",
2303
+ body: data,
2304
+ secure: true,
2305
+ type: ContentType.Json,
2306
+ format: "json",
2307
+ ...params
2308
+ }),
2309
+ /**
2310
+ * @description Encaminha uma mensagem existente para outro contato ou grupo do WhatsApp
2311
+ *
2312
+ * @tags Mensagens
2313
+ * @name SendMessageControllerForwardMessage
2314
+ * @summary Encaminhar Mensagem
2315
+ * @request POST:/api/message/{instanceId}/forward
2316
+ * @secure
2317
+ * @response `201` `CommonSendMessageResponseDto` Mensagem encaminhada com sucesso
2318
+ * @response `400` `void` Dados da requisição inválidos ou mensagem não encontrada
2319
+ * @response `404` `void` Instância do WhatsApp não encontrada
2320
+ */
2321
+ sendMessageControllerForwardMessage: ({
2322
+ instanceId,
2323
+ ...query
2324
+ }, data, params = {}) => this.request({
2325
+ path: `/api/message/${instanceId}/forward`,
2326
+ method: "POST",
2327
+ body: data,
2328
+ secure: true,
2329
+ type: ContentType.Json,
2330
+ format: "json",
2331
+ ...params
2332
+ }),
2333
+ /**
2334
+ * @description Edita o conteúdo de uma mensagem de texto existente
2335
+ *
2336
+ * @tags Mensagens
2337
+ * @name SendMessageControllerEditMessage
2338
+ * @summary Editar Mensagem
2339
+ * @request POST:/api/message/{instanceId}/edit
2340
+ * @secure
2341
+ * @response `201` `CommonSendMessageResponseDto` Mensagem editada com sucesso
2342
+ * @response `400` `void` Dados da requisição inválidos ou mensagem não pode ser editada
2343
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2344
+ */
2345
+ sendMessageControllerEditMessage: ({
2346
+ instanceId,
2347
+ ...query
2348
+ }, data, params = {}) => this.request({
2349
+ path: `/api/message/${instanceId}/edit`,
2350
+ method: "POST",
2351
+ body: data,
2352
+ secure: true,
2353
+ type: ContentType.Json,
2354
+ format: "json",
2355
+ ...params
2356
+ }),
2357
+ /**
2358
+ * @description Marca uma mensagem como lida (envia confirmação de leitura)
2359
+ *
2360
+ * @tags Mensagens
2361
+ * @name SendMessageControllerReadMessage
2362
+ * @summary Marcar Mensagem como Lida
2363
+ * @request POST:/api/message/{instanceId}/read
2364
+ * @secure
2365
+ * @response `201` `ReadMessageResponseDto` Mensagem marcada como lida com sucesso
2366
+ * @response `400` `void` Dados da requisição inválidos
2367
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2368
+ */
2369
+ sendMessageControllerReadMessage: ({
2370
+ instanceId,
2371
+ ...query
2372
+ }, data, params = {}) => this.request({
2373
+ path: `/api/message/${instanceId}/read`,
2374
+ method: "POST",
2375
+ body: data,
2376
+ secure: true,
2377
+ type: ContentType.Json,
2378
+ format: "json",
2379
+ ...params
2380
+ }),
2381
+ /**
2382
+ * @description Envia uma localização geográfica para um contato ou grupo do WhatsApp
2383
+ *
2384
+ * @tags Mensagens
2385
+ * @name SendMessageControllerSendLocationMessage
2386
+ * @summary Enviar Localização
2387
+ * @request POST:/api/message/{instanceId}/location
2388
+ * @secure
2389
+ * @response `201` `CommonSendMessageResponseDto` Localização enviada com sucesso
2390
+ * @response `400` `void` Dados da requisição inválidos
2391
+ * @response `404` `void` Instância do WhatsApp não encontrada
2392
+ */
2393
+ sendMessageControllerSendLocationMessage: ({
2394
+ instanceId,
2395
+ ...query
2396
+ }, data, params = {}) => this.request({
2397
+ path: `/api/message/${instanceId}/location`,
2398
+ method: "POST",
2399
+ body: data,
2400
+ secure: true,
2401
+ type: ContentType.Json,
2402
+ format: "json",
2403
+ ...params
2404
+ }),
2405
+ /**
2406
+ * @description Envia um cartão de contato para um contato ou grupo do WhatsApp
2407
+ *
2408
+ * @tags Mensagens
2409
+ * @name SendMessageControllerSendContactMessage
2410
+ * @summary Enviar Contato
2411
+ * @request POST:/api/message/{instanceId}/contact
2412
+ * @secure
2413
+ * @response `201` `CommonSendMessageResponseDto` Contato enviado com sucesso
2414
+ * @response `400` `void` Dados da requisição inválidos
2415
+ * @response `404` `void` Instância do WhatsApp não encontrada
2416
+ */
2417
+ sendMessageControllerSendContactMessage: ({
2418
+ instanceId,
2419
+ ...query
2420
+ }, data, params = {}) => this.request({
2421
+ path: `/api/message/${instanceId}/contact`,
2422
+ method: "POST",
2423
+ body: data,
2424
+ secure: true,
2425
+ type: ContentType.Json,
2426
+ format: "json",
2427
+ ...params
2428
+ }),
2429
+ /**
2430
+ * @description Envia um sticker para um contato ou grupo do WhatsApp
2431
+ *
2432
+ * @tags Mensagens
2433
+ * @name SendMessageControllerSendStickerMessage
2434
+ * @summary Enviar Sticker
2435
+ * @request POST:/api/message/{instanceId}/sticker
2436
+ * @secure
2437
+ * @response `201` `CommonSendMessageResponseDto` Sticker enviado com sucesso
2438
+ * @response `400` `void` Dados da requisição inválidos ou formato de sticker inválido
2439
+ * @response `404` `void` Instância do WhatsApp não encontrada
2440
+ */
2441
+ sendMessageControllerSendStickerMessage: ({
2442
+ instanceId,
2443
+ ...query
2444
+ }, data, params = {}) => this.request({
2445
+ path: `/api/message/${instanceId}/sticker`,
2446
+ method: "POST",
2447
+ body: data,
2448
+ secure: true,
2449
+ type: ContentType.Json,
2450
+ format: "json",
2451
+ ...params
2452
+ }),
2453
+ /**
2454
+ * @description Adiciona uma reação (emoji) a uma mensagem existente
2455
+ *
2456
+ * @tags Mensagens
2457
+ * @name SendMessageControllerSendReaction
2458
+ * @summary Enviar Reação
2459
+ * @request POST:/api/message/{instanceId}/reaction
2460
+ * @secure
2461
+ * @response `204` `void` Reação enviada com sucesso
2462
+ * @response `400` `void` Dados da requisição inválidos
2463
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2464
+ */
2465
+ sendMessageControllerSendReaction: ({
2466
+ instanceId,
2467
+ ...query
2468
+ }, data, params = {}) => this.request({
2469
+ path: `/api/message/${instanceId}/reaction`,
2470
+ method: "POST",
2471
+ body: data,
2472
+ secure: true,
2473
+ type: ContentType.Json,
2474
+ ...params
2475
+ }),
2476
+ /**
2477
+ * @description Exclui uma mensagem para todos no chat
2478
+ *
2479
+ * @tags Mensagens
2480
+ * @name SendMessageControllerDeleteMessage
2481
+ * @summary Excluir Mensagem
2482
+ * @request DELETE:/api/message/{instanceId}/delete
2483
+ * @secure
2484
+ * @response `204` `void` Mensagem excluída com sucesso
2485
+ * @response `400` `void` Dados da requisição inválidos ou mensagem não pode ser excluída
2486
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2487
+ */
2488
+ sendMessageControllerDeleteMessage: ({
2489
+ instanceId,
2490
+ ...query
2491
+ }, data, params = {}) => this.request({
2492
+ path: `/api/message/${instanceId}/delete`,
2493
+ method: "DELETE",
2494
+ body: data,
2495
+ secure: true,
2496
+ type: ContentType.Json,
2497
+ ...params
2498
+ }),
2499
+ /**
2500
+ * @description Obtém um link de download para conteúdo de mídia de uma mensagem
2501
+ *
2502
+ * @tags Mensagens
2503
+ * @name SendMessageControllerGetMessageMediaDownloadLink
2504
+ * @summary Obter Link de Download de Mídia
2505
+ * @request GET:/api/message/{instanceId}/media-download-link/{messageId}
2506
+ * @secure
2507
+ * @response `200` `GetMessageMediaDownloadLinkResponseDto` Link de download de mídia obtido com sucesso
2508
+ * @response `400` `void` Formato de ID da mensagem inválido
2509
+ * @response `404` `void` Instância do WhatsApp, mensagem ou mídia não encontrada
2510
+ */
2511
+ sendMessageControllerGetMessageMediaDownloadLink: ({
2512
+ instanceId,
2513
+ messageId,
2514
+ ...query
2515
+ }, params = {}) => this.request({
2516
+ path: `/api/message/${instanceId}/media-download-link/${messageId}`,
2517
+ method: "GET",
2518
+ secure: true,
2519
+ format: "json",
2520
+ ...params
2521
+ })
2522
+ };
2523
+ }
2524
+
1151
2525
  exports.AuthenticationError = AuthenticationError;
1152
- exports.ConnectionStatus = ConnectionStatus;
1153
2526
  exports.InstanceNotFoundError = InstanceNotFoundError;
1154
2527
  exports.InstanceStatus = InstanceStatus;
1155
- exports.MessageAckStatus = MessageAckStatus;
1156
- exports.MessageType = MessageType;
2528
+ exports.NetworkError = NetworkError;
1157
2529
  exports.RateLimitError = RateLimitError;
2530
+ exports.TimeoutError = TimeoutError;
1158
2531
  exports.ValidationError = ValidationError;
1159
- exports.WebhookEventType = WebhookEventType;
1160
2532
  exports.WebhookQueueStatus = WebhookQueueStatus;
1161
2533
  exports.ZapyApiError = ZapyApiError;
1162
2534
  exports.ZapyClient = ZapyClient;
1163
2535
  exports.ZapyError = ZapyError;
2536
+ exports.ZapyEventTypes = ZapyEventTypes;
2537
+ exports.ZapyRestApi = Api;
1164
2538
  exports.createClient = createClient;
1165
2539
  exports.extractPhone = extractPhone;
1166
- exports.isContactCreatedEvent = isContactCreatedEvent;
1167
- exports.isContactDeduplicatedEvent = isContactDeduplicatedEvent;
1168
- exports.isContactUpdatedEvent = isContactUpdatedEvent;
2540
+ exports.isAudioMessage = isAudioMessage;
2541
+ exports.isCallMessage = isCallMessage;
2542
+ exports.isContactMessage = isContactMessage;
2543
+ exports.isDeletedMessage = isDeletedMessage;
2544
+ exports.isDocumentMessage = isDocumentMessage;
2545
+ exports.isEditedMessage = isEditedMessage;
1169
2546
  exports.isGroup = isGroup;
1170
- exports.isMessageEvent = isMessageEvent;
1171
- exports.isMessageStatusEvent = isMessageStatusEvent;
1172
- exports.isQRCodeEvent = isQRCodeEvent;
2547
+ exports.isImageMessage = isImageMessage;
2548
+ exports.isLiveLocationMessage = isLiveLocationMessage;
2549
+ exports.isLocationMessage = isLocationMessage;
2550
+ exports.isMediaMessage = isMediaMessage;
2551
+ exports.isPollMessage = isPollMessage;
2552
+ exports.isPollVoteMessage = isPollVoteMessage;
2553
+ exports.isReactionMessage = isReactionMessage;
2554
+ exports.isStickerMessage = isStickerMessage;
2555
+ exports.isTextMessage = isTextMessage;
2556
+ exports.isUnsupportedMessage = isUnsupportedMessage;
1173
2557
  exports.isValidPhone = isValidPhone;
2558
+ exports.isVideoMessage = isVideoMessage;
1174
2559
  exports.normalizePhone = normalizePhone;
1175
2560
  exports.verifyWebhookSignature = verifyWebhookSignature;
1176
2561
  exports.verifyWebhookSignatureAsync = verifyWebhookSignatureAsync;