@botozap/mcp 0.1.0 → 0.2.1

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 (44) hide show
  1. package/README.md +111 -43
  2. package/dist/event-bus.d.ts +14 -0
  3. package/dist/event-bus.js +128 -0
  4. package/dist/event-bus.js.map +1 -0
  5. package/dist/http.d.ts +31 -0
  6. package/dist/http.js +280 -0
  7. package/dist/http.js.map +1 -0
  8. package/dist/index.js +47 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/register.d.ts +18 -4
  11. package/dist/register.js +82 -17
  12. package/dist/register.js.map +1 -1
  13. package/dist/resources/events.d.ts +12 -0
  14. package/dist/resources/events.js +192 -0
  15. package/dist/resources/events.js.map +1 -0
  16. package/dist/schemas.d.ts +4405 -0
  17. package/dist/schemas.js +332 -0
  18. package/dist/schemas.js.map +1 -0
  19. package/dist/server.d.ts +7 -0
  20. package/dist/server.js +13 -2
  21. package/dist/server.js.map +1 -1
  22. package/dist/tools/contacts.d.ts +1 -1
  23. package/dist/tools/contacts.js +8 -6
  24. package/dist/tools/contacts.js.map +1 -1
  25. package/dist/tools/conversations.js +17 -3
  26. package/dist/tools/conversations.js.map +1 -1
  27. package/dist/tools/customers.d.ts +1 -1
  28. package/dist/tools/customers.js +11 -9
  29. package/dist/tools/customers.js.map +1 -1
  30. package/dist/tools/media.d.ts +94 -0
  31. package/dist/tools/media.js +90 -2
  32. package/dist/tools/media.js.map +1 -1
  33. package/dist/tools/messages.js +5 -4
  34. package/dist/tools/messages.js.map +1 -1
  35. package/dist/tools/misc.js +3 -2
  36. package/dist/tools/misc.js.map +1 -1
  37. package/dist/tools/phone-numbers.js +4 -3
  38. package/dist/tools/phone-numbers.js.map +1 -1
  39. package/dist/tools/templates.js +4 -3
  40. package/dist/tools/templates.js.map +1 -1
  41. package/dist/tools/webhooks.d.ts +1 -1
  42. package/dist/tools/webhooks.js +10 -8
  43. package/dist/tools/webhooks.js.map +1 -1
  44. package/package.json +4 -2
