UNPKG

@vfarcic/dot-ai

Version:

AI-powered development productivity platform that enhances software development workflows through intelligent automation and AI-driven assistance

174 lines (173 loc) 8.05 kB
"use strict"; /** * Resource Endpoint Schemas * * Schemas for resource-related endpoints: * - GET /api/v1/resources/kinds * - GET /api/v1/resources/search * - GET /api/v1/resources (list) * - GET /api/v1/resource (single) * - POST /api/v1/resources/sync * - GET /api/v1/namespaces * * PRD #354: REST API Route Registry with Auto-Generated OpenAPI and Test Fixtures * PRD #328: Resource endpoints for UI */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ResourceSyncErrorSchema = exports.NamespacesErrorSchema = exports.SingleResourceErrorSchema = exports.ResourceListErrorSchema = exports.ResourceSearchErrorSchema = exports.ResourceKindsErrorSchema = exports.ResourcePluginUnavailableErrorSchema = exports.ResourceBadRequestErrorSchema = exports.ResourceNotFoundErrorSchema = exports.ResourceSyncResponseSchema = exports.ResourceSyncDataSchema = exports.ResourceSyncRequestSchema = exports.NamespacesResponseSchema = exports.NamespacesDataSchema = exports.SingleResourceResponseSchema = exports.SingleResourceDataSchema = exports.ResourceListResponseSchema = exports.ResourceListDataSchema = exports.ResourceSearchResponseSchema = exports.ResourceSearchDataSchema = exports.ResourceSummarySchema = exports.ResourceKindsResponseSchema = exports.ResourceKindsDataSchema = exports.ResourceKindSchema = void 0; const zod_1 = require("zod"); const common_1 = require("./common"); /** * Resource kind with count */ exports.ResourceKindSchema = zod_1.z.object({ kind: zod_1.z.string().describe('Resource kind (e.g., "Pod", "Deployment")'), apiVersion: zod_1.z.string().describe('API version (e.g., "v1", "apps/v1")'), count: zod_1.z.number().describe('Number of resources of this kind'), apiGroup: zod_1.z.string().optional().describe('API group (e.g., "apps", "networking.k8s.io")'), }); /** * Resource kinds response data * GET /api/v1/resources/kinds */ exports.ResourceKindsDataSchema = zod_1.z.object({ kinds: zod_1.z.array(exports.ResourceKindSchema).describe('List of resource kinds with counts'), }); exports.ResourceKindsResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.ResourceKindsDataSchema); /** * Resource summary for list/search results */ exports.ResourceSummarySchema = zod_1.z.object({ name: zod_1.z.string().describe('Resource name'), namespace: zod_1.z.string().optional().describe('Namespace (for namespaced resources)'), kind: zod_1.z.string().describe('Resource kind'), apiVersion: zod_1.z.string().describe('API version'), apiGroup: zod_1.z.string().optional().describe('API group'), labels: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional().describe('Resource labels'), createdAt: zod_1.z.string().optional().describe('Creation timestamp'), score: zod_1.z.number().optional().describe('Search relevance score (for search results)'), status: zod_1.z.any().optional().describe('Live status from Kubernetes API'), }); /** * Resource search response data * GET /api/v1/resources/search */ exports.ResourceSearchDataSchema = zod_1.z.object({ resources: zod_1.z.array(exports.ResourceSummarySchema).describe('Matching resources'), total: zod_1.z.number().describe('Total number of matches'), limit: zod_1.z.number().describe('Requested limit'), offset: zod_1.z.number().describe('Requested offset'), }); exports.ResourceSearchResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.ResourceSearchDataSchema); /** * Resource list response data * GET /api/v1/resources */ exports.ResourceListDataSchema = zod_1.z.object({ resources: zod_1.z.array(exports.ResourceSummarySchema).describe('List of resources'), total: zod_1.z.number().describe('Total number of resources'), limit: zod_1.z.number().optional().describe('Applied limit'), offset: zod_1.z.number().optional().describe('Applied offset'), }); exports.ResourceListResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.ResourceListDataSchema); /** * Single resource response data * GET /api/v1/resource */ exports.SingleResourceDataSchema = zod_1.z.object({ resource: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).describe('Full Kubernetes resource object'), }); exports.SingleResourceResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.SingleResourceDataSchema); /** * Namespaces response data * GET /api/v1/namespaces */ exports.NamespacesDataSchema = zod_1.z.object({ namespaces: zod_1.z.array(zod_1.z.string()).describe('List of namespace names'), }); exports.NamespacesResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.NamespacesDataSchema); /** * Resource sync request body * POST /api/v1/resources/sync */ exports.ResourceSyncRequestSchema = zod_1.z.object({ upserts: zod_1.z.array(zod_1.z.record(zod_1.z.string(), zod_1.z.any())).optional().describe('Resources to upsert'), deletes: zod_1.z.array(zod_1.z.record(zod_1.z.string(), zod_1.z.any())).optional().describe('Resources to delete (requires namespace, name, kind, apiVersion)'), isResync: zod_1.z.boolean().optional().describe('When true, performs full reconciliation - deletes resources not in upserts list'), }); /** * Resource sync response data */ exports.ResourceSyncDataSchema = zod_1.z.object({ upserted: zod_1.z.number().optional().describe('Number of resources upserted'), deleted: zod_1.z.number().optional().describe('Number of resources deleted'), healthy: zod_1.z.boolean().optional().describe('Health check result'), message: zod_1.z.string().optional().describe('Operation message'), }); exports.ResourceSyncResponseSchema = (0, common_1.createSuccessResponseSchema)(exports.ResourceSyncDataSchema); /** * Resource endpoint error schemas */ exports.ResourceNotFoundErrorSchema = common_1.NotFoundErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('NOT_FOUND'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.ResourceBadRequestErrorSchema = common_1.BadRequestErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.enum(['BAD_REQUEST', 'MISSING_PARAMETER', 'INVALID_PARAMETER', 'VALIDATION_ERROR']), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.ResourcePluginUnavailableErrorSchema = common_1.ServiceUnavailableErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('PLUGIN_UNAVAILABLE'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.ResourceKindsErrorSchema = common_1.InternalServerErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('RESOURCE_KINDS_ERROR'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.ResourceSearchErrorSchema = common_1.InternalServerErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('SEARCH_ERROR'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.ResourceListErrorSchema = common_1.InternalServerErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('LIST_RESOURCES_ERROR'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.SingleResourceErrorSchema = common_1.InternalServerErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('RESOURCE_ERROR'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.NamespacesErrorSchema = common_1.InternalServerErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('NAMESPACES_ERROR'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), }); exports.ResourceSyncErrorSchema = common_1.InternalServerErrorSchema.extend({ error: zod_1.z.object({ code: zod_1.z.literal('SYNC_ERROR'), message: zod_1.z.string(), details: zod_1.z.any().optional(), }), });