/** * `/api/v1/presets` — saved phase selections (DES-TEAMING-002 §8.4, seam C2): * * GET /presets[?projectId=] the presets a launch in that project sees, by name * GET /presets/:name[?projectId=] one preset (the project's row, else the global one) * PUT /presets/:name save {steps, projectId?} (global when projectId is absent) * DELETE /presets/:name[?projectId=] delete in that scope * * A preset is launched by NAME: `POST /runs {workflow: ""}`. The ENGINE resolves it (the * launch's project row, then the global row, then a registered workflow of that name), so the same * name launches the same selection from a campaign node or a bus `wicked.crew.run.requested` with * no crew involvement. These routes are commands and reads over the engine's store (§4.0); crew * keeps no copy and publishes no event. * * Engine error → status: the engine's message leads with a reason token. * `preset_builtin_readonly` 409 · `preset_unknown_project` 404 · any other `preset_*` 400. * An addon without the bindings answers 501 (PresetsUnsupportedError), never 400. */ import type { FastifyInstance } from 'fastify'; import { z } from 'zod'; import type { CoreAdapter } from '../core/adapter.js'; import { AuditLog } from '../api/audit.js'; export declare const PutPresetSchema: z.ZodObject<{ steps: z.ZodArray, z.objectInputType<{ catalog: z.ZodString; id: z.ZodString; }, z.ZodTypeAny, "passthrough">>, "many">; projectId: z.ZodOptional; }, "strict", z.ZodTypeAny, { steps: z.objectOutputType<{ catalog: z.ZodString; id: z.ZodString; }, z.ZodTypeAny, "passthrough">[]; projectId?: string | undefined; }, { steps: z.objectInputType<{ catalog: z.ZodString; id: z.ZodString; }, z.ZodTypeAny, "passthrough">[]; projectId?: string | undefined; }>; /** Engine error → HTTP status (the mapping in the module doc). */ export declare function presetErrorStatus(err: unknown): number; export declare function registerPresetRoutes(app: FastifyInstance, adapter: CoreAdapter, security?: { audit: AuditLog; }): void; //# sourceMappingURL=routes.d.ts.map