UNPKG

@outerbase/browsable-durable-object

Version:

A browsable SQL query interface for Cloudflare Durable Objects

114 lines (113 loc) 3.69 kB
import { DurableObject } from "cloudflare:workers"; export declare const corsHeaders: { readonly 'Access-Control-Allow-Origin': "*"; readonly 'Access-Control-Allow-Methods': "GET, POST, PATCH, PUT, DELETE, OPTIONS"; readonly 'Access-Control-Allow-Headers': "Authorization, Content-Type, X-Starbase-Source, X-Data-Source"; readonly 'Access-Control-Max-Age': "86400"; }; export declare function corsPreflight(): Response; export type QueryTransactionRequest = { transaction?: QueryRequest[]; }; export type QueryRequest = { sql: string; params?: any[]; }; export declare function createResponse(result: unknown, error: string | undefined, status: number): Response; export declare class BrowsableHandler { sql: SqlStorage | undefined; private supportedRoutes; constructor(sql: SqlStorage | undefined); fetch(request: Request): Promise<Response>; executeTransaction(opts: { queries: { sql: string; params?: any[]; }[]; }): Promise<any>; private executeRawQuery; executeQuery(opts: { sql: string; params?: unknown[]; isRaw?: boolean; }): Promise<Record<string, SqlStorageValue>[] | { columns: string[]; rows: SqlStorageValue[][]; meta: { rows_read: number; rows_written: number; }; }>; } export declare function Browsable(): <T extends { new (...args: any[]): any; }>(constructor: T) => { new (...args: any[]): { [x: string]: any; _bdoHandler?: BrowsableHandler; fetch(request: Request): Promise<Response>; __studio(cmd: StudioRequest): Promise<{ headers: { name: string; displayName: string; originalType: string; type: undefined; }[]; rows: Record<string, unknown>[]; stat: { queryDurationMs: number; rowsAffected: number; rowsRead: number; rowsWritten: number; }; } | { headers: { name: string; displayName: string; originalType: string; type: undefined; }[]; rows: Record<string, unknown>[]; stat: { queryDurationMs: number; rowsAffected: number; rowsRead: number; rowsWritten: number; }; }[] | undefined>; }; } & T; export declare class BrowsableDurableObject<TEnv = any> extends DurableObject<TEnv> { sql: SqlStorage | undefined; protected _bdoHandler?: BrowsableHandler; constructor(state: DurableObjectState, env: TEnv); fetch(request: Request): Promise<Response>; } /** * Studio * ------ * * This is the built in Studio UI inside of the Browsable extension. It allows you to optionally * setup a route to enable it. The landing page has an input for you to decide which Durable Object * ID you want to view the data for. After you have entered the identifier the second page is the * Studio database browser experience. */ interface StudioQueryRequest { type: 'query'; id: string; statement: string; } interface StudioTransactionRequest { type: 'transaction'; id: string; statements: string[]; } type StudioRequest = StudioQueryRequest | StudioTransactionRequest; interface StudioOptions { basicAuth?: { username: string; password: string; }; } export declare function studio(request: Request, doNamespace: DurableObjectNamespace<any>, options?: StudioOptions): Promise<Response>; export {};