UNPKG

@simpleapps-com/augur-api

Version:

TypeScript client library for Augur microservices API endpoints

84 lines 3.66 kB
import { z } from 'zod'; export const BaseResponseSchema = (dataSchema) => z .object({ count: z.number(), // Required - Number of items in current response (NOTE: may be inconsistent during API refactoring) data: dataSchema, // Required - The actual response data message: z.string(), // Required - Response message // oneOf format to handle PHP JSON encoding quirk: empty arrays become objects {} options: z.union([ z.array(z.unknown()), // Preferred new format - always arrays z.record(z.unknown()), // Legacy PHP format - empty arrays become objects ]), // Required - Additional options (supports both array and object formats during transition) params: z.union([ z.array(z.unknown()), // Preferred new format - always arrays z.record(z.unknown()), // Legacy PHP format - empty arrays become objects ]), // Required - Parameters used in request (supports both array and object formats during transition) status: z.number(), // Required - HTTP status code total: z.number(), // Required - Synced bidirectionally with totalResults totalResults: z.number(), // Required - Synced bidirectionally with total }) .transform(data => { // During API refactoring, metadata fields may be inconsistent // We normalize them based on the actual data and bidirectional sync if (Array.isArray(data.data)) { const actualDataLength = data.data.length; // If count is 0 but we have data, use the actual data length const count = data.count === 0 && actualDataLength > 0 ? actualDataLength : data.count; // Bidirectional sync between total and totalResults let total = data.total; let totalResults = data.totalResults; // If total is 0 and totalResults > 0, set total to totalResults if (total === 0 && totalResults > 0) { total = totalResults; } // If totalResults is 0 and total > 0, set totalResults to total else if (totalResults === 0 && total > 0) { totalResults = total; } return { ...data, count, total, totalResults, }; } // For non-array responses, return as-is return data; }); // Standard health check data schema - same across all microservices export const HealthCheckDataSchema = z.object({ siteHash: z.string(), siteId: z.string(), }); // Standard ping data schema - same across all microservices export const PingDataSchema = z.literal('pong'); // Common pagination parameters // Note: HTTP query parameters are always strings, so we use coercion for numbers export const PaginationParamsSchema = z.object({ limit: z.coerce.number().optional(), offset: z.coerce.number().optional(), }); // Edge cache duration parameter - supported values for Cloudflare cache rules // Note: HTTP query parameters are always strings, but we also accept numbers for JavaScript usage export const EdgeCacheParamsSchema = z.object({ edgeCache: z .union([ z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(8), // numbers z.literal('1'), z.literal('2'), z.literal('3'), z.literal('4'), z.literal('5'), z.literal('8'), // strings ]) .transform(val => (typeof val === 'string' ? parseInt(val) : val)) .optional(), }); // Combined base parameters for GET requests (includes pagination and caching) export const BaseGetParamsSchema = PaginationParamsSchema.merge(EdgeCacheParamsSchema); //# sourceMappingURL=schemas.js.map