/** * Core Entity Durable Object - SQL Storage * DO NOT MODIFY THIS FILE - You may break the entity functionality * * EntityDO is the per-app entity storage system backed by native SQLite. * All entities of the same type share one DO instance, keyed by entity ID. * * Features: * - SQL-backed document storage with versioning (CAS operations) * - Server-side query, search, sort, count via json_extract() * - Security: field name validation, LIKE escaping, input limits * - Auto-migration from legacy KV storage * * NO SCHEDULING - Use SchedulerDO for scheduled jobs */ import { DurableObject } from 'cloudflare:workers'; import type { Env } from './core-utils'; export declare const SAFE_FIELD_NAME: RegExp; export declare function validateFieldName(field: string): string; export declare function escapeLikePattern(input: string): string; export declare const QUERY_LIMITS: { MAX_SEARCH_LENGTH: number; MAX_FILTER_COUNT: number; MAX_SEARCH_FIELDS: number; MAX_LIMIT: number; MAX_DATA_SIZE: number; }; interface QueryOptions { limit?: number; offset?: number; cursor?: string | null; filters?: Record; search?: { query: string; fields: string[]; }; sort?: { field: string; order: 'asc' | 'desc'; }; } interface QueryResult { items: Array<{ key: string; v: number; data: unknown; }>; total: number; hasMore: boolean; next: string | null; } /** * Versioned document type for entity storage */ export type Doc = { v: number; data: T; }; /** * EntityDO - Per-app entity storage with SQL queries * * This Durable Object provides: * - Document storage with optimistic concurrency (CAS) via SQLite * - Query with search, sort, filter, pagination via json_extract() * - Count with optional filters * - Security validation on all field names */ export declare class EntityDO extends DurableObject { private _tableReady; private _migrationDone; constructor(ctx: DurableObjectState, env: Env); private ensureTable; private migrateFromKV; getDoc(key: string): { v: number; data: unknown; } | null; casPut(key: string, expectedV: number, data: unknown): { ok: boolean; v: number; }; del(key: string): boolean; has(key: string): boolean; queryEntities(options?: QueryOptions): QueryResult; countEntities(filters?: Record): number; bulkCreate(items: Array<{ key: string; data: unknown; }>): Array<{ key: string; v: number; data: unknown; }>; bulkUpdate(updates: Array<{ key: string; data: Record; }>): Array<{ key: string; ok: boolean; v: number; data: unknown; }>; bulkDelete(keys: string[]): number; exportAll(): Array<{ key: string; v: number; data: unknown; }>; importAll(items: Array<{ key: string; v: number; data: unknown; }>): { imported: number; }; } export {};