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

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 +1507 -140
  3. package/index.js +1487 -131
  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 +245 -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.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import axios from 'axios';
2
2
 
3
3
  /** SDK version - auto-generated from package.json */
4
- const SDK_VERSION = '1.0.0-beta.1';
4
+ const SDK_VERSION = '1.0.0-beta.10';
5
5
 
6
6
  /**
7
7
  * Custom error classes for @zapyapi/sdk
@@ -10,11 +10,30 @@ const SDK_VERSION = '1.0.0-beta.1';
10
10
  * Base error class for all ZapyAPI errors
11
11
  */
12
12
  class ZapyError extends Error {
13
- constructor(message) {
14
- super(message);
13
+ /**
14
+ * Original error that caused this error (if any)
15
+ */
16
+ cause;
17
+ constructor(message, cause) {
18
+ super(message, {
19
+ cause
20
+ });
15
21
  this.name = 'ZapyError';
16
22
  Object.setPrototypeOf(this, ZapyError.prototype);
17
23
  }
24
+ /**
25
+ * Get a detailed string representation of the error
26
+ */
27
+ toDetailedString() {
28
+ let result = `${this.name}: ${this.message}`;
29
+ if (this.cause) {
30
+ result += `\nCaused by: ${this.cause.message}`;
31
+ if (this.cause.stack) {
32
+ result += `\n${this.cause.stack}`;
33
+ }
34
+ }
35
+ return result;
36
+ }
18
37
  }
19
38
  /**
20
39
  * Error thrown when the API returns an error response
@@ -36,13 +55,28 @@ class ZapyApiError extends ZapyError {
36
55
  * Additional error details
37
56
  */
38
57
  details;
39
- constructor(message, statusCode, code, requestId, details) {
40
- super(message);
58
+ /**
59
+ * HTTP method used in the request
60
+ */
61
+ method;
62
+ /**
63
+ * URL that was requested
64
+ */
65
+ url;
66
+ /**
67
+ * Raw response body (for debugging)
68
+ */
69
+ responseBody;
70
+ constructor(message, statusCode, code, options) {
71
+ super(message, options?.cause);
41
72
  this.name = 'ZapyApiError';
42
73
  this.statusCode = statusCode;
43
74
  this.code = code;
44
- this.requestId = requestId;
45
- this.details = details;
75
+ this.requestId = options?.requestId;
76
+ this.details = options?.details;
77
+ this.method = options?.method;
78
+ this.url = options?.url;
79
+ this.responseBody = options?.responseBody;
46
80
  Object.setPrototypeOf(this, ZapyApiError.prototype);
47
81
  }
48
82
  /**
@@ -52,10 +86,81 @@ class ZapyApiError extends ZapyError {
52
86
  const statusCode = error.response?.status ?? 500;
53
87
  const data = error.response?.data;
54
88
  const requestId = error.response?.headers?.['x-request-id'];
55
- if (data && typeof data === 'object' && 'code' in data) {
56
- return new ZapyApiError(data.message || error.message, statusCode, data.code, requestId || data.requestId, data.details);
89
+ const method = error.config?.method?.toUpperCase();
90
+ const url = error.config?.url;
91
+ // Build a descriptive message
92
+ let message;
93
+ if (data && typeof data === 'object' && 'message' in data && data.message) {
94
+ message = data.message;
95
+ } else if (error.message) {
96
+ message = error.message;
97
+ } else {
98
+ message = `Request failed with status ${statusCode}`;
99
+ }
100
+ // Add context to the message
101
+ const context = [];
102
+ if (method && url) {
103
+ context.push(`${method} ${url}`);
104
+ }
105
+ if (statusCode) {
106
+ context.push(`Status: ${statusCode}`);
57
107
  }
58
- return new ZapyApiError(error.message || 'An unexpected error occurred', statusCode, 'UNKNOWN_ERROR', requestId);
108
+ if (requestId) {
109
+ context.push(`Request ID: ${requestId}`);
110
+ }
111
+ const fullMessage = context.length > 0 ? `${message} [${context.join(' | ')}]` : message;
112
+ const code = data && typeof data === 'object' && 'code' in data && data.code ? data.code : 'UNKNOWN_ERROR';
113
+ const details = data && typeof data === 'object' && 'details' in data ? data.details : undefined;
114
+ return new ZapyApiError(fullMessage, statusCode, code, {
115
+ requestId: requestId || (data && typeof data === 'object' && 'requestId' in data ? data.requestId : undefined),
116
+ details,
117
+ method,
118
+ url,
119
+ responseBody: data,
120
+ cause: error
121
+ });
122
+ }
123
+ /**
124
+ * Get a detailed string representation for logging
125
+ */
126
+ toDetailedString() {
127
+ const lines = [`${this.name}: ${this.message}`, ` Status Code: ${this.statusCode}`, ` Error Code: ${this.code}`];
128
+ if (this.method && this.url) {
129
+ lines.push(` Request: ${this.method} ${this.url}`);
130
+ }
131
+ if (this.requestId) {
132
+ lines.push(` Request ID: ${this.requestId}`);
133
+ }
134
+ if (this.details && Object.keys(this.details).length > 0) {
135
+ lines.push(` Details: ${JSON.stringify(this.details, null, 2)}`);
136
+ }
137
+ if (this.responseBody && typeof this.responseBody === 'object') {
138
+ lines.push(` Response Body: ${JSON.stringify(this.responseBody, null, 2)}`);
139
+ }
140
+ if (this.cause) {
141
+ lines.push(` Caused by: ${this.cause.message}`);
142
+ if (this.cause.stack) {
143
+ lines.push(` Stack: ${this.cause.stack.split('\n').slice(1, 4).join('\n ')}`);
144
+ }
145
+ }
146
+ return lines.join('\n');
147
+ }
148
+ /**
149
+ * Convert to a plain object for logging/serialization
150
+ */
151
+ toJSON() {
152
+ return {
153
+ name: this.name,
154
+ message: this.message,
155
+ statusCode: this.statusCode,
156
+ code: this.code,
157
+ requestId: this.requestId,
158
+ method: this.method,
159
+ url: this.url,
160
+ details: this.details,
161
+ responseBody: this.responseBody,
162
+ cause: this.cause?.message
163
+ };
59
164
  }
60
165
  }
61
166
  /**
@@ -72,16 +177,32 @@ class ValidationError extends ZapyError {
72
177
  this.details = details;
73
178
  Object.setPrototypeOf(this, ValidationError.prototype);
74
179
  }
180
+ toDetailedString() {
181
+ const fieldErrors = Object.entries(this.details).map(([field, errors]) => ` ${field}: ${errors.join(', ')}`).join('\n');
182
+ return `${this.name}: ${this.message}\n${fieldErrors}`;
183
+ }
184
+ toJSON() {
185
+ return {
186
+ name: this.name,
187
+ message: this.message,
188
+ details: this.details
189
+ };
190
+ }
75
191
  }
76
192
  /**
77
193
  * Error thrown when an instance is not found
78
194
  */
79
195
  class InstanceNotFoundError extends ZapyApiError {
80
- constructor(instanceId, requestId) {
81
- super(`Instance '${instanceId}' not found`, 404, 'INSTANCE_NOT_FOUND', requestId, {
82
- instanceId
196
+ instanceId;
197
+ constructor(instanceId, options) {
198
+ super(`Instance '${instanceId}' not found`, 404, 'INSTANCE_NOT_FOUND', {
199
+ ...options,
200
+ details: {
201
+ instanceId
202
+ }
83
203
  });
84
204
  this.name = 'InstanceNotFoundError';
205
+ this.instanceId = instanceId;
85
206
  Object.setPrototypeOf(this, InstanceNotFoundError.prototype);
86
207
  }
87
208
  }
@@ -89,8 +210,8 @@ class InstanceNotFoundError extends ZapyApiError {
89
210
  * Error thrown when authentication fails
90
211
  */
91
212
  class AuthenticationError extends ZapyApiError {
92
- constructor(message = 'Invalid or missing API key', requestId) {
93
- super(message, 401, 'UNAUTHORIZED', requestId);
213
+ constructor(message = 'Invalid or missing API key', options) {
214
+ super(message, 401, 'UNAUTHORIZED', options);
94
215
  this.name = 'AuthenticationError';
95
216
  Object.setPrototypeOf(this, AuthenticationError.prototype);
96
217
  }
@@ -103,14 +224,89 @@ class RateLimitError extends ZapyApiError {
103
224
  * Timestamp when the rate limit resets (Unix ms)
104
225
  */
105
226
  retryAfter;
106
- constructor(message = 'Rate limit exceeded', retryAfter, requestId) {
107
- super(message, 429, 'RATE_LIMIT_EXCEEDED', requestId, {
108
- retryAfter
227
+ constructor(message = 'Rate limit exceeded', retryAfter, options) {
228
+ super(message, 429, 'RATE_LIMIT_EXCEEDED', {
229
+ ...options,
230
+ details: retryAfter ? {
231
+ retryAfter
232
+ } : undefined
109
233
  });
110
234
  this.name = 'RateLimitError';
111
235
  this.retryAfter = retryAfter;
112
236
  Object.setPrototypeOf(this, RateLimitError.prototype);
113
237
  }
238
+ /**
239
+ * Get the Date when the rate limit resets
240
+ */
241
+ getRetryAfterDate() {
242
+ return this.retryAfter ? new Date(this.retryAfter) : undefined;
243
+ }
244
+ }
245
+ /**
246
+ * Error thrown when a network error occurs (no response received)
247
+ */
248
+ class NetworkError extends ZapyError {
249
+ /**
250
+ * HTTP method used in the request
251
+ */
252
+ method;
253
+ /**
254
+ * URL that was requested
255
+ */
256
+ url;
257
+ /**
258
+ * Error code (e.g., ECONNREFUSED, ETIMEDOUT)
259
+ */
260
+ code;
261
+ constructor(message, options) {
262
+ super(message, options?.cause);
263
+ this.name = 'NetworkError';
264
+ this.method = options?.method;
265
+ this.url = options?.url;
266
+ this.code = options?.code;
267
+ Object.setPrototypeOf(this, NetworkError.prototype);
268
+ }
269
+ toDetailedString() {
270
+ const lines = [`${this.name}: ${this.message}`];
271
+ if (this.code) {
272
+ lines.push(` Error Code: ${this.code}`);
273
+ }
274
+ if (this.method && this.url) {
275
+ lines.push(` Request: ${this.method} ${this.url}`);
276
+ }
277
+ if (this.cause) {
278
+ lines.push(` Caused by: ${this.cause.message}`);
279
+ }
280
+ return lines.join('\n');
281
+ }
282
+ toJSON() {
283
+ return {
284
+ name: this.name,
285
+ message: this.message,
286
+ code: this.code,
287
+ method: this.method,
288
+ url: this.url,
289
+ cause: this.cause?.message
290
+ };
291
+ }
292
+ }
293
+ /**
294
+ * Error thrown when request times out
295
+ */
296
+ class TimeoutError extends NetworkError {
297
+ /**
298
+ * Timeout duration in milliseconds
299
+ */
300
+ timeout;
301
+ constructor(message = 'Request timed out', options) {
302
+ super(message, {
303
+ ...options,
304
+ code: 'ETIMEDOUT'
305
+ });
306
+ this.name = 'TimeoutError';
307
+ this.timeout = options?.timeout;
308
+ Object.setPrototypeOf(this, TimeoutError.prototype);
309
+ }
114
310
  }
115
311
 
116
312
  /**
@@ -126,18 +322,58 @@ class BaseResource {
126
322
  */
127
323
  handleError(error) {
128
324
  if (this.isAxiosError(error)) {
129
- const statusCode = error.response?.status;
130
- const retryAfter = error.response?.headers?.['retry-after'];
325
+ const method = error.config?.method?.toUpperCase();
326
+ const url = error.config?.url;
327
+ const requestId = error.response?.headers?.['x-request-id'];
328
+ // Network errors (no response received)
329
+ if (!error.response) {
330
+ const code = error.code;
331
+ // Timeout errors
332
+ if (code === 'ECONNABORTED' || code === 'ETIMEDOUT' || error.message?.includes('timeout')) {
333
+ const timeout = error.config?.timeout;
334
+ throw new TimeoutError(`Request timed out${timeout ? ` after ${timeout}ms` : ''}`, {
335
+ method,
336
+ url,
337
+ timeout,
338
+ cause: error
339
+ });
340
+ }
341
+ // Other network errors (connection refused, DNS failure, etc.)
342
+ throw new NetworkError(error.message || 'Network error occurred', {
343
+ method,
344
+ url,
345
+ code,
346
+ cause: error
347
+ });
348
+ }
349
+ const statusCode = error.response.status;
350
+ const retryAfter = error.response.headers?.['retry-after'];
131
351
  if (statusCode === 401) {
132
- throw new AuthenticationError(error.response?.data?.message || 'Invalid or missing API key', error.response?.headers?.['x-request-id']);
352
+ throw new AuthenticationError(error.response.data?.message || 'Invalid or missing API key', {
353
+ requestId,
354
+ method,
355
+ url,
356
+ cause: error
357
+ });
133
358
  }
134
359
  if (statusCode === 429) {
135
- throw new RateLimitError(error.response?.data?.message || 'Rate limit exceeded', retryAfter ? parseInt(retryAfter, 10) * 1000 : undefined, error.response?.headers?.['x-request-id']);
360
+ const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : undefined;
361
+ throw new RateLimitError(error.response.data?.message || 'Rate limit exceeded', retryAfterMs, {
362
+ requestId,
363
+ method,
364
+ url,
365
+ cause: error
366
+ });
136
367
  }
137
368
  throw ZapyApiError.fromAxiosError(error);
138
369
  }
370
+ if (error instanceof ZapyError) {
371
+ throw error;
372
+ }
139
373
  if (error instanceof Error) {
140
- throw new ZapyApiError(error.message, 500, 'UNKNOWN_ERROR');
374
+ throw new ZapyApiError(error.message, 500, 'UNKNOWN_ERROR', {
375
+ cause: error
376
+ });
141
377
  }
142
378
  throw new ZapyApiError('An unexpected error occurred', 500, 'UNKNOWN_ERROR');
143
379
  }
@@ -426,6 +662,121 @@ class MessagesResource extends BaseResource {
426
662
  this.handleError(error);
427
663
  }
428
664
  }
665
+ /**
666
+ * Send a location message
667
+ *
668
+ * @param instanceId - Instance ID
669
+ * @param options - Location message options
670
+ * @returns Message response with ID and status
671
+ *
672
+ * @example
673
+ * await client.messages.sendLocation('my-instance', {
674
+ * to: '5511999999999',
675
+ * latitude: -23.5505,
676
+ * longitude: -46.6333,
677
+ * name: 'São Paulo',
678
+ * address: 'São Paulo, Brazil'
679
+ * });
680
+ */
681
+ async sendLocation(instanceId, options) {
682
+ try {
683
+ const response = await this.http.post(`/message/${instanceId}/location`, {
684
+ to: options.to,
685
+ latitude: options.latitude,
686
+ longitude: options.longitude,
687
+ name: options.name,
688
+ address: options.address,
689
+ quoteMessageId: options.quotedMessageId
690
+ });
691
+ return response.data;
692
+ } catch (error) {
693
+ this.handleError(error);
694
+ }
695
+ }
696
+ /**
697
+ * Send a contact card message
698
+ *
699
+ * @param instanceId - Instance ID
700
+ * @param options - Contact message options
701
+ * @returns Message response with ID and status
702
+ *
703
+ * @example
704
+ * await client.messages.sendContact('my-instance', {
705
+ * to: '5511999999999',
706
+ * contact: {
707
+ * fullName: 'John Doe',
708
+ * phoneNumber: '+5511988887777',
709
+ * organization: 'Acme Inc'
710
+ * }
711
+ * });
712
+ */
713
+ async sendContact(instanceId, options) {
714
+ try {
715
+ const response = await this.http.post(`/message/${instanceId}/contact`, {
716
+ to: options.to,
717
+ contact: options.contact,
718
+ quoteMessageId: options.quotedMessageId
719
+ });
720
+ return response.data;
721
+ } catch (error) {
722
+ this.handleError(error);
723
+ }
724
+ }
725
+ /**
726
+ * Send a sticker message
727
+ *
728
+ * @param instanceId - Instance ID
729
+ * @param options - Sticker message options
730
+ * @returns Message response with ID and status
731
+ *
732
+ * @example
733
+ * await client.messages.sendSticker('my-instance', {
734
+ * to: '5511999999999',
735
+ * url: 'https://example.com/sticker.webp'
736
+ * });
737
+ */
738
+ async sendSticker(instanceId, options) {
739
+ try {
740
+ const response = await this.http.post(`/message/${instanceId}/sticker`, {
741
+ to: options.to,
742
+ url: options.url,
743
+ base64: options.base64,
744
+ quoteMessageId: options.quotedMessageId
745
+ });
746
+ return response.data;
747
+ } catch (error) {
748
+ this.handleError(error);
749
+ }
750
+ }
751
+ /**
752
+ * Send a reaction to a message
753
+ *
754
+ * @param instanceId - Instance ID
755
+ * @param options - Reaction options
756
+ *
757
+ * @example
758
+ * // Add a reaction
759
+ * await client.messages.sendReaction('my-instance', {
760
+ * messageId: 'ABC123...',
761
+ * reaction: '👍'
762
+ * });
763
+ *
764
+ * // Remove a reaction
765
+ * await client.messages.sendReaction('my-instance', {
766
+ * messageId: 'ABC123...',
767
+ * reaction: ''
768
+ * });
769
+ */
770
+ async sendReaction(instanceId, options) {
771
+ try {
772
+ await this.http.post(`/message/${instanceId}/reaction`, {
773
+ messageId: options.messageId,
774
+ reaction: options.reaction
775
+ });
776
+ } catch (error) {
777
+ this.handleError(error);
778
+ }
779
+ }
429
780
  }
430
781
 
431
782
  /**
@@ -689,6 +1040,155 @@ class InstancesResource extends BaseResource {
689
1040
  this.handleError(error);
690
1041
  }
691
1042
  }
1043
+ /**
1044
+ * Check if phone numbers are registered on WhatsApp
1045
+ *
1046
+ * This method verifies if the provided phone numbers are registered on WhatsApp.
1047
+ * Useful for validating contacts before sending messages.
1048
+ *
1049
+ * @param instanceId - Instance ID (must be connected)
1050
+ * @param numbers - Array of phone numbers to check (with country code, e.g., "5511999999999")
1051
+ * @returns Results indicating which numbers are registered on WhatsApp
1052
+ *
1053
+ * @example
1054
+ * const result = await client.instances.checkNumbers('my-instance', [
1055
+ * '5511999999999',
1056
+ * '5521888888888'
1057
+ * ]);
1058
+ *
1059
+ * for (const check of result.results) {
1060
+ * if (check.exists) {
1061
+ * console.log(`${check.number} is on WhatsApp (JID: ${check.jid})`);
1062
+ * } else {
1063
+ * console.log(`${check.number} is NOT on WhatsApp`);
1064
+ * }
1065
+ * }
1066
+ */
1067
+ async checkNumbers(instanceId, numbers) {
1068
+ try {
1069
+ const response = await this.http.post(`/instances/${instanceId}/check-numbers`, {
1070
+ numbers
1071
+ });
1072
+ return response.data;
1073
+ } catch (error) {
1074
+ this.handleError(error);
1075
+ }
1076
+ }
1077
+ /**
1078
+ * Send a presence update (typing indicator, online status, etc.)
1079
+ *
1080
+ * Use this to show typing indicators or update online status for a contact.
1081
+ *
1082
+ * @param instanceId - Instance ID (must be connected)
1083
+ * @param options - Presence options
1084
+ *
1085
+ * @example
1086
+ * // Show typing indicator
1087
+ * await client.instances.sendPresence('my-instance', {
1088
+ * to: '5511999999999',
1089
+ * presence: 'composing'
1090
+ * });
1091
+ *
1092
+ * // Show recording audio indicator
1093
+ * await client.instances.sendPresence('my-instance', {
1094
+ * to: '5511999999999',
1095
+ * presence: 'recording'
1096
+ * });
1097
+ *
1098
+ * // Stop typing indicator
1099
+ * await client.instances.sendPresence('my-instance', {
1100
+ * to: '5511999999999',
1101
+ * presence: 'paused'
1102
+ * });
1103
+ */
1104
+ async sendPresence(instanceId, options) {
1105
+ try {
1106
+ await this.http.post(`/instances/${instanceId}/presence`, {
1107
+ to: options.to,
1108
+ presence: options.presence
1109
+ });
1110
+ } catch (error) {
1111
+ this.handleError(error);
1112
+ }
1113
+ }
1114
+ /**
1115
+ * Get profile picture URL for a contact
1116
+ *
1117
+ * @param instanceId - Instance ID (must be connected)
1118
+ * @param phone - Phone number or JID of the contact
1119
+ * @returns Profile picture response with URL (null if not available)
1120
+ *
1121
+ * @example
1122
+ * const result = await client.instances.getProfilePicture('my-instance', '5511999999999');
1123
+ * if (result.url) {
1124
+ * console.log('Profile picture:', result.url);
1125
+ * } else {
1126
+ * console.log('No profile picture available');
1127
+ * }
1128
+ */
1129
+ async getProfilePicture(instanceId, phone) {
1130
+ try {
1131
+ const response = await this.http.get(`/instances/${instanceId}/contacts/${phone}/profile-picture`);
1132
+ return response.data;
1133
+ } catch (error) {
1134
+ this.handleError(error);
1135
+ }
1136
+ }
1137
+ /**
1138
+ * Block a contact
1139
+ *
1140
+ * @param instanceId - Instance ID (must be connected)
1141
+ * @param phone - Phone number or JID of the contact to block
1142
+ *
1143
+ * @example
1144
+ * await client.instances.blockContact('my-instance', '5511999999999');
1145
+ */
1146
+ async blockContact(instanceId, phone) {
1147
+ try {
1148
+ await this.http.post(`/instances/${instanceId}/contacts/${phone}/block`);
1149
+ } catch (error) {
1150
+ this.handleError(error);
1151
+ }
1152
+ }
1153
+ /**
1154
+ * Unblock a contact
1155
+ *
1156
+ * @param instanceId - Instance ID (must be connected)
1157
+ * @param phone - Phone number or JID of the contact to unblock
1158
+ *
1159
+ * @example
1160
+ * await client.instances.unblockContact('my-instance', '5511999999999');
1161
+ */
1162
+ async unblockContact(instanceId, phone) {
1163
+ try {
1164
+ await this.http.delete(`/instances/${instanceId}/contacts/${phone}/block`);
1165
+ } catch (error) {
1166
+ this.handleError(error);
1167
+ }
1168
+ }
1169
+ /**
1170
+ * Get group metadata
1171
+ *
1172
+ * @param instanceId - Instance ID (must be connected)
1173
+ * @param groupId - Group JID (e.g., "120363123456789012@g.us")
1174
+ * @returns Group metadata including participants
1175
+ *
1176
+ * @example
1177
+ * const metadata = await client.instances.getGroupMetadata('my-instance', '120363123456789012@g.us');
1178
+ * console.log(`Group: ${metadata.subject}`);
1179
+ * console.log(`Participants: ${metadata.participants.length}`);
1180
+ * for (const p of metadata.participants) {
1181
+ * console.log(` - ${p.id} (${p.admin || 'member'})`);
1182
+ * }
1183
+ */
1184
+ async getGroupMetadata(instanceId, groupId) {
1185
+ try {
1186
+ const response = await this.http.get(`/instances/${instanceId}/groups/${groupId}`);
1187
+ return response.data;
1188
+ } catch (error) {
1189
+ this.handleError(error);
1190
+ }
1191
+ }
692
1192
  }
693
1193
 
694
1194
  /**
@@ -699,7 +1199,7 @@ class InstancesResource extends BaseResource {
699
1199
  *
700
1200
  * @example
701
1201
  * ```typescript
702
- * import { ZapyClient, WebhookEventType, isMessageEvent } from '@zapyapi/sdk';
1202
+ * import { ZapyClient, ZapyEventTypes, isTextMessage } from '@zapyapi/sdk';
703
1203
  *
704
1204
  * const client = new ZapyClient({
705
1205
  * apiKey: 'your-api-key',
@@ -809,42 +1309,21 @@ function createClient(options) {
809
1309
  /**
810
1310
  * SDK Enums - Type-safe enums for ZapyAPI SDK
811
1311
  *
812
- * These enums can be imported and used for type-safe comparisons and
813
- * webhook event handling.
814
- *
815
1312
  * @example
816
1313
  * ```typescript
817
- * import { WebhookEventType, InstanceStatus, MessageAckStatus } from '@zapyapi/sdk';
818
- *
819
- * // Type-safe event handling
820
- * if (event.event === WebhookEventType.MESSAGE) {
821
- * // Handle message event
822
- * }
1314
+ * import { InstanceStatus, ZapyEventTypes, ZapyMessageType } from '@zapyapi/sdk';
823
1315
  *
824
1316
  * // Check instance status
825
1317
  * if (instance.status === InstanceStatus.CONNECTED) {
826
1318
  * // Instance is ready
827
1319
  * }
1320
+ *
1321
+ * // Handle webhook events
1322
+ * if (payload.event === ZapyEventTypes.MESSAGE) {
1323
+ * // Handle message
1324
+ * }
828
1325
  * ```
829
1326
  */
830
- /**
831
- * Webhook event types sent by ZapyAPI
832
- * These are the event types you'll receive in webhook payloads
833
- */
834
- const WebhookEventType = {
835
- /** New message received */
836
- MESSAGE: 'message',
837
- /** Message delivery status update */
838
- MESSAGE_STATUS: 'message-status',
839
- /** QR code generated for authentication */
840
- QR_CODE: 'qr-code',
841
- /** New contact discovered */
842
- CONTACT_CREATED: 'contact-created',
843
- /** Contact information updated */
844
- CONTACT_UPDATED: 'contact-updated',
845
- /** Duplicate contacts merged */
846
- CONTACT_DEDUPLICATED: 'contact-deduplicated'
847
- };
848
1327
  /**
849
1328
  * Instance status values
850
1329
  * Represents the current state of a WhatsApp instance
@@ -869,48 +1348,6 @@ const InstanceStatus = {
869
1348
  /** Payment pending for this instance */
870
1349
  PAYMENT_PENDING: 'payment_pending'
871
1350
  };
872
- /**
873
- * Message acknowledgment status
874
- * Represents the delivery status of a sent message
875
- */
876
- const MessageAckStatus = {
877
- /** Message is pending to be sent */
878
- PENDING: 'pending',
879
- /** Message was sent to server */
880
- SENT: 'sent',
881
- /** Message was delivered to recipient */
882
- DELIVERED: 'delivered',
883
- /** Message was read by recipient */
884
- READ: 'read',
885
- /** Audio/video message was played */
886
- PLAYED: 'played'
887
- };
888
- /**
889
- * Message types for incoming messages
890
- * Identifies the type of content in a received message
891
- */
892
- const MessageType = {
893
- /** Text message */
894
- TEXT: 'text',
895
- /** Image message */
896
- IMAGE: 'image',
897
- /** Video message */
898
- VIDEO: 'video',
899
- /** Audio message (voice note or file) */
900
- AUDIO: 'audio',
901
- /** Document/file message */
902
- DOCUMENT: 'document',
903
- /** Sticker message */
904
- STICKER: 'sticker',
905
- /** Location message */
906
- LOCATION: 'location',
907
- /** Contact card message */
908
- CONTACT: 'contact',
909
- /** Poll message */
910
- POLL: 'poll',
911
- /** Reaction message */
912
- REACTION: 'reaction'
913
- };
914
1351
  /**
915
1352
  * Webhook queue item status
916
1353
  * Used for monitoring webhook delivery status
@@ -927,49 +1364,113 @@ const WebhookQueueStatus = {
927
1364
  /** Webhook delivery is paused due to repeated failures */
928
1365
  PAUSED: 'paused'
929
1366
  };
930
- /**
931
- * Connection status for webhook events
932
- * Sent in connection.update webhook events
933
- */
934
- const ConnectionStatus = {
935
- /** Instance is connecting */
936
- CONNECTING: 'connecting',
937
- /** Instance is connected */
938
- CONNECTED: 'connected',
939
- /** Instance disconnected */
940
- DISCONNECTED: 'disconnected',
941
- /** Connection error occurred */
942
- ERROR: 'error'
943
- };
944
1367
 
945
1368
  /**
946
- * Webhook event type definitions
947
- * Types for webhook payloads sent by ZapyAPI
1369
+ * WhatsApp Message Event Types
1370
+ * Comprehensive type definitions for all WhatsApp message types
948
1371
  */
949
- /** Type guard for message events */
950
- function isMessageEvent(event) {
951
- return event.event === 'message';
1372
+ // ============================================================================
1373
+ // Message Status
1374
+ // ============================================================================
1375
+ var ZapyMessageStatusEnum;
1376
+ (function (ZapyMessageStatusEnum) {
1377
+ ZapyMessageStatusEnum["UNKNOWN"] = "UNKNOWN";
1378
+ ZapyMessageStatusEnum["ERROR"] = "ERROR";
1379
+ ZapyMessageStatusEnum["PENDING"] = "PENDING";
1380
+ ZapyMessageStatusEnum["SENT"] = "SENT";
1381
+ ZapyMessageStatusEnum["RECEIVED"] = "RECEIVED";
1382
+ ZapyMessageStatusEnum["READ"] = "READ";
1383
+ ZapyMessageStatusEnum["PLAYED"] = "PLAYED";
1384
+ })(ZapyMessageStatusEnum || (ZapyMessageStatusEnum = {}));
1385
+ var ZapyMessageType;
1386
+ (function (ZapyMessageType) {
1387
+ ZapyMessageType["TEXT"] = "text";
1388
+ ZapyMessageType["IMAGE"] = "image";
1389
+ ZapyMessageType["VIDEO"] = "video";
1390
+ ZapyMessageType["AUDIO"] = "audio";
1391
+ ZapyMessageType["DOCUMENT"] = "document";
1392
+ ZapyMessageType["STICKER"] = "sticker";
1393
+ ZapyMessageType["LOCATION"] = "location";
1394
+ ZapyMessageType["LIVE_LOCATION"] = "live_location";
1395
+ ZapyMessageType["CONTACT"] = "contact";
1396
+ ZapyMessageType["REACTION"] = "reaction";
1397
+ ZapyMessageType["EDITED"] = "edited";
1398
+ ZapyMessageType["DELETED"] = "deleted";
1399
+ ZapyMessageType["POLL"] = "poll";
1400
+ ZapyMessageType["POLL_VOTE"] = "poll_vote";
1401
+ ZapyMessageType["CALL"] = "call";
1402
+ ZapyMessageType["UNSUPPORTED"] = "unsupported";
1403
+ })(ZapyMessageType || (ZapyMessageType = {}));
1404
+ // ============================================================================
1405
+ // Type Guards
1406
+ // ============================================================================
1407
+ function isTextMessage(message) {
1408
+ return message.messageType === ZapyMessageType.TEXT;
1409
+ }
1410
+ function isImageMessage(message) {
1411
+ return message.messageType === ZapyMessageType.IMAGE;
1412
+ }
1413
+ function isVideoMessage(message) {
1414
+ return message.messageType === ZapyMessageType.VIDEO;
1415
+ }
1416
+ function isAudioMessage(message) {
1417
+ return message.messageType === ZapyMessageType.AUDIO;
1418
+ }
1419
+ function isDocumentMessage(message) {
1420
+ return message.messageType === ZapyMessageType.DOCUMENT;
1421
+ }
1422
+ function isStickerMessage(message) {
1423
+ return message.messageType === ZapyMessageType.STICKER;
1424
+ }
1425
+ function isLocationMessage(message) {
1426
+ return message.messageType === ZapyMessageType.LOCATION;
1427
+ }
1428
+ function isLiveLocationMessage(message) {
1429
+ return message.messageType === ZapyMessageType.LIVE_LOCATION;
1430
+ }
1431
+ function isContactMessage(message) {
1432
+ return message.messageType === ZapyMessageType.CONTACT;
952
1433
  }
953
- /** Type guard for message status events */
954
- function isMessageStatusEvent(event) {
955
- return event.event === 'message-status';
1434
+ function isReactionMessage(message) {
1435
+ return message.messageType === ZapyMessageType.REACTION;
956
1436
  }
957
- /** Type guard for QR code events */
958
- function isQRCodeEvent(event) {
959
- return event.event === 'qr-code';
1437
+ function isEditedMessage(message) {
1438
+ return message.messageType === ZapyMessageType.EDITED;
960
1439
  }
961
- /** Type guard for contact created events */
962
- function isContactCreatedEvent(event) {
963
- return event.event === 'contact-created';
1440
+ function isDeletedMessage(message) {
1441
+ return message.messageType === ZapyMessageType.DELETED;
964
1442
  }
965
- /** Type guard for contact updated events */
966
- function isContactUpdatedEvent(event) {
967
- return event.event === 'contact-updated';
1443
+ function isPollMessage(message) {
1444
+ return message.messageType === ZapyMessageType.POLL;
968
1445
  }
969
- /** Type guard for contact deduplicated events */
970
- function isContactDeduplicatedEvent(event) {
971
- return event.event === 'contact-deduplicated';
1446
+ function isPollVoteMessage(message) {
1447
+ return message.messageType === ZapyMessageType.POLL_VOTE;
972
1448
  }
1449
+ function isCallMessage(message) {
1450
+ return message.messageType === ZapyMessageType.CALL;
1451
+ }
1452
+ function isUnsupportedMessage(message) {
1453
+ return message.messageType === ZapyMessageType.UNSUPPORTED;
1454
+ }
1455
+ function isMediaMessage(message) {
1456
+ return [ZapyMessageType.IMAGE, ZapyMessageType.VIDEO, ZapyMessageType.AUDIO, ZapyMessageType.DOCUMENT, ZapyMessageType.STICKER].includes(message.messageType);
1457
+ }
1458
+
1459
+ // Re-export all event types
1460
+ /**
1461
+ * Event type constants for type-safe event handling
1462
+ */
1463
+ const ZapyEventTypes = {
1464
+ MESSAGE: 'message',
1465
+ MESSAGE_STATUS: 'message-status',
1466
+ REACTION: 'reaction',
1467
+ PRESENCE: 'presence',
1468
+ QR_CODE: 'qr-code',
1469
+ CONTACT_CREATED: 'contact-created',
1470
+ CONTACT_UPDATED: 'contact-updated',
1471
+ CONTACT_DEDUPLICATED: 'contact-deduplicated',
1472
+ INSTANCE_STATUS: 'instance-status'
1473
+ };
973
1474
 
974
1475
  /**
975
1476
  * Phone number utilities for @zapyapi/sdk
@@ -984,7 +1485,7 @@ function isContactDeduplicatedEvent(event) {
984
1485
  * normalizePhone('11999999999') // '5511999999999'
985
1486
  * normalizePhone('5511999999999') // '5511999999999'
986
1487
  * normalizePhone('+5511999999999') // '5511999999999'
987
- * normalizePhone('5511999999999@c.us') // '5511999999999@c.us'
1488
+ * normalizePhone('5511999999999@s.whatsapp.net') // '5511999999999@s.whatsapp.net'
988
1489
  */
989
1490
  function normalizePhone(phone) {
990
1491
  // If it's already a WhatsApp ID, return as-is
@@ -1013,7 +1514,7 @@ function normalizePhone(phone) {
1013
1514
  function isValidPhone(phone) {
1014
1515
  // WhatsApp IDs are valid
1015
1516
  if (phone.includes('@')) {
1016
- return phone.endsWith('@c.us') || phone.endsWith('@g.us') || phone.endsWith('@lid');
1517
+ return phone.endsWith('@s.whatsapp.net') || phone.endsWith('@c.us') || phone.endsWith('@g.us') || phone.endsWith('@lid');
1017
1518
  }
1018
1519
  // Clean and check if it's a valid number
1019
1520
  const cleaned = phone.replace(/[^\d]/g, '');
@@ -1079,7 +1580,6 @@ function extractPhone(jid) {
1079
1580
  function verifyWebhookSignature(payload, signature, secret) {
1080
1581
  if (!signature || !secret) return false;
1081
1582
  try {
1082
- // eslint-disable-next-line @typescript-eslint/no-require-imports
1083
1583
  const crypto = require('crypto');
1084
1584
  return verifySignatureWithCrypto(crypto, payload, signature, secret);
1085
1585
  } catch {
@@ -1146,4 +1646,860 @@ function verifySignatureWithCrypto(crypto, payload, signature, secret) {
1146
1646
  return crypto.timingSafeEqual(Buffer.from(signature, 'utf8'), Buffer.from(expectedSignature, 'utf8'));
1147
1647
  }
1148
1648
 
1149
- export { AuthenticationError, ConnectionStatus, InstanceNotFoundError, InstanceStatus, MessageAckStatus, MessageType, RateLimitError, ValidationError, WebhookEventType, WebhookQueueStatus, ZapyApiError, ZapyClient, ZapyError, createClient, extractPhone, isContactCreatedEvent, isContactDeduplicatedEvent, isContactUpdatedEvent, isGroup, isMessageEvent, isMessageStatusEvent, isQRCodeEvent, isValidPhone, normalizePhone, verifyWebhookSignature, verifyWebhookSignatureAsync };
1649
+ /* eslint-disable */
1650
+ /* tslint:disable */
1651
+ // @ts-nocheck
1652
+ /*
1653
+ * ---------------------------------------------------------------
1654
+ * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##
1655
+ * ## ##
1656
+ * ## AUTHOR: acacode ##
1657
+ * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##
1658
+ * ---------------------------------------------------------------
1659
+ */
1660
+ var ContentType;
1661
+ (function (ContentType) {
1662
+ ContentType["Json"] = "application/json";
1663
+ ContentType["JsonApi"] = "application/vnd.api+json";
1664
+ ContentType["FormData"] = "multipart/form-data";
1665
+ ContentType["UrlEncoded"] = "application/x-www-form-urlencoded";
1666
+ ContentType["Text"] = "text/plain";
1667
+ })(ContentType || (ContentType = {}));
1668
+ class HttpClient {
1669
+ instance;
1670
+ securityData = null;
1671
+ securityWorker;
1672
+ secure;
1673
+ format;
1674
+ constructor({
1675
+ securityWorker,
1676
+ secure,
1677
+ format,
1678
+ ...axiosConfig
1679
+ } = {}) {
1680
+ this.instance = axios.create({
1681
+ ...axiosConfig,
1682
+ baseURL: axiosConfig.baseURL || ""
1683
+ });
1684
+ this.secure = secure;
1685
+ this.format = format;
1686
+ this.securityWorker = securityWorker;
1687
+ }
1688
+ setSecurityData = data => {
1689
+ this.securityData = data;
1690
+ };
1691
+ mergeRequestParams(params1, params2) {
1692
+ const method = params1.method || params2 && params2.method;
1693
+ return {
1694
+ ...this.instance.defaults,
1695
+ ...params1,
1696
+ ...(params2 || {}),
1697
+ headers: {
1698
+ ...(method && this.instance.defaults.headers[method.toLowerCase()] || {}),
1699
+ ...(params1.headers || {}),
1700
+ ...(params2 && params2.headers || {})
1701
+ }
1702
+ };
1703
+ }
1704
+ stringifyFormItem(formItem) {
1705
+ if (typeof formItem === "object" && formItem !== null) {
1706
+ return JSON.stringify(formItem);
1707
+ } else {
1708
+ return `${formItem}`;
1709
+ }
1710
+ }
1711
+ createFormData(input) {
1712
+ if (input instanceof FormData) {
1713
+ return input;
1714
+ }
1715
+ return Object.keys(input || {}).reduce((formData, key) => {
1716
+ const property = input[key];
1717
+ const propertyContent = property instanceof Array ? property : [property];
1718
+ for (const formItem of propertyContent) {
1719
+ const isFileType = formItem instanceof Blob || formItem instanceof File;
1720
+ formData.append(key, isFileType ? formItem : this.stringifyFormItem(formItem));
1721
+ }
1722
+ return formData;
1723
+ }, new FormData());
1724
+ }
1725
+ request = async ({
1726
+ secure,
1727
+ path,
1728
+ type,
1729
+ query,
1730
+ format,
1731
+ body,
1732
+ ...params
1733
+ }) => {
1734
+ const secureParams = (typeof secure === "boolean" ? secure : this.secure) && this.securityWorker && (await this.securityWorker(this.securityData)) || {};
1735
+ const requestParams = this.mergeRequestParams(params, secureParams);
1736
+ const responseFormat = format || this.format || undefined;
1737
+ if (type === ContentType.FormData && body && body !== null && typeof body === "object") {
1738
+ body = this.createFormData(body);
1739
+ }
1740
+ if (type === ContentType.Text && body && body !== null && typeof body !== "string") {
1741
+ body = JSON.stringify(body);
1742
+ }
1743
+ return this.instance.request({
1744
+ ...requestParams,
1745
+ headers: {
1746
+ ...(requestParams.headers || {}),
1747
+ ...(type ? {
1748
+ "Content-Type": type
1749
+ } : {})
1750
+ },
1751
+ params: query,
1752
+ responseType: responseFormat,
1753
+ data: body,
1754
+ url: path
1755
+ });
1756
+ };
1757
+ }
1758
+ /**
1759
+ * @title Zapy API - Gerenciador de Instâncias WhatsApp
1760
+ * @version 1.0.0
1761
+ * @contact Suporte Zapy API <contato@zapyapi.com> (http://app.zapyapi.com/)
1762
+ *
1763
+ *
1764
+ * Formatos de Mensagem
1765
+ * - Números de Telefone: Formato brasileiro (11999999999) ou internacional (5511999999999)
1766
+ * - IDs do WhatsApp: Pessoal (@s.whatsapp.net), Grupos (@g.us), LIDs (@lid)
1767
+ * - Mídia: Arquivos codificados em Base64 ou URLs públicas
1768
+ *
1769
+ * Suporte
1770
+ * Para suporte técnico e documentação, visite nosso site.
1771
+ * https://app.zapyapi.com/
1772
+ *
1773
+ */
1774
+ class Api extends HttpClient {
1775
+ instances = {
1776
+ /**
1777
+ * @description Lista todas as instâncias do WhatsApp
1778
+ *
1779
+ * @tags Instâncias
1780
+ * @name ManagerInstancesControllerListInstances
1781
+ * @summary Listar Instâncias
1782
+ * @request GET:/api/instances
1783
+ * @secure
1784
+ * @response `200` `(ResponsePaginated & {
1785
+ data?: (ListInstancesResponseDto)[],
1786
+ })` Lista paginada de instâncias obtida com sucesso
1787
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1788
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
1789
+ */
1790
+ managerInstancesControllerListInstances: (query, params = {}) => this.request({
1791
+ path: `/api/instances`,
1792
+ method: "GET",
1793
+ query: query,
1794
+ secure: true,
1795
+ format: "json",
1796
+ ...params
1797
+ }),
1798
+ /**
1799
+ * No description
1800
+ *
1801
+ * @tags Instâncias
1802
+ * @name ManagerInstancesControllerCreateInstance
1803
+ * @summary Create a new WhatsApp instance (Partner only - post-paid subscriptions required)
1804
+ * @request POST:/api/instances
1805
+ * @secure
1806
+ * @response `201` `ManagerInstanceResponseDto` Instance created successfully
1807
+ * @response `400` `void` Bad request
1808
+ */
1809
+ managerInstancesControllerCreateInstance: (data, params = {}) => this.request({
1810
+ path: `/api/instances`,
1811
+ method: "POST",
1812
+ body: data,
1813
+ secure: true,
1814
+ type: ContentType.Json,
1815
+ format: "json",
1816
+ ...params
1817
+ }),
1818
+ /**
1819
+ * @description Obtém o código QR para conectar a instância do WhatsApp
1820
+ *
1821
+ * @tags Instâncias
1822
+ * @name ManagerInstancesControllerGetQrCode
1823
+ * @summary Obter Código QR
1824
+ * @request GET:/api/instances/{instanceId}/qr
1825
+ * @secure
1826
+ * @response `200` `QRCodeResponseDto` Código QR obtido com sucesso
1827
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1828
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1829
+ */
1830
+ managerInstancesControllerGetQrCode: ({
1831
+ instanceId,
1832
+ ...query
1833
+ }, params = {}) => this.request({
1834
+ path: `/api/instances/${instanceId}/qr`,
1835
+ method: "GET",
1836
+ secure: true,
1837
+ format: "json",
1838
+ ...params
1839
+ }),
1840
+ /**
1841
+ * @description Reinicia uma instância do WhatsApp
1842
+ *
1843
+ * @tags Instâncias
1844
+ * @name ManagerInstancesControllerRestartInstance
1845
+ * @summary Reiniciar Instância do WhatsApp
1846
+ * @request POST:/api/instances/{instanceId}/restart
1847
+ * @secure
1848
+ * @response `200` `EmptyResponseDto` Instância reiniciada com sucesso
1849
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1850
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1851
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1852
+ */
1853
+ managerInstancesControllerRestartInstance: ({
1854
+ instanceId,
1855
+ ...query
1856
+ }, params = {}) => this.request({
1857
+ path: `/api/instances/${instanceId}/restart`,
1858
+ method: "POST",
1859
+ secure: true,
1860
+ format: "json",
1861
+ ...params
1862
+ }),
1863
+ /**
1864
+ * @description Desloga uma instância do WhatsApp
1865
+ *
1866
+ * @tags Instâncias
1867
+ * @name ManagerInstancesControllerLogoutInstance
1868
+ * @summary Deslogar Instância do WhatsApp
1869
+ * @request POST:/api/instances/{instanceId}/logout
1870
+ * @secure
1871
+ * @response `200` `EmptyResponseDto` Instância deslogada com sucesso
1872
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1873
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1874
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1875
+ */
1876
+ managerInstancesControllerLogoutInstance: ({
1877
+ instanceId,
1878
+ ...query
1879
+ }, params = {}) => this.request({
1880
+ path: `/api/instances/${instanceId}/logout`,
1881
+ method: "POST",
1882
+ secure: true,
1883
+ format: "json",
1884
+ ...params
1885
+ }),
1886
+ /**
1887
+ * @description Exclui permanentemente uma instância do WhatsApp. Esta ação é irreversível.
1888
+ *
1889
+ * @tags Instâncias
1890
+ * @name ManagerInstancesControllerDeleteInstance
1891
+ * @summary Excluir Instância do WhatsApp (Somente Parceiros)
1892
+ * @request DELETE:/api/instances/{instanceId}
1893
+ * @secure
1894
+ * @response `204` `void` Instância excluída com sucesso
1895
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1896
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1897
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1898
+ */
1899
+ managerInstancesControllerDeleteInstance: ({
1900
+ instanceId,
1901
+ ...query
1902
+ }, params = {}) => this.request({
1903
+ path: `/api/instances/${instanceId}`,
1904
+ method: "DELETE",
1905
+ secure: true,
1906
+ ...params
1907
+ }),
1908
+ /**
1909
+ * @description Verifica se uma lista de números de telefone está registrada no WhatsApp
1910
+ *
1911
+ * @tags Instâncias
1912
+ * @name ManagerInstancesControllerCheckNumbers
1913
+ * @summary Verificar Números no WhatsApp
1914
+ * @request POST:/api/instances/{instanceId}/check-numbers
1915
+ * @secure
1916
+ * @response `200` `CheckNumbersResponseDto` Números verificados com sucesso
1917
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1918
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1919
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1920
+ */
1921
+ managerInstancesControllerCheckNumbers: ({
1922
+ instanceId,
1923
+ ...query
1924
+ }, data, params = {}) => this.request({
1925
+ path: `/api/instances/${instanceId}/check-numbers`,
1926
+ method: "POST",
1927
+ body: data,
1928
+ secure: true,
1929
+ type: ContentType.Json,
1930
+ format: "json",
1931
+ ...params
1932
+ }),
1933
+ /**
1934
+ * @description Envia um indicador de presença (digitando, gravando, online, etc.) para um contato
1935
+ *
1936
+ * @tags Instâncias
1937
+ * @name ManagerInstancesControllerSendPresence
1938
+ * @summary Enviar Indicador de Presença
1939
+ * @request POST:/api/instances/{instanceId}/presence
1940
+ * @secure
1941
+ * @response `204` `void` Presença enviada com sucesso
1942
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1943
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1944
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1945
+ */
1946
+ managerInstancesControllerSendPresence: ({
1947
+ instanceId,
1948
+ ...query
1949
+ }, data, params = {}) => this.request({
1950
+ path: `/api/instances/${instanceId}/presence`,
1951
+ method: "POST",
1952
+ body: data,
1953
+ secure: true,
1954
+ type: ContentType.Json,
1955
+ ...params
1956
+ }),
1957
+ /**
1958
+ * @description Obtém a URL da foto de perfil de um contato
1959
+ *
1960
+ * @tags Instâncias
1961
+ * @name ManagerInstancesControllerGetProfilePicture
1962
+ * @summary Obter Foto de Perfil
1963
+ * @request GET:/api/instances/{instanceId}/contacts/{phone}/profile-picture
1964
+ * @secure
1965
+ * @response `200` `void` Foto de perfil obtida com sucesso
1966
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1967
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1968
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1969
+ */
1970
+ managerInstancesControllerGetProfilePicture: ({
1971
+ instanceId,
1972
+ phone,
1973
+ ...query
1974
+ }, params = {}) => this.request({
1975
+ path: `/api/instances/${instanceId}/contacts/${phone}/profile-picture`,
1976
+ method: "GET",
1977
+ secure: true,
1978
+ ...params
1979
+ }),
1980
+ /**
1981
+ * @description Bloqueia um contato no WhatsApp
1982
+ *
1983
+ * @tags Instâncias
1984
+ * @name ManagerInstancesControllerBlockContact
1985
+ * @summary Bloquear Contato
1986
+ * @request POST:/api/instances/{instanceId}/contacts/{phone}/block
1987
+ * @secure
1988
+ * @response `204` `void` Contato bloqueado com sucesso
1989
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
1990
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
1991
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
1992
+ */
1993
+ managerInstancesControllerBlockContact: ({
1994
+ instanceId,
1995
+ phone,
1996
+ ...query
1997
+ }, params = {}) => this.request({
1998
+ path: `/api/instances/${instanceId}/contacts/${phone}/block`,
1999
+ method: "POST",
2000
+ secure: true,
2001
+ ...params
2002
+ }),
2003
+ /**
2004
+ * @description Desbloqueia um contato no WhatsApp
2005
+ *
2006
+ * @tags Instâncias
2007
+ * @name ManagerInstancesControllerUnblockContact
2008
+ * @summary Desbloquear Contato
2009
+ * @request DELETE:/api/instances/{instanceId}/contacts/{phone}/block
2010
+ * @secure
2011
+ * @response `204` `void` Contato desbloqueado com sucesso
2012
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
2013
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
2014
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
2015
+ */
2016
+ managerInstancesControllerUnblockContact: ({
2017
+ instanceId,
2018
+ phone,
2019
+ ...query
2020
+ }, params = {}) => this.request({
2021
+ path: `/api/instances/${instanceId}/contacts/${phone}/block`,
2022
+ method: "DELETE",
2023
+ secure: true,
2024
+ ...params
2025
+ }),
2026
+ /**
2027
+ * @description Obtém informações detalhadas sobre um grupo do WhatsApp
2028
+ *
2029
+ * @tags Instâncias
2030
+ * @name ManagerInstancesControllerGetGroupMetadata
2031
+ * @summary Obter Metadados do Grupo
2032
+ * @request GET:/api/instances/{instanceId}/groups/{groupId}
2033
+ * @secure
2034
+ * @response `200` `void` Metadados do grupo obtidos com sucesso
2035
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
2036
+ * @response `403` `ForbiddenErrorDto` Acesso negado - Sem acesso ao recurso
2037
+ * @response `404` `NotFoundErrorDto` Recurso não encontrado
2038
+ */
2039
+ managerInstancesControllerGetGroupMetadata: ({
2040
+ instanceId,
2041
+ groupId,
2042
+ ...query
2043
+ }, params = {}) => this.request({
2044
+ path: `/api/instances/${instanceId}/groups/${groupId}`,
2045
+ method: "GET",
2046
+ secure: true,
2047
+ ...params
2048
+ })
2049
+ };
2050
+ webhooks = {
2051
+ /**
2052
+ * @description Get the webhook configuration for the authenticated user. Returns null if no webhook is configured.
2053
+ *
2054
+ * @tags Webhooks
2055
+ * @name WebhookControllerGetConfig
2056
+ * @summary Get Webhook Configuration
2057
+ * @request GET:/api/webhooks/config
2058
+ * @secure
2059
+ * @response `200` `WebhookConfigResponseDto` Webhook configuration retrieved successfully
2060
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2061
+ */
2062
+ webhookControllerGetConfig: (params = {}) => this.request({
2063
+ path: `/api/webhooks/config`,
2064
+ method: "GET",
2065
+ secure: true,
2066
+ format: "json",
2067
+ ...params
2068
+ }),
2069
+ /**
2070
+ * @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.
2071
+ *
2072
+ * @tags Webhooks
2073
+ * @name WebhookControllerUpsertConfig
2074
+ * @summary Configure Webhook
2075
+ * @request PUT:/api/webhooks/config
2076
+ * @secure
2077
+ * @response `200` `WebhookConfigResponseDto` Webhook configuration saved successfully
2078
+ * @response `400` `BadRequestErrorDto` Dados da requisição inválidos
2079
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2080
+ */
2081
+ webhookControllerUpsertConfig: (data, params = {}) => this.request({
2082
+ path: `/api/webhooks/config`,
2083
+ method: "PUT",
2084
+ body: data,
2085
+ secure: true,
2086
+ type: ContentType.Json,
2087
+ format: "json",
2088
+ ...params
2089
+ }),
2090
+ /**
2091
+ * @description Delete the webhook configuration and all queued webhooks for the authenticated user.
2092
+ *
2093
+ * @tags Webhooks
2094
+ * @name WebhookControllerDeleteConfig
2095
+ * @summary Delete Webhook Configuration
2096
+ * @request DELETE:/api/webhooks/config
2097
+ * @secure
2098
+ * @response `204` `void` Webhook configuration deleted successfully
2099
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2100
+ */
2101
+ webhookControllerDeleteConfig: (params = {}) => this.request({
2102
+ path: `/api/webhooks/config`,
2103
+ method: "DELETE",
2104
+ secure: true,
2105
+ ...params
2106
+ }),
2107
+ /**
2108
+ * @description Get the status of the webhook delivery queue, including counts of pending, failed, paused, and delivered webhooks.
2109
+ *
2110
+ * @tags Webhooks
2111
+ * @name WebhookControllerGetQueueStatus
2112
+ * @summary Get Queue Status
2113
+ * @request GET:/api/webhooks/queue/status
2114
+ * @secure
2115
+ * @response `200` `WebhookQueueStatusResponseDto` Queue status retrieved successfully
2116
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2117
+ */
2118
+ webhookControllerGetQueueStatus: (params = {}) => this.request({
2119
+ path: `/api/webhooks/queue/status`,
2120
+ method: "GET",
2121
+ secure: true,
2122
+ format: "json",
2123
+ ...params
2124
+ }),
2125
+ /**
2126
+ * @description Resume all paused and failed webhooks. This will unpause the webhook configuration and reset all paused/failed items to pending.
2127
+ *
2128
+ * @tags Webhooks
2129
+ * @name WebhookControllerResumeAll
2130
+ * @summary Resume Webhooks
2131
+ * @request POST:/api/webhooks/queue/resume
2132
+ * @secure
2133
+ * @response `200` `WebhookResumeResponseDto` Webhooks resumed successfully
2134
+ * @response `401` `UnauthorizedErrorDto` Não autorizado - API key inválida ou ausente
2135
+ */
2136
+ webhookControllerResumeAll: (params = {}) => this.request({
2137
+ path: `/api/webhooks/queue/resume`,
2138
+ method: "POST",
2139
+ secure: true,
2140
+ format: "json",
2141
+ ...params
2142
+ })
2143
+ };
2144
+ message = {
2145
+ /**
2146
+ * @description Envia uma mensagem de texto para um contato ou grupo do WhatsApp
2147
+ *
2148
+ * @tags Mensagens
2149
+ * @name SendMessageControllerSendTextMessage
2150
+ * @summary Enviar Mensagem de Texto
2151
+ * @request POST:/api/message/{instanceId}/text
2152
+ * @secure
2153
+ * @response `201` `CommonSendMessageResponseDto` Mensagem enviada com sucesso
2154
+ * @response `400` `void` Dados da requisição inválidos
2155
+ * @response `404` `void` Instância do WhatsApp não encontrada
2156
+ */
2157
+ sendMessageControllerSendTextMessage: ({
2158
+ instanceId,
2159
+ ...query
2160
+ }, data, params = {}) => this.request({
2161
+ path: `/api/message/${instanceId}/text`,
2162
+ method: "POST",
2163
+ body: data,
2164
+ secure: true,
2165
+ type: ContentType.Json,
2166
+ format: "json",
2167
+ ...params
2168
+ }),
2169
+ /**
2170
+ * @description Envia uma mensagem de imagem para um contato ou grupo do WhatsApp
2171
+ *
2172
+ * @tags Mensagens
2173
+ * @name SendMessageControllerSendImageMessage
2174
+ * @summary Enviar Mensagem de Imagem
2175
+ * @request POST:/api/message/{instanceId}/image
2176
+ * @secure
2177
+ * @response `201` `CommonSendMessageResponseDto` Mensagem de imagem enviada com sucesso
2178
+ * @response `400` `void` Dados da requisição inválidos ou formato de imagem inválido
2179
+ * @response `404` `void` Instância do WhatsApp não encontrada
2180
+ */
2181
+ sendMessageControllerSendImageMessage: ({
2182
+ instanceId,
2183
+ ...query
2184
+ }, data, params = {}) => this.request({
2185
+ path: `/api/message/${instanceId}/image`,
2186
+ method: "POST",
2187
+ body: data,
2188
+ secure: true,
2189
+ type: ContentType.Json,
2190
+ format: "json",
2191
+ ...params
2192
+ }),
2193
+ /**
2194
+ * @description Envia uma mensagem de vídeo para um contato ou grupo do WhatsApp
2195
+ *
2196
+ * @tags Mensagens
2197
+ * @name SendMessageControllerSendVideoMessage
2198
+ * @summary Enviar Mensagem de Vídeo
2199
+ * @request POST:/api/message/{instanceId}/video
2200
+ * @secure
2201
+ * @response `201` `CommonSendMessageResponseDto` Mensagem de vídeo enviada com sucesso
2202
+ * @response `400` `void` Dados da requisição inválidos ou formato de vídeo inválido
2203
+ * @response `404` `void` Instância do WhatsApp não encontrada
2204
+ */
2205
+ sendMessageControllerSendVideoMessage: ({
2206
+ instanceId,
2207
+ ...query
2208
+ }, data, params = {}) => this.request({
2209
+ path: `/api/message/${instanceId}/video`,
2210
+ method: "POST",
2211
+ body: data,
2212
+ secure: true,
2213
+ type: ContentType.Json,
2214
+ format: "json",
2215
+ ...params
2216
+ }),
2217
+ /**
2218
+ * @description Envia uma nota de voz para um contato ou grupo do WhatsApp
2219
+ *
2220
+ * @tags Mensagens
2221
+ * @name SendMessageControllerSendAudioNoteMessage
2222
+ * @summary Enviar Mensagem de Áudio (Nota de Voz)
2223
+ * @request POST:/api/message/{instanceId}/audio-note
2224
+ * @secure
2225
+ * @response `201` `CommonSendMessageResponseDto` Nota de voz enviada com sucesso
2226
+ * @response `400` `void` Dados da requisição inválidos ou formato de áudio inválido
2227
+ * @response `404` `void` Instância do WhatsApp não encontrada
2228
+ */
2229
+ sendMessageControllerSendAudioNoteMessage: ({
2230
+ instanceId,
2231
+ ...query
2232
+ }, data, params = {}) => this.request({
2233
+ path: `/api/message/${instanceId}/audio-note`,
2234
+ method: "POST",
2235
+ body: data,
2236
+ secure: true,
2237
+ type: ContentType.Json,
2238
+ format: "json",
2239
+ ...params
2240
+ }),
2241
+ /**
2242
+ * @description Envia um arquivo de áudio para um contato ou grupo do WhatsApp
2243
+ *
2244
+ * @tags Mensagens
2245
+ * @name SendMessageControllerSendAudioFileMessage
2246
+ * @summary Enviar Arquivo de Áudio
2247
+ * @request POST:/api/message/{instanceId}/audio-file
2248
+ * @secure
2249
+ * @response `201` `CommonSendMessageResponseDto` Arquivo de áudio enviado com sucesso
2250
+ * @response `400` `void` Dados da requisição inválidos ou formato de áudio inválido
2251
+ * @response `404` `void` Instância do WhatsApp não encontrada
2252
+ */
2253
+ sendMessageControllerSendAudioFileMessage: ({
2254
+ instanceId,
2255
+ ...query
2256
+ }, data, params = {}) => this.request({
2257
+ path: `/api/message/${instanceId}/audio-file`,
2258
+ method: "POST",
2259
+ body: data,
2260
+ secure: true,
2261
+ type: ContentType.Json,
2262
+ format: "json",
2263
+ ...params
2264
+ }),
2265
+ /**
2266
+ * @description Envia um arquivo de documento para um contato ou grupo do WhatsApp
2267
+ *
2268
+ * @tags Mensagens
2269
+ * @name SendMessageControllerSendDocumentMessage
2270
+ * @summary Enviar Documento
2271
+ * @request POST:/api/message/{instanceId}/document
2272
+ * @secure
2273
+ * @response `201` `CommonSendMessageResponseDto` Documento enviado com sucesso
2274
+ * @response `400` `void` Dados da requisição inválidos ou formato de documento inválido
2275
+ * @response `404` `void` Instância do WhatsApp não encontrada
2276
+ */
2277
+ sendMessageControllerSendDocumentMessage: ({
2278
+ instanceId,
2279
+ ...query
2280
+ }, data, params = {}) => this.request({
2281
+ path: `/api/message/${instanceId}/document`,
2282
+ method: "POST",
2283
+ body: data,
2284
+ secure: true,
2285
+ type: ContentType.Json,
2286
+ format: "json",
2287
+ ...params
2288
+ }),
2289
+ /**
2290
+ * @description Encaminha uma mensagem existente para outro contato ou grupo do WhatsApp
2291
+ *
2292
+ * @tags Mensagens
2293
+ * @name SendMessageControllerForwardMessage
2294
+ * @summary Encaminhar Mensagem
2295
+ * @request POST:/api/message/{instanceId}/forward
2296
+ * @secure
2297
+ * @response `201` `CommonSendMessageResponseDto` Mensagem encaminhada com sucesso
2298
+ * @response `400` `void` Dados da requisição inválidos ou mensagem não encontrada
2299
+ * @response `404` `void` Instância do WhatsApp não encontrada
2300
+ */
2301
+ sendMessageControllerForwardMessage: ({
2302
+ instanceId,
2303
+ ...query
2304
+ }, data, params = {}) => this.request({
2305
+ path: `/api/message/${instanceId}/forward`,
2306
+ method: "POST",
2307
+ body: data,
2308
+ secure: true,
2309
+ type: ContentType.Json,
2310
+ format: "json",
2311
+ ...params
2312
+ }),
2313
+ /**
2314
+ * @description Edita o conteúdo de uma mensagem de texto existente
2315
+ *
2316
+ * @tags Mensagens
2317
+ * @name SendMessageControllerEditMessage
2318
+ * @summary Editar Mensagem
2319
+ * @request POST:/api/message/{instanceId}/edit
2320
+ * @secure
2321
+ * @response `201` `CommonSendMessageResponseDto` Mensagem editada com sucesso
2322
+ * @response `400` `void` Dados da requisição inválidos ou mensagem não pode ser editada
2323
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2324
+ */
2325
+ sendMessageControllerEditMessage: ({
2326
+ instanceId,
2327
+ ...query
2328
+ }, data, params = {}) => this.request({
2329
+ path: `/api/message/${instanceId}/edit`,
2330
+ method: "POST",
2331
+ body: data,
2332
+ secure: true,
2333
+ type: ContentType.Json,
2334
+ format: "json",
2335
+ ...params
2336
+ }),
2337
+ /**
2338
+ * @description Marca uma mensagem como lida (envia confirmação de leitura)
2339
+ *
2340
+ * @tags Mensagens
2341
+ * @name SendMessageControllerReadMessage
2342
+ * @summary Marcar Mensagem como Lida
2343
+ * @request POST:/api/message/{instanceId}/read
2344
+ * @secure
2345
+ * @response `201` `ReadMessageResponseDto` Mensagem marcada como lida com sucesso
2346
+ * @response `400` `void` Dados da requisição inválidos
2347
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2348
+ */
2349
+ sendMessageControllerReadMessage: ({
2350
+ instanceId,
2351
+ ...query
2352
+ }, data, params = {}) => this.request({
2353
+ path: `/api/message/${instanceId}/read`,
2354
+ method: "POST",
2355
+ body: data,
2356
+ secure: true,
2357
+ type: ContentType.Json,
2358
+ format: "json",
2359
+ ...params
2360
+ }),
2361
+ /**
2362
+ * @description Envia uma localização geográfica para um contato ou grupo do WhatsApp
2363
+ *
2364
+ * @tags Mensagens
2365
+ * @name SendMessageControllerSendLocationMessage
2366
+ * @summary Enviar Localização
2367
+ * @request POST:/api/message/{instanceId}/location
2368
+ * @secure
2369
+ * @response `201` `CommonSendMessageResponseDto` Localização enviada com sucesso
2370
+ * @response `400` `void` Dados da requisição inválidos
2371
+ * @response `404` `void` Instância do WhatsApp não encontrada
2372
+ */
2373
+ sendMessageControllerSendLocationMessage: ({
2374
+ instanceId,
2375
+ ...query
2376
+ }, data, params = {}) => this.request({
2377
+ path: `/api/message/${instanceId}/location`,
2378
+ method: "POST",
2379
+ body: data,
2380
+ secure: true,
2381
+ type: ContentType.Json,
2382
+ format: "json",
2383
+ ...params
2384
+ }),
2385
+ /**
2386
+ * @description Envia um cartão de contato para um contato ou grupo do WhatsApp
2387
+ *
2388
+ * @tags Mensagens
2389
+ * @name SendMessageControllerSendContactMessage
2390
+ * @summary Enviar Contato
2391
+ * @request POST:/api/message/{instanceId}/contact
2392
+ * @secure
2393
+ * @response `201` `CommonSendMessageResponseDto` Contato enviado com sucesso
2394
+ * @response `400` `void` Dados da requisição inválidos
2395
+ * @response `404` `void` Instância do WhatsApp não encontrada
2396
+ */
2397
+ sendMessageControllerSendContactMessage: ({
2398
+ instanceId,
2399
+ ...query
2400
+ }, data, params = {}) => this.request({
2401
+ path: `/api/message/${instanceId}/contact`,
2402
+ method: "POST",
2403
+ body: data,
2404
+ secure: true,
2405
+ type: ContentType.Json,
2406
+ format: "json",
2407
+ ...params
2408
+ }),
2409
+ /**
2410
+ * @description Envia um sticker para um contato ou grupo do WhatsApp
2411
+ *
2412
+ * @tags Mensagens
2413
+ * @name SendMessageControllerSendStickerMessage
2414
+ * @summary Enviar Sticker
2415
+ * @request POST:/api/message/{instanceId}/sticker
2416
+ * @secure
2417
+ * @response `201` `CommonSendMessageResponseDto` Sticker enviado com sucesso
2418
+ * @response `400` `void` Dados da requisição inválidos ou formato de sticker inválido
2419
+ * @response `404` `void` Instância do WhatsApp não encontrada
2420
+ */
2421
+ sendMessageControllerSendStickerMessage: ({
2422
+ instanceId,
2423
+ ...query
2424
+ }, data, params = {}) => this.request({
2425
+ path: `/api/message/${instanceId}/sticker`,
2426
+ method: "POST",
2427
+ body: data,
2428
+ secure: true,
2429
+ type: ContentType.Json,
2430
+ format: "json",
2431
+ ...params
2432
+ }),
2433
+ /**
2434
+ * @description Adiciona uma reação (emoji) a uma mensagem existente
2435
+ *
2436
+ * @tags Mensagens
2437
+ * @name SendMessageControllerSendReaction
2438
+ * @summary Enviar Reação
2439
+ * @request POST:/api/message/{instanceId}/reaction
2440
+ * @secure
2441
+ * @response `204` `void` Reação enviada com sucesso
2442
+ * @response `400` `void` Dados da requisição inválidos
2443
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2444
+ */
2445
+ sendMessageControllerSendReaction: ({
2446
+ instanceId,
2447
+ ...query
2448
+ }, data, params = {}) => this.request({
2449
+ path: `/api/message/${instanceId}/reaction`,
2450
+ method: "POST",
2451
+ body: data,
2452
+ secure: true,
2453
+ type: ContentType.Json,
2454
+ ...params
2455
+ }),
2456
+ /**
2457
+ * @description Exclui uma mensagem para todos no chat
2458
+ *
2459
+ * @tags Mensagens
2460
+ * @name SendMessageControllerDeleteMessage
2461
+ * @summary Excluir Mensagem
2462
+ * @request DELETE:/api/message/{instanceId}/delete
2463
+ * @secure
2464
+ * @response `204` `void` Mensagem excluída com sucesso
2465
+ * @response `400` `void` Dados da requisição inválidos ou mensagem não pode ser excluída
2466
+ * @response `404` `void` Instância do WhatsApp ou mensagem não encontrada
2467
+ */
2468
+ sendMessageControllerDeleteMessage: ({
2469
+ instanceId,
2470
+ ...query
2471
+ }, data, params = {}) => this.request({
2472
+ path: `/api/message/${instanceId}/delete`,
2473
+ method: "DELETE",
2474
+ body: data,
2475
+ secure: true,
2476
+ type: ContentType.Json,
2477
+ ...params
2478
+ }),
2479
+ /**
2480
+ * @description Obtém um link de download para conteúdo de mídia de uma mensagem
2481
+ *
2482
+ * @tags Mensagens
2483
+ * @name SendMessageControllerGetMessageMediaDownloadLink
2484
+ * @summary Obter Link de Download de Mídia
2485
+ * @request GET:/api/message/{instanceId}/media-download-link/{messageId}
2486
+ * @secure
2487
+ * @response `200` `GetMessageMediaDownloadLinkResponseDto` Link de download de mídia obtido com sucesso
2488
+ * @response `400` `void` Formato de ID da mensagem inválido
2489
+ * @response `404` `void` Instância do WhatsApp, mensagem ou mídia não encontrada
2490
+ */
2491
+ sendMessageControllerGetMessageMediaDownloadLink: ({
2492
+ instanceId,
2493
+ messageId,
2494
+ ...query
2495
+ }, params = {}) => this.request({
2496
+ path: `/api/message/${instanceId}/media-download-link/${messageId}`,
2497
+ method: "GET",
2498
+ secure: true,
2499
+ format: "json",
2500
+ ...params
2501
+ })
2502
+ };
2503
+ }
2504
+
2505
+ export { AuthenticationError, InstanceNotFoundError, InstanceStatus, NetworkError, RateLimitError, TimeoutError, ValidationError, WebhookQueueStatus, ZapyApiError, ZapyClient, ZapyError, ZapyEventTypes, ZapyMessageStatusEnum, ZapyMessageType, Api as ZapyRestApi, createClient, extractPhone, isAudioMessage, isCallMessage, isContactMessage, isDeletedMessage, isDocumentMessage, isEditedMessage, isGroup, isImageMessage, isLiveLocationMessage, isLocationMessage, isMediaMessage, isPollMessage, isPollVoteMessage, isReactionMessage, isStickerMessage, isTextMessage, isUnsupportedMessage, isValidPhone, isVideoMessage, normalizePhone, verifyWebhookSignature, verifyWebhookSignatureAsync };