@alvera-ai/platform-sdk 0.1.0 → 0.2.2

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.
@@ -0,0 +1,3090 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+ import * as v from 'valibot';
3
+ /**
4
+ * SQLDatabaseRequest
5
+ *
6
+ * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake). Request
7
+ */
8
+ export const vSqlDatabaseRequest = v.object({
9
+ db_host: v.string(),
10
+ db_name: v.string(),
11
+ db_type: v.picklist([
12
+ 'postgres',
13
+ 'mysql',
14
+ 'mssql',
15
+ 'sqlite',
16
+ 'snowflake'
17
+ ]),
18
+ pool_size: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(99))),
19
+ port: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
20
+ ssl: v.nullish(v.boolean()),
21
+ ssl_mode: v.nullish(v.string()),
22
+ user_name: v.string()
23
+ });
24
+ /**
25
+ * S3Request
26
+ *
27
+ * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2). Request
28
+ */
29
+ export const vS3Request = v.record(v.string(), v.unknown());
30
+ /**
31
+ * CloudStorageR2Response
32
+ *
33
+ * Cloudflare R2 cloud storage configuration — S3-compatible with auto region and account-scoped endpoints.
34
+ */
35
+ export const vCloudStorageR2Response = v.pipe(v.object({
36
+ access_key_id: v.string(),
37
+ base_path: v.optional(v.string()),
38
+ bucket: v.string(),
39
+ endpoint: v.nullish(v.string()),
40
+ region: v.optional(v.string())
41
+ }), v.readonly());
42
+ /**
43
+ * ConnectedAppRequest
44
+ *
45
+ * External web application connected to the platform via M2M API key Request
46
+ */
47
+ export const vConnectedAppRequest = v.object({
48
+ cloudflare_pages_config: v.nullish(v.object({
49
+ account_id: v.string(),
50
+ build_command: v.nullish(v.string()),
51
+ destination_dir: v.nullish(v.string()),
52
+ github_auth_method: v.optional(v.picklist(['github_app', 'pat'])),
53
+ production_branch: v.nullish(v.string()),
54
+ project_name: v.nullish(v.pipe(v.string(), v.readonly()))
55
+ })),
56
+ description: v.nullish(v.string()),
57
+ mode: v.picklist(['managed', 'self_hosted']),
58
+ name: v.string(),
59
+ repo_url: v.nullish(v.string()),
60
+ urls: v.optional(v.array(v.object({
61
+ is_primary: v.optional(v.boolean()),
62
+ label: v.nullish(v.string()),
63
+ url: v.string()
64
+ })))
65
+ });
66
+ /**
67
+ * ConnectedAppUrlRequest
68
+ *
69
+ * URL entry for a Connected App Request
70
+ */
71
+ export const vConnectedAppUrlRequest = v.object({
72
+ is_primary: v.optional(v.boolean()),
73
+ label: v.nullish(v.string()),
74
+ url: v.string()
75
+ });
76
+ /**
77
+ * ActionStatusUpdaterRequest
78
+ *
79
+ * Action Status Updater — automated polling for delivery status updates. Request
80
+ */
81
+ export const vActionStatusUpdaterRequest = v.object({
82
+ cron_expression: v.optional(v.string()),
83
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
84
+ name: v.optional(v.string()),
85
+ sender_tool_ids: v.nullish(v.array(v.pipe(v.string(), v.uuid()))),
86
+ updater_tool_id: v.optional(v.pipe(v.string(), v.uuid())),
87
+ updater_type: v.optional(v.picklist(['cloud_watch', 'restapi']))
88
+ });
89
+ /**
90
+ * CloudWatchQueryResponse
91
+ *
92
+ * CloudWatch log group query descriptor — log group name plus Liquid-templated time window. Reusable across any caller that needs CloudWatch polling (currently ActionStatusUpdater.updater_body). Title is CloudWatchQuery (not CloudWatchRequest) to avoid triple-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterCloudWatchQueryRequest).
93
+ */
94
+ export const vCloudWatchQueryResponse = v.pipe(v.object({
95
+ end_time: v.string(),
96
+ log_group_name: v.string(),
97
+ start_time: v.string()
98
+ }), v.readonly());
99
+ /**
100
+ * ToolS3Request
101
+ */
102
+ export const vToolS3Request = v.intersect([vS3Request, v.object({
103
+ tool_body_type: v.picklist(['s3'])
104
+ })]);
105
+ /**
106
+ * ConnectedAppResponse
107
+ *
108
+ * External web application connected to the platform via M2M API key
109
+ */
110
+ export const vConnectedAppResponse = v.pipe(v.object({
111
+ cloudflare_pages_config: v.nullish(v.object({
112
+ account_id: v.string(),
113
+ build_command: v.nullish(v.string()),
114
+ destination_dir: v.nullish(v.string()),
115
+ github_auth_method: v.optional(v.picklist(['github_app', 'pat'])),
116
+ production_branch: v.nullish(v.string()),
117
+ project_name: v.nullish(v.pipe(v.string(), v.readonly()))
118
+ })),
119
+ description: v.nullish(v.string()),
120
+ error: v.nullish(v.pipe(v.string(), v.readonly())),
121
+ id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
122
+ inserted_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
123
+ last_synced_at: v.nullish(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
124
+ mode: v.picklist(['managed', 'self_hosted']),
125
+ name: v.string(),
126
+ repo_url: v.nullish(v.string()),
127
+ routes: v.optional(v.pipe(v.array(v.object({
128
+ description: v.nullish(v.string()),
129
+ name: v.string(),
130
+ path: v.string()
131
+ })), v.readonly())),
132
+ slug: v.optional(v.pipe(v.string(), v.readonly())),
133
+ status: v.optional(v.picklist([
134
+ 'pending',
135
+ 'deploying',
136
+ 'deployed',
137
+ 'synced',
138
+ 'error'
139
+ ])),
140
+ updated_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
141
+ urls: v.optional(v.array(v.object({
142
+ is_primary: v.optional(v.boolean()),
143
+ label: v.nullish(v.string()),
144
+ url: v.string()
145
+ })))
146
+ }), v.readonly());
147
+ /**
148
+ * CloudflarePagesConfigRequest
149
+ *
150
+ * Cloudflare Pages deployment configuration for managed Connected Apps Request
151
+ */
152
+ export const vCloudflarePagesConfigRequest = v.object({
153
+ account_id: v.string(),
154
+ build_command: v.nullish(v.string()),
155
+ destination_dir: v.nullish(v.string()),
156
+ github_auth_method: v.picklist(['github_app', 'pat']),
157
+ production_branch: v.nullish(v.string())
158
+ });
159
+ /**
160
+ * GenericTableResponse
161
+ *
162
+ * Generic Table — custom or system dataset table with column definitions.
163
+ */
164
+ export const vGenericTableResponse = v.pipe(v.object({
165
+ columns: v.optional(v.array(v.unknown())),
166
+ data_domain: v.optional(v.picklist([
167
+ 'healthcare',
168
+ 'core_banking',
169
+ 'payment_risk',
170
+ 'accounts_receivable',
171
+ 'service_commerce',
172
+ 'trading'
173
+ ])),
174
+ datalake_id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
175
+ description: v.optional(v.string()),
176
+ id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
177
+ inserted_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
178
+ name: v.optional(v.pipe(v.string(), v.readonly())),
179
+ status: v.optional(v.picklist([
180
+ 'new',
181
+ 'stale',
182
+ 'processing',
183
+ 'deployed'
184
+ ])),
185
+ tenant_id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
186
+ title: v.optional(v.string()),
187
+ type: v.optional(v.picklist(['custom', 'system'])),
188
+ updated_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly()))
189
+ }), v.readonly());
190
+ /**
191
+ * CloudWatchQueryRequest
192
+ *
193
+ * CloudWatch log group query descriptor — log group name plus Liquid-templated time window. Reusable across any caller that needs CloudWatch polling (currently ActionStatusUpdater.updater_body). Title is CloudWatchQuery (not CloudWatchRequest) to avoid triple-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterCloudWatchQueryRequest). Request
194
+ */
195
+ export const vCloudWatchQueryRequest = v.object({
196
+ end_time: v.string(),
197
+ log_group_name: v.string(),
198
+ start_time: v.string()
199
+ });
200
+ /**
201
+ * IngestFileRequest
202
+ *
203
+ * Request body for ingesting a file that was previously uploaded via a presigned upload link
204
+ */
205
+ export const vIngestFileRequest = v.object({
206
+ key: v.string()
207
+ });
208
+ /**
209
+ * ExecuteActionResponse
210
+ *
211
+ * Response from executing a workflow action
212
+ */
213
+ export const vExecuteActionResponse = v.object({
214
+ scheduled_count: v.optional(v.pipe(v.number(), v.integer())),
215
+ status: v.optional(v.picklist([
216
+ 'pending',
217
+ 'completed',
218
+ 'filtered',
219
+ 'failed'
220
+ ])),
221
+ workflow_execution_log_id: v.nullish(v.pipe(v.string(), v.uuid()))
222
+ });
223
+ /**
224
+ * SFTPRequest
225
+ *
226
+ * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth. Request
227
+ */
228
+ export const vSftpRequest = v.object({
229
+ auth_method: v.picklist(['password', 'ssh_key']),
230
+ base_path: v.string(),
231
+ host: v.string(),
232
+ port: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535)),
233
+ user_name: v.string()
234
+ });
235
+ /**
236
+ * SyncRoutesResponse
237
+ *
238
+ * Accepted response for an enqueued route sync job
239
+ */
240
+ export const vSyncRoutesResponse = v.object({
241
+ connected_app_id: v.pipe(v.string(), v.uuid()),
242
+ enqueued_at: v.pipe(v.string(), v.isoTimestamp()),
243
+ job_id: v.pipe(v.number(), v.integer()),
244
+ status: v.picklist(['enqueued'])
245
+ });
246
+ /**
247
+ * CloudStorageAwsRequest
248
+ *
249
+ * AWS S3 cloud storage configuration supporting access key and IAM role authentication. Request
250
+ */
251
+ export const vCloudStorageAwsRequest = v.object({
252
+ access_key_id: v.nullish(v.string()),
253
+ auth_method: v.optional(v.picklist(['access_key', 'iam_role'])),
254
+ base_path: v.optional(v.string()),
255
+ bucket: v.string(),
256
+ endpoint: v.nullish(v.string()),
257
+ region: v.string()
258
+ });
259
+ /**
260
+ * EmailResponse
261
+ *
262
+ * Email tool configuration — SES, Mailgun, SendGrid, or SMTP provider plus base Liquid templates.
263
+ */
264
+ export const vEmailResponse = v.pipe(v.object({
265
+ access_key_id: v.optional(v.string()),
266
+ domain: v.optional(v.string()),
267
+ from_email: v.pipe(v.string(), v.email()),
268
+ from_name: v.nullish(v.string()),
269
+ provider: v.picklist([
270
+ 'ses',
271
+ 'mailgun',
272
+ 'sendgrid',
273
+ 'smtp'
274
+ ]),
275
+ region: v.optional(v.string()),
276
+ reply_to: v.nullish(v.string()),
277
+ smtp_host: v.optional(v.string()),
278
+ smtp_port: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
279
+ smtp_username: v.optional(v.string())
280
+ }), v.readonly());
281
+ /**
282
+ * ConnectedAppRouteRequest
283
+ *
284
+ * Discovered route from a Connected App's .well-known/routes.json Request
285
+ */
286
+ export const vConnectedAppRouteRequest = v.object({
287
+ description: v.nullish(v.string()),
288
+ name: v.string(),
289
+ path: v.string()
290
+ });
291
+ /**
292
+ * PaginationMeta
293
+ *
294
+ * Pagination metadata for list responses
295
+ */
296
+ export const vPaginationMeta = v.object({
297
+ page: v.pipe(v.number(), v.integer()),
298
+ page_size: v.pipe(v.number(), v.integer()),
299
+ total_count: v.pipe(v.number(), v.integer()),
300
+ total_pages: v.pipe(v.number(), v.integer())
301
+ });
302
+ /**
303
+ * RESTAPIRequest
304
+ *
305
+ * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates. Request
306
+ */
307
+ export const vRestapiRequest = v.object({
308
+ api_key_location: v.optional(v.picklist(['header', 'query'])),
309
+ api_key_name: v.nullish(v.string()),
310
+ auth_method: v.picklist([
311
+ 'none',
312
+ 'api_key',
313
+ 'basic',
314
+ 'bearer',
315
+ 'oauth2',
316
+ 'oidc'
317
+ ]),
318
+ base_url: v.string(),
319
+ oauth2_client_id: v.nullish(v.string()),
320
+ oauth2_grant_type: v.optional(v.picklist(['client_credentials', 'authorization_code'])),
321
+ oauth2_scope: v.nullish(v.string()),
322
+ oauth2_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
323
+ oauth2_token_url: v.nullish(v.string()),
324
+ oidc_client_id: v.nullish(v.string()),
325
+ oidc_issuer_url: v.nullish(v.string()),
326
+ oidc_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
327
+ request_type: v.picklist([
328
+ 'json',
329
+ 'xml',
330
+ 'form_urlencoded',
331
+ 'multipart_form'
332
+ ]),
333
+ response_type: v.picklist([
334
+ 'json',
335
+ 'xml',
336
+ 'text',
337
+ 'binary'
338
+ ]),
339
+ timeout_ms: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(300000)),
340
+ username: v.nullish(v.string())
341
+ });
342
+ /**
343
+ * SQSResponse
344
+ *
345
+ * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages.
346
+ */
347
+ export const vSqsResponse = v.pipe(v.object({
348
+ access_key_id: v.nullish(v.string()),
349
+ auth_method: v.picklist(['access_key', 'iam_role']),
350
+ fifo: v.optional(v.boolean()),
351
+ queue_name: v.nullish(v.string()),
352
+ queue_url: v.string(),
353
+ region: v.string()
354
+ }), v.readonly());
355
+ /**
356
+ * ToolSQSResponse
357
+ */
358
+ export const vToolSqsResponse = v.intersect([vSqsResponse, v.object({
359
+ tool_body_type: v.picklist(['sqs'])
360
+ })]);
361
+ /**
362
+ * ToolEmailResponse
363
+ */
364
+ export const vToolEmailResponse = v.intersect([vEmailResponse, v.object({
365
+ tool_body_type: v.picklist(['email'])
366
+ })]);
367
+ /**
368
+ * S3CloudStorageR2Response
369
+ */
370
+ export const vS3CloudStorageR2Response = v.intersect([vCloudStorageR2Response, v.object({
371
+ storage_config_type: v.picklist(['r2'])
372
+ })]);
373
+ /**
374
+ * MDMVerifyResponse
375
+ *
376
+ * Result of MDM subject identity verification
377
+ */
378
+ export const vMdmVerifyResponse = v.union([v.object({
379
+ status: v.picklist(['verified']),
380
+ subject_id: v.pipe(v.string(), v.uuid()),
381
+ verified_at: v.pipe(v.string(), v.isoTimestamp())
382
+ }), v.object({
383
+ errors: v.record(v.string(), v.array(v.string())),
384
+ status: v.picklist(['not_verified']),
385
+ subject_id: v.pipe(v.string(), v.uuid()),
386
+ verified_at: v.pipe(v.string(), v.isoTimestamp())
387
+ })]);
388
+ /**
389
+ * SQLDatabaseResponse
390
+ *
391
+ * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake).
392
+ */
393
+ export const vSqlDatabaseResponse = v.pipe(v.object({
394
+ db_host: v.string(),
395
+ db_name: v.string(),
396
+ db_type: v.picklist([
397
+ 'postgres',
398
+ 'mysql',
399
+ 'mssql',
400
+ 'sqlite',
401
+ 'snowflake'
402
+ ]),
403
+ pool_size: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(99))),
404
+ port: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
405
+ ssl: v.nullish(v.boolean()),
406
+ ssl_mode: v.nullish(v.string()),
407
+ user_name: v.string()
408
+ }), v.readonly());
409
+ /**
410
+ * RESTCallRequest
411
+ *
412
+ * REST API call descriptor — HTTP method, path, body, params, and pagination context template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion. Title is RESTCall (not RESTAPIRequest) to avoid double-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterRESTCallRequest). Request
413
+ */
414
+ export const vRestCallRequest = v.object({
415
+ method: v.picklist([
416
+ 'head',
417
+ 'get',
418
+ 'put',
419
+ 'post',
420
+ 'delete',
421
+ 'patch'
422
+ ])
423
+ });
424
+ /**
425
+ * SNSResponse
426
+ *
427
+ * AWS SNS tool configuration for sending SMS messages via the SNS Publish API.
428
+ */
429
+ export const vSnsResponse = v.pipe(v.object({
430
+ access_key_id: v.nullish(v.string()),
431
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
432
+ assume_role_external_id: v.nullish(v.string()),
433
+ auth_method: v.picklist([
434
+ 'access_key',
435
+ 'iam_role',
436
+ 'assume_role'
437
+ ]),
438
+ endpoint_url: v.nullish(v.string()),
439
+ phone_number: v.string(),
440
+ region: v.string()
441
+ }), v.readonly());
442
+ /**
443
+ * SQSRequest
444
+ *
445
+ * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages. Request
446
+ */
447
+ export const vSqsRequest = v.object({
448
+ access_key_id: v.nullish(v.string()),
449
+ auth_method: v.picklist(['access_key', 'iam_role']),
450
+ fifo: v.optional(v.boolean()),
451
+ queue_name: v.nullish(v.string()),
452
+ queue_url: v.string(),
453
+ region: v.string()
454
+ });
455
+ /**
456
+ * IngestResponse
457
+ *
458
+ * Response from data ingestion
459
+ */
460
+ export const vIngestResponse = v.object({
461
+ batch_id: v.pipe(v.string(), v.uuid()),
462
+ jobs_count: v.pipe(v.number(), v.integer()),
463
+ key: v.string()
464
+ });
465
+ /**
466
+ * ActionStatusUpdaterRESTCallRequest
467
+ */
468
+ export const vActionStatusUpdaterRestCallRequest = v.intersect([vRestCallRequest, v.object({
469
+ updater_body_type: v.picklist(['restapi_request'])
470
+ })]);
471
+ /**
472
+ * ActionStatusUpdaterCloudWatchQueryRequest
473
+ */
474
+ export const vActionStatusUpdaterCloudWatchQueryRequest = v.intersect([vCloudWatchQueryRequest, v.object({
475
+ updater_body_type: v.picklist(['cloud_watch_request'])
476
+ })]);
477
+ /**
478
+ * SessionResponse
479
+ *
480
+ * Session token and metadata returned after successful authentication
481
+ */
482
+ export const vSessionResponse = v.object({
483
+ api_key: v.nullish(v.object({
484
+ id: v.pipe(v.string(), v.uuid()),
485
+ last_four: v.string(),
486
+ name: v.string()
487
+ })),
488
+ expires_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
489
+ role: v.object({
490
+ id: v.pipe(v.string(), v.uuid()),
491
+ name: v.string()
492
+ }),
493
+ session_token: v.nullable(v.string()),
494
+ tenant: v.object({
495
+ id: v.pipe(v.string(), v.uuid()),
496
+ name: v.string(),
497
+ slug: v.string()
498
+ }),
499
+ type: v.picklist(['user', 'api']),
500
+ user: v.nullish(v.object({
501
+ first_name: v.nullish(v.string()),
502
+ id: v.pipe(v.string(), v.uuid()),
503
+ last_name: v.nullish(v.string())
504
+ }))
505
+ });
506
+ /**
507
+ * ConnectedAppRouteResponse
508
+ *
509
+ * Discovered route from a Connected App's .well-known/routes.json
510
+ */
511
+ export const vConnectedAppRouteResponse = v.pipe(v.object({
512
+ description: v.nullish(v.string()),
513
+ name: v.string(),
514
+ path: v.string()
515
+ }), v.readonly());
516
+ /**
517
+ * UploadLinkResponse
518
+ *
519
+ * Response containing a presigned PUT URL for uploading a file to object storage
520
+ */
521
+ export const vUploadLinkResponse = v.object({
522
+ expires_in: v.pipe(v.number(), v.integer()),
523
+ key: v.string(),
524
+ url: v.string()
525
+ });
526
+ /**
527
+ * PingResponse
528
+ *
529
+ * Health check response with version and database connectivity status
530
+ */
531
+ export const vPingResponse = v.object({
532
+ database_status: v.picklist(['connected', 'disconnected']),
533
+ status: v.picklist(['ok', 'error']),
534
+ timestamp: v.pipe(v.string(), v.isoTimestamp()),
535
+ version: v.string()
536
+ });
537
+ /**
538
+ * SNSRequest
539
+ *
540
+ * AWS SNS tool configuration for sending SMS messages via the SNS Publish API. Request
541
+ */
542
+ export const vSnsRequest = v.object({
543
+ access_key_id: v.nullish(v.string()),
544
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
545
+ assume_role_external_id: v.nullish(v.string()),
546
+ auth_method: v.picklist([
547
+ 'access_key',
548
+ 'iam_role',
549
+ 'assume_role'
550
+ ]),
551
+ endpoint_url: v.nullish(v.string()),
552
+ phone_number: v.string(),
553
+ region: v.string()
554
+ });
555
+ /**
556
+ * ToolSNSRequest
557
+ */
558
+ export const vToolSnsRequest = v.intersect([vSnsRequest, v.object({
559
+ tool_body_type: v.picklist(['sns'])
560
+ })]);
561
+ /**
562
+ * CloudWatchLogGroupRequest
563
+ *
564
+ * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling. Request
565
+ */
566
+ export const vCloudWatchLogGroupRequest = v.object({
567
+ access_key_id: v.nullish(v.string()),
568
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
569
+ assume_role_external_id: v.nullish(v.string()),
570
+ auth_method: v.picklist([
571
+ 'access_key',
572
+ 'iam_role',
573
+ 'assume_role'
574
+ ]),
575
+ endpoint_url: v.nullish(v.string()),
576
+ region: v.string()
577
+ });
578
+ /**
579
+ * ManualUploadResponse
580
+ *
581
+ * Manual upload marker tool — no configuration fields, just an identity marker for manual ingestion workflows.
582
+ */
583
+ export const vManualUploadResponse = v.pipe(v.record(v.string(), v.unknown()), v.readonly());
584
+ /**
585
+ * ToolSNSResponse
586
+ */
587
+ export const vToolSnsResponse = v.intersect([vSnsResponse, v.object({
588
+ tool_body_type: v.picklist(['sns'])
589
+ })]);
590
+ /**
591
+ * SFTPResponse
592
+ *
593
+ * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth.
594
+ */
595
+ export const vSftpResponse = v.pipe(v.object({
596
+ auth_method: v.picklist(['password', 'ssh_key']),
597
+ base_path: v.string(),
598
+ host: v.string(),
599
+ port: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535)),
600
+ user_name: v.string()
601
+ }), v.readonly());
602
+ /**
603
+ * ToolSFTPResponse
604
+ */
605
+ export const vToolSftpResponse = v.intersect([vSftpResponse, v.object({
606
+ tool_body_type: v.picklist(['sftp'])
607
+ })]);
608
+ /**
609
+ * CloudStorageAwsResponse
610
+ *
611
+ * AWS S3 cloud storage configuration supporting access key and IAM role authentication.
612
+ */
613
+ export const vCloudStorageAwsResponse = v.pipe(v.object({
614
+ access_key_id: v.nullish(v.string()),
615
+ auth_method: v.optional(v.picklist(['access_key', 'iam_role'])),
616
+ base_path: v.optional(v.string()),
617
+ bucket: v.string(),
618
+ endpoint: v.nullish(v.string()),
619
+ region: v.string()
620
+ }), v.readonly());
621
+ /**
622
+ * S3CloudStorageAwsResponse
623
+ */
624
+ export const vS3CloudStorageAwsResponse = v.intersect([vCloudStorageAwsResponse, v.object({
625
+ storage_config_type: v.picklist(['aws'])
626
+ })]);
627
+ /**
628
+ * S3Response
629
+ *
630
+ * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2).
631
+ */
632
+ export const vS3Response = v.pipe(v.object({
633
+ config: v.union([v.intersect([v.object({
634
+ storage_config_type: v.literal('aws')
635
+ }), vS3CloudStorageAwsResponse]), v.intersect([v.object({
636
+ storage_config_type: v.literal('r2')
637
+ }), vS3CloudStorageR2Response])])
638
+ }), v.readonly());
639
+ /**
640
+ * SharePointRequest
641
+ *
642
+ * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth. Request
643
+ */
644
+ export const vSharePointRequest = v.object({
645
+ auth_method: v.picklist(['client_credentials', 'managed_identity']),
646
+ client_id: v.nullish(v.string()),
647
+ drive_id: v.nullish(v.string()),
648
+ drive_path: v.nullish(v.string()),
649
+ resource_type: v.picklist([
650
+ 'site',
651
+ 'library',
652
+ 'list'
653
+ ]),
654
+ site_url: v.nullish(v.string()),
655
+ tenant_id: v.string()
656
+ });
657
+ /**
658
+ * DataSourceRequest
659
+ *
660
+ * Data source — connection to a third-party system or API Request
661
+ */
662
+ export const vDataSourceRequest = v.object({
663
+ description: v.nullish(v.string()),
664
+ id: v.optional(v.pipe(v.string(), v.uuid())),
665
+ image_url: v.nullish(v.string()),
666
+ inserted_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
667
+ is_default: v.boolean(),
668
+ name: v.string(),
669
+ status: v.picklist([
670
+ 'draft',
671
+ 'active',
672
+ 'inactive'
673
+ ]),
674
+ updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
675
+ uri: v.string()
676
+ });
677
+ /**
678
+ * CloudStorageR2Request
679
+ *
680
+ * Cloudflare R2 cloud storage configuration — S3-compatible with auto region and account-scoped endpoints. Request
681
+ */
682
+ export const vCloudStorageR2Request = v.object({
683
+ access_key_id: v.string(),
684
+ base_path: v.optional(v.string()),
685
+ bucket: v.string(),
686
+ endpoint: v.nullish(v.string()),
687
+ region: v.optional(v.string())
688
+ });
689
+ /**
690
+ * S3CloudStorageAwsRequest
691
+ */
692
+ export const vS3CloudStorageAwsRequest = v.intersect([vCloudStorageAwsRequest, v.object({
693
+ storage_config_type: v.picklist(['aws'])
694
+ })]);
695
+ /**
696
+ * ToolS3Response
697
+ */
698
+ export const vToolS3Response = v.intersect([vS3Response, v.object({
699
+ tool_body_type: v.picklist(['s3'])
700
+ })]);
701
+ /**
702
+ * DatasetSearchResponse
703
+ *
704
+ * Paginated dataset search results
705
+ */
706
+ export const vDatasetSearchResponse = v.object({
707
+ data: v.array(v.record(v.string(), v.unknown())),
708
+ meta: vPaginationMeta
709
+ });
710
+ /**
711
+ * ConnectedAppUrlResponse
712
+ *
713
+ * URL entry for a Connected App
714
+ */
715
+ export const vConnectedAppUrlResponse = v.pipe(v.object({
716
+ is_primary: v.optional(v.boolean()),
717
+ label: v.nullish(v.string()),
718
+ url: v.string()
719
+ }), v.readonly());
720
+ /**
721
+ * ToolCloudWatchLogGroupRequest
722
+ */
723
+ export const vToolCloudWatchLogGroupRequest = v.intersect([vCloudWatchLogGroupRequest, v.object({
724
+ tool_body_type: v.picklist(['cloud_watch_log_group'])
725
+ })]);
726
+ /**
727
+ * ToolSQLDatabaseResponse
728
+ */
729
+ export const vToolSqlDatabaseResponse = v.intersect([vSqlDatabaseResponse, v.object({
730
+ tool_body_type: v.picklist(['sql_database'])
731
+ })]);
732
+ /**
733
+ * ActionStatusUpdaterCloudWatchQueryResponse
734
+ */
735
+ export const vActionStatusUpdaterCloudWatchQueryResponse = v.intersect([vCloudWatchQueryResponse, v.object({
736
+ updater_body_type: v.picklist(['cloud_watch_request'])
737
+ })]);
738
+ /**
739
+ * ToolSFTPRequest
740
+ */
741
+ export const vToolSftpRequest = v.intersect([vSftpRequest, v.object({
742
+ tool_body_type: v.picklist(['sftp'])
743
+ })]);
744
+ /**
745
+ * UpdatePageResponse
746
+ *
747
+ * Confirmation of message tracking update
748
+ */
749
+ export const vUpdatePageResponse = v.object({
750
+ message: v.object({
751
+ form_submitted_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
752
+ id: v.pipe(v.string(), v.uuid()),
753
+ opened_at: v.nullish(v.pipe(v.string(), v.isoTimestamp()))
754
+ })
755
+ });
756
+ /**
757
+ * GenericTableRequest
758
+ *
759
+ * Generic Table — custom or system dataset table with column definitions. Request
760
+ */
761
+ export const vGenericTableRequest = v.object({
762
+ columns: v.optional(v.array(v.unknown())),
763
+ data_domain: v.optional(v.picklist([
764
+ 'healthcare',
765
+ 'core_banking',
766
+ 'payment_risk',
767
+ 'accounts_receivable',
768
+ 'service_commerce',
769
+ 'trading'
770
+ ])),
771
+ description: v.optional(v.string()),
772
+ title: v.optional(v.string())
773
+ });
774
+ /**
775
+ * SessionRequest
776
+ *
777
+ * Exchange user credentials for a Bearer session token.
778
+ * For M2M authentication, use `X-API-Key` header directly instead.
779
+ *
780
+ */
781
+ export const vSessionRequest = v.object({
782
+ email: v.pipe(v.string(), v.email()),
783
+ expires_in: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(60), v.maxValue(2592000))),
784
+ password: v.pipe(v.string(), v.minLength(1)),
785
+ tenant_slug: v.string()
786
+ });
787
+ /**
788
+ * GenericTableListResponse
789
+ *
790
+ * Paginated list of generic tables
791
+ */
792
+ export const vGenericTableListResponse = v.object({
793
+ data: v.array(vGenericTableResponse),
794
+ meta: vPaginationMeta
795
+ });
796
+ /**
797
+ * ToolSQLDatabaseRequest
798
+ */
799
+ export const vToolSqlDatabaseRequest = v.intersect([vSqlDatabaseRequest, v.object({
800
+ tool_body_type: v.picklist(['sql_database'])
801
+ })]);
802
+ /**
803
+ * S3CloudStorageR2Request
804
+ */
805
+ export const vS3CloudStorageR2Request = v.intersect([vCloudStorageR2Request, v.object({
806
+ storage_config_type: v.picklist(['r2'])
807
+ })]);
808
+ /**
809
+ * ConnectedAppListResponse
810
+ *
811
+ * Paginated list of connected apps
812
+ */
813
+ export const vConnectedAppListResponse = v.object({
814
+ data: v.array(vConnectedAppResponse),
815
+ meta: vPaginationMeta
816
+ });
817
+ /**
818
+ * EmailRequest
819
+ *
820
+ * Email tool configuration — SES, Mailgun, SendGrid, or SMTP provider plus base Liquid templates. Request
821
+ */
822
+ export const vEmailRequest = v.object({
823
+ access_key_id: v.optional(v.string()),
824
+ domain: v.optional(v.string()),
825
+ from_email: v.pipe(v.string(), v.email()),
826
+ from_name: v.nullish(v.string()),
827
+ provider: v.picklist([
828
+ 'ses',
829
+ 'mailgun',
830
+ 'sendgrid',
831
+ 'smtp'
832
+ ]),
833
+ region: v.optional(v.string()),
834
+ reply_to: v.nullish(v.string()),
835
+ smtp_host: v.optional(v.string()),
836
+ smtp_port: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
837
+ smtp_username: v.optional(v.string())
838
+ });
839
+ /**
840
+ * ToolEmailRequest
841
+ */
842
+ export const vToolEmailRequest = v.intersect([vEmailRequest, v.object({
843
+ tool_body_type: v.picklist(['email'])
844
+ })]);
845
+ /**
846
+ * RESTAPIResponse
847
+ *
848
+ * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates.
849
+ */
850
+ export const vRestapiResponse = v.pipe(v.object({
851
+ api_key_location: v.optional(v.picklist(['header', 'query'])),
852
+ api_key_name: v.nullish(v.string()),
853
+ auth_method: v.picklist([
854
+ 'none',
855
+ 'api_key',
856
+ 'basic',
857
+ 'bearer',
858
+ 'oauth2',
859
+ 'oidc'
860
+ ]),
861
+ base_url: v.string(),
862
+ oauth2_client_id: v.nullish(v.string()),
863
+ oauth2_grant_type: v.optional(v.picklist(['client_credentials', 'authorization_code'])),
864
+ oauth2_scope: v.nullish(v.string()),
865
+ oauth2_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
866
+ oauth2_token_url: v.nullish(v.string()),
867
+ oidc_client_id: v.nullish(v.string()),
868
+ oidc_issuer_url: v.nullish(v.string()),
869
+ oidc_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
870
+ request_type: v.picklist([
871
+ 'json',
872
+ 'xml',
873
+ 'form_urlencoded',
874
+ 'multipart_form'
875
+ ]),
876
+ response_type: v.picklist([
877
+ 'json',
878
+ 'xml',
879
+ 'text',
880
+ 'binary'
881
+ ]),
882
+ timeout_ms: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(300000)),
883
+ username: v.nullish(v.string())
884
+ }), v.readonly());
885
+ /**
886
+ * ToolRESTAPIResponse
887
+ */
888
+ export const vToolRestapiResponse = v.intersect([vRestapiResponse, v.object({
889
+ tool_body_type: v.picklist(['rest_api'])
890
+ })]);
891
+ /**
892
+ * SharePointResponse
893
+ *
894
+ * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth.
895
+ */
896
+ export const vSharePointResponse = v.pipe(v.object({
897
+ auth_method: v.picklist(['client_credentials', 'managed_identity']),
898
+ client_id: v.nullish(v.string()),
899
+ drive_id: v.nullish(v.string()),
900
+ drive_path: v.nullish(v.string()),
901
+ resource_type: v.picklist([
902
+ 'site',
903
+ 'library',
904
+ 'list'
905
+ ]),
906
+ site_url: v.nullish(v.string()),
907
+ tenant_id: v.string()
908
+ }), v.readonly());
909
+ /**
910
+ * ToolSharePointResponse
911
+ */
912
+ export const vToolSharePointResponse = v.intersect([vSharePointResponse, v.object({
913
+ tool_body_type: v.picklist(['sharepoint'])
914
+ })]);
915
+ /**
916
+ * UploadLinkRequest
917
+ *
918
+ * Request body for creating a presigned upload link for bulk ingest
919
+ */
920
+ export const vUploadLinkRequest = v.object({
921
+ content_type: v.picklist(['application/x-ndjson', 'text/csv']),
922
+ filename: v.pipe(v.string(), v.minLength(1), v.maxLength(255))
923
+ });
924
+ /**
925
+ * AiAgentRequest
926
+ *
927
+ * AI Agent configuration — reusable chat-completion resource Request
928
+ */
929
+ export const vAiAgentRequest = v.object({
930
+ data_access: v.picklist(['regulated', 'unregulated']),
931
+ description: v.nullish(v.string()),
932
+ enabled: v.boolean(),
933
+ id: v.optional(v.pipe(v.string(), v.uuid())),
934
+ inserted_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
935
+ max_tokens: v.pipe(v.number(), v.integer()),
936
+ model: v.string(),
937
+ name: v.string(),
938
+ slug: v.optional(v.string()),
939
+ temperature: v.number(),
940
+ tool_id: v.pipe(v.string(), v.uuid()),
941
+ updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
942
+ });
943
+ /**
944
+ * RESTCallResponse
945
+ *
946
+ * REST API call descriptor — HTTP method, path, body, params, and pagination context template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion. Title is RESTCall (not RESTAPIRequest) to avoid double-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterRESTCallRequest).
947
+ */
948
+ export const vRestCallResponse = v.pipe(v.object({
949
+ method: v.picklist([
950
+ 'head',
951
+ 'get',
952
+ 'put',
953
+ 'post',
954
+ 'delete',
955
+ 'patch'
956
+ ])
957
+ }), v.readonly());
958
+ /**
959
+ * ActionStatusUpdaterRESTCallResponse
960
+ */
961
+ export const vActionStatusUpdaterRestCallResponse = v.intersect([vRestCallResponse, v.object({
962
+ updater_body_type: v.picklist(['restapi_request'])
963
+ })]);
964
+ /**
965
+ * ResolvePageRequest
966
+ *
967
+ * Request body for resolving a connected app page from a short URL token
968
+ */
969
+ export const vResolvePageRequest = v.object({
970
+ country: v.optional(v.string()),
971
+ ip: v.optional(v.string()),
972
+ metadata: v.optional(v.record(v.string(), v.unknown())),
973
+ short_path: v.string(),
974
+ user_agent: v.optional(v.string())
975
+ });
976
+ /**
977
+ * MDMVerified
978
+ */
979
+ export const vMdmVerified = v.object({
980
+ status: v.picklist(['verified']),
981
+ subject_id: v.pipe(v.string(), v.uuid()),
982
+ verified_at: v.pipe(v.string(), v.isoTimestamp())
983
+ });
984
+ /**
985
+ * ToolSQSRequest
986
+ */
987
+ export const vToolSqsRequest = v.intersect([vSqsRequest, v.object({
988
+ tool_body_type: v.picklist(['sqs'])
989
+ })]);
990
+ /**
991
+ * AWSLambdaRequest
992
+ *
993
+ * AWS Lambda tool configuration supporting managed (CloudFormation-deployed) and external (user-provided ARN) modes. Request
994
+ */
995
+ export const vAwsLambdaRequest = v.object({
996
+ access_key_id: v.nullish(v.string()),
997
+ auth_method: v.optional(v.picklist([
998
+ 'access_key',
999
+ 'iam_role',
1000
+ 'cloudformation'
1001
+ ])),
1002
+ env_vars: v.optional(v.array(v.unknown())),
1003
+ function_arn: v.nullish(v.string()),
1004
+ secrets: v.optional(v.array(v.unknown())),
1005
+ ssm_config_key: v.nullish(v.string()),
1006
+ type: v.picklist(['managed', 'external'])
1007
+ });
1008
+ /**
1009
+ * ToolAWSLambdaRequest
1010
+ */
1011
+ export const vToolAwsLambdaRequest = v.intersect([vAwsLambdaRequest, v.object({
1012
+ tool_body_type: v.picklist(['aws_lambda'])
1013
+ })]);
1014
+ /**
1015
+ * ToolRequest
1016
+ *
1017
+ * Tool — a configurable capability reference for external services. Request
1018
+ */
1019
+ export const vToolRequest = v.object({
1020
+ data_source_id: v.nullish(v.pipe(v.string(), v.uuid())),
1021
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
1022
+ description: v.nullish(v.string()),
1023
+ intent: v.optional(v.picklist([
1024
+ 'sms',
1025
+ 'email',
1026
+ 'export',
1027
+ 'voice',
1028
+ 'data_exchange',
1029
+ 'status_poller',
1030
+ 'chat_completion',
1031
+ 'context_extraction'
1032
+ ])),
1033
+ name: v.optional(v.string()),
1034
+ status: v.optional(v.picklist([
1035
+ 'draft',
1036
+ 'active',
1037
+ 'inactive',
1038
+ 'error',
1039
+ 'marked_for_deletion'
1040
+ ]))
1041
+ });
1042
+ /**
1043
+ * UpdatePageRequest
1044
+ *
1045
+ * Request body for updating message tracking fields on a resolved page
1046
+ */
1047
+ export const vUpdatePageRequest = v.object({
1048
+ form_submitted_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1049
+ opened_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1050
+ short_path: v.string()
1051
+ });
1052
+ /**
1053
+ * ToolManualUploadResponse
1054
+ */
1055
+ export const vToolManualUploadResponse = v.intersect([vManualUploadResponse, v.object({
1056
+ tool_body_type: v.picklist(['manual_upload'])
1057
+ })]);
1058
+ /**
1059
+ * ChangesetErrors
1060
+ *
1061
+ * Validation error response in JSON:API format (from OpenApiSpex v2)
1062
+ */
1063
+ export const vChangesetErrors = v.object({
1064
+ errors: v.optional(v.array(v.object({
1065
+ detail: v.optional(v.string()),
1066
+ source: v.optional(v.object({
1067
+ pointer: v.optional(v.string())
1068
+ })),
1069
+ title: v.optional(v.string())
1070
+ })))
1071
+ });
1072
+ /**
1073
+ * ToolSharePointRequest
1074
+ */
1075
+ export const vToolSharePointRequest = v.intersect([vSharePointRequest, v.object({
1076
+ tool_body_type: v.picklist(['sharepoint'])
1077
+ })]);
1078
+ /**
1079
+ * MDMVerifyRequest
1080
+ *
1081
+ * Request body for MDM subject identity verification
1082
+ */
1083
+ export const vMdmVerifyRequest = v.object({
1084
+ birth_date: v.optional(v.pipe(v.string(), v.isoDate())),
1085
+ family_name: v.optional(v.string()),
1086
+ given_name: v.optional(v.string()),
1087
+ identifiers: v.optional(v.array(v.object({
1088
+ system: v.string(),
1089
+ value: v.string()
1090
+ }))),
1091
+ subject_id: v.pipe(v.string(), v.uuid())
1092
+ });
1093
+ /**
1094
+ * ResolvePageResponse
1095
+ *
1096
+ * Resolved page token details for the connected app to render
1097
+ */
1098
+ export const vResolvePageResponse = v.object({
1099
+ additional_context: v.nullish(v.record(v.string(), v.unknown())),
1100
+ expires_at: v.pipe(v.string(), v.isoTimestamp()),
1101
+ message: v.nullish(v.object({
1102
+ body: v.nullish(v.string()),
1103
+ channel: v.picklist([
1104
+ 'sms',
1105
+ 'email',
1106
+ 'voice',
1107
+ 'web_form',
1108
+ 'push'
1109
+ ]),
1110
+ delivered_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1111
+ external_id: v.nullish(v.string()),
1112
+ failure_reason: v.nullish(v.string()),
1113
+ form_submitted_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1114
+ id: v.pipe(v.string(), v.uuid()),
1115
+ metadata: v.nullish(v.record(v.string(), v.unknown())),
1116
+ opened_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1117
+ queued_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1118
+ read_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1119
+ sent_at: v.nullish(v.pipe(v.string(), v.isoTimestamp())),
1120
+ sms_carrier: v.nullish(v.string()),
1121
+ status: v.picklist([
1122
+ 'pending',
1123
+ 'queued',
1124
+ 'sent',
1125
+ 'delivered',
1126
+ 'failed',
1127
+ 'received',
1128
+ 'clicked'
1129
+ ]),
1130
+ subject: v.nullish(v.string())
1131
+ })),
1132
+ route_path: v.string(),
1133
+ subject_id: v.pipe(v.string(), v.uuid()),
1134
+ url_hash: v.string(),
1135
+ user_agent: v.nullish(v.string())
1136
+ });
1137
+ /**
1138
+ * ErrorResponse
1139
+ *
1140
+ * Error response
1141
+ */
1142
+ export const vErrorResponse = v.object({
1143
+ errors: v.optional(v.object({}))
1144
+ });
1145
+ /**
1146
+ * MDMNotVerified
1147
+ */
1148
+ export const vMdmNotVerified = v.object({
1149
+ errors: v.record(v.string(), v.array(v.string())),
1150
+ status: v.picklist(['not_verified']),
1151
+ subject_id: v.pipe(v.string(), v.uuid()),
1152
+ verified_at: v.pipe(v.string(), v.isoTimestamp())
1153
+ });
1154
+ /**
1155
+ * ExecuteActionRequest
1156
+ *
1157
+ * Request body for executing a workflow action for a dataset record
1158
+ */
1159
+ export const vExecuteActionRequest = v.object({
1160
+ dataset_id: v.pipe(v.string(), v.uuid()),
1161
+ decision_key: v.string(),
1162
+ mode: v.optional(v.picklist(['live', 'dry_run']))
1163
+ });
1164
+ /**
1165
+ * AWSLambdaResponse
1166
+ *
1167
+ * AWS Lambda tool configuration supporting managed (CloudFormation-deployed) and external (user-provided ARN) modes.
1168
+ */
1169
+ export const vAwsLambdaResponse = v.pipe(v.object({
1170
+ access_key_id: v.nullish(v.string()),
1171
+ auth_method: v.optional(v.picklist([
1172
+ 'access_key',
1173
+ 'iam_role',
1174
+ 'cloudformation'
1175
+ ])),
1176
+ env_vars: v.optional(v.array(v.unknown())),
1177
+ error: v.nullish(v.pipe(v.string(), v.readonly())),
1178
+ function_arn: v.nullish(v.string()),
1179
+ secrets: v.optional(v.array(v.unknown())),
1180
+ secrets_manager_secret_arn: v.nullish(v.pipe(v.string(), v.readonly())),
1181
+ ssm_config_key: v.nullish(v.string()),
1182
+ stack_id: v.nullish(v.pipe(v.string(), v.readonly())),
1183
+ stack_name: v.nullish(v.pipe(v.string(), v.readonly())),
1184
+ stack_status: v.optional(v.picklist([
1185
+ 'create_in_progress',
1186
+ 'create_complete',
1187
+ 'create_failed',
1188
+ 'rollback_in_progress',
1189
+ 'rollback_complete',
1190
+ 'rollback_failed',
1191
+ 'delete_in_progress',
1192
+ 'delete_complete',
1193
+ 'delete_failed',
1194
+ 'update_in_progress',
1195
+ 'update_complete',
1196
+ 'update_failed',
1197
+ 'update_rollback_complete',
1198
+ 'update_rollback_failed'
1199
+ ])),
1200
+ type: v.picklist(['managed', 'external'])
1201
+ }), v.readonly());
1202
+ /**
1203
+ * ToolAWSLambdaResponse
1204
+ */
1205
+ export const vToolAwsLambdaResponse = v.intersect([vAwsLambdaResponse, v.object({
1206
+ tool_body_type: v.picklist(['aws_lambda'])
1207
+ })]);
1208
+ /**
1209
+ * IngestRequest
1210
+ *
1211
+ * Request body for data ingestion
1212
+ */
1213
+ export const vIngestRequest = v.object({
1214
+ data: v.record(v.string(), v.unknown())
1215
+ });
1216
+ /**
1217
+ * ActionStatusUpdaterResponse
1218
+ *
1219
+ * Action Status Updater — automated polling for delivery status updates.
1220
+ */
1221
+ export const vActionStatusUpdaterResponse = v.pipe(v.object({
1222
+ cron_expression: v.optional(v.string()),
1223
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
1224
+ id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
1225
+ inserted_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
1226
+ name: v.optional(v.string()),
1227
+ sender_tool_ids: v.nullish(v.array(v.pipe(v.string(), v.uuid()))),
1228
+ tenant_id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
1229
+ updated_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
1230
+ updater_body: v.optional(v.union([v.intersect([v.object({
1231
+ updater_body_type: v.literal('cloud_watch_request')
1232
+ }), vActionStatusUpdaterCloudWatchQueryResponse]), v.intersect([v.object({
1233
+ updater_body_type: v.literal('restapi_request')
1234
+ }), vActionStatusUpdaterRestCallResponse])])),
1235
+ updater_tool_id: v.optional(v.pipe(v.string(), v.uuid())),
1236
+ updater_type: v.optional(v.picklist(['cloud_watch', 'restapi']))
1237
+ }), v.readonly());
1238
+ /**
1239
+ * ActionStatusUpdaterListResponse
1240
+ *
1241
+ * Paginated list of action status updaters
1242
+ */
1243
+ export const vActionStatusUpdaterListResponse = v.object({
1244
+ data: v.array(vActionStatusUpdaterResponse),
1245
+ meta: vPaginationMeta
1246
+ });
1247
+ /**
1248
+ * TenantResponse
1249
+ *
1250
+ * Lean tenant reference — id, slug, and name only
1251
+ */
1252
+ export const vTenantResponse = v.pipe(v.object({
1253
+ id: v.pipe(v.pipe(v.string(), v.uuid()), v.readonly()),
1254
+ name: v.pipe(v.string(), v.readonly()),
1255
+ slug: v.pipe(v.string(), v.readonly())
1256
+ }), v.readonly());
1257
+ /**
1258
+ * DatalakeResponse
1259
+ *
1260
+ * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses.
1261
+ */
1262
+ export const vDatalakeResponse = v.pipe(v.object({
1263
+ data_domain: v.picklist([
1264
+ 'healthcare',
1265
+ 'core_banking',
1266
+ 'payment_risk',
1267
+ 'accounts_receivable',
1268
+ 'service_commerce',
1269
+ 'trading'
1270
+ ]),
1271
+ timezone: v.nullable(v.string()),
1272
+ regulated_data_db_reader_auth_method: v.picklist(['password', 'iam_role']),
1273
+ regulated_data_db_writer_host: v.string(),
1274
+ inserted_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
1275
+ regulated_data_db_writer_auth_method: v.picklist(['password', 'iam_role']),
1276
+ regulated_data_db_writer_schema: v.string(),
1277
+ regulated_data_db_writer_enable_ssl: v.boolean(),
1278
+ unregulated_db_reader_schema: v.string(),
1279
+ unregulated_db_writer_enable_ssl: v.boolean(),
1280
+ unregulated_db_writer_port: v.pipe(v.number(), v.integer()),
1281
+ regulated_data_db_writer_port: v.pipe(v.number(), v.integer()),
1282
+ unregulated_db_reader_enable_ssl: v.boolean(),
1283
+ regulated_data_db_reader_enable_ssl: v.boolean(),
1284
+ unregulated_db_reader_host: v.string(),
1285
+ unregulated_db_reader_port: v.pipe(v.number(), v.integer()),
1286
+ status: v.optional(v.picklist([
1287
+ 'new',
1288
+ 'processing',
1289
+ 'ready'
1290
+ ])),
1291
+ updated_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
1292
+ pool_size: v.nullable(v.pipe(v.number(), v.integer())),
1293
+ description: v.nullish(v.string()),
1294
+ name: v.string(),
1295
+ id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
1296
+ tenant: v.optional(vTenantResponse),
1297
+ unregulated_db_writer_auth_method: v.picklist(['password', 'iam_role']),
1298
+ unregulated_db_reader_name: v.string(),
1299
+ regulated_data_db_writer_name: v.string(),
1300
+ unregulated_db_writer_host: v.string(),
1301
+ regulated_data_db_reader_schema: v.string(),
1302
+ unregulated_db_writer_name: v.string(),
1303
+ unregulated_db_writer_schema: v.string(),
1304
+ regulated_data_db_reader_port: v.pipe(v.number(), v.integer()),
1305
+ regulated_data_db_reader_name: v.string(),
1306
+ regulated_data_db_reader_host: v.string(),
1307
+ unregulated_db_reader_auth_method: v.picklist(['password', 'iam_role']),
1308
+ slug: v.optional(v.string())
1309
+ }), v.readonly());
1310
+ /**
1311
+ * DataSourceResponse
1312
+ *
1313
+ * Data source — connection to a third-party system or API
1314
+ */
1315
+ export const vDataSourceResponse = v.pipe(v.object({
1316
+ datalake: v.optional(vDatalakeResponse),
1317
+ description: v.nullish(v.string()),
1318
+ id: v.optional(v.pipe(v.string(), v.uuid())),
1319
+ image_url: v.nullish(v.string()),
1320
+ inserted_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
1321
+ is_default: v.boolean(),
1322
+ name: v.string(),
1323
+ status: v.picklist([
1324
+ 'draft',
1325
+ 'active',
1326
+ 'inactive'
1327
+ ]),
1328
+ updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
1329
+ uri: v.string()
1330
+ }), v.readonly());
1331
+ /**
1332
+ * DatalakeListResponse
1333
+ *
1334
+ * Paginated list of datalakes
1335
+ */
1336
+ export const vDatalakeListResponse = v.object({
1337
+ data: v.array(vDatalakeResponse),
1338
+ meta: vPaginationMeta
1339
+ });
1340
+ /**
1341
+ * DataSourceListResponse
1342
+ *
1343
+ * Paginated list of data sources
1344
+ */
1345
+ export const vDataSourceListResponse = v.object({
1346
+ data: v.array(vDataSourceResponse),
1347
+ meta: vPaginationMeta
1348
+ });
1349
+ /**
1350
+ * CloudflarePagesConfigResponse
1351
+ *
1352
+ * Cloudflare Pages deployment configuration for managed Connected Apps
1353
+ */
1354
+ export const vCloudflarePagesConfigResponse = v.pipe(v.object({
1355
+ account_id: v.string(),
1356
+ build_command: v.nullish(v.string()),
1357
+ destination_dir: v.nullish(v.string()),
1358
+ github_auth_method: v.picklist(['github_app', 'pat']),
1359
+ production_branch: v.nullish(v.string()),
1360
+ project_name: v.nullish(v.pipe(v.string(), v.readonly()))
1361
+ }), v.readonly());
1362
+ /**
1363
+ * CloudWatchLogGroupResponse
1364
+ *
1365
+ * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling.
1366
+ */
1367
+ export const vCloudWatchLogGroupResponse = v.pipe(v.object({
1368
+ access_key_id: v.nullish(v.string()),
1369
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
1370
+ assume_role_external_id: v.nullish(v.string()),
1371
+ auth_method: v.picklist([
1372
+ 'access_key',
1373
+ 'iam_role',
1374
+ 'assume_role'
1375
+ ]),
1376
+ endpoint_url: v.nullish(v.string()),
1377
+ region: v.string()
1378
+ }), v.readonly());
1379
+ /**
1380
+ * ToolCloudWatchLogGroupResponse
1381
+ */
1382
+ export const vToolCloudWatchLogGroupResponse = v.intersect([vCloudWatchLogGroupResponse, v.object({
1383
+ tool_body_type: v.picklist(['cloud_watch_log_group'])
1384
+ })]);
1385
+ /**
1386
+ * ToolResponse
1387
+ *
1388
+ * Tool — a configurable capability reference for external services.
1389
+ */
1390
+ export const vToolResponse = v.pipe(v.object({
1391
+ body: v.optional(v.union([
1392
+ v.intersect([v.object({
1393
+ tool_body_type: v.literal('email')
1394
+ }), vToolEmailResponse]),
1395
+ v.intersect([v.object({
1396
+ tool_body_type: v.literal('sns')
1397
+ }), vToolSnsResponse]),
1398
+ v.intersect([v.object({
1399
+ tool_body_type: v.literal('rest_api')
1400
+ }), vToolRestapiResponse]),
1401
+ v.intersect([v.object({
1402
+ tool_body_type: v.literal('s3')
1403
+ }), vToolS3Response]),
1404
+ v.intersect([v.object({
1405
+ tool_body_type: v.literal('aws_lambda')
1406
+ }), vToolAwsLambdaResponse]),
1407
+ v.intersect([v.object({
1408
+ tool_body_type: v.literal('sql_database')
1409
+ }), vToolSqlDatabaseResponse]),
1410
+ v.intersect([v.object({
1411
+ tool_body_type: v.literal('sqs')
1412
+ }), vToolSqsResponse]),
1413
+ v.intersect([v.object({
1414
+ tool_body_type: v.literal('sftp')
1415
+ }), vToolSftpResponse]),
1416
+ v.intersect([v.object({
1417
+ tool_body_type: v.literal('sharepoint')
1418
+ }), vToolSharePointResponse]),
1419
+ v.intersect([v.object({
1420
+ tool_body_type: v.literal('cloud_watch_log_group')
1421
+ }), vToolCloudWatchLogGroupResponse]),
1422
+ v.intersect([v.object({
1423
+ tool_body_type: v.literal('manual_upload')
1424
+ }), vToolManualUploadResponse])
1425
+ ])),
1426
+ data_source_id: v.nullish(v.pipe(v.string(), v.uuid())),
1427
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
1428
+ description: v.nullish(v.string()),
1429
+ id: v.optional(v.pipe(v.pipe(v.string(), v.uuid()), v.readonly())),
1430
+ inserted_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly())),
1431
+ intent: v.optional(v.picklist([
1432
+ 'sms',
1433
+ 'email',
1434
+ 'export',
1435
+ 'voice',
1436
+ 'data_exchange',
1437
+ 'status_poller',
1438
+ 'chat_completion',
1439
+ 'context_extraction'
1440
+ ])),
1441
+ name: v.optional(v.string()),
1442
+ status: v.optional(v.picklist([
1443
+ 'draft',
1444
+ 'active',
1445
+ 'inactive',
1446
+ 'error',
1447
+ 'marked_for_deletion'
1448
+ ])),
1449
+ updated_at: v.optional(v.pipe(v.pipe(v.string(), v.isoTimestamp()), v.readonly()))
1450
+ }), v.readonly());
1451
+ /**
1452
+ * AiAgentResponse
1453
+ *
1454
+ * AI Agent configuration — reusable chat-completion resource
1455
+ */
1456
+ export const vAiAgentResponse = v.pipe(v.object({
1457
+ data_access: v.picklist(['regulated', 'unregulated']),
1458
+ datalake: v.optional(vDatalakeResponse),
1459
+ description: v.nullish(v.string()),
1460
+ enabled: v.boolean(),
1461
+ id: v.optional(v.pipe(v.string(), v.uuid())),
1462
+ inserted_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
1463
+ max_tokens: v.pipe(v.number(), v.integer()),
1464
+ model: v.string(),
1465
+ name: v.string(),
1466
+ slug: v.optional(v.string()),
1467
+ temperature: v.number(),
1468
+ tenant: v.optional(vTenantResponse),
1469
+ tool: v.optional(vToolResponse),
1470
+ tool_id: v.pipe(v.string(), v.uuid()),
1471
+ updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
1472
+ }), v.readonly());
1473
+ /**
1474
+ * AiAgentListResponse
1475
+ *
1476
+ * Paginated list of AI agents
1477
+ */
1478
+ export const vAiAgentListResponse = v.object({
1479
+ data: v.array(vAiAgentResponse),
1480
+ meta: vPaginationMeta
1481
+ });
1482
+ /**
1483
+ * ToolListResponse
1484
+ *
1485
+ * Paginated list of tools
1486
+ */
1487
+ export const vToolListResponse = v.object({
1488
+ data: v.array(vToolResponse),
1489
+ meta: vPaginationMeta
1490
+ });
1491
+ /**
1492
+ * ToolRESTAPIRequest
1493
+ */
1494
+ export const vToolRestapiRequest = v.intersect([vRestapiRequest, v.object({
1495
+ tool_body_type: v.picklist(['rest_api'])
1496
+ })]);
1497
+ /**
1498
+ * DatalakeRequest
1499
+ *
1500
+ * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses. Request
1501
+ */
1502
+ export const vDatalakeRequest = v.object({
1503
+ data_domain: v.picklist([
1504
+ 'healthcare',
1505
+ 'core_banking',
1506
+ 'payment_risk',
1507
+ 'accounts_receivable',
1508
+ 'service_commerce',
1509
+ 'trading'
1510
+ ]),
1511
+ timezone: v.nullable(v.string()),
1512
+ regulated_data_db_reader_auth_method: v.picklist(['password', 'iam_role']),
1513
+ regulated_data_db_writer_host: v.string(),
1514
+ regulated_data_db_writer_auth_method: v.picklist(['password', 'iam_role']),
1515
+ regulated_data_db_writer_schema: v.string(),
1516
+ regulated_data_db_writer_enable_ssl: v.boolean(),
1517
+ unregulated_db_reader_schema: v.string(),
1518
+ unregulated_db_writer_enable_ssl: v.boolean(),
1519
+ unregulated_db_writer_port: v.pipe(v.number(), v.integer()),
1520
+ regulated_data_db_writer_port: v.pipe(v.number(), v.integer()),
1521
+ unregulated_db_reader_enable_ssl: v.boolean(),
1522
+ regulated_data_db_reader_enable_ssl: v.boolean(),
1523
+ unregulated_db_reader_host: v.string(),
1524
+ unregulated_db_reader_port: v.pipe(v.number(), v.integer()),
1525
+ pool_size: v.nullable(v.pipe(v.number(), v.integer())),
1526
+ description: v.nullish(v.string()),
1527
+ name: v.string(),
1528
+ unregulated_db_writer_auth_method: v.picklist(['password', 'iam_role']),
1529
+ unregulated_db_reader_name: v.string(),
1530
+ regulated_data_db_writer_name: v.string(),
1531
+ unregulated_db_writer_host: v.string(),
1532
+ regulated_data_db_reader_schema: v.string(),
1533
+ unregulated_db_writer_name: v.string(),
1534
+ unregulated_db_writer_schema: v.string(),
1535
+ regulated_data_db_reader_port: v.pipe(v.number(), v.integer()),
1536
+ regulated_data_db_reader_name: v.string(),
1537
+ regulated_data_db_reader_host: v.string(),
1538
+ unregulated_db_reader_auth_method: v.picklist(['password', 'iam_role']),
1539
+ slug: v.optional(v.string())
1540
+ });
1541
+ /**
1542
+ * ManualUploadRequest
1543
+ *
1544
+ * Manual upload marker tool — no configuration fields, just an identity marker for manual ingestion workflows. Request
1545
+ */
1546
+ export const vManualUploadRequest = v.record(v.string(), v.unknown());
1547
+ /**
1548
+ * ToolManualUploadRequest
1549
+ */
1550
+ export const vToolManualUploadRequest = v.intersect([vManualUploadRequest, v.object({
1551
+ tool_body_type: v.picklist(['manual_upload'])
1552
+ })]);
1553
+ /**
1554
+ * SQLDatabaseRequest
1555
+ *
1556
+ * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake). Request
1557
+ */
1558
+ export const vSqlDatabaseRequestWritable = v.object({
1559
+ db_host: v.string(),
1560
+ db_name: v.string(),
1561
+ db_type: v.picklist([
1562
+ 'postgres',
1563
+ 'mysql',
1564
+ 'mssql',
1565
+ 'sqlite',
1566
+ 'snowflake'
1567
+ ]),
1568
+ password: v.string(),
1569
+ pool_size: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(99))),
1570
+ port: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
1571
+ ssl: v.nullish(v.boolean()),
1572
+ ssl_mode: v.nullish(v.string()),
1573
+ user_name: v.string()
1574
+ });
1575
+ /**
1576
+ * ConnectedAppRequest
1577
+ *
1578
+ * External web application connected to the platform via M2M API key Request
1579
+ */
1580
+ export const vConnectedAppRequestWritable = v.object({
1581
+ cloudflare_pages_config: v.nullish(v.object({
1582
+ account_id: v.string(),
1583
+ api_token: v.optional(v.string()),
1584
+ build_command: v.nullish(v.string()),
1585
+ destination_dir: v.nullish(v.string()),
1586
+ github_auth_method: v.optional(v.picklist(['github_app', 'pat'])),
1587
+ github_pat: v.nullish(v.string()),
1588
+ production_branch: v.nullish(v.string())
1589
+ })),
1590
+ description: v.nullish(v.string()),
1591
+ mode: v.picklist(['managed', 'self_hosted']),
1592
+ name: v.string(),
1593
+ repo_url: v.nullish(v.string()),
1594
+ urls: v.optional(v.array(v.object({
1595
+ is_primary: v.optional(v.boolean()),
1596
+ label: v.nullish(v.string()),
1597
+ url: v.string()
1598
+ })))
1599
+ });
1600
+ /**
1601
+ * ConnectedAppResponse
1602
+ *
1603
+ * External web application connected to the platform via M2M API key
1604
+ */
1605
+ export const vConnectedAppResponseWritable = v.pipe(v.object({
1606
+ cloudflare_pages_config: v.nullish(v.object({
1607
+ account_id: v.string(),
1608
+ api_token: v.optional(v.string()),
1609
+ build_command: v.nullish(v.string()),
1610
+ destination_dir: v.nullish(v.string()),
1611
+ github_auth_method: v.optional(v.picklist(['github_app', 'pat'])),
1612
+ github_pat: v.nullish(v.string()),
1613
+ production_branch: v.nullish(v.string())
1614
+ })),
1615
+ description: v.nullish(v.string()),
1616
+ mode: v.picklist(['managed', 'self_hosted']),
1617
+ name: v.string(),
1618
+ repo_url: v.nullish(v.string()),
1619
+ urls: v.optional(v.array(v.object({
1620
+ is_primary: v.optional(v.boolean()),
1621
+ label: v.nullish(v.string()),
1622
+ url: v.string()
1623
+ })))
1624
+ }), v.readonly());
1625
+ /**
1626
+ * CloudflarePagesConfigRequest
1627
+ *
1628
+ * Cloudflare Pages deployment configuration for managed Connected Apps Request
1629
+ */
1630
+ export const vCloudflarePagesConfigRequestWritable = v.object({
1631
+ account_id: v.string(),
1632
+ api_token: v.string(),
1633
+ build_command: v.nullish(v.string()),
1634
+ destination_dir: v.nullish(v.string()),
1635
+ github_auth_method: v.picklist(['github_app', 'pat']),
1636
+ github_pat: v.nullish(v.string()),
1637
+ production_branch: v.nullish(v.string())
1638
+ });
1639
+ /**
1640
+ * GenericTableResponse
1641
+ *
1642
+ * Generic Table — custom or system dataset table with column definitions.
1643
+ */
1644
+ export const vGenericTableResponseWritable = v.pipe(v.object({
1645
+ columns: v.optional(v.array(v.unknown())),
1646
+ data_domain: v.optional(v.picklist([
1647
+ 'healthcare',
1648
+ 'core_banking',
1649
+ 'payment_risk',
1650
+ 'accounts_receivable',
1651
+ 'service_commerce',
1652
+ 'trading'
1653
+ ])),
1654
+ description: v.optional(v.string()),
1655
+ title: v.optional(v.string())
1656
+ }), v.readonly());
1657
+ /**
1658
+ * SFTPRequest
1659
+ *
1660
+ * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth. Request
1661
+ */
1662
+ export const vSftpRequestWritable = v.object({
1663
+ auth_method: v.picklist(['password', 'ssh_key']),
1664
+ base_path: v.string(),
1665
+ host: v.string(),
1666
+ password: v.nullish(v.string()),
1667
+ port: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535)),
1668
+ private_key: v.nullish(v.string()),
1669
+ private_key_passphrase: v.nullish(v.string()),
1670
+ user_name: v.string()
1671
+ });
1672
+ /**
1673
+ * CloudStorageAwsRequest
1674
+ *
1675
+ * AWS S3 cloud storage configuration supporting access key and IAM role authentication. Request
1676
+ */
1677
+ export const vCloudStorageAwsRequestWritable = v.object({
1678
+ access_key_id: v.nullish(v.string()),
1679
+ auth_method: v.optional(v.picklist(['access_key', 'iam_role'])),
1680
+ base_path: v.optional(v.string()),
1681
+ bucket: v.string(),
1682
+ endpoint: v.nullish(v.string()),
1683
+ region: v.string(),
1684
+ secret_access_key: v.nullish(v.string())
1685
+ });
1686
+ /**
1687
+ * EmailResponse
1688
+ *
1689
+ * Email tool configuration — SES, Mailgun, SendGrid, or SMTP provider plus base Liquid templates.
1690
+ */
1691
+ export const vEmailResponseWritable = v.pipe(v.object({
1692
+ access_key_id: v.optional(v.string()),
1693
+ domain: v.optional(v.string()),
1694
+ from_email: v.pipe(v.string(), v.email()),
1695
+ from_name: v.nullish(v.string()),
1696
+ provider: v.picklist([
1697
+ 'ses',
1698
+ 'mailgun',
1699
+ 'sendgrid',
1700
+ 'smtp'
1701
+ ]),
1702
+ region: v.optional(v.string()),
1703
+ reply_to: v.nullish(v.string()),
1704
+ smtp_host: v.optional(v.string()),
1705
+ smtp_port: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
1706
+ smtp_username: v.optional(v.string())
1707
+ }), v.readonly());
1708
+ /**
1709
+ * RESTAPIRequest
1710
+ *
1711
+ * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates. Request
1712
+ */
1713
+ export const vRestapiRequestWritable = v.object({
1714
+ api_key: v.nullish(v.string()),
1715
+ api_key_location: v.optional(v.picklist(['header', 'query'])),
1716
+ api_key_name: v.nullish(v.string()),
1717
+ auth_method: v.picklist([
1718
+ 'none',
1719
+ 'api_key',
1720
+ 'basic',
1721
+ 'bearer',
1722
+ 'oauth2',
1723
+ 'oidc'
1724
+ ]),
1725
+ base_url: v.string(),
1726
+ bearer_token: v.nullish(v.string()),
1727
+ oauth2_client_id: v.nullish(v.string()),
1728
+ oauth2_client_secret: v.nullish(v.string()),
1729
+ oauth2_grant_type: v.optional(v.picklist(['client_credentials', 'authorization_code'])),
1730
+ oauth2_scope: v.nullish(v.string()),
1731
+ oauth2_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
1732
+ oauth2_token_url: v.nullish(v.string()),
1733
+ oidc_client_id: v.nullish(v.string()),
1734
+ oidc_client_secret: v.nullish(v.string()),
1735
+ oidc_issuer_url: v.nullish(v.string()),
1736
+ oidc_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
1737
+ password: v.nullish(v.string()),
1738
+ request_type: v.picklist([
1739
+ 'json',
1740
+ 'xml',
1741
+ 'form_urlencoded',
1742
+ 'multipart_form'
1743
+ ]),
1744
+ response_type: v.picklist([
1745
+ 'json',
1746
+ 'xml',
1747
+ 'text',
1748
+ 'binary'
1749
+ ]),
1750
+ timeout_ms: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(300000)),
1751
+ username: v.nullish(v.string())
1752
+ });
1753
+ /**
1754
+ * SQSResponse
1755
+ *
1756
+ * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages.
1757
+ */
1758
+ export const vSqsResponseWritable = v.pipe(v.object({
1759
+ access_key_id: v.nullish(v.string()),
1760
+ auth_method: v.picklist(['access_key', 'iam_role']),
1761
+ fifo: v.optional(v.boolean()),
1762
+ queue_name: v.nullish(v.string()),
1763
+ queue_url: v.string(),
1764
+ region: v.string()
1765
+ }), v.readonly());
1766
+ /**
1767
+ * ToolSQSResponse
1768
+ */
1769
+ export const vToolSqsResponseWritable = v.intersect([vSqsResponseWritable, v.object({
1770
+ tool_body_type: v.picklist(['sqs'])
1771
+ })]);
1772
+ /**
1773
+ * ToolEmailResponse
1774
+ */
1775
+ export const vToolEmailResponseWritable = v.intersect([vEmailResponseWritable, v.object({
1776
+ tool_body_type: v.picklist(['email'])
1777
+ })]);
1778
+ /**
1779
+ * S3CloudStorageR2Response
1780
+ */
1781
+ export const vS3CloudStorageR2ResponseWritable = v.intersect([vCloudStorageR2Response, v.object({
1782
+ storage_config_type: v.picklist(['r2'])
1783
+ })]);
1784
+ /**
1785
+ * S3CloudStorageAwsResponse
1786
+ */
1787
+ export const vS3CloudStorageAwsResponseWritable = v.intersect([vCloudStorageAwsResponse, v.object({
1788
+ storage_config_type: v.picklist(['aws'])
1789
+ })]);
1790
+ /**
1791
+ * SQLDatabaseResponse
1792
+ *
1793
+ * SQL database connection configuration (PostgreSQL, MySQL, MSSQL, SQLite, Snowflake).
1794
+ */
1795
+ export const vSqlDatabaseResponseWritable = v.pipe(v.object({
1796
+ db_host: v.string(),
1797
+ db_name: v.string(),
1798
+ db_type: v.picklist([
1799
+ 'postgres',
1800
+ 'mysql',
1801
+ 'mssql',
1802
+ 'sqlite',
1803
+ 'snowflake'
1804
+ ]),
1805
+ pool_size: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(99))),
1806
+ port: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
1807
+ ssl: v.nullish(v.boolean()),
1808
+ ssl_mode: v.nullish(v.string()),
1809
+ user_name: v.string()
1810
+ }), v.readonly());
1811
+ /**
1812
+ * RESTCallRequest
1813
+ *
1814
+ * REST API call descriptor — HTTP method, path, body, params, and pagination context template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion. Title is RESTCall (not RESTAPIRequest) to avoid double-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterRESTCallRequest). Request
1815
+ */
1816
+ export const vRestCallRequestWritable = v.object({
1817
+ method: v.picklist([
1818
+ 'head',
1819
+ 'get',
1820
+ 'put',
1821
+ 'post',
1822
+ 'delete',
1823
+ 'patch'
1824
+ ])
1825
+ });
1826
+ /**
1827
+ * SNSResponse
1828
+ *
1829
+ * AWS SNS tool configuration for sending SMS messages via the SNS Publish API.
1830
+ */
1831
+ export const vSnsResponseWritable = v.pipe(v.object({
1832
+ access_key_id: v.nullish(v.string()),
1833
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
1834
+ assume_role_external_id: v.nullish(v.string()),
1835
+ auth_method: v.picklist([
1836
+ 'access_key',
1837
+ 'iam_role',
1838
+ 'assume_role'
1839
+ ]),
1840
+ endpoint_url: v.nullish(v.string()),
1841
+ phone_number: v.string(),
1842
+ region: v.string()
1843
+ }), v.readonly());
1844
+ /**
1845
+ * ToolResponse
1846
+ *
1847
+ * Tool — a configurable capability reference for external services.
1848
+ */
1849
+ export const vToolResponseWritable = v.pipe(v.object({
1850
+ data_source_id: v.nullish(v.pipe(v.string(), v.uuid())),
1851
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
1852
+ description: v.nullish(v.string()),
1853
+ intent: v.optional(v.picklist([
1854
+ 'sms',
1855
+ 'email',
1856
+ 'export',
1857
+ 'voice',
1858
+ 'data_exchange',
1859
+ 'status_poller',
1860
+ 'chat_completion',
1861
+ 'context_extraction'
1862
+ ])),
1863
+ name: v.optional(v.string()),
1864
+ status: v.optional(v.picklist([
1865
+ 'draft',
1866
+ 'active',
1867
+ 'inactive',
1868
+ 'error',
1869
+ 'marked_for_deletion'
1870
+ ]))
1871
+ }), v.readonly());
1872
+ /**
1873
+ * ToolListResponse
1874
+ *
1875
+ * Paginated list of tools
1876
+ */
1877
+ export const vToolListResponseWritable = v.object({
1878
+ data: v.array(vToolResponseWritable),
1879
+ meta: vPaginationMeta
1880
+ });
1881
+ /**
1882
+ * SQSRequest
1883
+ *
1884
+ * AWS SQS (Simple Queue Service) tool configuration for sending and receiving queue messages. Request
1885
+ */
1886
+ export const vSqsRequestWritable = v.object({
1887
+ access_key_id: v.nullish(v.string()),
1888
+ auth_method: v.picklist(['access_key', 'iam_role']),
1889
+ fifo: v.optional(v.boolean()),
1890
+ queue_name: v.nullish(v.string()),
1891
+ queue_url: v.string(),
1892
+ region: v.string(),
1893
+ secret_access_key: v.nullish(v.string())
1894
+ });
1895
+ /**
1896
+ * ActionStatusUpdaterRESTCallRequest
1897
+ */
1898
+ export const vActionStatusUpdaterRestCallRequestWritable = v.intersect([vRestCallRequestWritable, v.object({
1899
+ updater_body_type: v.picklist(['restapi_request'])
1900
+ })]);
1901
+ /**
1902
+ * ActionStatusUpdaterCloudWatchQueryRequest
1903
+ */
1904
+ export const vActionStatusUpdaterCloudWatchQueryRequestWritable = v.intersect([vCloudWatchQueryRequest, v.object({
1905
+ updater_body_type: v.picklist(['cloud_watch_request'])
1906
+ })]);
1907
+ /**
1908
+ * ActionStatusUpdaterRequest
1909
+ *
1910
+ * Action Status Updater — automated polling for delivery status updates. Request
1911
+ */
1912
+ export const vActionStatusUpdaterRequestWritable = v.object({
1913
+ cron_expression: v.optional(v.string()),
1914
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
1915
+ name: v.optional(v.string()),
1916
+ sender_tool_ids: v.nullish(v.array(v.pipe(v.string(), v.uuid()))),
1917
+ updater_body: v.optional(v.union([v.intersect([v.object({
1918
+ updater_body_type: v.literal('cloud_watch_request')
1919
+ }), vActionStatusUpdaterCloudWatchQueryRequestWritable]), v.intersect([v.object({
1920
+ updater_body_type: v.literal('restapi_request')
1921
+ }), vActionStatusUpdaterRestCallRequestWritable])])),
1922
+ updater_tool_id: v.optional(v.pipe(v.string(), v.uuid())),
1923
+ updater_type: v.optional(v.picklist(['cloud_watch', 'restapi']))
1924
+ });
1925
+ /**
1926
+ * S3Response
1927
+ *
1928
+ * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2).
1929
+ */
1930
+ export const vS3ResponseWritable = v.pipe(v.record(v.string(), v.unknown()), v.readonly());
1931
+ /**
1932
+ * SNSRequest
1933
+ *
1934
+ * AWS SNS tool configuration for sending SMS messages via the SNS Publish API. Request
1935
+ */
1936
+ export const vSnsRequestWritable = v.object({
1937
+ access_key_id: v.nullish(v.string()),
1938
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
1939
+ assume_role_external_id: v.nullish(v.string()),
1940
+ auth_method: v.picklist([
1941
+ 'access_key',
1942
+ 'iam_role',
1943
+ 'assume_role'
1944
+ ]),
1945
+ endpoint_url: v.nullish(v.string()),
1946
+ phone_number: v.string(),
1947
+ region: v.string(),
1948
+ secret_access_key: v.nullish(v.string())
1949
+ });
1950
+ /**
1951
+ * ToolSNSRequest
1952
+ */
1953
+ export const vToolSnsRequestWritable = v.intersect([vSnsRequestWritable, v.object({
1954
+ tool_body_type: v.picklist(['sns'])
1955
+ })]);
1956
+ /**
1957
+ * CloudWatchLogGroupRequest
1958
+ *
1959
+ * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling. Request
1960
+ */
1961
+ export const vCloudWatchLogGroupRequestWritable = v.object({
1962
+ access_key_id: v.nullish(v.string()),
1963
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
1964
+ assume_role_external_id: v.nullish(v.string()),
1965
+ auth_method: v.picklist([
1966
+ 'access_key',
1967
+ 'iam_role',
1968
+ 'assume_role'
1969
+ ]),
1970
+ endpoint_url: v.nullish(v.string()),
1971
+ region: v.string(),
1972
+ secret_access_key: v.nullish(v.string())
1973
+ });
1974
+ /**
1975
+ * ToolSNSResponse
1976
+ */
1977
+ export const vToolSnsResponseWritable = v.intersect([vSnsResponseWritable, v.object({
1978
+ tool_body_type: v.picklist(['sns'])
1979
+ })]);
1980
+ /**
1981
+ * SFTPResponse
1982
+ *
1983
+ * SFTP (SSH File Transfer Protocol) server connection configuration with password or SSH key auth.
1984
+ */
1985
+ export const vSftpResponseWritable = v.pipe(v.object({
1986
+ auth_method: v.picklist(['password', 'ssh_key']),
1987
+ base_path: v.string(),
1988
+ host: v.string(),
1989
+ port: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535)),
1990
+ user_name: v.string()
1991
+ }), v.readonly());
1992
+ /**
1993
+ * ToolSFTPResponse
1994
+ */
1995
+ export const vToolSftpResponseWritable = v.intersect([vSftpResponseWritable, v.object({
1996
+ tool_body_type: v.picklist(['sftp'])
1997
+ })]);
1998
+ /**
1999
+ * DatalakeResponse
2000
+ *
2001
+ * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses.
2002
+ */
2003
+ export const vDatalakeResponseWritable = v.pipe(v.object({
2004
+ data_domain: v.picklist([
2005
+ 'healthcare',
2006
+ 'core_banking',
2007
+ 'payment_risk',
2008
+ 'accounts_receivable',
2009
+ 'service_commerce',
2010
+ 'trading'
2011
+ ]),
2012
+ timezone: v.nullable(v.string()),
2013
+ regulated_data_db_reader_auth_method: v.picklist(['password', 'iam_role']),
2014
+ regulated_data_db_writer_host: v.string(),
2015
+ regulated_data_db_writer_auth_method: v.picklist(['password', 'iam_role']),
2016
+ regulated_data_db_writer_schema: v.string(),
2017
+ regulated_data_db_writer_enable_ssl: v.boolean(),
2018
+ unregulated_db_reader_schema: v.string(),
2019
+ unregulated_db_writer_enable_ssl: v.boolean(),
2020
+ unregulated_db_writer_port: v.pipe(v.number(), v.integer()),
2021
+ regulated_data_db_writer_port: v.pipe(v.number(), v.integer()),
2022
+ unregulated_db_reader_enable_ssl: v.boolean(),
2023
+ regulated_data_db_reader_enable_ssl: v.boolean(),
2024
+ unregulated_db_reader_host: v.string(),
2025
+ unregulated_db_reader_port: v.pipe(v.number(), v.integer()),
2026
+ pool_size: v.nullable(v.pipe(v.number(), v.integer())),
2027
+ description: v.nullish(v.string()),
2028
+ name: v.string(),
2029
+ unregulated_db_writer_auth_method: v.picklist(['password', 'iam_role']),
2030
+ unregulated_db_reader_name: v.string(),
2031
+ regulated_data_db_writer_name: v.string(),
2032
+ unregulated_db_writer_host: v.string(),
2033
+ regulated_data_db_reader_schema: v.string(),
2034
+ unregulated_db_writer_name: v.string(),
2035
+ unregulated_db_writer_schema: v.string(),
2036
+ regulated_data_db_reader_port: v.pipe(v.number(), v.integer()),
2037
+ regulated_data_db_reader_name: v.string(),
2038
+ regulated_data_db_reader_host: v.string(),
2039
+ unregulated_db_reader_auth_method: v.picklist(['password', 'iam_role']),
2040
+ slug: v.optional(v.string())
2041
+ }), v.readonly());
2042
+ /**
2043
+ * DataSourceResponse
2044
+ *
2045
+ * Data source — connection to a third-party system or API
2046
+ */
2047
+ export const vDataSourceResponseWritable = v.pipe(v.object({
2048
+ datalake: v.optional(vDatalakeResponseWritable),
2049
+ description: v.nullish(v.string()),
2050
+ id: v.optional(v.pipe(v.string(), v.uuid())),
2051
+ image_url: v.nullish(v.string()),
2052
+ inserted_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
2053
+ is_default: v.boolean(),
2054
+ name: v.string(),
2055
+ status: v.picklist([
2056
+ 'draft',
2057
+ 'active',
2058
+ 'inactive'
2059
+ ]),
2060
+ updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
2061
+ uri: v.string()
2062
+ }), v.readonly());
2063
+ /**
2064
+ * AiAgentResponse
2065
+ *
2066
+ * AI Agent configuration — reusable chat-completion resource
2067
+ */
2068
+ export const vAiAgentResponseWritable = v.pipe(v.object({
2069
+ data_access: v.picklist(['regulated', 'unregulated']),
2070
+ datalake: v.optional(vDatalakeResponseWritable),
2071
+ description: v.nullish(v.string()),
2072
+ enabled: v.boolean(),
2073
+ id: v.optional(v.pipe(v.string(), v.uuid())),
2074
+ inserted_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
2075
+ max_tokens: v.pipe(v.number(), v.integer()),
2076
+ model: v.string(),
2077
+ name: v.string(),
2078
+ slug: v.optional(v.string()),
2079
+ temperature: v.number(),
2080
+ tool: v.optional(vToolResponseWritable),
2081
+ tool_id: v.pipe(v.string(), v.uuid()),
2082
+ updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
2083
+ }), v.readonly());
2084
+ /**
2085
+ * AiAgentListResponse
2086
+ *
2087
+ * Paginated list of AI agents
2088
+ */
2089
+ export const vAiAgentListResponseWritable = v.object({
2090
+ data: v.array(vAiAgentResponseWritable),
2091
+ meta: vPaginationMeta
2092
+ });
2093
+ /**
2094
+ * DatalakeListResponse
2095
+ *
2096
+ * Paginated list of datalakes
2097
+ */
2098
+ export const vDatalakeListResponseWritable = v.object({
2099
+ data: v.array(vDatalakeResponseWritable),
2100
+ meta: vPaginationMeta
2101
+ });
2102
+ /**
2103
+ * DataSourceListResponse
2104
+ *
2105
+ * Paginated list of data sources
2106
+ */
2107
+ export const vDataSourceListResponseWritable = v.object({
2108
+ data: v.array(vDataSourceResponseWritable),
2109
+ meta: vPaginationMeta
2110
+ });
2111
+ /**
2112
+ * SharePointRequest
2113
+ *
2114
+ * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth. Request
2115
+ */
2116
+ export const vSharePointRequestWritable = v.object({
2117
+ auth_method: v.picklist(['client_credentials', 'managed_identity']),
2118
+ client_id: v.nullish(v.string()),
2119
+ client_secret: v.nullish(v.string()),
2120
+ drive_id: v.nullish(v.string()),
2121
+ drive_path: v.nullish(v.string()),
2122
+ resource_type: v.picklist([
2123
+ 'site',
2124
+ 'library',
2125
+ 'list'
2126
+ ]),
2127
+ site_url: v.nullish(v.string()),
2128
+ tenant_id: v.string()
2129
+ });
2130
+ /**
2131
+ * CloudStorageR2Request
2132
+ *
2133
+ * Cloudflare R2 cloud storage configuration — S3-compatible with auto region and account-scoped endpoints. Request
2134
+ */
2135
+ export const vCloudStorageR2RequestWritable = v.object({
2136
+ access_key_id: v.string(),
2137
+ base_path: v.optional(v.string()),
2138
+ bucket: v.string(),
2139
+ endpoint: v.nullish(v.string()),
2140
+ region: v.optional(v.string()),
2141
+ secret_access_key: v.string()
2142
+ });
2143
+ /**
2144
+ * S3CloudStorageAwsRequest
2145
+ */
2146
+ export const vS3CloudStorageAwsRequestWritable = v.intersect([vCloudStorageAwsRequestWritable, v.object({
2147
+ storage_config_type: v.picklist(['aws'])
2148
+ })]);
2149
+ /**
2150
+ * ToolS3Response
2151
+ */
2152
+ export const vToolS3ResponseWritable = v.intersect([vS3ResponseWritable, v.object({
2153
+ tool_body_type: v.picklist(['s3'])
2154
+ })]);
2155
+ /**
2156
+ * ToolCloudWatchLogGroupRequest
2157
+ */
2158
+ export const vToolCloudWatchLogGroupRequestWritable = v.intersect([vCloudWatchLogGroupRequestWritable, v.object({
2159
+ tool_body_type: v.picklist(['cloud_watch_log_group'])
2160
+ })]);
2161
+ /**
2162
+ * ToolSQLDatabaseResponse
2163
+ */
2164
+ export const vToolSqlDatabaseResponseWritable = v.intersect([vSqlDatabaseResponseWritable, v.object({
2165
+ tool_body_type: v.picklist(['sql_database'])
2166
+ })]);
2167
+ /**
2168
+ * ActionStatusUpdaterCloudWatchQueryResponse
2169
+ */
2170
+ export const vActionStatusUpdaterCloudWatchQueryResponseWritable = v.intersect([vCloudWatchQueryResponse, v.object({
2171
+ updater_body_type: v.picklist(['cloud_watch_request'])
2172
+ })]);
2173
+ /**
2174
+ * ToolSFTPRequest
2175
+ */
2176
+ export const vToolSftpRequestWritable = v.intersect([vSftpRequestWritable, v.object({
2177
+ tool_body_type: v.picklist(['sftp'])
2178
+ })]);
2179
+ /**
2180
+ * GenericTableRequest
2181
+ *
2182
+ * Generic Table — custom or system dataset table with column definitions. Request
2183
+ */
2184
+ export const vGenericTableRequestWritable = v.object({
2185
+ columns: v.optional(v.array(v.unknown())),
2186
+ data_domain: v.optional(v.picklist([
2187
+ 'healthcare',
2188
+ 'core_banking',
2189
+ 'payment_risk',
2190
+ 'accounts_receivable',
2191
+ 'service_commerce',
2192
+ 'trading'
2193
+ ])),
2194
+ description: v.optional(v.string()),
2195
+ title: v.optional(v.string())
2196
+ });
2197
+ /**
2198
+ * GenericTableListResponse
2199
+ *
2200
+ * Paginated list of generic tables
2201
+ */
2202
+ export const vGenericTableListResponseWritable = v.object({
2203
+ data: v.array(vGenericTableResponseWritable),
2204
+ meta: vPaginationMeta
2205
+ });
2206
+ /**
2207
+ * ToolSQLDatabaseRequest
2208
+ */
2209
+ export const vToolSqlDatabaseRequestWritable = v.intersect([vSqlDatabaseRequestWritable, v.object({
2210
+ tool_body_type: v.picklist(['sql_database'])
2211
+ })]);
2212
+ /**
2213
+ * S3CloudStorageR2Request
2214
+ */
2215
+ export const vS3CloudStorageR2RequestWritable = v.intersect([vCloudStorageR2RequestWritable, v.object({
2216
+ storage_config_type: v.picklist(['r2'])
2217
+ })]);
2218
+ /**
2219
+ * S3Request
2220
+ *
2221
+ * S3-compatible storage tool configuration with a nested polymorphic provider config (AWS or R2). Request
2222
+ */
2223
+ export const vS3RequestWritable = v.object({
2224
+ config: v.union([v.intersect([v.object({
2225
+ storage_config_type: v.literal('aws')
2226
+ }), vS3CloudStorageAwsRequestWritable]), v.intersect([v.object({
2227
+ storage_config_type: v.literal('r2')
2228
+ }), vS3CloudStorageR2RequestWritable])])
2229
+ });
2230
+ /**
2231
+ * ToolS3Request
2232
+ */
2233
+ export const vToolS3RequestWritable = v.intersect([vS3RequestWritable, v.object({
2234
+ tool_body_type: v.picklist(['s3'])
2235
+ })]);
2236
+ /**
2237
+ * ConnectedAppListResponse
2238
+ *
2239
+ * Paginated list of connected apps
2240
+ */
2241
+ export const vConnectedAppListResponseWritable = v.object({
2242
+ data: v.array(vConnectedAppResponseWritable),
2243
+ meta: vPaginationMeta
2244
+ });
2245
+ /**
2246
+ * EmailRequest
2247
+ *
2248
+ * Email tool configuration — SES, Mailgun, SendGrid, or SMTP provider plus base Liquid templates. Request
2249
+ */
2250
+ export const vEmailRequestWritable = v.object({
2251
+ access_key_id: v.optional(v.string()),
2252
+ api_key: v.optional(v.string()),
2253
+ domain: v.optional(v.string()),
2254
+ from_email: v.pipe(v.string(), v.email()),
2255
+ from_name: v.nullish(v.string()),
2256
+ provider: v.picklist([
2257
+ 'ses',
2258
+ 'mailgun',
2259
+ 'sendgrid',
2260
+ 'smtp'
2261
+ ]),
2262
+ region: v.optional(v.string()),
2263
+ reply_to: v.nullish(v.string()),
2264
+ secret_access_key: v.optional(v.string()),
2265
+ smtp_host: v.optional(v.string()),
2266
+ smtp_password: v.optional(v.string()),
2267
+ smtp_port: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(65535))),
2268
+ smtp_username: v.optional(v.string())
2269
+ });
2270
+ /**
2271
+ * ToolEmailRequest
2272
+ */
2273
+ export const vToolEmailRequestWritable = v.intersect([vEmailRequestWritable, v.object({
2274
+ tool_body_type: v.picklist(['email'])
2275
+ })]);
2276
+ /**
2277
+ * RESTAPIResponse
2278
+ *
2279
+ * REST API tool configuration with OpenAPI-compliant authentication (API key, basic, bearer, OAuth2, OIDC) plus base Liquid templates.
2280
+ */
2281
+ export const vRestapiResponseWritable = v.pipe(v.object({
2282
+ api_key_location: v.optional(v.picklist(['header', 'query'])),
2283
+ api_key_name: v.nullish(v.string()),
2284
+ auth_method: v.picklist([
2285
+ 'none',
2286
+ 'api_key',
2287
+ 'basic',
2288
+ 'bearer',
2289
+ 'oauth2',
2290
+ 'oidc'
2291
+ ]),
2292
+ base_url: v.string(),
2293
+ oauth2_client_id: v.nullish(v.string()),
2294
+ oauth2_grant_type: v.optional(v.picklist(['client_credentials', 'authorization_code'])),
2295
+ oauth2_scope: v.nullish(v.string()),
2296
+ oauth2_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
2297
+ oauth2_token_url: v.nullish(v.string()),
2298
+ oidc_client_id: v.nullish(v.string()),
2299
+ oidc_issuer_url: v.nullish(v.string()),
2300
+ oidc_token_ttl: v.nullish(v.pipe(v.number(), v.integer(), v.minValue(1))),
2301
+ request_type: v.picklist([
2302
+ 'json',
2303
+ 'xml',
2304
+ 'form_urlencoded',
2305
+ 'multipart_form'
2306
+ ]),
2307
+ response_type: v.picklist([
2308
+ 'json',
2309
+ 'xml',
2310
+ 'text',
2311
+ 'binary'
2312
+ ]),
2313
+ timeout_ms: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(300000)),
2314
+ username: v.nullish(v.string())
2315
+ }), v.readonly());
2316
+ /**
2317
+ * ToolRESTAPIResponse
2318
+ */
2319
+ export const vToolRestapiResponseWritable = v.intersect([vRestapiResponseWritable, v.object({
2320
+ tool_body_type: v.picklist(['rest_api'])
2321
+ })]);
2322
+ /**
2323
+ * SharePointResponse
2324
+ *
2325
+ * Microsoft SharePoint integration via the Microsoft Graph API. Supports sites, document libraries, and lists with client-credential or managed-identity auth.
2326
+ */
2327
+ export const vSharePointResponseWritable = v.pipe(v.object({
2328
+ auth_method: v.picklist(['client_credentials', 'managed_identity']),
2329
+ client_id: v.nullish(v.string()),
2330
+ drive_id: v.nullish(v.string()),
2331
+ drive_path: v.nullish(v.string()),
2332
+ resource_type: v.picklist([
2333
+ 'site',
2334
+ 'library',
2335
+ 'list'
2336
+ ]),
2337
+ site_url: v.nullish(v.string()),
2338
+ tenant_id: v.string()
2339
+ }), v.readonly());
2340
+ /**
2341
+ * ToolSharePointResponse
2342
+ */
2343
+ export const vToolSharePointResponseWritable = v.intersect([vSharePointResponseWritable, v.object({
2344
+ tool_body_type: v.picklist(['sharepoint'])
2345
+ })]);
2346
+ /**
2347
+ * AiAgentRequest
2348
+ *
2349
+ * AI Agent configuration — reusable chat-completion resource Request
2350
+ */
2351
+ export const vAiAgentRequestWritable = v.object({
2352
+ data_access: v.picklist(['regulated', 'unregulated']),
2353
+ description: v.nullish(v.string()),
2354
+ enabled: v.boolean(),
2355
+ id: v.optional(v.pipe(v.string(), v.uuid())),
2356
+ inserted_at: v.optional(v.pipe(v.string(), v.isoTimestamp())),
2357
+ max_tokens: v.pipe(v.number(), v.integer()),
2358
+ model: v.string(),
2359
+ name: v.string(),
2360
+ slug: v.optional(v.string()),
2361
+ temperature: v.number(),
2362
+ tool_id: v.pipe(v.string(), v.uuid()),
2363
+ updated_at: v.optional(v.pipe(v.string(), v.isoTimestamp()))
2364
+ });
2365
+ /**
2366
+ * RESTCallResponse
2367
+ *
2368
+ * REST API call descriptor — HTTP method, path, body, params, and pagination context template. Reused across ActionStatusUpdater polling, data activation clients, tool protocols, OAuth token fetching, and chat completion. Title is RESTCall (not RESTAPIRequest) to avoid double-`Request` stacking in the library-generated parent-contextual sibling module names (e.g. ActionStatusUpdaterRESTCallRequest).
2369
+ */
2370
+ export const vRestCallResponseWritable = v.pipe(v.object({
2371
+ method: v.picklist([
2372
+ 'head',
2373
+ 'get',
2374
+ 'put',
2375
+ 'post',
2376
+ 'delete',
2377
+ 'patch'
2378
+ ])
2379
+ }), v.readonly());
2380
+ /**
2381
+ * ActionStatusUpdaterRESTCallResponse
2382
+ */
2383
+ export const vActionStatusUpdaterRestCallResponseWritable = v.intersect([vRestCallResponseWritable, v.object({
2384
+ updater_body_type: v.picklist(['restapi_request'])
2385
+ })]);
2386
+ /**
2387
+ * ToolSQSRequest
2388
+ */
2389
+ export const vToolSqsRequestWritable = v.intersect([vSqsRequestWritable, v.object({
2390
+ tool_body_type: v.picklist(['sqs'])
2391
+ })]);
2392
+ /**
2393
+ * AWSLambdaRequest
2394
+ *
2395
+ * AWS Lambda tool configuration supporting managed (CloudFormation-deployed) and external (user-provided ARN) modes. Request
2396
+ */
2397
+ export const vAwsLambdaRequestWritable = v.object({
2398
+ access_key_id: v.nullish(v.string()),
2399
+ auth_method: v.optional(v.picklist([
2400
+ 'access_key',
2401
+ 'iam_role',
2402
+ 'cloudformation'
2403
+ ])),
2404
+ env_vars: v.optional(v.array(v.unknown())),
2405
+ function_arn: v.nullish(v.string()),
2406
+ secret_access_key: v.nullish(v.string()),
2407
+ secrets: v.optional(v.array(v.unknown())),
2408
+ ssm_config_key: v.nullish(v.string()),
2409
+ type: v.picklist(['managed', 'external'])
2410
+ });
2411
+ /**
2412
+ * ToolAWSLambdaRequest
2413
+ */
2414
+ export const vToolAwsLambdaRequestWritable = v.intersect([vAwsLambdaRequestWritable, v.object({
2415
+ tool_body_type: v.picklist(['aws_lambda'])
2416
+ })]);
2417
+ /**
2418
+ * ToolSharePointRequest
2419
+ */
2420
+ export const vToolSharePointRequestWritable = v.intersect([vSharePointRequestWritable, v.object({
2421
+ tool_body_type: v.picklist(['sharepoint'])
2422
+ })]);
2423
+ /**
2424
+ * AWSLambdaResponse
2425
+ *
2426
+ * AWS Lambda tool configuration supporting managed (CloudFormation-deployed) and external (user-provided ARN) modes.
2427
+ */
2428
+ export const vAwsLambdaResponseWritable = v.pipe(v.object({
2429
+ access_key_id: v.nullish(v.string()),
2430
+ auth_method: v.optional(v.picklist([
2431
+ 'access_key',
2432
+ 'iam_role',
2433
+ 'cloudformation'
2434
+ ])),
2435
+ env_vars: v.optional(v.array(v.unknown())),
2436
+ function_arn: v.nullish(v.string()),
2437
+ secrets: v.optional(v.array(v.unknown())),
2438
+ ssm_config_key: v.nullish(v.string()),
2439
+ type: v.picklist(['managed', 'external'])
2440
+ }), v.readonly());
2441
+ /**
2442
+ * ToolAWSLambdaResponse
2443
+ */
2444
+ export const vToolAwsLambdaResponseWritable = v.intersect([vAwsLambdaResponseWritable, v.object({
2445
+ tool_body_type: v.picklist(['aws_lambda'])
2446
+ })]);
2447
+ /**
2448
+ * ActionStatusUpdaterResponse
2449
+ *
2450
+ * Action Status Updater — automated polling for delivery status updates.
2451
+ */
2452
+ export const vActionStatusUpdaterResponseWritable = v.pipe(v.object({
2453
+ cron_expression: v.optional(v.string()),
2454
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
2455
+ name: v.optional(v.string()),
2456
+ sender_tool_ids: v.nullish(v.array(v.pipe(v.string(), v.uuid()))),
2457
+ updater_tool_id: v.optional(v.pipe(v.string(), v.uuid())),
2458
+ updater_type: v.optional(v.picklist(['cloud_watch', 'restapi']))
2459
+ }), v.readonly());
2460
+ /**
2461
+ * ActionStatusUpdaterListResponse
2462
+ *
2463
+ * Paginated list of action status updaters
2464
+ */
2465
+ export const vActionStatusUpdaterListResponseWritable = v.object({
2466
+ data: v.array(vActionStatusUpdaterResponseWritable),
2467
+ meta: vPaginationMeta
2468
+ });
2469
+ /**
2470
+ * CloudflarePagesConfigResponse
2471
+ *
2472
+ * Cloudflare Pages deployment configuration for managed Connected Apps
2473
+ */
2474
+ export const vCloudflarePagesConfigResponseWritable = v.pipe(v.object({
2475
+ account_id: v.string(),
2476
+ build_command: v.nullish(v.string()),
2477
+ destination_dir: v.nullish(v.string()),
2478
+ github_auth_method: v.picklist(['github_app', 'pat']),
2479
+ production_branch: v.nullish(v.string())
2480
+ }), v.readonly());
2481
+ /**
2482
+ * CloudWatchLogGroupResponse
2483
+ *
2484
+ * AWS CloudWatch Logs authentication credential store. Referenced by ActionStatusUpdater for log-group polling.
2485
+ */
2486
+ export const vCloudWatchLogGroupResponseWritable = v.pipe(v.object({
2487
+ access_key_id: v.nullish(v.string()),
2488
+ assume_role_arn: v.nullish(v.pipe(v.string(), v.regex(/^arn:aws:iam::\d{12}:role\/.+$/))),
2489
+ assume_role_external_id: v.nullish(v.string()),
2490
+ auth_method: v.picklist([
2491
+ 'access_key',
2492
+ 'iam_role',
2493
+ 'assume_role'
2494
+ ]),
2495
+ endpoint_url: v.nullish(v.string()),
2496
+ region: v.string()
2497
+ }), v.readonly());
2498
+ /**
2499
+ * ToolCloudWatchLogGroupResponse
2500
+ */
2501
+ export const vToolCloudWatchLogGroupResponseWritable = v.intersect([vCloudWatchLogGroupResponseWritable, v.object({
2502
+ tool_body_type: v.picklist(['cloud_watch_log_group'])
2503
+ })]);
2504
+ /**
2505
+ * ToolRESTAPIRequest
2506
+ */
2507
+ export const vToolRestapiRequestWritable = v.intersect([vRestapiRequestWritable, v.object({
2508
+ tool_body_type: v.picklist(['rest_api'])
2509
+ })]);
2510
+ /**
2511
+ * ToolRequest
2512
+ *
2513
+ * Tool — a configurable capability reference for external services. Request
2514
+ */
2515
+ export const vToolRequestWritable = v.object({
2516
+ body: v.optional(v.union([
2517
+ v.intersect([v.object({
2518
+ tool_body_type: v.literal('email')
2519
+ }), vToolEmailRequestWritable]),
2520
+ v.intersect([v.object({
2521
+ tool_body_type: v.literal('sns')
2522
+ }), vToolSnsRequestWritable]),
2523
+ v.intersect([v.object({
2524
+ tool_body_type: v.literal('rest_api')
2525
+ }), vToolRestapiRequestWritable]),
2526
+ v.intersect([v.object({
2527
+ tool_body_type: v.literal('s3')
2528
+ }), vToolS3RequestWritable]),
2529
+ v.intersect([v.object({
2530
+ tool_body_type: v.literal('aws_lambda')
2531
+ }), vToolAwsLambdaRequestWritable]),
2532
+ v.intersect([v.object({
2533
+ tool_body_type: v.literal('sql_database')
2534
+ }), vToolSqlDatabaseRequestWritable]),
2535
+ v.intersect([v.object({
2536
+ tool_body_type: v.literal('sqs')
2537
+ }), vToolSqsRequestWritable]),
2538
+ v.intersect([v.object({
2539
+ tool_body_type: v.literal('sftp')
2540
+ }), vToolSftpRequestWritable]),
2541
+ v.intersect([v.object({
2542
+ tool_body_type: v.literal('sharepoint')
2543
+ }), vToolSharePointRequestWritable]),
2544
+ v.intersect([v.object({
2545
+ tool_body_type: v.literal('cloud_watch_log_group')
2546
+ }), vToolCloudWatchLogGroupRequestWritable]),
2547
+ v.intersect([v.object({
2548
+ tool_body_type: v.literal('manual_upload')
2549
+ }), vToolManualUploadRequest])
2550
+ ])),
2551
+ data_source_id: v.nullish(v.pipe(v.string(), v.uuid())),
2552
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
2553
+ description: v.nullish(v.string()),
2554
+ intent: v.optional(v.picklist([
2555
+ 'sms',
2556
+ 'email',
2557
+ 'export',
2558
+ 'voice',
2559
+ 'data_exchange',
2560
+ 'status_poller',
2561
+ 'chat_completion',
2562
+ 'context_extraction'
2563
+ ])),
2564
+ name: v.optional(v.string()),
2565
+ status: v.optional(v.picklist([
2566
+ 'draft',
2567
+ 'active',
2568
+ 'inactive',
2569
+ 'error',
2570
+ 'marked_for_deletion'
2571
+ ]))
2572
+ });
2573
+ /**
2574
+ * DatalakeRequest
2575
+ *
2576
+ * Datalake configuration. Secrets (DB passwords, credentials) are write-only — accepted on create but never returned in responses. Request
2577
+ */
2578
+ export const vDatalakeRequestWritable = v.object({
2579
+ data_domain: v.picklist([
2580
+ 'healthcare',
2581
+ 'core_banking',
2582
+ 'payment_risk',
2583
+ 'accounts_receivable',
2584
+ 'service_commerce',
2585
+ 'trading'
2586
+ ]),
2587
+ timezone: v.nullable(v.string()),
2588
+ regulated_data_db_reader_auth_method: v.picklist(['password', 'iam_role']),
2589
+ regulated_data_db_writer_host: v.string(),
2590
+ regulated_data_db_writer_auth_method: v.picklist(['password', 'iam_role']),
2591
+ regulated_data_db_writer_schema: v.string(),
2592
+ regulated_data_db_writer_enable_ssl: v.boolean(),
2593
+ unregulated_db_reader_schema: v.string(),
2594
+ unregulated_db_writer_enable_ssl: v.boolean(),
2595
+ unregulated_db_writer_port: v.pipe(v.number(), v.integer()),
2596
+ regulated_data_db_writer_port: v.pipe(v.number(), v.integer()),
2597
+ unregulated_db_reader_pass: v.optional(v.string()),
2598
+ unregulated_db_reader_enable_ssl: v.boolean(),
2599
+ regulated_data_db_reader_enable_ssl: v.boolean(),
2600
+ unregulated_db_reader_host: v.string(),
2601
+ regulated_data_db_writer_pass: v.optional(v.string()),
2602
+ unregulated_db_reader_port: v.pipe(v.number(), v.integer()),
2603
+ pool_size: v.nullable(v.pipe(v.number(), v.integer())),
2604
+ description: v.nullish(v.string()),
2605
+ name: v.string(),
2606
+ unregulated_db_reader_user: v.optional(v.string()),
2607
+ unregulated_db_writer_auth_method: v.picklist(['password', 'iam_role']),
2608
+ unregulated_db_reader_name: v.string(),
2609
+ regulated_data_db_writer_name: v.string(),
2610
+ unregulated_db_writer_host: v.string(),
2611
+ regulated_data_db_reader_user: v.optional(v.string()),
2612
+ regulated_data_db_reader_schema: v.string(),
2613
+ unregulated_db_writer_name: v.string(),
2614
+ unregulated_db_writer_schema: v.string(),
2615
+ regulated_data_db_reader_port: v.pipe(v.number(), v.integer()),
2616
+ regulated_data_db_writer_user: v.optional(v.string()),
2617
+ regulated_data_db_reader_pass: v.optional(v.string()),
2618
+ regulated_data_db_reader_name: v.string(),
2619
+ regulated_data_db_reader_host: v.string(),
2620
+ unregulated_db_writer_user: v.optional(v.string()),
2621
+ unregulated_db_reader_auth_method: v.picklist(['password', 'iam_role']),
2622
+ slug: v.optional(v.string()),
2623
+ unregulated_db_writer_pass: v.optional(v.string())
2624
+ });
2625
+ export const vPlatformApiPingControllerPingData = v.object({
2626
+ body: v.optional(v.never()),
2627
+ path: v.optional(v.never()),
2628
+ query: v.optional(v.never())
2629
+ });
2630
+ /**
2631
+ * API is healthy
2632
+ */
2633
+ export const vPlatformApiPingControllerPingResponse = vPingResponse;
2634
+ export const vPlatformApiDatasetControllerSearchData = v.object({
2635
+ body: v.optional(v.never()),
2636
+ path: v.object({
2637
+ dataset: v.string()
2638
+ }),
2639
+ query: v.optional(v.object({
2640
+ datalake_id: v.optional(v.pipe(v.string(), v.uuid())),
2641
+ page: v.optional(v.pipe(v.number(), v.integer())),
2642
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
2643
+ }))
2644
+ });
2645
+ /**
2646
+ * Dataset search results
2647
+ */
2648
+ export const vPlatformApiDatasetControllerSearchResponse = vDatasetSearchResponse;
2649
+ export const vPlatformApiSessionControllerDeleteData = v.object({
2650
+ body: v.optional(v.never()),
2651
+ path: v.optional(v.never()),
2652
+ query: v.optional(v.never())
2653
+ });
2654
+ export const vPlatformApiSessionControllerCreateData = v.object({
2655
+ body: vSessionRequest,
2656
+ path: v.optional(v.never()),
2657
+ query: v.optional(v.never())
2658
+ });
2659
+ /**
2660
+ * Session created
2661
+ */
2662
+ export const vPlatformApiSessionControllerCreateResponse = vSessionResponse;
2663
+ export const vPlatformApiSessionControllerVerifyData = v.object({
2664
+ body: v.optional(v.never()),
2665
+ path: v.optional(v.never()),
2666
+ query: v.optional(v.never())
2667
+ });
2668
+ /**
2669
+ * Session details
2670
+ */
2671
+ export const vPlatformApiSessionControllerVerifyResponse = vSessionResponse;
2672
+ export const vPlatformApiActionStatusUpdaterControllerIndexData = v.object({
2673
+ body: v.optional(v.never()),
2674
+ path: v.object({
2675
+ tenant_slug: v.string()
2676
+ }),
2677
+ query: v.optional(v.object({
2678
+ page: v.optional(v.pipe(v.number(), v.integer())),
2679
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
2680
+ }))
2681
+ });
2682
+ /**
2683
+ * Action status updater list
2684
+ */
2685
+ export const vPlatformApiActionStatusUpdaterControllerIndexResponse = vActionStatusUpdaterListResponse;
2686
+ export const vPlatformApiActionStatusUpdaterControllerCreateData = v.object({
2687
+ body: v.optional(vActionStatusUpdaterRequestWritable),
2688
+ path: v.object({
2689
+ tenant_slug: v.string()
2690
+ }),
2691
+ query: v.optional(v.never())
2692
+ });
2693
+ /**
2694
+ * Action status updater created
2695
+ */
2696
+ export const vPlatformApiActionStatusUpdaterControllerCreateResponse = vActionStatusUpdaterResponse;
2697
+ export const vPlatformApiActionStatusUpdaterControllerUpdateData = v.object({
2698
+ body: v.optional(vActionStatusUpdaterRequestWritable),
2699
+ path: v.object({
2700
+ tenant_slug: v.string(),
2701
+ id: v.pipe(v.string(), v.uuid())
2702
+ }),
2703
+ query: v.optional(v.never())
2704
+ });
2705
+ /**
2706
+ * Action status updater updated
2707
+ */
2708
+ export const vPlatformApiActionStatusUpdaterControllerUpdateResponse = vActionStatusUpdaterResponse;
2709
+ export const vPlatformApiWorkflowControllerExecuteData = v.object({
2710
+ body: vExecuteActionRequest,
2711
+ path: v.object({
2712
+ tenant_slug: v.string(),
2713
+ workflow_slug: v.string()
2714
+ }),
2715
+ query: v.optional(v.never())
2716
+ });
2717
+ /**
2718
+ * Execution result
2719
+ */
2720
+ export const vPlatformApiWorkflowControllerExecuteResponse = vExecuteActionResponse;
2721
+ export const vPlatformApiConnectedAppControllerResolvePageData = v.object({
2722
+ body: vResolvePageRequest,
2723
+ path: v.object({
2724
+ tenant_slug: v.string(),
2725
+ slug: v.string()
2726
+ }),
2727
+ query: v.optional(v.never())
2728
+ });
2729
+ /**
2730
+ * Resolved page details
2731
+ */
2732
+ export const vPlatformApiConnectedAppControllerResolvePageResponse = vResolvePageResponse;
2733
+ export const vPlatformApiConnectedAppControllerUpdatePageData = v.object({
2734
+ body: vUpdatePageRequest,
2735
+ path: v.object({
2736
+ tenant_slug: v.string(),
2737
+ slug: v.string()
2738
+ }),
2739
+ query: v.optional(v.never())
2740
+ });
2741
+ /**
2742
+ * Updated message details
2743
+ */
2744
+ export const vPlatformApiConnectedAppControllerUpdatePageResponse = vUpdatePageResponse;
2745
+ export const vPlatformApiDataActivationClientControllerIngestData = v.object({
2746
+ body: vIngestRequest,
2747
+ path: v.object({
2748
+ tenant_slug: v.string(),
2749
+ slug: v.string()
2750
+ }),
2751
+ query: v.optional(v.never())
2752
+ });
2753
+ /**
2754
+ * Ingest response
2755
+ */
2756
+ export const vPlatformApiDataActivationClientControllerIngestResponse = vIngestResponse;
2757
+ export const vPlatformApiDataActivationClientControllerIngestFileData = v.object({
2758
+ body: vIngestFileRequest,
2759
+ path: v.object({
2760
+ tenant_slug: v.string(),
2761
+ slug: v.string()
2762
+ }),
2763
+ query: v.optional(v.never())
2764
+ });
2765
+ /**
2766
+ * Ingest response
2767
+ */
2768
+ export const vPlatformApiDataActivationClientControllerIngestFileResponse = vIngestResponse;
2769
+ export const vPlatformApiDataActivationClientControllerCreateUploadLinkData = v.object({
2770
+ body: vUploadLinkRequest,
2771
+ path: v.object({
2772
+ tenant_slug: v.string(),
2773
+ slug: v.string()
2774
+ }),
2775
+ query: v.optional(v.never())
2776
+ });
2777
+ /**
2778
+ * Presigned upload link
2779
+ */
2780
+ export const vPlatformApiDataActivationClientControllerCreateUploadLinkResponse = vUploadLinkResponse;
2781
+ export const vPlatformApiDatalakeControllerIndexData = v.object({
2782
+ body: v.optional(v.never()),
2783
+ path: v.object({
2784
+ tenant_slug: v.string()
2785
+ }),
2786
+ query: v.optional(v.object({
2787
+ page: v.optional(v.pipe(v.number(), v.integer())),
2788
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
2789
+ }))
2790
+ });
2791
+ /**
2792
+ * Datalake list
2793
+ */
2794
+ export const vPlatformApiDatalakeControllerIndexResponse = vDatalakeListResponse;
2795
+ export const vPlatformApiDatalakeControllerCreateData = v.object({
2796
+ body: v.optional(vDatalakeRequestWritable),
2797
+ path: v.object({
2798
+ tenant_slug: v.string()
2799
+ }),
2800
+ query: v.optional(v.never())
2801
+ });
2802
+ /**
2803
+ * Datalake created
2804
+ */
2805
+ export const vPlatformApiDatalakeControllerCreateResponse = vDatalakeResponse;
2806
+ export const vPlatformApiAiAgentControllerIndexData = v.object({
2807
+ body: v.optional(v.never()),
2808
+ path: v.object({
2809
+ tenant_slug: v.string(),
2810
+ datalake_slug: v.string()
2811
+ }),
2812
+ query: v.optional(v.object({
2813
+ page: v.optional(v.pipe(v.number(), v.integer())),
2814
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
2815
+ }))
2816
+ });
2817
+ /**
2818
+ * AI agent list
2819
+ */
2820
+ export const vPlatformApiAiAgentControllerIndexResponse = vAiAgentListResponse;
2821
+ export const vPlatformApiAiAgentControllerCreateData = v.object({
2822
+ body: v.optional(vAiAgentRequestWritable),
2823
+ path: v.object({
2824
+ tenant_slug: v.string(),
2825
+ datalake_slug: v.string()
2826
+ }),
2827
+ query: v.optional(v.never())
2828
+ });
2829
+ /**
2830
+ * AI agent created
2831
+ */
2832
+ export const vPlatformApiAiAgentControllerCreateResponse = vAiAgentResponse;
2833
+ export const vPlatformApiAiAgentControllerDeleteData = v.object({
2834
+ body: v.optional(v.never()),
2835
+ path: v.object({
2836
+ tenant_slug: v.string(),
2837
+ datalake_slug: v.string(),
2838
+ id: v.pipe(v.string(), v.uuid())
2839
+ }),
2840
+ query: v.optional(v.never())
2841
+ });
2842
+ /**
2843
+ * No Content
2844
+ */
2845
+ export const vPlatformApiAiAgentControllerDeleteResponse = v.void();
2846
+ export const vPlatformApiAiAgentControllerShowData = v.object({
2847
+ body: v.optional(v.never()),
2848
+ path: v.object({
2849
+ tenant_slug: v.string(),
2850
+ datalake_slug: v.string(),
2851
+ id: v.pipe(v.string(), v.uuid())
2852
+ }),
2853
+ query: v.optional(v.never())
2854
+ });
2855
+ /**
2856
+ * AI agent
2857
+ */
2858
+ export const vPlatformApiAiAgentControllerShowResponse = vAiAgentResponse;
2859
+ export const vPlatformApiAiAgentControllerUpdateData = v.object({
2860
+ body: v.optional(vAiAgentRequestWritable),
2861
+ path: v.object({
2862
+ tenant_slug: v.string(),
2863
+ datalake_slug: v.string(),
2864
+ id: v.pipe(v.string(), v.uuid())
2865
+ }),
2866
+ query: v.optional(v.never())
2867
+ });
2868
+ /**
2869
+ * AI agent updated
2870
+ */
2871
+ export const vPlatformApiAiAgentControllerUpdateResponse = vAiAgentResponse;
2872
+ export const vPlatformApiConnectedAppMgmtControllerIndexData = v.object({
2873
+ body: v.optional(v.never()),
2874
+ path: v.object({
2875
+ tenant_slug: v.string(),
2876
+ datalake_slug: v.string()
2877
+ }),
2878
+ query: v.optional(v.object({
2879
+ page: v.optional(v.pipe(v.number(), v.integer())),
2880
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
2881
+ }))
2882
+ });
2883
+ /**
2884
+ * Connected app list
2885
+ */
2886
+ export const vPlatformApiConnectedAppMgmtControllerIndexResponse = vConnectedAppListResponse;
2887
+ export const vPlatformApiConnectedAppMgmtControllerCreateData = v.object({
2888
+ body: v.optional(vConnectedAppRequestWritable),
2889
+ path: v.object({
2890
+ tenant_slug: v.string(),
2891
+ datalake_slug: v.string()
2892
+ }),
2893
+ query: v.optional(v.never())
2894
+ });
2895
+ /**
2896
+ * Connected app created
2897
+ */
2898
+ export const vPlatformApiConnectedAppMgmtControllerCreateResponse = vConnectedAppResponse;
2899
+ export const vPlatformApiConnectedAppMgmtControllerShowData = v.object({
2900
+ body: v.optional(v.never()),
2901
+ path: v.object({
2902
+ tenant_slug: v.string(),
2903
+ datalake_slug: v.string(),
2904
+ id: v.pipe(v.string(), v.uuid())
2905
+ }),
2906
+ query: v.optional(v.never())
2907
+ });
2908
+ /**
2909
+ * Connected app
2910
+ */
2911
+ export const vPlatformApiConnectedAppMgmtControllerShowResponse = vConnectedAppResponse;
2912
+ export const vPlatformApiConnectedAppMgmtControllerUpdateData = v.object({
2913
+ body: v.optional(vConnectedAppRequestWritable),
2914
+ path: v.object({
2915
+ tenant_slug: v.string(),
2916
+ datalake_slug: v.string(),
2917
+ id: v.pipe(v.string(), v.uuid())
2918
+ }),
2919
+ query: v.optional(v.never())
2920
+ });
2921
+ /**
2922
+ * Connected app updated
2923
+ */
2924
+ export const vPlatformApiConnectedAppMgmtControllerUpdateResponse = vConnectedAppResponse;
2925
+ export const vPlatformApiConnectedAppMgmtControllerSyncRoutesData = v.object({
2926
+ body: v.optional(v.never()),
2927
+ path: v.object({
2928
+ tenant_slug: v.string(),
2929
+ datalake_slug: v.string(),
2930
+ id: v.pipe(v.string(), v.uuid())
2931
+ }),
2932
+ query: v.optional(v.never())
2933
+ });
2934
+ /**
2935
+ * Route sync enqueued
2936
+ */
2937
+ export const vPlatformApiConnectedAppMgmtControllerSyncRoutesResponse = vSyncRoutesResponse;
2938
+ export const vPlatformApiDataSourceControllerIndexData = v.object({
2939
+ body: v.optional(v.never()),
2940
+ path: v.object({
2941
+ tenant_slug: v.string(),
2942
+ datalake_slug: v.string()
2943
+ }),
2944
+ query: v.optional(v.object({
2945
+ page: v.optional(v.pipe(v.number(), v.integer())),
2946
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
2947
+ }))
2948
+ });
2949
+ /**
2950
+ * Data source list
2951
+ */
2952
+ export const vPlatformApiDataSourceControllerIndexResponse = vDataSourceListResponse;
2953
+ export const vPlatformApiDataSourceControllerCreateData = v.object({
2954
+ body: v.optional(vDataSourceRequest),
2955
+ path: v.object({
2956
+ tenant_slug: v.string(),
2957
+ datalake_slug: v.string()
2958
+ }),
2959
+ query: v.optional(v.never())
2960
+ });
2961
+ /**
2962
+ * Data source created
2963
+ */
2964
+ export const vPlatformApiDataSourceControllerCreateResponse = vDataSourceResponse;
2965
+ export const vPlatformApiDataSourceControllerUpdateData = v.object({
2966
+ body: v.optional(vDataSourceRequest),
2967
+ path: v.object({
2968
+ tenant_slug: v.string(),
2969
+ datalake_slug: v.string(),
2970
+ id: v.pipe(v.string(), v.uuid())
2971
+ }),
2972
+ query: v.optional(v.never())
2973
+ });
2974
+ /**
2975
+ * Data source updated
2976
+ */
2977
+ export const vPlatformApiDataSourceControllerUpdateResponse = vDataSourceResponse;
2978
+ export const vPlatformApiGenericTableControllerIndexData = v.object({
2979
+ body: v.optional(v.never()),
2980
+ path: v.object({
2981
+ tenant_slug: v.string(),
2982
+ datalake_slug: v.string()
2983
+ }),
2984
+ query: v.optional(v.object({
2985
+ page: v.optional(v.pipe(v.number(), v.integer())),
2986
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
2987
+ }))
2988
+ });
2989
+ /**
2990
+ * Generic table list
2991
+ */
2992
+ export const vPlatformApiGenericTableControllerIndexResponse = vGenericTableListResponse;
2993
+ export const vPlatformApiGenericTableControllerCreateData = v.object({
2994
+ body: v.optional(vGenericTableRequestWritable),
2995
+ path: v.object({
2996
+ tenant_slug: v.string(),
2997
+ datalake_slug: v.string()
2998
+ }),
2999
+ query: v.optional(v.never())
3000
+ });
3001
+ /**
3002
+ * Generic table created
3003
+ */
3004
+ export const vPlatformApiGenericTableControllerCreateResponse = vGenericTableResponse;
3005
+ export const vPlatformApiMdmControllerVerifyData = v.object({
3006
+ body: vMdmVerifyRequest,
3007
+ path: v.object({
3008
+ tenant_slug: v.string(),
3009
+ datalake_slug: v.string()
3010
+ }),
3011
+ query: v.optional(v.never())
3012
+ });
3013
+ /**
3014
+ * Verification result
3015
+ */
3016
+ export const vPlatformApiMdmControllerVerifyResponse = vMdmVerifyResponse;
3017
+ export const vPlatformApiDatalakeControllerShowData = v.object({
3018
+ body: v.optional(v.never()),
3019
+ path: v.object({
3020
+ tenant_slug: v.string(),
3021
+ id: v.pipe(v.string(), v.uuid())
3022
+ }),
3023
+ query: v.optional(v.never())
3024
+ });
3025
+ /**
3026
+ * Datalake
3027
+ */
3028
+ export const vPlatformApiDatalakeControllerShowResponse = vDatalakeResponse;
3029
+ export const vPlatformApiToolControllerIndexData = v.object({
3030
+ body: v.optional(v.never()),
3031
+ path: v.object({
3032
+ tenant_slug: v.string()
3033
+ }),
3034
+ query: v.optional(v.object({
3035
+ page: v.optional(v.pipe(v.number(), v.integer())),
3036
+ page_size: v.optional(v.pipe(v.number(), v.integer()))
3037
+ }))
3038
+ });
3039
+ /**
3040
+ * Tool list
3041
+ */
3042
+ export const vPlatformApiToolControllerIndexResponse = vToolListResponse;
3043
+ export const vPlatformApiToolControllerCreateData = v.object({
3044
+ body: v.optional(vToolRequestWritable),
3045
+ path: v.object({
3046
+ tenant_slug: v.string()
3047
+ }),
3048
+ query: v.optional(v.never())
3049
+ });
3050
+ /**
3051
+ * Tool created
3052
+ */
3053
+ export const vPlatformApiToolControllerCreateResponse = vToolResponse;
3054
+ export const vPlatformApiToolControllerDeleteData = v.object({
3055
+ body: v.optional(v.never()),
3056
+ path: v.object({
3057
+ tenant_slug: v.string(),
3058
+ id: v.pipe(v.string(), v.uuid())
3059
+ }),
3060
+ query: v.optional(v.never())
3061
+ });
3062
+ /**
3063
+ * No Content
3064
+ */
3065
+ export const vPlatformApiToolControllerDeleteResponse = v.void();
3066
+ export const vPlatformApiToolControllerShowData = v.object({
3067
+ body: v.optional(v.never()),
3068
+ path: v.object({
3069
+ tenant_slug: v.string(),
3070
+ id: v.pipe(v.string(), v.uuid())
3071
+ }),
3072
+ query: v.optional(v.never())
3073
+ });
3074
+ /**
3075
+ * Tool
3076
+ */
3077
+ export const vPlatformApiToolControllerShowResponse = vToolResponse;
3078
+ export const vPlatformApiToolControllerUpdateData = v.object({
3079
+ body: v.optional(vToolRequestWritable),
3080
+ path: v.object({
3081
+ tenant_slug: v.string(),
3082
+ id: v.pipe(v.string(), v.uuid())
3083
+ }),
3084
+ query: v.optional(v.never())
3085
+ });
3086
+ /**
3087
+ * Tool updated
3088
+ */
3089
+ export const vPlatformApiToolControllerUpdateResponse = vToolResponse;
3090
+ //# sourceMappingURL=valibot.gen.js.map