@@ -0,0 +1,332 @@
1
+ /** Schemas de saída compartilhados pelas tools MCP estruturadas. */
2
+ import { z } from "zod";
3
+ /** UUID interno persistido pelo BotoZap (não é um identificador da Meta). */
4
+ export const internalUuidSchema = z
5
+ .string()
6
+ .uuid()
7
+ .describe("UUID interno do recurso no BotoZap.");
8
+ /** UUID interno de um Número no BotoZap. */
9
+ export const internalPhoneNumberIdSchema = internalUuidSchema.describe("UUID interno do Número no BotoZap; use nas tools get_phone_number e phone_number_health.");
10
+ /** Identificador do Número atribuído pela Graph API da Meta. */
11
+ export const metaPhoneNumberIdSchema = z.string().describe("ID Meta do Número (phone_number_id); use em send_message.from.");
12
+ export const structuredErrorSchema = z
13
+ .object({
14
+ code: z.string().describe("Código estável do erro da API BotoZap."),
15
+ message: z.string().describe("Mensagem segura e acionável do erro."),
16
+ status: z
17
+ .number()
18
+ .int()
19
+ .nonnegative()
20
+ .describe("Status HTTP; 0 quando não houve resposta HTTP."),
21
+ })
22
+ .strict()
23
+ .describe("Erro estruturado sem credenciais, tokens ou headers de request.");
24
+ export function structuredError(code, message, status) {
25
+ return { error: { code, message, status } };
26
+ }
27
+ /**
28
+ * O SDK MCP 1.29 só anuncia schemas ZodObject na raiz e o Client dessa versão
29
+ * também valida structuredContent presente em resultados isError. Portanto a
30
+ * forma anunciada mantém os campos de sucesso opcionais e acrescenta o erro;
31
+ * o schema forte de sucesso continua sendo validado pelo register antes da
32
+ * resposta. Isso evita ZodUnion/ZodEffects na raiz (que virariam schema vazio).
33
+ */
34
+ export function compatibleOutputSchema(successSchema) {
35
+ return successSchema.partial().extend({
36
+ error: structuredErrorSchema.optional(),
37
+ });
38
+ }
39
+ export const jsonValueSchema = z.lazy(() => z.union([
40
+ z.string(),
41
+ z.number(),
42
+ z.boolean(),
43
+ z.null(),
44
+ z.array(jsonValueSchema),
45
+ z.record(z.string(), jsonValueSchema),
46
+ ]));
47
+ export const cursorPagingSchema = z
48
+ .object({
49
+ cursors: z.object({
50
+ before: z.string().nullable(),
51
+ after: z.string().nullable(),
52
+ }),
53
+ next: z.string().nullable(),
54
+ previous: z.string().nullable(),
55
+ })
56
+ .strict();
57
+ export const offsetMetaSchema = z
58
+ .object({
59
+ page: z.number().int().positive(),
60
+ per_page: z.number().int().positive(),
61
+ total_pages: z.number().int().nonnegative(),
62
+ total_count: z.number().int().nonnegative(),
63
+ })
64
+ .strict();
65
+ function itemResultSchemaFor(itemSchema) {
66
+ return z.object({ data: itemSchema }).passthrough();
67
+ }
68
+ function cursorListResultSchemaFor(itemSchema) {
69
+ return z
70
+ .object({ data: z.array(itemSchema), paging: cursorPagingSchema })
71
+ .passthrough();
72
+ }
73
+ function offsetListResultSchemaFor(itemSchema) {
74
+ return z
75
+ .object({ data: z.array(itemSchema), meta: offsetMetaSchema })
76
+ .passthrough();
77
+ }
78
+ export const sendMessageResultSchema = z
79
+ .object({
80
+ id: internalUuidSchema
81
+ .nullable()
82
+ .describe("UUID interno da Mensagem; null se a persistência best-effort falhou."),
83
+ wamid: z.string().describe("ID da Mensagem atribuído pelo WhatsApp/Meta."),
84
+ to: z.string().describe("Destinatário solicitado pelo cliente."),
85
+ sent_to: z
86
+ .string()
87
+ .optional()
88
+ .describe("Destinatário efetivamente usado após normalização de identidade."),
89
+ status: z.string().describe("Status inicial do envio."),
90
+ sandbox: z.boolean().optional(),
91
+ })
92
+ .passthrough();
93
+ export const messageSchema = z
94
+ .object({
95
+ id: internalUuidSchema.describe("UUID interno da Mensagem no BotoZap."),
96
+ wamid: z.string().nullable().describe("ID da Mensagem na Meta, quando disponível."),
97
+ conversation_id: internalUuidSchema.nullable(),
98
+ phone_number_id: internalPhoneNumberIdSchema,
99
+ contact_id: internalUuidSchema.nullable(),
100
+ direction: z.enum(["inbound", "outbound"]),
101
+ type: z.string().describe("Tipo da Mensagem: text, image, template etc."),
102
+ status: z.string(),
103
+ source: z.string(),
104
+ content: jsonValueSchema,
105
+ context: jsonValueSchema.nullable(),
106
+ error: jsonValueSchema.nullable(),
107
+ has_media: z.boolean(),
108
+ revoked_at: z.string().nullable(),
109
+ event_at: z.string().nullable(),
110
+ wa_timestamp: z.string().nullable(),
111
+ created_at: z.string(),
112
+ })
113
+ .passthrough();
114
+ export const listMessagesResultSchema = cursorListResultSchemaFor(messageSchema);
115
+ export const getMessageResultSchema = itemResultSchemaFor(messageSchema);
116
+ export const contactSchema = z
117
+ .object({
118
+ id: internalUuidSchema.describe("UUID interno do Contato no BotoZap."),
119
+ wa_id: z.string().describe("Identidade canônica do Contato: telefone ou BSUID."),
120
+ profile_name: z.string().nullable(),
121
+ phone: z.string().nullable(),
122
+ user_id: z.string().nullable(),
123
+ username: z.string().nullable(),
124
+ parent_user_id: z.string().nullable(),
125
+ phone_number_id: internalPhoneNumberIdSchema,
126
+ last_seen_at: z.string().nullable(),
127
+ created_at: z.string(),
128
+ notes: z.string().nullable(),
129
+ metadata: jsonValueSchema.nullable(),
130
+ stage: z
131
+ .object({
132
+ id: internalUuidSchema,
133
+ key: z.string(),
134
+ label: z.string(),
135
+ })
136
+ .nullable(),
137
+ })
138
+ .passthrough();
139
+ export const listContactsResultSchema = cursorListResultSchemaFor(contactSchema);
140
+ export const contactResultSchema = itemResultSchemaFor(contactSchema);
141
+ /** Resultado MCP explícito para APIs que concluíram com HTTP 204. */
142
+ export const emptyOperationResultSchema = z
143
+ .object({ success: z.literal(true) })
144
+ .strict();
145
+ export const conversationSchema = z
146
+ .object({
147
+ id: internalUuidSchema.describe("UUID interno da Conversa no BotoZap."),
148
+ phone_number_id: internalPhoneNumberIdSchema,
149
+ phone_number_meta_id: metaPhoneNumberIdSchema.nullable(),
150
+ display_phone_number: z.string().nullable(),
151
+ contact_id: internalUuidSchema,
152
+ contact: z
153
+ .object({
154
+ name: z.string(),
155
+ phone: z.string().nullable(),
156
+ username: z.string().nullable(),
157
+ wa_id: z
158
+ .string()
159
+ .nullable()
160
+ .optional()
161
+ .describe("Identidade canônica do Contato: telefone ou BSUID."),
162
+ })
163
+ .strict(),
164
+ status: z.enum(["active", "ended"]),
165
+ window_expires_at: z.string().nullable(),
166
+ last_message_at: z.string().nullable(),
167
+ last_read_at: z.string().nullable(),
168
+ created_at: z.string(),
169
+ })
170
+ .passthrough();
171
+ export const listConversationsResultSchema = cursorListResultSchemaFor(conversationSchema);
172
+ export const conversationResultSchema = itemResultSchemaFor(conversationSchema);
173
+ export const customerSchema = z
174
+ .object({
175
+ id: internalUuidSchema.describe("UUID interno do Cliente no BotoZap."),
176
+ name: z.string(),
177
+ external_customer_id: z.string().nullable(),
178
+ created_at: z.string(),
179
+ updated_at: z.string(),
180
+ })
181
+ .passthrough();
182
+ export const listCustomersResultSchema = offsetListResultSchemaFor(customerSchema);
183
+ export const customerResultSchema = itemResultSchemaFor(customerSchema);
184
+ export const setupLinkSchema = z
185
+ .object({
186
+ id: internalUuidSchema.describe("UUID interno do Setup Link no BotoZap."),
187
+ status: z.enum(["active", "expired", "revoked"]),
188
+ whatsapp_setup_status: z.enum([
189
+ "pending",
190
+ "in_progress",
191
+ "completed",
192
+ "failed",
193
+ ]),
194
+ url: z.string().describe("URL pública com token opaco embutido."),
195
+ allowed_connection_types: z.array(z.enum(["dedicated", "coexistence"])),
196
+ provision_phone_number: z.boolean(),
197
+ language: z.string().nullable(),
198
+ success_redirect_url: z.string().nullable(),
199
+ failure_redirect_url: z.string().nullable(),
200
+ theme_config: jsonValueSchema.nullable(),
201
+ expires_at: z.string().nullable(),
202
+ created_at: z.string(),
203
+ updated_at: z.string(),
204
+ })
205
+ .passthrough();
206
+ export const listSetupLinksResultSchema = offsetListResultSchemaFor(setupLinkSchema);
207
+ export const setupLinkResultSchema = itemResultSchemaFor(setupLinkSchema);
208
+ export const mediaUploadSchema = z
209
+ .object({
210
+ ingest_id: internalUuidSchema,
211
+ target: z
212
+ .object({
213
+ kind: z.string(),
214
+ media_id: z.string().optional(),
215
+ handle: z.string().optional(),
216
+ })
217
+ .passthrough(),
218
+ resource: z
219
+ .object({
220
+ filename: z.string(),
221
+ mime_type: z.string(),
222
+ size_bytes: z.number().int().nonnegative(),
223
+ sha256: z.string(),
224
+ source_url: z.string(),
225
+ })
226
+ .passthrough(),
227
+ })
228
+ .passthrough();
229
+ export const mediaUploadResultSchema = itemResultSchemaFor(mediaUploadSchema);
230
+ export const apiLogSchema = z
231
+ .object({
232
+ id: internalUuidSchema,
233
+ source: z.string(),
234
+ method: z.string(),
235
+ path: z.string(),
236
+ status_code: z.number().int().nullable(),
237
+ error_code: z.string().nullable(),
238
+ api_key_id: internalUuidSchema.nullable(),
239
+ duration_ms: z.number().int().nonnegative().nullable(),
240
+ created_at: z.string(),
241
+ })
242
+ .passthrough();
243
+ export const listApiLogsResultSchema = cursorListResultSchemaFor(apiLogSchema);
244
+ export const userSchema = z
245
+ .object({
246
+ id: internalUuidSchema,
247
+ user_id: internalUuidSchema,
248
+ email: z.string().nullable(),
249
+ name: z.string().nullable(),
250
+ role: z.enum(["owner", "admin", "member"]),
251
+ })
252
+ .passthrough();
253
+ export const listUsersResultSchema = offsetListResultSchemaFor(userSchema);
254
+ export const webhookSchema = z
255
+ .object({
256
+ id: internalUuidSchema.describe("UUID interno do Endpoint no BotoZap."),
257
+ url: z.string(),
258
+ events: z.array(z.string()),
259
+ active: z.boolean(),
260
+ secret: z
261
+ .string()
262
+ .optional()
263
+ .describe("Segredo HMAC; presente somente na resposta de criação."),
264
+ created_at: z.string(),
265
+ updated_at: z.string(),
266
+ })
267
+ .passthrough();
268
+ export const listWebhooksResultSchema = cursorListResultSchemaFor(webhookSchema);
269
+ export const webhookResultSchema = itemResultSchemaFor(webhookSchema);
270
+ export const webhookTestResultSchema = z
271
+ .object({
272
+ data: z.object({ success: z.boolean() }).strict(),
273
+ })
274
+ .passthrough();
275
+ export const webhookDeliverySchema = z
276
+ .object({
277
+ id: internalUuidSchema,
278
+ endpoint_id: internalUuidSchema,
279
+ event_type: z.string(),
280
+ status: z.enum(["pending", "success", "failed", "exhausted"]),
281
+ response_code: z.number().int().nullable(),
282
+ attempts: z.number().int().nonnegative(),
283
+ last_attempt_at: z.string().nullable(),
284
+ next_retry_at: z.string().nullable(),
285
+ created_at: z.string(),
286
+ })
287
+ .passthrough();
288
+ export const listWebhookDeliveriesResultSchema = cursorListResultSchemaFor(webhookDeliverySchema);
289
+ export const phoneNumberSchema = z
290
+ .object({
291
+ id: internalPhoneNumberIdSchema,
292
+ phone_number_id: metaPhoneNumberIdSchema,
293
+ display_phone_number: z.string().nullable(),
294
+ verified_name: z.string().nullable(),
295
+ quality_rating: z.string(),
296
+ type: z.string().nullable(),
297
+ waba_connection_id: internalUuidSchema,
298
+ customer_id: internalUuidSchema.nullable(),
299
+ waba_id: z.string().nullable(),
300
+ connection_status: z.string().nullable(),
301
+ token_status: z.string().nullable(),
302
+ created_at: z.string(),
303
+ })
304
+ .passthrough();
305
+ export const listPhoneNumbersResultSchema = offsetListResultSchemaFor(phoneNumberSchema);
306
+ export const getPhoneNumberResultSchema = itemResultSchemaFor(phoneNumberSchema);
307
+ export const phoneNumberHealthSchema = z
308
+ .object({
309
+ status: z.string(),
310
+ timestamp: z.string(),
311
+ error: z.string().optional(),
312
+ checks: z.record(z.string(), z.string()).optional(),
313
+ })
314
+ .passthrough();
315
+ export const phoneNumberHealthResultSchema = itemResultSchemaFor(phoneNumberHealthSchema);
316
+ export const templateSchema = z
317
+ .object({
318
+ id: internalUuidSchema.describe("UUID interno do Template no BotoZap."),
319
+ name: z.string(),
320
+ language: z.string(),
321
+ category: z.string().nullable(),
322
+ status: z.string(),
323
+ meta_template_id: z.string().nullable(),
324
+ components: jsonValueSchema.nullable(),
325
+ waba_connection_id: internalUuidSchema,
326
+ created_at: z.string(),
327
+ last_synced_at: z.string().nullable(),
328
+ })
329
+ .passthrough();
330
+ export const listTemplatesResultSchema = offsetListResultSchemaFor(templateSchema);
331
+ export const templateResultSchema = itemResultSchemaFor(templateSchema);
332
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,9 +1,16 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type EventSignalSource } from "./resources/events.js";
2
3
  export interface BuildServerOptions {
3
4
  apiKey: string;
4
5
  baseUrl?: string;
5
6
  /** Injeta um fetch (testes de integração). Prod → global do SDK. */
6
7
  fetch?: typeof fetch;
8
+ /** Intervalo do tail enquanto há assinatura ativa. Padrão: 1,5 s. */
9
+ eventPollIntervalMs?: number;
10
+ /** Máximo de URIs de Eventos assinadas por sessão. */
11
+ maxEventSubscriptions?: number;
12
+ /** Sinal compartilhado usado pelo transporte remoto; o payload vem da API. */
13
+ eventSignal?: EventSignalSource;
7
14
  }
