export interface ColumnType { _sqlType: string; } export declare function string(): ColumnType; export declare function number(): ColumnType; export declare function boolean(): ColumnType; export declare function table>(columns: T): T; export interface CapsuleAuth { isGuest: boolean; userId: string; displayName?: string; picture?: string; email?: string; } export interface CapsuleLog { info(msg: string, data?: any): void; error(msg: string, data?: any): void; } export interface CapsuleDbTable { where(column: string, value: any): QueryBuilder; orderBy(column: string, dir: "asc" | "desc"): QueryBuilder; limit(n: number): QueryBuilder; offset(n: number): QueryBuilder; all(): any[]; count(): number; get(id: string): any; insert(data: Record): any; update(id: string, data: Record): any; delete(id: string): void; } export interface QueryBuilder { orderBy(column: string, dir: "asc" | "desc"): QueryBuilder; limit(n: number): QueryBuilder; offset(n: number): QueryBuilder; all(): any[]; count(): number; } export interface CapsuleDb { [tableName: string]: CapsuleDbTable; } export interface AiCompleteOptions { prompt: string; model?: string; system?: string; maxTokens?: number; temperature?: number; } export interface CapsuleAi { complete(opts: AiCompleteOptions): Promise; stream(opts: AiCompleteOptions): AsyncIterable; } export interface CapsuleShopify { graphql(query: string, variables?: Record): Promise; } export interface CapsuleBlob { put(key: string, bytes: Uint8Array | ArrayBuffer | Buffer | string, options?: { contentType?: string; }): Promise<{ key: string; size: number; }>; get(key: string): Promise<{ bytes: Buffer; contentType: string; } | null>; delete(key: string): Promise; list(prefix?: string): Promise>; } export interface CapsuleContext { auth: CapsuleAuth; db: CapsuleDb; transaction(fn: () => T): T; env: Record; log: CapsuleLog; ai: CapsuleAi; blob: CapsuleBlob; shopify: CapsuleShopify; } export type QueryHandler = (ctx: CapsuleContext, ...args: TArgs) => TResult | Promise; export type MutationHandler = (ctx: CapsuleContext, ...args: TArgs) => TResult | Promise; export interface EndpointRequest { headers: Headers; query: Record; json(): Promise; text(): Promise; bytes(): Promise; } export interface EndpointResponse { body: string | null; status: number; headers: Record; } export type EndpointHandler = (ctx: CapsuleContext, req: EndpointRequest) => EndpointResponse | Promise; export interface SocketLike { send(data: string): void; close(code?: number, reason?: string): void; on(event: "message", listener: (data: string) => void): void; on(event: "close", listener: () => void): void; } export type SocketHandler = (ctx: CapsuleContext, socket: SocketLike) => void | Promise; interface SocketDefinition { _kind: "socket"; handler: SocketHandler; } export declare function json(body: any, init?: { status?: number; headers?: Record; }): EndpointResponse; export declare function text(body: string, init?: { status?: number; headers?: Record; }): EndpointResponse; export interface RouteRateLimit { perMinute?: number; perHour?: number; by?: "ip" | "user"; } export interface CapsuleDefinition { schema: Record>; queries: Record; mutations: Record; endpoints?: Record; sockets?: Record; allowedOrigins?: string[]; rateLimit?: Record; public?: boolean; static?: boolean; title?: string; description?: string; } interface EndpointDefinition { _method: string; _path: string; handler: EndpointHandler; } export declare function capsule(def: { schema: Record>; queries: Record; mutations: Record; endpoints?: Record EndpointResponse | Promise)>; sockets?: Record; allowedOrigins?: string[]; rateLimit?: Record; public?: boolean; static?: boolean; title?: string; description?: string; }): CapsuleDefinition; export declare function query(handler: QueryHandler): QueryHandler; export declare function mutation(handler: MutationHandler): MutationHandler; export declare function endpoint(opts: { method: string; path: string; }, handler: EndpointHandler): EndpointDefinition; export declare function socket(handler: SocketHandler): SocketDefinition; export declare function requireUser(ctx: CapsuleContext): string; export declare function requireOwner(ctx: CapsuleContext, table: string, id: string, ownerColumn?: string): Record; export {}; //# sourceMappingURL=index.d.ts.map