/** * Availability "pickups" admin routes — the CRUD/batch surfaces for the seven * pickup-and-meeting resources: availability pickup points, slot pickups, * product meeting configs, pickup groups, pickup locations, location pickup * times, and custom pickup areas. Mounted on the legacy * `/v1/operations/availability/*` surface (operator React clients hit those * paths) AND, for the published OpenAPI admin contract, on the staff surface at * `/v1/admin/operations/availability/*` (see `availability/routes.ts`). * * Migrated to `@hono/zod-openapi` for the OpenAPI admin backfill (voyant#2114 / * voyant#2208 — operations sub-batch 10C). Request schemas reuse the exported * `validation.ts` insert/update/list-query schemas the handlers already parse; * response row schemas are authored here from the Drizzle `$inferSelect` shapes * (§17 dates → strings, plus the service-joined `productName` on the pickup-point * and meeting-config list rows). Each resource is its own small `OpenAPIHono` * sub-chain composed onto `availabilityPickupRoutes` via `.route("/")` so the * `.openapi()` operations propagate up through the parent availability * registries while keeping type-inference cost bounded (one flat chain has O(n²) * inference cost). * * agent-quality: file-size exception — intentional: a mechanically-repetitive * CRUD + batch bundle over seven pickup resources (49 legs), each with a * `createRoute` def + co-located handler per the established admin route pattern * (mirrors `routes-core.ts`). Splitting per resource would fragment the single * mounted instance without aiding review. See voyant#2114 / voyant#2208 * (operations sub-batch 10C). */ import { OpenAPIHono } from "@hono/zod-openapi"; import { type Env } from "./routes-shared.js"; /** * Compose the per-resource sub-chains onto a single `OpenAPIHono` so the * `.openapi()` operations propagate up through the parent availability * registries (`OpenAPIHono.route` copies the sub-app's registered routes). */ export declare const availabilityPickupRoutes: OpenAPIHono & import("hono/types").MergeSchemaPath<{ "/location-pickup-times": { $get: { input: { query: { limit?: unknown; offset?: unknown; pickupLocationId?: string | undefined; slotId?: string | undefined; startTimeId?: string | undefined; active?: "0" | "1" | "true" | "false" | undefined; }; }; output: { data: { id: string; pickupLocationId: string; slotId: string | null; startTimeId: string | null; timingMode: "fixed_time" | "offset_from_start"; localTime: string | null; offsetMinutes: number | null; instructions: string | null; initialCapacity: number | null; remainingCapacity: number | null; active: boolean; createdAt: string; updatedAt: string; }[]; total: number; limit: number; offset: number; }; outputFormat: "json"; status: 200; }; }; } & { "/location-pickup-times": { $post: { input: { json: { pickupLocationId: string; slotId?: string | null | undefined; startTimeId?: string | null | undefined; timingMode?: "fixed_time" | "offset_from_start" | undefined; localTime?: string | null | undefined; offsetMinutes?: number | null | undefined; instructions?: string | null | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { pickupLocationId: string; slotId?: string | null | undefined; startTimeId?: string | null | undefined; timingMode?: "fixed_time" | "offset_from_start" | undefined; localTime?: string | null | undefined; offsetMinutes?: number | null | undefined; instructions?: string | null | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; active?: boolean | undefined; }; }; output: { data: { id: string; pickupLocationId: string; slotId: string | null; startTimeId: string | null; timingMode: "fixed_time" | "offset_from_start"; localTime: string | null; offsetMinutes: number | null; instructions: string | null; initialCapacity: number | null; remainingCapacity: number | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 201; }; }; } & { "/location-pickup-times/batch-update": { $post: { input: { json: { ids: string[]; patch: { pickupLocationId?: string | undefined; slotId?: string | null | undefined; startTimeId?: string | null | undefined; timingMode?: "fixed_time" | "offset_from_start" | undefined; localTime?: string | null | undefined; offsetMinutes?: number | null | undefined; instructions?: string | null | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; active?: boolean | undefined; }; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; patch: { pickupLocationId?: string | undefined; slotId?: string | null | undefined; startTimeId?: string | null | undefined; timingMode?: "fixed_time" | "offset_from_start" | undefined; localTime?: string | null | undefined; offsetMinutes?: number | null | undefined; instructions?: string | null | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; active?: boolean | undefined; }; }; }; output: { data: { id: string; pickupLocationId: string; slotId: string | null; startTimeId: string | null; timingMode: "fixed_time" | "offset_from_start"; localTime: string | null; offsetMinutes: number | null; instructions: string | null; initialCapacity: number | null; remainingCapacity: number | null; active: boolean; createdAt: string; updatedAt: string; }[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/location-pickup-times/batch-delete": { $post: { input: { json: { ids: string[]; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; }; }; output: { deletedIds: string[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/location-pickup-times/:id": { $get: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { data: { id: string; pickupLocationId: string; slotId: string | null; startTimeId: string | null; timingMode: "fixed_time" | "offset_from_start"; localTime: string | null; offsetMinutes: number | null; instructions: string | null; initialCapacity: number | null; remainingCapacity: number | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/location-pickup-times/:id": { $patch: { input: { param: { id: string; }; } & { json: { pickupLocationId?: string | undefined; slotId?: string | null | undefined; startTimeId?: string | null | undefined; timingMode?: "fixed_time" | "offset_from_start" | undefined; localTime?: string | null | undefined; offsetMinutes?: number | null | undefined; instructions?: string | null | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { param: { id: string; }; } & { json: { pickupLocationId?: string | undefined; slotId?: string | null | undefined; startTimeId?: string | null | undefined; timingMode?: "fixed_time" | "offset_from_start" | undefined; localTime?: string | null | undefined; offsetMinutes?: number | null | undefined; instructions?: string | null | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; } & { json: { pickupLocationId?: string | undefined; slotId?: string | null | undefined; startTimeId?: string | null | undefined; timingMode?: "fixed_time" | "offset_from_start" | undefined; localTime?: string | null | undefined; offsetMinutes?: number | null | undefined; instructions?: string | null | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; active?: boolean | undefined; }; }; output: { data: { id: string; pickupLocationId: string; slotId: string | null; startTimeId: string | null; timingMode: "fixed_time" | "offset_from_start"; localTime: string | null; offsetMinutes: number | null; instructions: string | null; initialCapacity: number | null; remainingCapacity: number | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/location-pickup-times/:id": { $delete: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { success: true; }; outputFormat: "json"; status: 200; }; }; }, "/"> & import("hono/types").MergeSchemaPath<{ "/pickup-locations": { $get: { input: { query: { limit?: unknown; offset?: unknown; groupId?: string | undefined; facilityId?: string | undefined; active?: "0" | "1" | "true" | "false" | undefined; }; }; output: { data: { id: string; groupId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; leadTimeMinutes: number | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }[]; total: number; limit: number; offset: number; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-locations": { $post: { input: { json: { groupId: string; name: string; facilityId?: string | null | undefined; description?: string | null | undefined; locationText?: string | null | undefined; leadTimeMinutes?: number | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { groupId: string; name: string; facilityId?: string | null | undefined; description?: string | null | undefined; locationText?: string | null | undefined; leadTimeMinutes?: number | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { data: { id: string; groupId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; leadTimeMinutes: number | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 201; }; }; } & { "/pickup-locations/batch-update": { $post: { input: { json: { ids: string[]; patch: { groupId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; leadTimeMinutes?: number | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; patch: { groupId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; leadTimeMinutes?: number | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; }; output: { data: { id: string; groupId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; leadTimeMinutes: number | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-locations/batch-delete": { $post: { input: { json: { ids: string[]; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; }; }; output: { deletedIds: string[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-locations/:id": { $get: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { data: { id: string; groupId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; leadTimeMinutes: number | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-locations/:id": { $patch: { input: { param: { id: string; }; } & { json: { groupId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; leadTimeMinutes?: number | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { param: { id: string; }; } & { json: { groupId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; leadTimeMinutes?: number | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; } & { json: { groupId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; leadTimeMinutes?: number | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { data: { id: string; groupId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; leadTimeMinutes: number | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-locations/:id": { $delete: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { success: true; }; outputFormat: "json"; status: 200; }; }; }, "/"> & import("hono/types").MergeSchemaPath<{ "/pickup-groups": { $get: { input: { query: { limit?: unknown; offset?: unknown; meetingConfigId?: string | undefined; kind?: "pickup" | "dropoff" | "meeting" | undefined; active?: "0" | "1" | "true" | "false" | undefined; }; }; output: { data: { id: string; meetingConfigId: string; kind: "pickup" | "dropoff" | "meeting"; name: string; description: string | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }[]; total: number; limit: number; offset: number; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-groups": { $post: { input: { json: { meetingConfigId: string; kind: "pickup" | "dropoff" | "meeting"; name: string; description?: string | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { meetingConfigId: string; kind: "pickup" | "dropoff" | "meeting"; name: string; description?: string | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { data: { id: string; meetingConfigId: string; kind: "pickup" | "dropoff" | "meeting"; name: string; description: string | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 201; }; }; } & { "/pickup-groups/batch-update": { $post: { input: { json: { ids: string[]; patch: { meetingConfigId?: string | undefined; kind?: "pickup" | "dropoff" | "meeting" | undefined; name?: string | undefined; description?: string | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; patch: { meetingConfigId?: string | undefined; kind?: "pickup" | "dropoff" | "meeting" | undefined; name?: string | undefined; description?: string | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; }; output: { data: { id: string; meetingConfigId: string; kind: "pickup" | "dropoff" | "meeting"; name: string; description: string | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-groups/batch-delete": { $post: { input: { json: { ids: string[]; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; }; }; output: { deletedIds: string[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-groups/:id": { $get: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { data: { id: string; meetingConfigId: string; kind: "pickup" | "dropoff" | "meeting"; name: string; description: string | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-groups/:id": { $patch: { input: { param: { id: string; }; } & { json: { meetingConfigId?: string | undefined; kind?: "pickup" | "dropoff" | "meeting" | undefined; name?: string | undefined; description?: string | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { param: { id: string; }; } & { json: { meetingConfigId?: string | undefined; kind?: "pickup" | "dropoff" | "meeting" | undefined; name?: string | undefined; description?: string | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; } & { json: { meetingConfigId?: string | undefined; kind?: "pickup" | "dropoff" | "meeting" | undefined; name?: string | undefined; description?: string | null | undefined; active?: boolean | undefined; sortOrder?: number | undefined; }; }; output: { data: { id: string; meetingConfigId: string; kind: "pickup" | "dropoff" | "meeting"; name: string; description: string | null; active: boolean; sortOrder: number; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-groups/:id": { $delete: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { success: true; }; outputFormat: "json"; status: 200; }; }; }, "/"> & import("hono/types").MergeSchemaPath<{ "/meeting-configs": { $get: { input: { query: { limit?: unknown; offset?: unknown; productId?: string | undefined; optionId?: string | undefined; facilityId?: string | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; active?: "0" | "1" | "true" | "false" | undefined; }; }; output: { data: { id: string; productId: string; optionId: string | null; facilityId: string | null; mode: "meeting_only" | "pickup_only" | "meet_or_pickup"; allowCustomPickup: boolean; allowCustomDropoff: boolean; requiresPickupSelection: boolean; requiresDropoffSelection: boolean; usePickupAllotment: boolean; meetingInstructions: string | null; pickupInstructions: string | null; dropoffInstructions: string | null; active: boolean; createdAt: string; updatedAt: string; productName?: string | null | undefined; }[]; total: number; limit: number; offset: number; }; outputFormat: "json"; status: 200; }; }; } & { "/meeting-configs": { $post: { input: { json: { productId: string; optionId?: string | null | undefined; facilityId?: string | null | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; allowCustomPickup?: boolean | undefined; allowCustomDropoff?: boolean | undefined; requiresPickupSelection?: boolean | undefined; requiresDropoffSelection?: boolean | undefined; usePickupAllotment?: boolean | undefined; meetingInstructions?: string | null | undefined; pickupInstructions?: string | null | undefined; dropoffInstructions?: string | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { productId: string; optionId?: string | null | undefined; facilityId?: string | null | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; allowCustomPickup?: boolean | undefined; allowCustomDropoff?: boolean | undefined; requiresPickupSelection?: boolean | undefined; requiresDropoffSelection?: boolean | undefined; usePickupAllotment?: boolean | undefined; meetingInstructions?: string | null | undefined; pickupInstructions?: string | null | undefined; dropoffInstructions?: string | null | undefined; active?: boolean | undefined; }; }; output: { data: { id: string; productId: string; optionId: string | null; facilityId: string | null; mode: "meeting_only" | "pickup_only" | "meet_or_pickup"; allowCustomPickup: boolean; allowCustomDropoff: boolean; requiresPickupSelection: boolean; requiresDropoffSelection: boolean; usePickupAllotment: boolean; meetingInstructions: string | null; pickupInstructions: string | null; dropoffInstructions: string | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 201; }; }; } & { "/meeting-configs/batch-update": { $post: { input: { json: { ids: string[]; patch: { productId?: string | undefined; optionId?: string | null | undefined; facilityId?: string | null | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; allowCustomPickup?: boolean | undefined; allowCustomDropoff?: boolean | undefined; requiresPickupSelection?: boolean | undefined; requiresDropoffSelection?: boolean | undefined; usePickupAllotment?: boolean | undefined; meetingInstructions?: string | null | undefined; pickupInstructions?: string | null | undefined; dropoffInstructions?: string | null | undefined; active?: boolean | undefined; }; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; patch: { productId?: string | undefined; optionId?: string | null | undefined; facilityId?: string | null | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; allowCustomPickup?: boolean | undefined; allowCustomDropoff?: boolean | undefined; requiresPickupSelection?: boolean | undefined; requiresDropoffSelection?: boolean | undefined; usePickupAllotment?: boolean | undefined; meetingInstructions?: string | null | undefined; pickupInstructions?: string | null | undefined; dropoffInstructions?: string | null | undefined; active?: boolean | undefined; }; }; }; output: { data: { id: string; productId: string; optionId: string | null; facilityId: string | null; mode: "meeting_only" | "pickup_only" | "meet_or_pickup"; allowCustomPickup: boolean; allowCustomDropoff: boolean; requiresPickupSelection: boolean; requiresDropoffSelection: boolean; usePickupAllotment: boolean; meetingInstructions: string | null; pickupInstructions: string | null; dropoffInstructions: string | null; active: boolean; createdAt: string; updatedAt: string; }[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/meeting-configs/batch-delete": { $post: { input: { json: { ids: string[]; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; }; }; output: { deletedIds: string[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/meeting-configs/:id": { $get: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { data: { id: string; productId: string; optionId: string | null; facilityId: string | null; mode: "meeting_only" | "pickup_only" | "meet_or_pickup"; allowCustomPickup: boolean; allowCustomDropoff: boolean; requiresPickupSelection: boolean; requiresDropoffSelection: boolean; usePickupAllotment: boolean; meetingInstructions: string | null; pickupInstructions: string | null; dropoffInstructions: string | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/meeting-configs/:id": { $patch: { input: { param: { id: string; }; } & { json: { productId?: string | undefined; optionId?: string | null | undefined; facilityId?: string | null | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; allowCustomPickup?: boolean | undefined; allowCustomDropoff?: boolean | undefined; requiresPickupSelection?: boolean | undefined; requiresDropoffSelection?: boolean | undefined; usePickupAllotment?: boolean | undefined; meetingInstructions?: string | null | undefined; pickupInstructions?: string | null | undefined; dropoffInstructions?: string | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { param: { id: string; }; } & { json: { productId?: string | undefined; optionId?: string | null | undefined; facilityId?: string | null | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; allowCustomPickup?: boolean | undefined; allowCustomDropoff?: boolean | undefined; requiresPickupSelection?: boolean | undefined; requiresDropoffSelection?: boolean | undefined; usePickupAllotment?: boolean | undefined; meetingInstructions?: string | null | undefined; pickupInstructions?: string | null | undefined; dropoffInstructions?: string | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; } & { json: { productId?: string | undefined; optionId?: string | null | undefined; facilityId?: string | null | undefined; mode?: "meeting_only" | "pickup_only" | "meet_or_pickup" | undefined; allowCustomPickup?: boolean | undefined; allowCustomDropoff?: boolean | undefined; requiresPickupSelection?: boolean | undefined; requiresDropoffSelection?: boolean | undefined; usePickupAllotment?: boolean | undefined; meetingInstructions?: string | null | undefined; pickupInstructions?: string | null | undefined; dropoffInstructions?: string | null | undefined; active?: boolean | undefined; }; }; output: { data: { id: string; productId: string; optionId: string | null; facilityId: string | null; mode: "meeting_only" | "pickup_only" | "meet_or_pickup"; allowCustomPickup: boolean; allowCustomDropoff: boolean; requiresPickupSelection: boolean; requiresDropoffSelection: boolean; usePickupAllotment: boolean; meetingInstructions: string | null; pickupInstructions: string | null; dropoffInstructions: string | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/meeting-configs/:id": { $delete: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { success: true; }; outputFormat: "json"; status: 200; }; }; }, "/"> & import("hono/types").MergeSchemaPath<{ "/slot-pickups": { $get: { input: { query: { limit?: unknown; offset?: unknown; slotId?: string | undefined; pickupPointId?: string | undefined; }; }; output: { data: { id: string; slotId: string; pickupPointId: string; initialCapacity: number | null; remainingCapacity: number | null; createdAt: string; updatedAt: string; }[]; total: number; limit: number; offset: number; }; outputFormat: "json"; status: 200; }; }; } & { "/slot-pickups": { $post: { input: { json: { slotId: string; pickupPointId: string; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { slotId: string; pickupPointId: string; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; }; }; output: { data: { id: string; slotId: string; pickupPointId: string; initialCapacity: number | null; remainingCapacity: number | null; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 201; }; }; } & { "/slot-pickups/batch-update": { $post: { input: { json: { ids: string[]; patch: { slotId?: string | undefined; pickupPointId?: string | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; }; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; patch: { slotId?: string | undefined; pickupPointId?: string | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; }; }; }; output: { data: { id: string; slotId: string; pickupPointId: string; initialCapacity: number | null; remainingCapacity: number | null; createdAt: string; updatedAt: string; }[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/slot-pickups/batch-delete": { $post: { input: { json: { ids: string[]; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; }; }; output: { deletedIds: string[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/slot-pickups/:id": { $get: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { data: { id: string; slotId: string; pickupPointId: string; initialCapacity: number | null; remainingCapacity: number | null; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/slot-pickups/:id": { $patch: { input: { param: { id: string; }; } & { json: { slotId?: string | undefined; pickupPointId?: string | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { param: { id: string; }; } & { json: { slotId?: string | undefined; pickupPointId?: string | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; } & { json: { slotId?: string | undefined; pickupPointId?: string | undefined; initialCapacity?: number | null | undefined; remainingCapacity?: number | null | undefined; }; }; output: { data: { id: string; slotId: string; pickupPointId: string; initialCapacity: number | null; remainingCapacity: number | null; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/slot-pickups/:id": { $delete: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { success: true; }; outputFormat: "json"; status: 200; }; }; }, "/"> & import("hono/types").MergeSchemaPath<{ "/pickup-points": { $get: { input: { query: { limit?: unknown; offset?: unknown; productId?: string | undefined; facilityId?: string | undefined; active?: "0" | "1" | "true" | "false" | undefined; }; }; output: { data: { id: string; productId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; active: boolean; createdAt: string; updatedAt: string; productName?: string | null | undefined; }[]; total: number; limit: number; offset: number; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-points": { $post: { input: { json: { productId: string; name: string; facilityId?: string | null | undefined; description?: string | null | undefined; locationText?: string | null | undefined; active?: boolean | undefined; }; }; output: { data: { id: string; productId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 201; } | { input: { json: { productId: string; name: string; facilityId?: string | null | undefined; description?: string | null | undefined; locationText?: string | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; }; }; } & { "/pickup-points/batch-update": { $post: { input: { json: { ids: string[]; patch: { productId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; active?: boolean | undefined; }; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; patch: { productId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; active?: boolean | undefined; }; }; }; output: { data: { id: string; productId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; active: boolean; createdAt: string; updatedAt: string; }[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-points/batch-delete": { $post: { input: { json: { ids: string[]; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { json: { ids: string[]; }; }; output: { deletedIds: string[]; total: number; succeeded: number; failed: { id: string; error: string; }[]; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-points/:id": { $get: { input: { param: { id: string; }; }; output: { data: { id: string; productId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; } | { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; }; }; } & { "/pickup-points/:id": { $patch: { input: { param: { id: string; }; } & { json: { productId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 400; } | { input: { param: { id: string; }; } & { json: { productId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; active?: boolean | undefined; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; } & { json: { productId?: string | undefined; facilityId?: string | null | undefined; name?: string | undefined; description?: string | null | undefined; locationText?: string | null | undefined; active?: boolean | undefined; }; }; output: { data: { id: string; productId: string; facilityId: string | null; name: string; description: string | null; locationText: string | null; active: boolean; createdAt: string; updatedAt: string; }; }; outputFormat: "json"; status: 200; }; }; } & { "/pickup-points/:id": { $delete: { input: { param: { id: string; }; }; output: { error: string; }; outputFormat: "json"; status: 404; } | { input: { param: { id: string; }; }; output: { success: true; }; outputFormat: "json"; status: 200; }; }; }, "/">, "/">;