@clipwhisperer/common
Version:
ClipWhisperer Common - Shared library providing core utilities, database schemas, authentication, bucket management, and common functionality across all ClipWhisperer microservices
121 lines (111 loc) • 3.44 kB
text/typescript
/**
* Standardized Response Schemas
* Common response patterns used across all services
*/
import { z } from "zod";
/**
* Standard success response
*/
export const successResponseSchema = z.object({
success: z.boolean().default(true),
message: z.string().optional(),
timestamp: z.string().optional().default(() => new Date().toISOString()),
});
/**
* Standard error response
*/
export const errorResponseSchema = z.object({
success: z.boolean().default(false),
error: z.string(),
message: z.string().optional(),
timestamp: z.string().optional().default(() => new Date().toISOString()),
});
/**
* Health check response
*/
export const healthResponseSchema = z.object({
status: z.enum(["healthy", "unhealthy"]),
service: z.string(),
version: z.string().optional(),
timestamp: z.string().default(() => new Date().toISOString()),
uptime: z.number().optional(),
dependencies: z.record(z.string(), z.enum(["healthy", "unhealthy"])).optional(),
});
/**
* Job response (for queue operations)
*/
export const jobResponseSchema = z.object({
jobId: z.string(),
status: z.enum(["queued", "processing", "completed", "failed"]).optional(),
message: z.string().optional(),
timestamp: z.string().default(() => new Date().toISOString()),
});
/**
* Metadata response wrapper
*/
export const metadataResponseSchema = z.object({
success: z.boolean(),
metadata: z.record(z.string(), z.any()).optional(),
error: z.string().optional(),
timestamp: z.string().default(() => new Date().toISOString()),
});
/**
* Performance metrics response
*/
export const performanceMetricsResponseSchema = z.object({
totalRequests: z.number(),
averageResponseTime: z.number(),
successRate: z.number(),
queueSize: z.number(),
memoryUsage: z.object({
rss: z.number(),
heapTotal: z.number(),
heapUsed: z.number(),
external: z.number(),
arrayBuffers: z.number(),
}),
uptime: z.number(),
timestamp: z.string().default(() => new Date().toISOString()),
});
/**
* Workflow status response
*/
export const workflowStatusResponseSchema = z.object({
workflowId: z.string(),
status: z.enum(["pending", "in_progress", "completed", "failed"]),
currentStep: z.string().optional(),
totalSteps: z.number().optional(),
progress: z.number().optional().describe("Progress percentage (0-100)"),
message: z.string().optional(),
startTime: z.string().optional(),
endTime: z.string().optional(),
processingTime: z.number().optional(),
nextSteps: z.string().optional(),
});
/**
* File operation response
*/
export const fileOperationResponseSchema = z.object({
success: z.boolean(),
filePath: z.string().optional(),
fileName: z.string().optional(),
fileSize: z.number().optional(),
mimeType: z.string().optional(),
url: z.string().optional(),
error: z.string().optional(),
timestamp: z.string().default(() => new Date().toISOString()),
});
/**
* Batch operation response
*/
export const batchOperationResponseSchema = z.object({
success: z.boolean(),
processedCount: z.number(),
totalCount: z.number(),
successCount: z.number(),
failureCount: z.number(),
batchId: z.string().optional(),
errors: z.array(z.string()).optional(),
processingTime: z.number(),
timestamp: z.string().default(() => new Date().toISOString()),
});