@simpleapps-com/augur-api
Version:
TypeScript client library for Augur microservices API endpoints
88 lines • 4.19 kB
JavaScript
;
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