{"version":3,"sources":["../src/miniflare.ts","../src/client.ts"],"sourcesContent":["/**\n * Miniflare Integration\n *\n * Provides a miniflare-based Durable Object binding for Node.js development/testing.\n * This allows you to use the same MDXDatabase API locally.\n *\n * @example\n * ```ts\n * import { createMiniflareBinding } from '@mdxdb/sqlite/miniflare'\n *\n * const binding = await createMiniflareBinding('./.data')\n * const id = binding.idFromName('example.com')\n * const db = binding.get(id)\n *\n * // Use the same RPC methods\n * await db.create({ ns: 'example.com', type: 'Post', data: { title: 'Hello' } })\n * ```\n *\n * @packageDocumentation\n */\n\n// DurableObjectNamespace, DurableObjectId, DurableObjectStub are global from @cloudflare/workers-types\nimport type {\n  MDXDatabaseRPC,\n  Thing,\n  Artifact,\n  ArtifactType,\n  ActionStatus,\n} from './types.js'\n\n// Miniflare types (we'll import dynamically)\ninterface MiniflareOptions {\n  modules: boolean\n  script?: string\n  scriptPath?: string\n  durableObjects: Record<string, string>\n  durableObjectsPersist?: string\n}\n\ninterface Miniflare {\n  getDurableObjectNamespace(name: string): Promise<DurableObjectNamespace<MDXDatabaseRPC>>\n  dispose(): Promise<void>\n}\n\n// Cache miniflare instance\nlet miniflareInstance: Miniflare | null = null\nlet miniflareBinding: DurableObjectNamespace<MDXDatabaseRPC> | null = null\n\n/**\n * Create a miniflare-based Durable Object binding\n *\n * This creates a local miniflare instance that emulates the Cloudflare Workers\n * runtime with Durable Objects SQLite storage.\n */\nexport async function createMiniflareBinding(\n  persistPath?: string\n): Promise<DurableObjectNamespace<MDXDatabaseRPC>> {\n  // Return cached binding if available\n  if (miniflareBinding) {\n    return miniflareBinding\n  }\n\n  // Dynamic import miniflare and path\n  const { Miniflare: MF } = await import('miniflare')\n  const { fileURLToPath } = await import('node:url')\n  const { dirname, join } = await import('node:path')\n  const { existsSync } = await import('node:fs')\n\n  // Get the path to the durable-object.js file\n  // When running from source (vitest), __dirname is src/\n  // When running from dist, __dirname is dist/\n  const __filename = fileURLToPath(import.meta.url)\n  const __dirname = dirname(__filename)\n\n  // Check if we're running from source (src/) or dist\n  // Miniflare needs the bundled version (no code splitting)\n  let doPath = join(__dirname, 'durable-object.bundled.js')\n  if (!existsSync(doPath)) {\n    // Try dist directory (when running tests from src/)\n    const distPath = join(__dirname, '..', 'dist', 'durable-object.bundled.js')\n    if (existsSync(distPath)) {\n      doPath = distPath\n    } else {\n      throw new Error(\n        `Cannot find durable-object.bundled.js. Tried:\\n  - ${doPath}\\n  - ${distPath}\\n` +\n        `Run 'pnpm build' first if testing with miniflare.`\n      )\n    }\n  }\n\n  // Create miniflare instance with the actual module file\n  // Using type assertion because newer miniflare versions changed the script field to required\n  // but we're using scriptPath which is a valid alternative\n  miniflareInstance = new MF({\n    modules: true,\n    scriptPath: doPath,\n    durableObjects: {\n      MDXDB: {\n        className: 'MDXDatabase',\n        // Enable SQLite for this DO class\n        useSQLite: true,\n      },\n    },\n    durableObjectsPersist: persistPath ?? '.mf/do',\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } as any) as unknown as Miniflare\n\n  // Get the binding\n  miniflareBinding = await miniflareInstance.getDurableObjectNamespace('MDXDB')\n\n  return miniflareBinding\n}\n\n/**\n * Dispose the miniflare instance\n *\n * Call this when you're done to clean up resources.\n */\nexport async function disposeMiniflare(): Promise<void> {\n  if (miniflareInstance) {\n    await miniflareInstance.dispose()\n    miniflareInstance = null\n    miniflareBinding = null\n  }\n}\n\n/**\n * Create a simple in-memory implementation for testing\n *\n * This is a lighter alternative to miniflare for unit tests.\n */\nexport function createInMemoryBinding(): DurableObjectNamespace<MDXDatabaseRPC> {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const instances = new Map<string, any>()\n\n  // Create a simple in-memory SQLite-like storage\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const createInMemoryInstance = (name: string): any => {\n    // Storage maps\n    const things = new Map<string, Record<string, unknown>>()\n    const relationships = new Map<string, Record<string, unknown>>()\n    const search = new Map<string, Record<string, unknown>>()\n    const events = new Map<string, Record<string, unknown>>()\n    const actions = new Map<string, Record<string, unknown>>()\n    const artifacts = new Map<string, Record<string, unknown>>()\n\n    const generateId = () => `${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 9)}`\n\n    const instance: MDXDatabaseRPC = {\n      // Thing operations\n      async list(options = {}) {\n        let result = Array.from(things.values())\n          .filter((t: Record<string, unknown>) => !t.deleted_at)\n\n        if (options.type) {\n          result = result.filter((t: Record<string, unknown>) => t.type === options.type)\n        }\n        if (options.ns) {\n          result = result.filter((t: Record<string, unknown>) => t.ns === options.ns)\n        }\n\n        // Handle where clause\n        if (options.where) {\n          for (const [key, value] of Object.entries(options.where)) {\n            result = result.filter((t: Record<string, unknown>) => {\n              const data = t.data as Record<string, unknown>\n              return data[key] === value\n            })\n          }\n        }\n\n        // Handle ordering\n        if (options.orderBy) {\n          const orderBy = options.orderBy as string\n          result.sort((a: Record<string, unknown>, b: Record<string, unknown>) => {\n            let aVal: string | number | boolean | null | undefined\n            let bVal: string | number | boolean | null | undefined\n            if (['url', 'ns', 'type', 'id', 'created_at', 'updated_at'].includes(orderBy)) {\n              aVal = a[orderBy] as string | number | boolean | null | undefined\n              bVal = b[orderBy] as string | number | boolean | null | undefined\n            } else {\n              // JSON field\n              aVal = (a.data as Record<string, unknown>)[orderBy] as string | number | boolean | null | undefined\n              bVal = (b.data as Record<string, unknown>)[orderBy] as string | number | boolean | null | undefined\n            }\n            if (aVal === undefined || aVal === null) return 1\n            if (bVal === undefined || bVal === null) return -1\n            if (aVal < bVal) return -1\n            if (aVal > bVal) return 1\n            return 0\n          })\n          if (options.order === 'desc') {\n            result.reverse()\n          }\n        }\n\n        // Handle offset and limit\n        if (options.offset) {\n          result = result.slice(options.offset)\n        }\n        if (options.limit) {\n          result = result.slice(0, options.limit)\n        }\n\n        return result.map((row: Record<string, unknown>) => ({\n          ns: row.ns as string,\n          type: row.type as string,\n          id: row.id as string,\n          url: row.url as string,\n          data: row.data as Record<string, unknown>,\n          content: row.content as string | undefined,\n          createdAt: new Date(row.created_at as string),\n          updatedAt: new Date(row.updated_at as string),\n        }))\n      },\n\n      async read(url) {\n        const row = things.get(url)\n        if (!row || row.deleted_at) return null\n\n        return {\n          ns: row.ns as string,\n          type: row.type as string,\n          id: row.id as string,\n          url: row.url as string,\n          data: row.data as Record<string, unknown>,\n          content: row.content as string | undefined,\n          createdAt: new Date(row.created_at as string),\n          updatedAt: new Date(row.updated_at as string),\n        }\n      },\n\n      async readById(type, id) {\n        const url = `https://${name}/${type}/${id}`\n        return instance.read(url)\n      },\n\n      async create(options) {\n        const id = options.id ?? generateId()\n        const url = options.url ?? `https://${options.ns}/${options.type}/${id}`\n        const now = new Date().toISOString()\n\n        if (things.has(url)) {\n          throw new Error(`Thing already exists: ${url}`)\n        }\n\n        const row = {\n          url,\n          ns: options.ns,\n          type: options.type,\n          id,\n          data: options.data,\n          content: options.content ?? '',\n          created_at: now,\n          updated_at: now,\n          deleted_at: null,\n        }\n\n        things.set(url, row)\n\n        return {\n          ns: options.ns,\n          type: options.type,\n          id,\n          url,\n          data: options.data,\n          content: options.content,\n          createdAt: new Date(now),\n          updatedAt: new Date(now),\n        }\n      },\n\n      async update(url, options) {\n        const existing = things.get(url)\n        if (!existing || existing.deleted_at) {\n          throw new Error(`Thing not found: ${url}`)\n        }\n\n        const now = new Date().toISOString()\n        const merged = { ...(existing.data as Record<string, unknown>), ...options.data }\n\n        existing.data = merged\n        existing.updated_at = now\n        if (options.content !== undefined) {\n          existing.content = options.content\n        }\n\n        return {\n          ns: existing.ns as string,\n          type: existing.type as string,\n          id: existing.id as string,\n          url: existing.url as string,\n          data: merged as Record<string, unknown>,\n          content: existing.content as string | undefined,\n          createdAt: new Date(existing.created_at as string),\n          updatedAt: new Date(now),\n        } as Thing\n      },\n\n      async upsert(options) {\n        const id = options.id ?? generateId()\n        const url = options.url ?? `https://${options.ns}/${options.type}/${id}`\n\n        const existing = things.get(url)\n        if (existing && !existing.deleted_at) {\n          return instance.update(url, { data: options.data, content: options.content })\n        }\n\n        return instance.create({ ...options, id, url })\n      },\n\n      async remove(url) {\n        const deleted = things.delete(url)\n        // Also delete relationships\n        for (const [key, rel] of relationships) {\n          if (rel.from_url === url || rel.to_url === url) {\n            relationships.delete(key)\n          }\n        }\n        return deleted\n      },\n\n      async search(options) {\n        const queryLower = options.query.toLowerCase()\n        const all = await instance.list({ type: options.type, limit: options.limit })\n\n        return all.filter(thing => {\n          const searchText = JSON.stringify(thing).toLowerCase()\n          return searchText.includes(queryLower)\n        })\n      },\n\n      // Relationship operations\n      async relate(options) {\n        const id = `rel_${options.from}_${options.type}_${options.to}`\n        const now = new Date().toISOString()\n\n        relationships.set(id, {\n          id,\n          type: options.type,\n          from_url: options.from,\n          to_url: options.to,\n          data: options.data,\n          created_at: now,\n        })\n\n        return {\n          id,\n          type: options.type,\n          from: options.from,\n          to: options.to,\n          data: options.data,\n          createdAt: new Date(now),\n        }\n      },\n\n      async unrelate(from, type, to) {\n        const id = `rel_${from}_${type}_${to}`\n        return relationships.delete(id)\n      },\n\n      async related(url, type, direction) {\n        // Default to 'from' if direction is not specified or undefined\n        const dir = direction ?? 'from'\n        const urls: string[] = []\n\n        for (const rel of relationships.values()) {\n          if (type && rel.type !== type) continue\n\n          // dir='to': Return things this URL points TO (outbound, where from_url = url)\n          if ((dir === 'to' || dir === 'both') && rel.from_url === url) {\n            urls.push(rel.to_url as string)\n          }\n          // dir='from': Return things that point TO this URL (inbound, where to_url = url)\n          if ((dir === 'from' || dir === 'both') && rel.to_url === url) {\n            urls.push(rel.from_url as string)\n          }\n        }\n\n        const result = []\n        for (const u of [...new Set(urls)]) {\n          const thing = await instance.read(u)\n          if (thing) result.push(thing)\n        }\n        return result\n      },\n\n      async relationships(url, type, direction) {\n        // Default to 'both' if direction is not specified or undefined\n        const dir = direction ?? 'both'\n        const result = []\n\n        for (const rel of relationships.values()) {\n          if (type && rel.type !== type) continue\n\n          const matches =\n            (dir === 'from' && rel.from_url === url) ||\n            (dir === 'to' && rel.to_url === url) ||\n            (dir === 'both' && (rel.from_url === url || rel.to_url === url))\n\n          if (matches) {\n            result.push({\n              id: rel.id as string,\n              type: rel.type as string,\n              from: rel.from_url as string,\n              to: rel.to_url as string,\n              data: rel.data as Record<string, unknown> | undefined,\n              createdAt: new Date(rel.created_at as string),\n            })\n          }\n        }\n\n        return result\n      },\n\n      // Vector search (placeholder - requires Vectorize binding in production)\n      async vectorSearch() {\n        return []\n      },\n\n      async setEmbedding() {},\n\n      async upsertEmbeddings() {},\n\n      async deleteVectors() {},\n\n      // Event operations\n      async track(options) {\n        const id = generateId()\n        const now = new Date().toISOString()\n\n        events.set(id, {\n          id,\n          type: options.type,\n          timestamp: now,\n          source: options.source,\n          data: options.data,\n          correlation_id: options.correlationId,\n          causation_id: options.causationId,\n        })\n\n        return {\n          id,\n          type: options.type,\n          timestamp: new Date(now),\n          source: options.source,\n          data: options.data,\n          correlationId: options.correlationId,\n          causationId: options.causationId,\n        }\n      },\n\n      async getEvent(id) {\n        const row = events.get(id)\n        if (!row) return null\n\n        return {\n          id: row.id as string,\n          type: row.type as string,\n          timestamp: new Date(row.timestamp as string),\n          source: row.source as string,\n          data: row.data as Record<string, unknown>,\n          correlationId: row.correlation_id as string | undefined,\n          causationId: row.causation_id as string | undefined,\n        }\n      },\n\n      async queryEvents(options = {}) {\n        let result = Array.from(events.values())\n\n        if (options.type) {\n          result = result.filter((e: Record<string, unknown>) => e.type === options.type)\n        }\n        if (options.source) {\n          result = result.filter((e: Record<string, unknown>) => e.source === options.source)\n        }\n        if (options.limit) {\n          result = result.slice(0, options.limit)\n        }\n\n        return result.map((row: Record<string, unknown>) => ({\n          id: row.id as string,\n          type: row.type as string,\n          timestamp: new Date(row.timestamp as string),\n          source: row.source as string,\n          data: row.data as Record<string, unknown>,\n          correlationId: row.correlation_id as string | undefined,\n          causationId: row.causation_id as string | undefined,\n        }))\n      },\n\n      // Action operations\n      async send(options) {\n        const id = generateId()\n        const now = new Date().toISOString()\n\n        actions.set(id, {\n          id,\n          actor: options.actor,\n          object: options.object,\n          action: options.action,\n          status: options.status ?? 'pending',\n          created_at: now,\n          updated_at: now,\n          metadata: options.metadata,\n        })\n\n        return {\n          id,\n          actor: options.actor,\n          object: options.object,\n          action: options.action,\n          status: options.status ?? 'pending',\n          createdAt: new Date(now),\n          updatedAt: new Date(now),\n          metadata: options.metadata,\n        }\n      },\n\n      async do(options) {\n        const id = generateId()\n        const now = new Date().toISOString()\n\n        actions.set(id, {\n          id,\n          actor: options.actor,\n          object: options.object,\n          action: options.action,\n          status: 'active',\n          created_at: now,\n          updated_at: now,\n          started_at: now,\n          metadata: options.metadata,\n        })\n\n        return {\n          id,\n          actor: options.actor,\n          object: options.object,\n          action: options.action,\n          status: 'active',\n          createdAt: new Date(now),\n          updatedAt: new Date(now),\n          startedAt: new Date(now),\n          metadata: options.metadata,\n        }\n      },\n\n      async getAction(id) {\n        const row = actions.get(id)\n        if (!row) return null\n\n        return {\n          id: row.id as string,\n          actor: row.actor as string,\n          object: row.object as string,\n          action: row.action as string,\n          status: row.status as 'pending' | 'active' | 'completed' | 'failed' | 'cancelled',\n          createdAt: new Date(row.created_at as string),\n          updatedAt: new Date(row.updated_at as string),\n          startedAt: row.started_at ? new Date(row.started_at as string) : undefined,\n          completedAt: row.completed_at ? new Date(row.completed_at as string) : undefined,\n          result: row.result,\n          error: row.error as string | undefined,\n          metadata: row.metadata as Record<string, unknown> | undefined,\n        }\n      },\n\n      async queryActions(options = {}) {\n        let result = Array.from(actions.values())\n\n        if (options.actor) {\n          result = result.filter((a: Record<string, unknown>) => a.actor === options.actor)\n        }\n        if (options.status) {\n          const statuses = Array.isArray(options.status) ? options.status : [options.status]\n          result = result.filter((a: Record<string, unknown>) => statuses.includes(a.status as ActionStatus))\n        }\n        if (options.limit) {\n          result = result.slice(0, options.limit)\n        }\n\n        return result.map((row: Record<string, unknown>) => ({\n          id: row.id as string,\n          actor: row.actor as string,\n          object: row.object as string,\n          action: row.action as string,\n          status: row.status as 'pending' | 'active' | 'completed' | 'failed' | 'cancelled',\n          createdAt: new Date(row.created_at as string),\n          updatedAt: new Date(row.updated_at as string),\n          startedAt: row.started_at ? new Date(row.started_at as string) : undefined,\n          completedAt: row.completed_at ? new Date(row.completed_at as string) : undefined,\n          result: row.result,\n          error: row.error as string | undefined,\n          metadata: row.metadata as Record<string, unknown> | undefined,\n        }))\n      },\n\n      async startAction(id) {\n        const row = actions.get(id)\n        if (!row) throw new Error(`Action not found: ${id}`)\n\n        const now = new Date().toISOString()\n        row.status = 'active'\n        row.started_at = now\n        row.updated_at = now\n\n        return instance.getAction(id) as Promise<import('./types.js').Action>\n      },\n\n      async completeAction(id, result) {\n        const row = actions.get(id)\n        if (!row) throw new Error(`Action not found: ${id}`)\n\n        const now = new Date().toISOString()\n        row.status = 'completed'\n        row.completed_at = now\n        row.updated_at = now\n        row.result = result\n\n        return instance.getAction(id) as Promise<import('./types.js').Action>\n      },\n\n      async failAction(id, error) {\n        const row = actions.get(id)\n        if (!row) throw new Error(`Action not found: ${id}`)\n\n        const now = new Date().toISOString()\n        row.status = 'failed'\n        row.completed_at = now\n        row.updated_at = now\n        row.error = error\n\n        return instance.getAction(id) as Promise<import('./types.js').Action>\n      },\n\n      async cancelAction(id) {\n        const row = actions.get(id)\n        if (!row) throw new Error(`Action not found: ${id}`)\n\n        const now = new Date().toISOString()\n        row.status = 'cancelled'\n        row.completed_at = now\n        row.updated_at = now\n\n        return instance.getAction(id) as Promise<import('./types.js').Action>\n      },\n\n      // Artifact operations\n      async storeArtifact(options) {\n        const now = new Date().toISOString()\n        const expiresAt = options.ttl\n          ? new Date(Date.now() + options.ttl).toISOString()\n          : undefined\n\n        artifacts.set(options.key, {\n          key: options.key,\n          type: options.type,\n          source: options.source,\n          source_hash: options.sourceHash,\n          created_at: now,\n          expires_at: expiresAt,\n          content: options.content,\n          metadata: options.metadata,\n        })\n\n        return {\n          key: options.key,\n          type: options.type,\n          source: options.source,\n          sourceHash: options.sourceHash,\n          createdAt: new Date(now),\n          expiresAt: expiresAt ? new Date(expiresAt) : undefined,\n          content: options.content,\n          metadata: options.metadata,\n        }\n      },\n\n      async getArtifact(key) {\n        const row = artifacts.get(key)\n        if (!row) return null\n\n        if (row.expires_at && new Date(row.expires_at as string) < new Date()) {\n          artifacts.delete(key)\n          return null\n        }\n\n        return {\n          key: row.key as string,\n          type: row.type as ArtifactType,\n          source: row.source as string,\n          sourceHash: row.source_hash as string,\n          createdAt: new Date(row.created_at as string),\n          expiresAt: row.expires_at ? new Date(row.expires_at as string) : undefined,\n          content: row.content,\n          metadata: row.metadata as Record<string, unknown> | undefined,\n        } as Artifact\n      },\n\n      async getArtifactBySource(source, type) {\n        for (const row of artifacts.values()) {\n          if (row.source === source && row.type === type) {\n            return instance.getArtifact(row.key as string)\n          }\n        }\n        return null\n      },\n\n      async deleteArtifact(key) {\n        return artifacts.delete(key)\n      },\n\n      async cleanExpiredArtifacts() {\n        const now = new Date()\n        let count = 0\n\n        for (const [key, row] of artifacts) {\n          if (row.expires_at && new Date(row.expires_at as string) < now) {\n            artifacts.delete(key)\n            count++\n          }\n        }\n\n        return count\n      },\n\n      // Database info\n      getDatabaseSize() {\n        return 0\n      },\n\n      getNamespace() {\n        return name\n      },\n    }\n\n    return instance\n  }\n\n  return {\n    idFromName(name: string): DurableObjectId {\n      return { toString: () => name, name }\n    },\n\n    idFromString(id: string): DurableObjectId {\n      return { toString: () => id }\n    },\n\n    newUniqueId(): DurableObjectId {\n      const id = `${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 9)}`\n      return { toString: () => id }\n    },\n\n    get(id: DurableObjectId): DurableObjectStub<MDXDatabaseRPC> {\n      const name = id.name ?? id.toString()\n\n      if (!instances.has(name)) {\n        instances.set(name, createInMemoryInstance(name))\n      }\n\n      const instance = instances.get(name)!\n\n      return {\n        ...instance,\n        id,\n        name,\n      } as DurableObjectStub<MDXDatabaseRPC>\n    },\n  }\n}\n","/**\n * MDXDatabase Client\n *\n * Client for interacting with MDXDatabase Durable Objects.\n * Works in both Cloudflare Workers (via DO binding) and Node.js (via miniflare).\n *\n * @example Workers\n * ```ts\n * // In a Cloudflare Worker\n * const client = createMDXClient({\n *   namespace: 'example.com',\n *   binding: env.MDXDB,\n * })\n *\n * const post = await client.create({\n *   ns: 'example.com',\n *   type: 'Post',\n *   data: { title: 'Hello World' }\n * })\n * ```\n *\n * @example Node.js with miniflare\n * ```ts\n * // In Node.js (uses miniflare automatically)\n * const client = await createMDXClient({\n *   namespace: 'example.com',\n *   miniflare: true,\n *   persistPath: './.data',\n * })\n *\n * const posts = await client.list({ type: 'Post' })\n * ```\n *\n * @packageDocumentation\n */\n\n// DurableObjectNamespace and DurableObjectStub are global types from @cloudflare/workers-types\nimport type {\n  MDXClientConfig,\n  MDXDatabaseRPC,\n  Thing,\n  Relationship,\n  Event,\n  Action,\n  Artifact,\n  QueryOptions,\n  SearchOptions,\n  CreateOptions,\n  UpdateOptions,\n  RelateOptions,\n  CreateEventOptions,\n  CreateActionOptions,\n  StoreArtifactOptions,\n  EventQueryOptions,\n  ActionQueryOptions,\n  VectorSearchOptions,\n  VectorSearchResult,\n  ArtifactType,\n} from './types.js'\n\n/**\n * MDXDatabase Client\n *\n * Provides a typed interface to the MDXDatabase Durable Object.\n * Methods are called directly via Workers RPC.\n */\nexport class MDXClient implements MDXDatabaseRPC {\n  private stub: DurableObjectStub<MDXDatabaseRPC>\n  private embedFn?: (text: string) => Promise<number[]>\n  private _namespace: string\n\n  constructor(\n    stub: DurableObjectStub<MDXDatabaseRPC>,\n    namespace: string,\n    embedFn?: (text: string) => Promise<number[]>\n  ) {\n    this.stub = stub\n    this._namespace = namespace\n    this.embedFn = embedFn\n  }\n\n  // ===========================================================================\n  // Thing Operations\n  // ===========================================================================\n\n  async list(options?: QueryOptions): Promise<Thing[]> {\n    return this.stub.list(options)\n  }\n\n  // Interface methods (matching MDXDatabaseRPC)\n  async read(url: string): Promise<Thing | null> {\n    return this.stub.read(url)\n  }\n\n  async readById(type: string, id: string): Promise<Thing | null> {\n    return this.stub.readById(type, id)\n  }\n\n  // Backwards-compatible aliases\n  async get(url: string): Promise<Thing | null> {\n    return this.read(url)\n  }\n\n  async getById(type: string, id: string): Promise<Thing | null> {\n    return this.readById(type, id)\n  }\n\n  async create<TData = Record<string, unknown>>(options: CreateOptions<TData>): Promise<Thing<TData>> {\n    const thing = await this.stub.create(options as CreateOptions)\n\n    // If we have an embed function, generate embeddings for the content\n    if (this.embedFn) {\n      await this.generateEmbeddings(thing.url)\n    }\n\n    return thing as Thing<TData>\n  }\n\n  async update<TData = Record<string, unknown>>(url: string, options: UpdateOptions<TData>): Promise<Thing<TData>> {\n    const thing = await this.stub.update(url, options as UpdateOptions)\n\n    // If we have an embed function, regenerate embeddings\n    if (this.embedFn) {\n      await this.generateEmbeddings(url)\n    }\n\n    return thing as Thing<TData>\n  }\n\n  async upsert<TData = Record<string, unknown>>(options: CreateOptions<TData>): Promise<Thing<TData>> {\n    const thing = await this.stub.upsert(options as CreateOptions)\n\n    // If we have an embed function, generate embeddings\n    if (this.embedFn) {\n      await this.generateEmbeddings(thing.url)\n    }\n\n    return thing as Thing<TData>\n  }\n\n  // Interface method (matching MDXDatabaseRPC)\n  async remove(url: string): Promise<boolean> {\n    return this.stub.remove(url)\n  }\n\n  // Backwards-compatible alias\n  async delete(url: string): Promise<boolean> {\n    return this.remove(url)\n  }\n\n  async search(options: SearchOptions): Promise<Thing[]> {\n    // If we have embeddings, try vector search\n    if (this.embedFn) {\n      const embedding = await this.embedFn(options.query)\n      const results = await this.vectorSearchWithEmbedding(embedding, options)\n      if (results.length > 0) {\n        // Get things from URLs\n        const things: Thing[] = []\n        const seen = new Set<string>()\n        for (const result of results) {\n          if (!seen.has(result.thingUrl)) {\n            seen.add(result.thingUrl)\n            const thing = await this.get(result.thingUrl)\n            if (thing) things.push(thing)\n          }\n        }\n        return things\n      }\n    }\n\n    // Fallback to text search\n    return this.stub.search(options)\n  }\n\n  // ===========================================================================\n  // Relationship Operations\n  // ===========================================================================\n\n  async relate<TData = Record<string, unknown>>(options: RelateOptions<TData>): Promise<Relationship<TData>> {\n    return this.stub.relate(options as RelateOptions) as Promise<Relationship<TData>>\n  }\n\n  async unrelate(from: string, type: string, to: string): Promise<boolean> {\n    return this.stub.unrelate(from, type, to)\n  }\n\n  async related(url: string, type?: string, direction?: 'from' | 'to' | 'both'): Promise<Thing[]> {\n    return this.stub.related(url, type, direction)\n  }\n\n  async relationships(url: string, type?: string, direction?: 'from' | 'to' | 'both'): Promise<Relationship[]> {\n    return this.stub.relationships(url, type, direction)\n  }\n\n  // ===========================================================================\n  // Vector Search Operations\n  // ===========================================================================\n\n  async vectorSearch(options: VectorSearchOptions): Promise<VectorSearchResult[]> {\n    // If embedding is provided directly, use it\n    if (options.embedding) {\n      return this.stub.vectorSearch(options)\n    }\n\n    // If query is provided and we have an embed function, generate embedding\n    if (options.query && this.embedFn) {\n      const embedding = await this.embedFn(options.query)\n      return this.stub.vectorSearch({ ...options, embedding })\n    }\n\n    // No embedding and no query - delegate to stub (will return empty or error)\n    return this.stub.vectorSearch(options)\n  }\n\n  async setEmbedding(thingUrl: string, chunkIndex: number, embedding: number[]): Promise<void> {\n    return this.stub.setEmbedding(thingUrl, chunkIndex, embedding)\n  }\n\n  async upsertEmbeddings(\n    thingUrl: string,\n    embeddings: Array<{ chunkIndex: number; embedding: number[] }>\n  ): Promise<void> {\n    return this.stub.upsertEmbeddings(thingUrl, embeddings)\n  }\n\n  async deleteVectors(thingUrl: string): Promise<void> {\n    return this.stub.deleteVectors(thingUrl)\n  }\n\n  /**\n   * Generate embeddings for a thing's search chunks\n   */\n  private async generateEmbeddings(thingUrl: string): Promise<void> {\n    if (!this.embedFn) return\n\n    // Get the thing to find its chunks\n    const thing = await this.get(thingUrl)\n    if (!thing) return\n\n    // Get content to embed\n    const data = thing.data as Record<string, unknown>\n    const content = [\n      data.title,\n      data.name,\n      data.description,\n      data.content,\n      data.text,\n      thing.content,\n    ].filter(v => typeof v === 'string').join('\\n\\n')\n\n    if (!content) return\n\n    // Chunk and embed (simple chunking, matches DO implementation)\n    const chunks = this.chunkContent(content)\n    for (const chunk of chunks) {\n      try {\n        const embedding = await this.embedFn(chunk.content)\n        await this.setEmbedding(thingUrl, chunk.index, embedding)\n      } catch (e) {\n        console.warn(`Failed to embed chunk ${chunk.index} for ${thingUrl}:`, e)\n      }\n    }\n  }\n\n  private chunkContent(content: string, size = 1000, overlap = 200): Array<{ content: string; index: number }> {\n    if (!content || content.length === 0) return []\n\n    const chunks: Array<{ content: string; index: number }> = []\n    let start = 0\n    let index = 0\n\n    while (start < content.length) {\n      let end = Math.min(start + size, content.length)\n\n      if (end < content.length) {\n        const slice = content.slice(start, end)\n        const lastPara = slice.lastIndexOf('\\n\\n')\n        const lastSentence = Math.max(\n          slice.lastIndexOf('. '),\n          slice.lastIndexOf('! '),\n          slice.lastIndexOf('? ')\n        )\n\n        if (lastPara > size * 0.5) {\n          end = start + lastPara + 2\n        } else if (lastSentence > size * 0.5) {\n          end = start + lastSentence + 2\n        }\n      }\n\n      chunks.push({\n        content: content.slice(start, end).trim(),\n        index,\n      })\n\n      start = end - overlap\n      if (start >= content.length - overlap) break\n      index++\n    }\n\n    return chunks\n  }\n\n  /**\n   * Vector search with pre-computed embedding\n   */\n  private async vectorSearchWithEmbedding(\n    queryEmbedding: number[],\n    options: Omit<VectorSearchOptions, 'query'> & { query?: string }\n  ): Promise<VectorSearchResult[]> {\n    // This would need to fetch chunks and compute similarity client-side\n    // since DO SQLite doesn't have vector operations\n    // For now, delegate to stub's implementation\n    return this.stub.vectorSearch({ ...options, query: options.query ?? '' })\n  }\n\n  // ===========================================================================\n  // Event Operations\n  // ===========================================================================\n\n  async track<TData = Record<string, unknown>>(options: CreateEventOptions<TData>): Promise<Event<TData>> {\n    return this.stub.track(options as CreateEventOptions) as Promise<Event<TData>>\n  }\n\n  async getEvent(id: string): Promise<Event | null> {\n    return this.stub.getEvent(id)\n  }\n\n  async queryEvents(options?: EventQueryOptions): Promise<Event[]> {\n    return this.stub.queryEvents(options)\n  }\n\n  // ===========================================================================\n  // Action Operations\n  // ===========================================================================\n\n  async send<TData = Record<string, unknown>>(options: CreateActionOptions<TData>): Promise<Action<TData>> {\n    return this.stub.send(options as CreateActionOptions) as Promise<Action<TData>>\n  }\n\n  async do<TData = Record<string, unknown>>(options: CreateActionOptions<TData>): Promise<Action<TData>> {\n    return this.stub.do(options as CreateActionOptions) as Promise<Action<TData>>\n  }\n\n  async getAction(id: string): Promise<Action | null> {\n    return this.stub.getAction(id)\n  }\n\n  async queryActions(options?: ActionQueryOptions): Promise<Action[]> {\n    return this.stub.queryActions(options)\n  }\n\n  async startAction(id: string): Promise<Action> {\n    return this.stub.startAction(id)\n  }\n\n  async completeAction(id: string, result?: unknown): Promise<Action> {\n    return this.stub.completeAction(id, result)\n  }\n\n  async failAction(id: string, error: string): Promise<Action> {\n    return this.stub.failAction(id, error)\n  }\n\n  async cancelAction(id: string): Promise<Action> {\n    return this.stub.cancelAction(id)\n  }\n\n  // ===========================================================================\n  // Artifact Operations\n  // ===========================================================================\n\n  async storeArtifact<TContent = unknown>(options: StoreArtifactOptions<TContent>): Promise<Artifact<TContent>> {\n    return this.stub.storeArtifact(options) as Promise<Artifact<TContent>>\n  }\n\n  async getArtifact<TContent = unknown>(key: string): Promise<Artifact<TContent> | null> {\n    return this.stub.getArtifact(key) as Promise<Artifact<TContent> | null>\n  }\n\n  async getArtifactBySource(source: string, type: ArtifactType): Promise<Artifact | null> {\n    return this.stub.getArtifactBySource(source, type)\n  }\n\n  async deleteArtifact(key: string): Promise<boolean> {\n    return this.stub.deleteArtifact(key)\n  }\n\n  async cleanExpiredArtifacts(): Promise<number> {\n    return this.stub.cleanExpiredArtifacts()\n  }\n\n  // ===========================================================================\n  // Database Info\n  // ===========================================================================\n\n  getDatabaseSize(): number {\n    return this.stub.getDatabaseSize()\n  }\n\n  getNamespace(): string {\n    return this._namespace\n  }\n}\n\n/**\n * Create an MDXDatabase client for Workers\n *\n * @example\n * ```ts\n * const client = createMDXClient({\n *   namespace: 'example.com',\n *   binding: env.MDXDB,\n * })\n * ```\n */\nexport function createMDXClient(config: MDXClientConfig & { binding: DurableObjectNamespace<MDXDatabaseRPC> }): MDXClient {\n  const id = config.binding.idFromName(config.namespace)\n  const stub = config.binding.get(id)\n  return new MDXClient(stub, config.namespace, config.embedFn)\n}\n\n/**\n * Create an MDXDatabase client for Node.js using miniflare\n *\n * @example\n * ```ts\n * const client = await createMiniflareClient({\n *   namespace: 'example.com',\n *   persistPath: './.data',\n * })\n * ```\n */\nexport async function createMiniflareClient(config: Omit<MDXClientConfig, 'binding'>): Promise<MDXClient> {\n  // Dynamic import to avoid bundling miniflare in Workers\n  const { createMiniflareBinding } = await import('./miniflare.js')\n  const binding = await createMiniflareBinding(config.persistPath)\n  const id = binding.idFromName(config.namespace)\n  const stub = binding.get(id)\n  return new MDXClient(stub, config.namespace, config.embedFn)\n}\n"],"mappings":"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","names":["createMiniflareBinding"]}