UNPKG

@simpleapps-com/augur-api

Version:

TypeScript client library for Augur microservices API endpoints

96 lines 4.58 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"); // Helper to log normalization warnings in development const logNormalizationWarning = (message) => { if (process.env.NODE_ENV !== 'production') { console.warn(`[augur-api] Response normalization: ${message}`); } }; // Helper to normalize count field const normalizeCount = (count, actualDataLength) => { if (count === 0 && actualDataLength > 0) { logNormalizationWarning(`'count' was 0 but data has ${actualDataLength} items`); return actualDataLength; } return count; }; // Helper to normalize total/totalResults bidirectional sync const normalizeTotals = (total, totalResults) => { if (total === 0 && totalResults > 0) { logNormalizationWarning(`'total' was 0 but 'totalResults' is ${totalResults}`); return { total: totalResults, totalResults }; } if (totalResults === 0 && total > 0) { logNormalizationWarning(`'totalResults' was 0 but 'total' is ${total}`); return { total, totalResults: total }; } return { total, totalResults }; }; 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)) { return data; } const count = normalizeCount(data.count, data.data.length); const { total, totalResults } = normalizeTotals(data.total, data.totalResults); return { ...data, count, total, totalResults }; }); 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