import type { Schema, Infer } from '../../data/schema/types.js'; import type { DB } from '../../data/db/index.js'; import type { Handler, HttpMethod, RouteMeta, AuthRequirement, PermissionMeta, JobRetryConfig, JobTransactionMode, Checkpoint, RouteScreen } from './types.js'; import type { ResourceOperations, Resource, PaginationConfig } from '../fixture/types.js'; import type { HttpRequest, HttpResponse } from '../http/types.js'; interface BuilderState { databases: string[]; requiresAuth: boolean; authRequirement: AuthRequirement; inputSchema: Schema | null; outputSchemas: Map; querySchema: Schema | null; paramsSchema: Schema | null; route: RouteMeta | null; isJob: boolean; jobType: string | null; jobRetry: JobRetryConfig | null; jobTimeout: number | null; jobTransaction: JobTransactionMode; permission: PermissionMeta | null; pagination: PaginationConfig | null; wantsRequest: boolean; wantsResponse: boolean; wantsRawBody: boolean; } /** * Deps shape after `.transaction('manual')`: the databases the handler declared * with `.use()` move out of the top-level deps (a non-transactional handle there * would be a footgun) and into `checkpoint`'s callback, which binds them inside a * fresh tenant-scoped transaction. `checkpoint` is added in their place. */ type ManualDeps = Omit & { checkpoint: Checkpoint; }; export declare class Builder, TDb extends Record = Record> { private readonly state; constructor(state?: Partial); use(): Builder; use(name: N): Builder, TDb & Record>; auth(): Builder; authOptional(): Builder; public(): Builder; input(schema: T): Builder; }, TDb>; query(schema: T): Builder; }, TDb>; params(schema: T): Builder; }, TDb>; output(schema: T): Builder; output(status: number, schema: T): Builder; route(method: HttpMethod, path: string, options?: { bodyLimit?: number; screen?: RouteScreen; }): Builder; job(type?: string): Builder; /** * Selects how the job's database transaction(s) are managed. * * `'auto'` (default) keeps the single framework-owned outer transaction. * `'manual'` opens no outer transaction; the handler instead receives a * `checkpoint(fn)` primitive and owns its own commit boundaries — the * databases declared with `.use()` move from the top-level deps into * `checkpoint`'s callback. The job's contract shifts from atomic to * at-least-once / idempotent-on-resume; the handler owns resume. */ transaction(mode: 'auto'): Builder; transaction(mode: 'manual'): Builder, TDb>; retry(config: JobRetryConfig): Builder; timeout(ms: number): Builder; permission(resource: string, action: string, scope?: string): Builder; paginate(config?: { defaultLimit?: number; maxLimit?: number; }): Builder; request(): Builder; response(): Builder; rawBody(): Builder; fixture(name: string, operations: ResourceOperations): Resource; fit(fn: (deps: TDeps) => Promise): Handler; } export declare function createBuilder(): Builder>; export {}; //# sourceMappingURL=builder.d.ts.map