diff --git a/apps/journal/app/lib/demo-bot.server.ts b/apps/journal/app/lib/demo-bot.server.ts index 9b22296..8fa1cf6 100644 --- a/apps/journal/app/lib/demo-bot.server.ts +++ b/apps/journal/app/lib/demo-bot.server.ts @@ -51,14 +51,14 @@ const PersonaSchema = z for (const loc of p.locales) { if (!p.content.names[loc]) { ctx.addIssue({ - code: z.ZodIssueCode.custom, + code: "custom", path: ["content", "names", loc], message: `missing name pool for declared locale '${loc}'`, }); } if (!p.content.descriptions[loc]) { ctx.addIssue({ - code: z.ZodIssueCode.custom, + code: "custom", path: ["content", "descriptions", loc], message: `missing description pool for declared locale '${loc}'`, }); diff --git a/packages/api/src/activities.ts b/packages/api/src/activities.ts index 479fbc6..e4f2420 100644 --- a/packages/api/src/activities.ts +++ b/packages/api/src/activities.ts @@ -2,24 +2,24 @@ import { z } from "zod"; /** Activity summary for list views */ export const ActivitySummarySchema = z.object({ - id: z.string().uuid(), + id: z.uuid(), name: z.string(), description: z.string(), - routeId: z.string().uuid().nullable(), + routeId: z.uuid().nullable(), routeName: z.string().nullable(), distance: z.number().nullable(), duration: z.number().nullable(), elevationGain: z.number().nullable(), elevationLoss: z.number().nullable(), - startedAt: z.string().datetime().nullable(), + startedAt: z.iso.datetime().nullable(), geojson: z.string().nullable(), - createdAt: z.string().datetime(), + createdAt: z.iso.datetime(), }); /** Full activity detail */ export const ActivityDetailSchema = ActivitySummarySchema.extend({ gpx: z.string().nullable(), - photos: z.array(z.string().url()), + photos: z.array(z.url()), }); /** Paginated activity list response */ @@ -33,8 +33,8 @@ export const CreateActivityRequestSchema = z.object({ name: z.string().min(1).max(200), description: z.string().max(5000).default(""), gpx: z.string().optional(), - routeId: z.string().uuid().optional(), - startedAt: z.string().datetime().optional(), + routeId: z.uuid().optional(), + startedAt: z.iso.datetime().optional(), duration: z.number().optional(), distance: z.number().optional(), }); diff --git a/packages/api/src/auth.ts b/packages/api/src/auth.ts index 8440738..3f556f1 100644 --- a/packages/api/src/auth.ts +++ b/packages/api/src/auth.ts @@ -20,8 +20,8 @@ export const TokenResponseSchema = z.object({ export const DeviceSchema = z.object({ id: z.string(), deviceName: z.string().nullable(), - lastActiveAt: z.string().datetime(), - createdAt: z.string().datetime(), + lastActiveAt: z.iso.datetime(), + createdAt: z.iso.datetime(), isCurrent: z.boolean(), }); diff --git a/packages/api/src/discovery.ts b/packages/api/src/discovery.ts index 9680a9a..2f1ff2a 100644 --- a/packages/api/src/discovery.ts +++ b/packages/api/src/discovery.ts @@ -3,8 +3,8 @@ import { z } from "zod"; export const DiscoveryResponseSchema = z.object({ apiVersion: z.string(), instanceName: z.string(), - apiBaseUrl: z.string().url(), - tileUrl: z.string().url().optional(), + apiBaseUrl: z.url(), + tileUrl: z.url().optional(), }); export type DiscoveryResponse = z.infer; diff --git a/packages/api/src/routes.ts b/packages/api/src/routes.ts index b9e64e5..dc83071 100644 --- a/packages/api/src/routes.ts +++ b/packages/api/src/routes.ts @@ -2,7 +2,7 @@ import { z } from "zod"; /** Route summary for list views */ export const RouteSummarySchema = z.object({ - id: z.string().uuid(), + id: z.uuid(), name: z.string(), description: z.string(), distance: z.number().nullable(), @@ -11,15 +11,15 @@ export const RouteSummarySchema = z.object({ routingProfile: z.string().nullable(), dayBreaks: z.array(z.number()), geojson: z.string().nullable(), - createdAt: z.string().datetime(), - updatedAt: z.string().datetime(), + createdAt: z.iso.datetime(), + updatedAt: z.iso.datetime(), }); /** Route version info */ export const RouteVersionSchema = z.object({ version: z.number(), changeDescription: z.string().nullable(), - createdAt: z.string().datetime(), + createdAt: z.iso.datetime(), }); /** Full route detail */ diff --git a/packages/api/src/uploads.ts b/packages/api/src/uploads.ts index 98f8927..37da2f1 100644 --- a/packages/api/src/uploads.ts +++ b/packages/api/src/uploads.ts @@ -4,13 +4,13 @@ export const PresignedUploadRequestSchema = z.object({ filename: z.string(), contentType: z.string(), resourceType: z.enum(["route", "activity"]), - resourceId: z.string().uuid(), + resourceId: z.uuid(), }); export const PresignedUploadResponseSchema = z.object({ - uploadUrl: z.string().url(), + uploadUrl: z.url(), storageKey: z.string(), - expiresAt: z.string().datetime(), + expiresAt: z.iso.datetime(), }); export type PresignedUploadRequest = z.infer;