UNPKG

@simpleapps-com/augur-api

Version:

TypeScript client library for Augur microservices API endpoints

88 lines 4.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseGetParamsSchema = exports.EdgeCacheParamsSchema = exports.PaginationParamsSchema = exports.PingDataSchema = exports.HealthCheckDataSchema = exports.BaseResponseSchema = void 0; const zod_1 = require("zod"); const BaseResponseSchema = (dataSchema) => zod_1.z .object({ count: zod_1.z.number(), // Required - Number of items in current response (NOTE: may be inconsistent during API refactoring) data: dataSchema, // Required - The actual response data message: zod_1.z.string(), // Required - Response message // oneOf format to handle PHP JSON encoding quirk: empty arrays become objects {} options: zod_1.z.union([ zod_1.z.array(zod_1.z.unknown()), // Preferred new format - always arrays zod_1.z.record(zod_1.z.unknown()), // Legacy PHP format - empty arrays become objects ]), // Required - Additional options (supports both array and object formats during transition) params: zod_1.z.union([ zod_1.z.array(zod_1.z.unknown()), // Preferred new format - always arrays zod_1.z.record(zod_1.z.unknown()), // Legacy PHP format - empty arrays become objects ]), // Required - Parameters used in request (supports both array and object formats during transition) status: zod_1.z.number(), // Required - HTTP status code total: zod_1.z.number(), // Required - Synced bidirectionally with totalResults totalResults: zod_1.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; }); exports.BaseResponseSchema = BaseResponseSchema; // Standard health check data schema - same across all microservices exports.HealthCheckDataSchema = zod_1.z.object({ siteHash: zod_1.z.string(), siteId: zod_1.z.string(), }); // Standard ping data schema - same across all microservices exports.PingDataSchema = zod_1.z.literal('pong'); // Common pagination parameters // Note: HTTP query parameters are always strings, so we use coercion for numbers exports.PaginationParamsSchema = zod_1.z.object({ limit: zod_1.z.coerce.number().optional(), offset: zod_1.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 exports.EdgeCacheParamsSchema = zod_1.z.object({ edgeCache: zod_1.z .union([ zod_1.z.literal(1), zod_1.z.literal(2), zod_1.z.literal(3), zod_1.z.literal(4), zod_1.z.literal(5), zod_1.z.literal(8), // numbers zod_1.z.literal('1'), zod_1.z.literal('2'), zod_1.z.literal('3'), zod_1.z.literal('4'), zod_1.z.literal('5'), zod_1.z.literal('8'), // strings ]) .transform(val => (typeof val === 'string' ? parseInt(val) : val)) .optional(), }); // Combined base parameters for GET requests (includes pagination and caching) exports.BaseGetParamsSchema = exports.PaginationParamsSchema.merge(exports.EdgeCacheParamsSchema); //# sourceMappingURL=schemas.js.map