/**
* Zod schemas for Configuration endpoints
*/
import { z } from 'zod';
import { PaginationSchema, ResponseFormatSchema, SortDirectionSchema, IdSchema, NameFilterSchema, OrganizationIdFilterSchema } from './common.js';
/**
* List configurations input schema
*/
export const ListConfigurationsSchema = z.object({
...PaginationSchema.shape,
response_format: ResponseFormatSchema,
organization_id: OrganizationIdFilterSchema,
name: NameFilterSchema,
configuration_type_id: z.number().int().positive().optional()
.describe('Filter by configuration type ID'),
configuration_status_id: z.number().int().positive().optional()
.describe('Filter by configuration status ID'),
contact_id: z.number().int().positive().optional()
.describe('Filter by assigned contact ID'),
serial_number: z.string().optional()
.describe('Filter by serial number (exact match)'),
asset_tag: z.string().optional()
.describe('Filter by asset tag'),
rmm_id: z.string().optional()
.describe('Filter by RMM integration ID'),
psa_id: z.string().optional()
.describe('Filter by PSA integration ID'),
archived: z.boolean().optional()
.describe('Filter by archived status'),
sort: z.enum(['name', 'id', 'updated_at', 'created_at'])
.default('name')
.describe('Field to sort by'),
sort_direction: SortDirectionSchema,
include: z.array(z.enum(['adapters_resources', 'configuration_interfaces', 'rmm_records', 'passwords', 'attachments', 'tickets', 'datto_alternate_agent', 'related_items']))
.optional()
.describe('Related resources to include')
}).strict();
export type ListConfigurationsInput = z.infer<typeof ListConfigurationsSchema>;
/**
* Get configuration by ID schema
*/
export const GetConfigurationSchema = z.object({
id: IdSchema,
response_format: ResponseFormatSchema,
include: z.array(z.enum(['adapters_resources', 'configuration_interfaces', 'rmm_records', 'passwords', 'attachments', 'tickets', 'datto_alternate_agent', 'related_items']))
.optional()
.describe('Related resources to include')
}).strict();
export type GetConfigurationInput = z.infer<typeof GetConfigurationSchema>;
/**
* Create configuration schema
*/
export const CreateConfigurationSchema = z.object({
organization_id: z.number().int().positive()
.describe('Organization ID (required)'),
name: z.string().min(1).max(255)
.describe('Configuration name (required)'),
configuration_type_id: z.number().int().positive().optional()
.describe('Configuration type ID'),
configuration_status_id: z.number().int().positive().optional()
.describe('Configuration status ID'),
hostname: z.string().max(255).optional()
.describe('Hostname'),
primary_ip: z.string().max(45).optional()
.describe('Primary IP address'),
mac_address: z.string().max(17).optional()
.describe('MAC address'),
default_gateway: z.string().max(45).optional()
.describe('Default gateway'),
serial_number: z.string().max(255).optional()
.describe('Serial number'),
asset_tag: z.string().max(255).optional()
.describe('Asset tag'),
manufacturer_id: z.number().int().positive().optional()
.describe('Manufacturer ID'),
model_id: z.number().int().positive().optional()
.describe('Model ID'),
operating_system_id: z.number().int().positive().optional()
.describe('Operating system ID'),
operating_system_notes: z.string().max(1000).optional()
.describe('Operating system notes'),
location_id: z.number().int().positive().optional()
.describe('Location ID'),
contact_id: z.number().int().positive().optional()
.describe('Contact ID'),
notes: z.string().max(10000).optional()
.describe('Notes'),
warranty_expires_at: z.string().optional()
.describe('Warranty expiration date (YYYY-MM-DD)'),
installed_by: z.string().max(255).optional()
.describe('Installed by'),
purchased_by: z.string().max(255).optional()
.describe('Purchased by'),
purchased_at: z.string().optional()
.describe('Purchase date (YYYY-MM-DD)'),
response_format: ResponseFormatSchema
}).strict();
export type CreateConfigurationInput = z.infer<typeof CreateConfigurationSchema>;
/**
* Update configuration schema
*/
export const UpdateConfigurationSchema = z.object({
id: IdSchema,
organization_id: z.number().int().positive().optional()
.describe('Organization ID'),
name: z.string().min(1).max(255).optional()
.describe('Configuration name'),
configuration_type_id: z.number().int().positive().optional()
.describe('Configuration type ID'),
configuration_status_id: z.number().int().positive().optional()
.describe('Configuration status ID'),
hostname: z.string().max(255).optional().nullable()
.describe('Hostname'),
primary_ip: z.string().max(45).optional().nullable()
.describe('Primary IP address'),
mac_address: z.string().max(17).optional().nullable()
.describe('MAC address'),
serial_number: z.string().max(255).optional().nullable()
.describe('Serial number'),
asset_tag: z.string().max(255).optional().nullable()
.describe('Asset tag'),
notes: z.string().max(10000).optional().nullable()
.describe('Notes'),
warranty_expires_at: z.string().optional().nullable()
.describe('Warranty expiration date (YYYY-MM-DD)'),
archived: z.boolean().optional()
.describe('Archive status'),
response_format: ResponseFormatSchema
}).strict();
export type UpdateConfigurationInput = z.infer<typeof UpdateConfigurationSchema>;