8
15
  /** Monta um `McpServer` com todas as ferramentas registradas. */
9
16
  export declare function buildServer(options: BuildServerOptions): McpServer;
package/dist/server.js CHANGED
@@ -16,19 +16,20 @@ import { registerPhoneNumberTools } from "./tools/phone-numbers.js";
16
16
  import { registerTemplateTools } from "./tools/templates.js";
17
17
  import { registerWebhookTools } from "./tools/webhooks.js";
18
18
  import { registerMiscTools } from "./tools/misc.js";
19
+ import { registerEventResources, } from "./resources/events.js";
19
20
  const { version: VERSION } = createRequire(import.meta.url)("../package.json");
20
21
  /** Monta um `McpServer` com todas as ferramentas registradas. */
21
22
  export function buildServer(options) {
22
23
  const server = new McpServer({
23
24
  name: "botozap-mcp",
24
25
  version: VERSION,
25
- });
26
+ }, { capabilities: { resources: { subscribe: true } } });
26
27
  const client = createClient({
27
28
  apiKey: options.apiKey,
28
29
  baseUrl: options.baseUrl,
29
30
  fetch: options.fetch,
30
31
  });
31
- const register = createRegister(server, client);
32
+ const register = createRegister(server, client, options.apiKey);
32
33
  registerMessageTools(register);
