import type { ErrorCode } from "@opengeni/contracts"; import { HTTPException } from "hono/http-exception"; type ApiHttpErrorOptions = { code: ErrorCode; message: string; retryable?: boolean; outcomeUnknown?: boolean; details?: Record; }; /** A public, structured API failure whose message and details are safe for clients. */ export declare class ApiHttpError extends HTTPException { readonly code: ErrorCode; readonly retryable: boolean | undefined; readonly outcomeUnknown: boolean | undefined; readonly details: Record | undefined; constructor(status: number, options: ApiHttpErrorOptions); } /** * A request-scoped session/workspace mutation could not enter the workspace * control prefix within its bounded wait. The transaction rolled back before * any write, so the outcome is known and the client may retry. `app.onError` * applies this once for every route; Slack interactions keep the raw typed * error so their retry classifier treats it as transient. */ export declare function workspaceControlBusyHttpError(error: unknown): ApiHttpError | null; export {};