33
34
  registerConversationTools(register);
34
35
  registerContactTools(register);
@@ -38,6 +39,16 @@ export function buildServer(options) {
38
39
  registerTemplateTools(register);
39
40
  registerWebhookTools(register);
40
41
  registerMiscTools(register);
42
+ const closeEventResources = registerEventResources(server, client, {
43
+ maxSubscriptions: options.maxEventSubscriptions,
44
+ pollIntervalMs: options.eventPollIntervalMs ?? 1_500,
45
+ eventSignal: options.eventSignal,
46
+ });
47
+ const previousOnClose = server.server.onclose;
48
+ server.server.onclose = () => {
49
+ closeEventResources();
50
+ previousOnClose?.();
51
+ };
41
52
  return server;
42
53
  }
43
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAE5E,CAAC;AASF,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,8DAA8D;YAC9D,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,eAAe;KAChE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,sBAAsB,GAEvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAE5E,CAAC;AAeF,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,EACD,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CACrD,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE;QACjE,gBAAgB,EAAE,OAAO,CAAC,qBAAqB;QAC/C,cAAc,EAAE,OAAO,CAAC,mBAAmB,IAAI,KAAK;QACpD,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QAC3B,mBAAmB,EAAE,CAAC;QACtB,eAAe,EAAE,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,8DAA8D;YAC9D,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,eAAe;KAChE,CAAC;AACJ,CAAC"}
@@ -1,2 +1,2 @@
1
- import type { Register } from "../register.js";
1
+ import { type Register } from "../register.js";
2
2
  export declare function registerContactTools(register: Register): void;
@@ -1,5 +1,7 @@
1
1
  /** Ferramentas de contatos (end users do WhatsApp): CRUD. */
2
2
  import { z } from "zod";
3
+ import { emptyOperationResult } from "../register.js";
4
+ import { contactResultSchema, emptyOperationResultSchema, listContactsResultSchema, } from "../schemas.js";
3
5
  export function registerContactTools(register) {
4
6
  register("list_contacts", "Lista contatos da conta (paginação por cursor: { data, paging }). Filtros opcionais por cliente, presença de cliente, busca parcial em nome/wa_id e janela de criação.", {
5
7
  customer_id: z.string().optional().describe("Filtra pelos números do cliente (derivado)."),
@@ -14,8 +16,8 @@ export function registerContactTools(register) {
14
16
  limit: z.number().int().positive().optional(),
15
17
  after: z.string().optional(),
16
18
  before: z.string().optional(),
17
- }, (client, args) => client.contacts.list(args));
18
- register("get_contact", "Busca um contato pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do contato (uuid interno).") }, async (client, args) => ({ data: await client.contacts.get(String(args.id)) }));
19
+ }, listContactsResultSchema, (client, args) => client.contacts.list(args));
20
+ register("get_contact", "Busca um contato pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do contato (uuid interno).") }, contactResultSchema, async (client, args) => ({ data: await client.contacts.get(String(args.id)) }));
19
21
  register("create_contact", "Cria um contato. O contato é sempre atado a um phone_number e único por (phone_number_id, wa_id). `wa_id` (BSUID ou E.164) é a chave canônica. Informe phone_number_id (Meta) OU customer_id para resolver o número.", {
20
22
  wa_id: z.string().describe("Identidade canônica: BSUID (BR.1A2B...) ou dígitos E.164."),
21
23
  phone_number_id: z.string().optional().describe("phone_number_id (Meta) ao qual atar."),
@@ -25,22 +27,22 @@ export function registerContactTools(register) {
25
27
  user_id: z.string().optional().describe("BSUID do usuário."),
26
28
  username: z.string().optional(),
27
29
  parent_user_id: z.string().optional(),
28
- }, async (client, args) => ({
30
+ }, contactResultSchema, async (client, args) => ({
29
31
  data: await client.contacts.create(args),
30
32
  }));
31
33
  register("update_contact", "Atualiza um contato (campos editáveis: profile_name, username). Retorna { data }.", {
32
34
  id: z.string().describe("ID do contato (uuid interno)."),
33
35
  profile_name: z.string().optional(),
34
36
  username: z.string().optional(),
35
- }, async (client, args) => {
37
+ }, contactResultSchema, async (client, args) => {
36
38
  const { id, ...body } = args;
37
39
  return { data: await client.contacts.update(String(id), body) };
38
40
  });
39
- register("delete_contact", "Exclui um contato pelo id (uuid interno).", { id: z.string().describe("ID do contato (uuid interno).") }, async (client, args) => {
41
+ register("delete_contact", "Exclui um contato pelo id (uuid interno).", { id: z.string().describe("ID do contato (uuid interno).") }, emptyOperationResultSchema, async (client, args) => {
40
42
  // A rota responde 204 (sem corpo); preservamos o retorno `null` do MCP
41
43
  // legado (JSON.stringify(null) === "null").
42
44
  await client.contacts.delete(String(args.id));
43
- return null;
45
+ return emptyOperationResult();
44
46
  });
45
47
  }
46
48
  //# sourceMappingURL=contacts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,20 @@
1
1
  /** Ferramentas de conversas: listar, ler e atualizar status. */
2
2
  import { z } from "zod";
3
+ import { conversationResultSchema, listConversationsResultSchema, sendMessageResultSchema, } from "../schemas.js";
3
4
  export function registerConversationTools(register) {
5
+ register("reply_to_conversation", "Responde uma Conversa com texto. Informe somente o UUID da Conversa e o corpo; o BotoZap resolve Contato e Número, e a API revalida Conta, ambiente, janela de 24h, quota e billing. Exige scopes conversations:read e messages:send.", {
6
+ conversation_id: z
7
+ .string()
8
+ .uuid()
9
+ .describe("UUID interno da Conversa no BotoZap."),
10
+ text: z
11
+ .object({
12
+ body: z.string().describe("Corpo da resposta de texto."),
13
+ })
14
+ .describe("Conteúdo da resposta."),
15
+ }, sendMessageResultSchema, (client, args) => client.conversations.reply(String(args.conversation_id), {
16
+ text: args.text.body,
17
+ }));
4
18
  register("list_conversations", "Lista conversas da conta (paginação por cursor: { data, paging }). Filtros opcionais por número e por busca textual de contato.", {
5
19
  phone_number_id: z.string().optional().describe("Filtra pelo phone_number_id (Meta)."),
6
20
  status: z.string().optional().describe("Filtra por status (active|ended)."),
@@ -12,12 +26,12 @@ export function registerConversationTools(register) {
12
26
  limit: z.number().int().positive().optional(),
13
27
  after: z.string().optional(),
14
28
  before: z.string().optional(),
15
- }, (client, args) => client.conversations.list(args));
16
- register("get_conversation", "Busca uma conversa pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID da conversa (uuid interno).") }, async (client, args) => ({ data: await client.conversations.get(String(args.id)) }));
29
+ }, listConversationsResultSchema, (client, args) => client.conversations.list(args));
30
+ register("get_conversation", "Busca uma conversa pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID da conversa (uuid interno).") }, conversationResultSchema, async (client, args) => ({ data: await client.conversations.get(String(args.id)) }));
17
31
  register("update_conversation", "Atualiza o status de uma conversa. status='ended' fecha a janela de 24h; status='active' é no-op idempotente (a janela só reabre com novo inbound do contato).", {
18
32
  id: z.string().describe("ID da conversa (uuid interno)."),
19
33
  status: z.enum(["active", "ended"]).describe("Novo status da conversa."),
20
- }, async (client, args) => ({
34
+ }, conversationResultSchema, async (client, args) => ({
21
35
  data: await client.conversations.update(String(args.id), { status: args.status }),
22
36
  }));
23
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/tools/conversations.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,yBAAyB,CAAC,QAAkB;IAC1D,QAAQ,CACN,oBAAoB,EACpB,iIAAiI,EACjI;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACtF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC3E,8EAA8E;QAC9E,8EAA8E;QAC9E,kDAAkD;QAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;QACxG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;QACpH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,EACD,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAA+B,CAAC,CAC7E,CAAC;IAEF,QAAQ,CACN,kBAAkB,EAClB,8DAA8D,EAC9D,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,EAC7D,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CACpF,CAAC;IAEF,QAAQ,CACN,qBAAqB,EACrB,gKAAgK,EAChK;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACzE,EACD,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;KAClF,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"conversations.js","sourceRoot":"","sources":["../../src/tools/conversations.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,yBAAyB,CAAC,QAAkB;IAC1D,QAAQ,CACN,uBAAuB,EACvB,uOAAuO,EACvO;QACE,eAAe,EAAE,CAAC;aACf,MAAM,EAAE;aACR,IAAI,EAAE;aACN,QAAQ,CAAC,sCAAsC,CAAC;QACnD,IAAI,EAAE,CAAC;aACJ,MAAM,CAAC;YACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;SACzD,CAAC;aACD,QAAQ,CAAC,uBAAuB,CAAC;KACrC,EACD,uBAAuB,EACvB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACf,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;QACvD,IAAI,EAAG,IAAI,CAAC,IAAyB,CAAC,IAAI;KAC3C,CAAC,CACL,CAAC;IAEF,QAAQ,CACN,oBAAoB,EACpB,iIAAiI,EACjI;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACtF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC3E,8EAA8E;QAC9E,8EAA8E;QAC9E,kDAAkD;QAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;QACxG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;QACpH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,EACD,6BAA6B,EAC7B,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAA+B,CAAC,CAC7E,CAAC;IAEF,QAAQ,CACN,kBAAkB,EAClB,8DAA8D,EAC9D,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,EAC7D,wBAAwB,EACxB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CACpF,CAAC;IAEF,QAAQ,CACN,qBAAqB,EACrB,gKAAgK,EAChK;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACzE,EACD,wBAAwB,EACxB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;KAClF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1,2 +1,2 @@
1
- import type { Register } from "../register.js";
1
+ import { type Register } from "../register.js";
2
2
  export declare function registerCustomerTools(register: Register): void;
@@ -1,36 +1,38 @@
1
1
  /** Ferramentas de clientes (customers do dev) e seus links de setup. */
2
2
  import { z } from "zod";
3
+ import { emptyOperationResult } from "../register.js";
4
+ import { customerResultSchema, emptyOperationResultSchema, listCustomersResultSchema, listSetupLinksResultSchema, setupLinkResultSchema, } from "../schemas.js";
3
5
  export function registerCustomerTools(register) {
4
6
  register("list_customers", "Lista os clientes (customers) da conta (paginação offset: { data, meta }).", {
5
7
  // A rota (/v1/customers) só lê `page`/`per_page` (parseOffsetParams).
6
8
  page: z.number().int().positive().optional().describe("Página (1-based)."),
7
9
  per_page: z.number().int().positive().optional().describe("Itens por página (máx. 100)."),
8
- }, (client, args) => client.customers.list(args));
9
- register("get_customer", "Busca um cliente pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do cliente (uuid interno).") }, async (client, args) => ({ data: await client.customers.get(String(args.id)) }));
10
+ }, listCustomersResultSchema, (client, args) => client.customers.list(args));
11
+ register("get_customer", "Busca um cliente pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do cliente (uuid interno).") }, customerResultSchema, async (client, args) => ({ data: await client.customers.get(String(args.id)) }));
10
12
  register("create_customer", "Cria um cliente. Informe ao menos `name`. `external_customer_id` é opcional (sua referência externa). Retorna { data }.", {
11
13
  name: z.string().describe("Nome do cliente."),
12
14
  external_customer_id: z.string().optional().describe("Referência externa opcional."),
13
- }, async (client, args) => ({
15
+ }, customerResultSchema, async (client, args) => ({
14
16
  data: await client.customers.create(args),
15
17
  }));
16
18
  register("update_customer", "Atualiza um cliente (name, external_customer_id). Retorna { data }.", {
17
19
  id: z.string().describe("ID do cliente (uuid interno)."),
18
20
  name: z.string().optional(),
19
21
  external_customer_id: z.string().optional(),
20
- }, async (client, args) => {
22
+ }, customerResultSchema, async (client, args) => {
21
23
  const { id, ...body } = args;
22
24
  return { data: await client.customers.update(String(id), body) };
23
25
  });
24
- register("delete_customer", "Exclui um cliente pelo id (uuid interno).", { id: z.string().describe("ID do cliente (uuid interno).") }, async (client, args) => {
26
+ register("delete_customer", "Exclui um cliente pelo id (uuid interno).", { id: z.string().describe("ID do cliente (uuid interno).") }, emptyOperationResultSchema, async (client, args) => {
25
27
  await client.customers.delete(String(args.id));
26
- return null;
28
+ return emptyOperationResult();
27
29
  });
28
30
  // ---- Links de setup (Embedded Signup) ----
29
31
  register("list_setup_links", "Lista os links de setup de um cliente (paginação offset: { data, meta }).", {
30
32
  customer_id: z.string().describe("ID do cliente (uuid interno)."),
31
33
  page: z.number().int().positive().optional().describe("Página (1-based)."),
32
34
  per_page: z.number().int().positive().optional().describe("Itens por página (máx. 100)."),
33
- }, (client, args) => {
35
+ }, listSetupLinksResultSchema, (client, args) => {
34
36
  const { customer_id, ...query } = args;
35
37
  return client.customers.listSetupLinks(String(customer_id), query);
36
38
  });
@@ -44,7 +46,7 @@ export function registerCustomerTools(register) {
44
46
  language: z.string().optional().describe("Idioma (ou 'auto')."),
45
47
  success_redirect_url: z.string().optional(),
46
48
  failure_redirect_url: z.string().optional(),
47
- }, async (client, args) => {
49
+ }, setupLinkResultSchema, async (client, args) => {
48
50
  const { customer_id, ...body } = args;
49
51
  return {
50
52
  data: await client.customers.createSetupLink(String(customer_id), body),
@@ -55,7 +57,7 @@ export function registerCustomerTools(register) {
55
57
  link_id: z.string().describe("ID do link de setup."),
56
58
  status: z.string().optional().describe("Novo status do link."),
57
59
  expires_at: z.string().optional().describe("Nova expiração (ISO 8601)."),
58
- }, async (client, args) => {
60
+ }, setupLinkResultSchema, async (client, args) => {
59
61
  const { customer_id, link_id, ...body } = args;
60
62
  return {
61
63
  data: await client.customers.updateSetupLink(String(customer_id), String(link_id), body),
@@ -1 +1 @@
1
- {"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,EAAE,oBAAoB,EAAiB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACtD,QAAQ,CACN,gBAAgB,EAChB,4EAA4E,EAC5E;QACE,sEAAsE;QACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC1F,EACD,yBAAyB,EACzB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAoB,CAAC,CAC9D,CAAC;IAEF,QAAQ,CACN,cAAc,EACd,4DAA4D,EAC5D,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,EAC5D,oBAAoB,EACpB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAChF,CAAC;IAEF,QAAQ,CACN,iBAAiB,EACjB,yHAAyH,EACzH;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC7C,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KACrF,EACD,oBAAoB,EACpB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAA4B,CAAC;KAClE,CAAC,CACH,CAAC;IAEF,QAAQ,CACN,iBAAiB,EACjB,qEAAqE,EACrE;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5C,EACD,oBAAoB,EACpB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAA4B,CAAC,EAAE,CAAC;IAC3F,CAAC,CACF,CAAC;IAEF,QAAQ,CACN,iBAAiB,EACjB,2CAA2C,EAC3C,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,EAC5D,0BAA0B,EAC1B,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,oBAAoB,EAAE,CAAC;IAChC,CAAC,CACF,CAAC;IAEF,6CAA6C;IAE7C,QAAQ,CACN,kBAAkB,EAClB,2EAA2E,EAC3E;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC1F,EACD,0BAA0B,EAC1B,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACf,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QACvC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAqB,CAAC,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,QAAQ,CACN,mBAAmB,EACnB,sKAAsK,EACtK;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACjE,wBAAwB,EAAE,CAAC;aACxB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;aAC3C,QAAQ,EAAE;aACV,QAAQ,CAAC,8BAA8B,CAAC;QAC3C,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC/D,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3C,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5C,EACD,qBAAqB,EACrB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACtC,OAAO;YACL,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAC1C,MAAM,CAAC,WAAW,CAAC,EACnB,IAA6B,CAC9B;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,QAAQ,CACN,mBAAmB,EACnB,mEAAmE,EACnE;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACzE,EACD,qBAAqB,EACrB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAC/C,OAAO;YACL,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAC1C,MAAM,CAAC,WAAW,CAAC,EACnB,MAAM,CAAC,OAAO,CAAC,EACf,IAA6B,CAC9B;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}