{"version":3,"sources":["../../ui/src/applet-runtime/context.ts","../../ui/src/applet-runtime/engine.ts","../../ui/src/applet-runtime/ws.ts","../../ui/src/applet-runtime/defineApplet.ts","../../ui/src/applet-runtime/auth.ts","../../ui/src/applet-runtime/kv.ts","../../ui/src/applet-runtime/db.ts","../../ui/src/applet-runtime/jobs.ts","../../ui/src/applet-runtime/secrets.ts","../../ui/src/applet-runtime/files.ts","../../ui/src/applet-runtime/schema.ts","../../ui/src/applet-runtime/test-context.ts"],"names":["forwardedHeaders","id","appletMethod","readEnv","buildEngineURL","randomID","toBase64","db","engine"],"mappings":"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","file":"index.mjs","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\n\ntype RequestContext = {\n  request: Request\n}\n\nconst requestContextStore = new AsyncLocalStorage<RequestContext>();\n\nexport function withRequestContext<T>(request: Request, fn: () => T): T {\n  return requestContextStore.run({ request }, fn);\n}\n\nexport function currentRequest(): Request {\n  const ctx = requestContextStore.getStore();\n  if (!ctx?.request) {\n    throw new Error('No active applet request context. Use defineApplet({ fetch }) to establish request context.');\n  }\n  return ctx.request;\n}\n\nexport function currentRequestOptional(): Request | undefined {\n  return requestContextStore.getStore()?.request;\n}\n","import { currentRequestOptional } from './context';\n\ntype EngineCallOptions = {\n  timeoutMs?: number\n}\n\ntype JsonRpcRequest = {\n  id: string\n  method: string\n  params: unknown\n}\n\ntype JsonRpcResponse = {\n  id?: string\n  result?: unknown\n  error?: {\n    code: string | number\n    message: string\n    details?: unknown\n  }\n}\n\nconst defaultEnginePath = '/rpc';\n\nfunction readEnv(name: string): string {\n  const value = process.env[name];\n  if (!value || value.trim() === '') {\n    throw new Error(`${name} is required`);\n  }\n  return value;\n}\n\nfunction buildEngineURL(pathname: string): string {\n  const socketPath = readEnv('IOTA_ENGINE_SOCKET');\n  const path = pathname.startsWith('/') ? pathname : `/${pathname}`;\n  // Bun's fetch supports unix socket via the `unix` init option; URL host is ignored in that case.\n  // We still keep a regular URL shape for portability in tests/mocks.\n  return `http://localhost${path}?socket=${encodeURIComponent(socketPath)}`;\n}\n\nfunction randomID(): string {\n  const g = globalThis as unknown as { crypto?: { randomUUID?: () => string } };\n  if (g.crypto?.randomUUID) {\n    return g.crypto.randomUUID();\n  }\n  return `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n}\n\nasync function postJSON(pathname: string, body: unknown, timeoutMs?: number): Promise<JsonRpcResponse> {\n  const socketPath = readEnv('IOTA_ENGINE_SOCKET');\n  const request = currentRequestOptional();\n  const forwardedHeaders: Record<string, string> = {\n    'content-type': 'application/json',\n  };\n  if (request) {\n    const maybeForwardHeader = (headerName: string) => {\n      const value = request.headers.get(headerName);\n      if (value && value.trim() !== '') {\n        forwardedHeaders[headerName] = value;\n      }\n    };\n    maybeForwardHeader('x-iota-tenant-id');\n    maybeForwardHeader('x-iota-user-id');\n    maybeForwardHeader('x-iota-permissions');\n    maybeForwardHeader('x-iota-request-id');\n    maybeForwardHeader('cookie');\n    maybeForwardHeader('authorization');\n  }\n\n  const abortController = typeof timeoutMs === 'number' && timeoutMs > 0 ? new AbortController() : undefined;\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  try {\n    if (abortController && timeoutMs) {\n      timer = setTimeout(() => abortController.abort(), timeoutMs);\n    }\n\n    const init: RequestInit & { unix?: string } = {\n      method: 'POST',\n      headers: forwardedHeaders,\n      body: JSON.stringify(body),\n      signal: abortController?.signal,\n      unix: socketPath,\n    };\n    const response = await fetch(buildEngineURL(pathname), init);\n    if (!response.ok) {\n      throw new Error(`engine RPC HTTP ${response.status}`);\n    }\n    return (await response.json()) as JsonRpcResponse;\n  } finally {\n    if (timer) {\n      clearTimeout(timer);\n    }\n  }\n}\n\nexport const engine = {\n  async call<TResult = unknown>(method: string, params: unknown, options?: EngineCallOptions): Promise<TResult> {\n    const request: JsonRpcRequest = {\n      id: randomID(),\n      method,\n      params,\n    };\n    const response = await postJSON(defaultEnginePath, request, options?.timeoutMs);\n    if (response.error) {\n      throw new Error(`${response.error.code}: ${response.error.message}`);\n    }\n    return response.result as TResult;\n  },\n};\n","import { engine } from './engine';\n\ntype ConnectionHandler = (connectionId: string) => void | Promise<void>\ntype MessageHandler = (connectionId: string, data: Uint8Array) => void | Promise<void>\ntype CloseHandler = (connectionId: string) => void | Promise<void>\n\ntype BridgeEventPayload = {\n  connectionId: string\n  event: 'open' | 'message' | 'close'\n  dataBase64?: string\n}\n\nconst connectionHandlers = new Set<ConnectionHandler>();\nconst messageHandlers = new Set<MessageHandler>();\nconst closeHandlers = new Set<CloseHandler>();\n\nfunction appletMethod(op: string): string {\n  const appletID = process.env.IOTA_APPLET_ID;\n  if (!appletID || appletID.trim() === '') {\n    throw new Error('IOTA_APPLET_ID is required');\n  }\n  return `${appletID}.ws.${op}`;\n}\n\nasync function runHandlers<T>(handlers: Set<(value: T) => void | Promise<void>>, value: T): Promise<void> {\n  for (const handler of handlers) {\n    await handler(value);\n  }\n}\n\nasync function runMessageHandlers(connectionId: string, data: Uint8Array): Promise<void> {\n  for (const handler of messageHandlers) {\n    await handler(connectionId, data);\n  }\n}\n\nexport async function dispatchBridgeEvent(payload: BridgeEventPayload): Promise<void> {\n  if (payload.event === 'open') {\n    await runHandlers(connectionHandlers, payload.connectionId);\n    return;\n  }\n  if (payload.event === 'close') {\n    await runHandlers(closeHandlers, payload.connectionId);\n    return;\n  }\n  if (payload.event === 'message') {\n    const decoded = Buffer.from(payload.dataBase64 ?? '', 'base64');\n    await runMessageHandlers(payload.connectionId, new Uint8Array(decoded));\n  }\n}\n\nexport const ws = {\n  async send(connectionId: string, data: unknown): Promise<{ ok: boolean }> {\n    return engine.call<{ ok: boolean }>(appletMethod('send'), { connectionId, data });\n  },\n  onConnection(handler: ConnectionHandler): () => void {\n    connectionHandlers.add(handler);\n    return () => connectionHandlers.delete(handler);\n  },\n  onMessage(handler: MessageHandler): () => void {\n    messageHandlers.add(handler);\n    return () => messageHandlers.delete(handler);\n  },\n  onClose(handler: CloseHandler): () => void {\n    closeHandlers.add(handler);\n    return () => closeHandlers.delete(handler);\n  },\n};\n\n","import { withRequestContext } from './context';\nimport { dispatchBridgeEvent } from './ws';\n\nexport type AppletDefinition = {\n  fetch: (request: Request) => Response | Promise<Response>\n}\n\ntype BunServeLike = {\n  stop: (closeActiveConnections?: boolean) => void\n}\n\ntype BunGlobal = {\n  serve: (options: {\n    unix: string\n    fetch: (request: Request) => Response | Promise<Response>\n  }) => BunServeLike\n}\n\nfunction requireUnixSocketPath(): string {\n  const path = process.env.IOTA_APPLET_SOCKET;\n  if (!path || path.trim() === '') {\n    throw new Error('IOTA_APPLET_SOCKET is required');\n  }\n  return path;\n}\n\nexport function defineApplet(definition: AppletDefinition): BunServeLike {\n  const socketPath = requireUnixSocketPath();\n  const bun = (globalThis as unknown as { Bun?: BunGlobal }).Bun;\n  if (!bun || typeof bun.serve !== 'function') {\n    throw new Error('defineApplet requires Bun runtime');\n  }\n  return bun.serve({\n    unix: socketPath,\n    fetch: (request) =>\n      withRequestContext(request, async () => {\n        const url = new URL(request.url);\n        if (request.method === 'POST' && url.pathname === '/__ws') {\n          let payload: {\n            connectionId: string\n            event: 'open' | 'message' | 'close'\n            dataBase64?: string\n          };\n          try {\n            payload = (await request.json()) as {\n              connectionId: string\n              event: 'open' | 'message' | 'close'\n              dataBase64?: string\n            };\n          } catch {\n            return new Response(JSON.stringify({ error: 'invalid_json' }), {\n              status: 400,\n              headers: { 'content-type': 'application/json; charset=utf-8' },\n            });\n          }\n          if (!payload?.connectionId || !payload?.event) {\n            return new Response(JSON.stringify({ error: 'invalid_payload' }), {\n              status: 400,\n              headers: { 'content-type': 'application/json; charset=utf-8' },\n            });\n          }\n          if (!['open', 'message', 'close'].includes(payload.event)) {\n            return new Response(JSON.stringify({ error: 'invalid_payload' }), {\n              status: 400,\n              headers: { 'content-type': 'application/json; charset=utf-8' },\n            });\n          }\n          await dispatchBridgeEvent(payload);\n          return new Response(JSON.stringify({ ok: true }), {\n            status: 202,\n            headers: { 'content-type': 'application/json; charset=utf-8' },\n          });\n        }\n        return definition.fetch(request);\n      }),\n  });\n}\n","import { currentRequest } from './context';\n\nexport type CurrentUser = {\n  id: string\n  tenantId: string\n  permissions: string[]\n  requestId?: string\n}\n\nfunction requiredHeader(headers: Headers, name: string): string {\n  const value = headers.get(name);\n  if (!value || value.trim() === '') {\n    throw new Error(`${name} header is required`);\n  }\n  return value;\n}\n\nexport const auth = {\n  async currentUser(): Promise<CurrentUser> {\n    const request = currentRequest();\n    const headers = request.headers;\n    const id = requiredHeader(headers, 'x-iota-user-id');\n    const tenantId = requiredHeader(headers, 'x-iota-tenant-id');\n    const permissionsHeader = headers.get('x-iota-permissions') ?? '';\n    const requestID = headers.get('x-iota-request-id') ?? undefined;\n    const permissions = permissionsHeader\n      .split(',')\n      .map((s) => s.trim())\n      .filter((s) => s.length > 0);\n\n    return {\n      id,\n      tenantId,\n      permissions,\n      requestId: requestID,\n    };\n  },\n};\n\n","import { engine } from './engine';\n\nfunction appletMethod(op: string): string {\n  const appletID = process.env.IOTA_APPLET_ID;\n  if (!appletID || appletID.trim() === '') {\n    throw new Error('IOTA_APPLET_ID is required');\n  }\n  return `${appletID}.kv.${op}`;\n}\n\nexport const kv = {\n  get<T = unknown>(key: string): Promise<T | null> {\n    return engine.call<T | null>(appletMethod('get'), { key });\n  },\n  set(key: string, value: unknown, ttlSeconds?: number): Promise<void> {\n    return engine.call<void>(appletMethod('set'), { key, value, ttlSeconds });\n  },\n  del(key: string): Promise<boolean> {\n    return engine.call<boolean>(appletMethod('del'), { key });\n  },\n  mget<T = unknown>(keys: string[]): Promise<Array<T | null>> {\n    return engine.call<Array<T | null>>(appletMethod('mget'), { keys });\n  },\n};\n\n","import { engine } from './engine';\n\nexport type DBConstraint = {\n  field: string\n  op: 'eq'\n  value: unknown\n}\n\nexport type DBIndexConstraint = DBConstraint & {\n  name: string\n}\n\nexport type DBQueryOptions = {\n  index?: DBIndexConstraint\n  filters?: DBConstraint[]\n  order?: 'asc' | 'desc'\n  take?: number\n}\n\nexport type DBQueryIndex = {\n  eq(field: string, value: unknown): DBQueryIndex\n}\n\nexport type DBQueryFilter = {\n  eq(field: string, value: unknown): DBQueryFilter\n}\n\nexport type DBQueryBuilder<T> = {\n  withIndex(name: string, build: (q: DBQueryIndex) => DBQueryIndex | void): DBQueryBuilder<T>\n  filter(build: (q: DBQueryFilter) => DBQueryFilter | void): DBQueryBuilder<T>\n  order(direction: 'asc' | 'desc'): DBQueryBuilder<T>\n  take(limit: number): DBQueryBuilder<T>\n  collect(): Promise<T[]>\n  first(): Promise<T | null>\n}\n\ntype DBCaller = <T>(op: string, params: Record<string, unknown>) => Promise<T>\n\nexport type DBClient = {\n  get<T = unknown>(id: string): Promise<T | null>\n  query<T = unknown>(table: string): DBQueryBuilder<T>\n  queryRaw<T = unknown>(table: string, query?: DBQueryOptions): Promise<T[]>\n  insert<T = unknown>(table: string, value: unknown): Promise<T>\n  patch<T = unknown>(id: string, value: unknown): Promise<T>\n  replace<T = unknown>(id: string, value: unknown): Promise<T>\n  delete(id: string): Promise<boolean>\n}\n\nexport function createDB(caller: DBCaller): DBClient {\n  class QueryIndexBuilder implements DBQueryIndex {\n    private constraint?: DBConstraint;\n\n    eq(field: string, value: unknown): QueryIndexBuilder {\n      this.constraint = { field, op: 'eq', value };\n      return this;\n    }\n\n    build(name: string): DBIndexConstraint | undefined {\n      if (!this.constraint) {\n        return undefined;\n      }\n      return { name, ...this.constraint };\n    }\n  }\n\n  class QueryFilterBuilder implements DBQueryFilter {\n    private constraints: DBConstraint[] = [];\n\n    eq(field: string, value: unknown): QueryFilterBuilder {\n      this.constraints.push({ field, op: 'eq', value });\n      return this;\n    }\n\n    build(): DBConstraint[] {\n      return this.constraints;\n    }\n  }\n\n  class RuntimeQueryBuilder<T> implements DBQueryBuilder<T> {\n    constructor(\n      private readonly table: string,\n      private readonly options: DBQueryOptions = {},\n    ) {}\n\n    withIndex(name: string, build: (q: DBQueryIndex) => DBQueryIndex | void): RuntimeQueryBuilder<T> {\n      const index = new QueryIndexBuilder();\n      build(index);\n      return new RuntimeQueryBuilder<T>(this.table, {\n        ...this.options,\n        index: index.build(name),\n      });\n    }\n\n    filter(build: (q: DBQueryFilter) => DBQueryFilter | void): RuntimeQueryBuilder<T> {\n      const filter = new QueryFilterBuilder();\n      build(filter);\n      return new RuntimeQueryBuilder<T>(this.table, {\n        ...this.options,\n        filters: [...(this.options.filters ?? []), ...filter.build()],\n      });\n    }\n\n    order(direction: 'asc' | 'desc'): RuntimeQueryBuilder<T> {\n      return new RuntimeQueryBuilder<T>(this.table, {\n        ...this.options,\n        order: direction,\n      });\n    }\n\n    take(limit: number): RuntimeQueryBuilder<T> {\n      return new RuntimeQueryBuilder<T>(this.table, {\n        ...this.options,\n        take: limit,\n      });\n    }\n\n    collect(): Promise<T[]> {\n      return caller<T[]>('query', { table: this.table, query: this.options });\n    }\n\n    async first(): Promise<T | null> {\n      const rows = await this.take(1).collect();\n      return rows[0] ?? null;\n    }\n  }\n\n  const client: DBClient = {\n    get<T = unknown>(id: string): Promise<T | null> {\n      return caller<T | null>('get', { id });\n    },\n    query<T = unknown>(table: string): RuntimeQueryBuilder<T> {\n      return new RuntimeQueryBuilder<T>(table);\n    },\n    queryRaw<T = unknown>(table: string, query?: DBQueryOptions): Promise<T[]> {\n      return caller<T[]>('query', { table, query: query ?? {} });\n    },\n    insert<T = unknown>(table: string, value: unknown): Promise<T> {\n      return caller<T>('insert', { table, value });\n    },\n    patch<T = unknown>(id: string, value: unknown): Promise<T> {\n      return caller<T>('patch', { id, value });\n    },\n    replace<T = unknown>(id: string, value: unknown): Promise<T> {\n      return caller<T>('replace', { id, value });\n    },\n    delete(id: string): Promise<boolean> {\n      return caller<boolean>('delete', { id });\n    },\n  };\n  return client;\n}\n\nexport const db = createDB((op, params) => engine.call(appletMethod(op), params));\n\nfunction appletMethod(op: string): string {\n  const appletID = process.env.IOTA_APPLET_ID;\n  if (!appletID || appletID.trim() === '') {\n    throw new Error('IOTA_APPLET_ID is required');\n  }\n  return `${appletID}.db.${op}`;\n}\n","import { engine } from './engine';\n\nexport type ScheduledJob = {\n  id: string\n  type: string\n  cron: string\n  method: string\n  params: unknown\n  status: string\n  nextRunAt?: string\n  lastRunAt?: string\n  lastStatus?: string\n  lastError?: string\n  createdAt?: string\n  updatedAt?: string\n}\n\nfunction appletMethod(op: string): string {\n  const appletID = process.env.IOTA_APPLET_ID;\n  if (!appletID || appletID.trim() === '') {\n    throw new Error('IOTA_APPLET_ID is required');\n  }\n  return `${appletID}.jobs.${op}`;\n}\n\nexport const jobs = {\n  enqueue(method: string, params?: unknown): Promise<ScheduledJob> {\n    return engine.call<ScheduledJob>(appletMethod('enqueue'), { method, params: params ?? {} });\n  },\n  schedule(cron: string, method: string, params?: unknown): Promise<ScheduledJob> {\n    return engine.call<ScheduledJob>(appletMethod('schedule'), { cron, method, params: params ?? {} });\n  },\n  list(): Promise<ScheduledJob[]> {\n    return engine.call<ScheduledJob[]>(appletMethod('list'), {});\n  },\n  cancel(id: string): Promise<{ ok: boolean }> {\n    return engine.call<{ ok: boolean }>(appletMethod('cancel'), { id });\n  },\n};\n","import { engine } from './engine';\n\nfunction appletMethod(op: string): string {\n  const appletID = process.env.IOTA_APPLET_ID;\n  if (!appletID || appletID.trim() === '') {\n    throw new Error('IOTA_APPLET_ID is required');\n  }\n  return `${appletID}.secrets.${op}`;\n}\n\nexport const secrets = {\n  async get(name: string): Promise<string> {\n    const response = await engine.call<{ value: string }>(appletMethod('get'), { name });\n    return response.value;\n  },\n};\n","import { currentRequestOptional } from './context';\nimport { engine } from './engine';\n\nexport type StoredFile = {\n  id: string\n  name: string\n  contentType?: string\n  size: number\n  path: string\n  createdAt: string\n}\n\nfunction readEnv(name: string): string {\n  const value = process.env[name];\n  if (!value || value.trim() === '') {\n    throw new Error(`${name} is required`);\n  }\n  return value;\n}\n\nfunction appletMethod(op: string): string {\n  const appletID = process.env.IOTA_APPLET_ID;\n  if (!appletID || appletID.trim() === '') {\n    throw new Error('IOTA_APPLET_ID is required');\n  }\n  return `${appletID}.files.${op}`;\n}\n\nfunction buildEngineURL(pathname: string, socketPath: string): string {\n  const path = pathname.startsWith('/') ? pathname : `/${pathname}`;\n  return `http://localhost${path}?socket=${encodeURIComponent(socketPath)}`;\n}\n\nfunction forwardedHeaders(): Record<string, string> {\n  const request = currentRequestOptional();\n  const headers: Record<string, string> = {};\n  if (!request) {\n    return headers;\n  }\n  const maybeForwardHeader = (headerName: string) => {\n    const value = request.headers.get(headerName);\n    if (value && value.trim() !== '') {\n      headers[headerName] = value;\n    }\n  };\n  maybeForwardHeader('x-iota-tenant-id');\n  maybeForwardHeader('x-iota-user-id');\n  maybeForwardHeader('x-iota-request-id');\n  return headers;\n}\n\nasync function toBytes(data: Blob | ArrayBuffer | Uint8Array): Promise<Uint8Array> {\n  if (data instanceof Blob) {\n    const buffer = await data.arrayBuffer();\n    return new Uint8Array(buffer);\n  }\n  if (data instanceof ArrayBuffer) {\n    return new Uint8Array(data);\n  }\n  return data;\n}\n\nasync function toBase64(data: Blob | ArrayBuffer | Uint8Array): Promise<string> {\n  const bytes = await toBytes(data);\n  return Buffer.from(bytes).toString('base64');\n}\n\nasync function requestFilesEndpoint<T>(\n  path: string,\n  options: RequestInit & { unix?: string; appletId: string },\n): Promise<T> {\n  const socketPath = readEnv('IOTA_ENGINE_SOCKET');\n  const headers = new Headers(options.headers);\n  headers.set('X-Iota-Applet-Id', options.appletId);\n  for (const [name, value] of Object.entries(forwardedHeaders())) {\n    headers.set(name, value);\n  }\n  const response = await fetch(buildEngineURL(path, socketPath), {\n    ...options,\n    headers,\n    unix: socketPath,\n  } as any);\n  if (!response.ok) {\n    throw new Error(`files endpoint HTTP ${response.status}`);\n  }\n  return (await response.json()) as T;\n}\n\nexport const files = {\n  async store(input: {\n    name: string\n    contentType?: string\n    data: Blob | ArrayBuffer | Uint8Array\n  }): Promise<StoredFile> {\n    const appletID = readEnv('IOTA_APPLET_ID');\n    try {\n      const bytes = await toBytes(input.data);\n      const exactBuffer =\n        bytes.buffer instanceof ArrayBuffer\n          ? bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)\n          : Uint8Array.from(bytes).buffer;\n      return await requestFilesEndpoint<StoredFile>('/files/store', {\n        appletId: appletID,\n        method: 'POST',\n        headers: {\n          'X-Iota-File-Name': input.name,\n          'X-Iota-Content-Type': input.contentType ?? '',\n          'Content-Type': input.contentType ?? 'application/octet-stream',\n        },\n        body: new Blob([exactBuffer], { type: input.contentType ?? 'application/octet-stream' }),\n      });\n    } catch (error) {\n      if (error instanceof TypeError || error instanceof ReferenceError) {\n        throw error;\n      }\n      const dataBase64 = await toBase64(input.data);\n      return engine.call<StoredFile>(appletMethod('store'), {\n        name: input.name,\n        contentType: input.contentType ?? '',\n        dataBase64,\n      });\n    }\n  },\n  async get(id: string): Promise<StoredFile | null> {\n    const appletID = readEnv('IOTA_APPLET_ID');\n    try {\n      return await requestFilesEndpoint<StoredFile | null>(`/files/get?id=${encodeURIComponent(id)}&applet=${encodeURIComponent(appletID)}`, {\n        appletId: appletID,\n        method: 'GET',\n      });\n    } catch (error) {\n      if (error instanceof TypeError || error instanceof ReferenceError) {\n        throw error;\n      }\n      return engine.call<StoredFile | null>(appletMethod('get'), { id });\n    }\n  },\n  async delete(id: string): Promise<boolean> {\n    const appletID = readEnv('IOTA_APPLET_ID');\n    try {\n      const result = await requestFilesEndpoint<{ ok: boolean }>(`/files/delete?id=${encodeURIComponent(id)}&applet=${encodeURIComponent(appletID)}`, {\n        appletId: appletID,\n        method: 'DELETE',\n      });\n      return result.ok;\n    } catch (error) {\n      if (error instanceof TypeError || error instanceof ReferenceError) {\n        throw error;\n      }\n      return engine.call<boolean>(appletMethod('delete'), { id });\n    }\n  },\n};\n","import { z, type ZodRawShape, type ZodString } from 'zod';\n\nexport type TableIndex = {\n  name: string\n  fields: string[]\n}\n\nexport type TableDefinition<T extends ZodRawShape> = {\n  schema: z.ZodObject<T>\n  indexes: TableIndex[]\n  index(name: string, fields: string[]): TableDefinition<T>\n}\n\nexport type SchemaDefinition<Tables extends Record<string, TableDefinition<any>>> = {\n  tables: Tables\n}\n\nclass RuntimeTableDefinition<T extends ZodRawShape> implements TableDefinition<T> {\n  public readonly schema: z.ZodObject<T>;\n  public readonly indexes: TableIndex[];\n\n  constructor(schema: z.ZodObject<T>, indexes: TableIndex[] = []) {\n    this.schema = schema;\n    this.indexes = indexes;\n  }\n\n  index(name: string, fields: string[]): RuntimeTableDefinition<T> {\n    return new RuntimeTableDefinition(this.schema, [\n      ...this.indexes,\n      {\n        name,\n        fields: [...fields],\n      },\n    ]);\n  }\n}\n\nexport function defineTable<T extends ZodRawShape>(shape: T): TableDefinition<T> {\n  return new RuntimeTableDefinition(z.object(shape));\n}\n\nexport function defineSchema<Tables extends Record<string, TableDefinition<any>>>(tables: Tables): SchemaDefinition<Tables> {\n  return { tables };\n}\n\n// `id(\"users\")` mirrors Convex-style typed id helper while staying Zod-compatible.\nexport function id(_tableName: string): ZodString {\n  return z.string().min(1);\n}\n\n","import { type CurrentUser } from './auth';\nimport { createDB, type DBConstraint, type DBQueryOptions } from './db';\nimport { type ScheduledJob } from './jobs';\nimport { type StoredFile } from './files';\n\ntype EngineHandler = (params: unknown) => unknown | Promise<unknown>\n\nexport type TestContextOptions = {\n  appletId?: string\n  user?: Partial<CurrentUser>\n  secrets?: Record<string, string>\n  engineHandlers?: Record<string, EngineHandler>\n}\n\ntype TestDocument = {\n  id: string\n  table: string\n  value: unknown\n  createdAt: number\n  updatedAt: number\n}\n\ntype TestFileRecord = StoredFile & {\n  dataBase64: string\n}\n\nconst defaultUser: CurrentUser = {\n  id: 'test-user',\n  tenantId: 'test-tenant',\n  permissions: [],\n};\n\nfunction normalizeUser(user?: Partial<CurrentUser>): CurrentUser {\n  return {\n    ...defaultUser,\n    ...(user ?? {}),\n    permissions: user?.permissions ? [...user.permissions] : [],\n  };\n}\n\nfunction randomID(prefix: string): string {\n  return `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2)}`;\n}\n\nfunction toNumber(value: unknown): number {\n  if (typeof value === 'number') {\n    return value;\n  }\n  return Number.NaN;\n}\n\nfunction nestedValue(input: unknown, field: string): unknown {\n  let current: unknown = input;\n  for (const segment of field.split('.')) {\n    if (!current || typeof current !== 'object') {\n      return undefined;\n    }\n    current = (current as Record<string, unknown>)[segment];\n  }\n  return current;\n}\n\nfunction matchesConstraint(value: unknown, constraint: DBConstraint): boolean {\n  if (constraint.op !== 'eq') {\n    return false;\n  }\n  return String(nestedValue(value, constraint.field)) === String(constraint.value);\n}\n\nfunction filterDocuments(documents: TestDocument[], options: DBQueryOptions): TestDocument[] {\n  let result = [...documents];\n  if (options.index) {\n    result = result.filter((doc) => matchesConstraint(doc.value, options.index!));\n  }\n  for (const filter of options.filters ?? []) {\n    result = result.filter((doc) => matchesConstraint(doc.value, filter));\n  }\n  result.sort((a, b) => (options.order === 'asc' ? a.updatedAt - b.updatedAt : b.updatedAt - a.updatedAt));\n  if (typeof options.take === 'number' && options.take > 0) {\n    result = result.slice(0, options.take);\n  }\n  return result;\n}\n\nfunction parseBase64Payload(data: unknown): string {\n  if (typeof data !== 'string' || data.trim() === '') {\n    throw new Error('dataBase64 is required');\n  }\n  return data;\n}\n\nasync function toBase64(data: Blob | ArrayBuffer | Uint8Array): Promise<string> {\n  if (data instanceof Blob) {\n    const buffer = await data.arrayBuffer();\n    return Buffer.from(buffer).toString('base64');\n  }\n  if (data instanceof ArrayBuffer) {\n    return Buffer.from(data).toString('base64');\n  }\n  return Buffer.from(data).toString('base64');\n}\n\nexport function createTestContext(options: TestContextOptions = {}) {\n  const appletId = options.appletId?.trim() || 'test';\n  let currentUser = normalizeUser(options.user);\n  const customHandlers = options.engineHandlers ?? {};\n  const secretStore = new Map(Object.entries(options.secrets ?? {}));\n  const kvStore = new Map<string, unknown>();\n  const dbStore = new Map<string, TestDocument>();\n  const jobsStore = new Map<string, ScheduledJob>();\n  const filesStore = new Map<string, TestFileRecord>();\n\n  function scopedKey(key: string): string {\n    return `${currentUser.tenantId}::${appletId}::${key}`;\n  }\n\n  async function dbCall<T>(op: string, params: Record<string, unknown>): Promise<T> {\n    switch (op) {\n      case 'get': {\n        const id = String(params.id ?? '');\n        const record = dbStore.get(id);\n        return (record ? { _id: record.id, table: record.table, value: record.value } : null) as T;\n      }\n      case 'query': {\n        const table = String(params.table ?? '');\n        const query = (params.query as DBQueryOptions | undefined) ?? {};\n        const rows = filterDocuments(\n          [...dbStore.values()].filter((doc) => doc.table === table),\n          query,\n        );\n        return rows.map((doc) => ({ _id: doc.id, table: doc.table, value: doc.value })) as T;\n      }\n      case 'insert': {\n        const id = randomID('doc');\n        const now = Date.now();\n        const record: TestDocument = {\n          id,\n          table: String(params.table ?? ''),\n          value: params.value,\n          createdAt: now,\n          updatedAt: now,\n        };\n        dbStore.set(id, record);\n        return { _id: id, table: record.table, value: record.value } as T;\n      }\n      case 'patch':\n      {\n        const id = String(params.id ?? '');\n        const current = dbStore.get(id);\n        if (!current) {\n          return null as T;\n        }\n        const currentValue = current.value;\n        const nextValue = params.value;\n        const next: TestDocument = {\n          ...current,\n          value:\n            currentValue && typeof currentValue === 'object' && !Array.isArray(currentValue) &&\n            nextValue && typeof nextValue === 'object' && !Array.isArray(nextValue)\n              ? { ...(currentValue as Record<string, unknown>), ...(nextValue as Record<string, unknown>) }\n              : nextValue,\n          updatedAt: Date.now(),\n        };\n        dbStore.set(id, next);\n        return { _id: id, table: next.table, value: next.value } as T;\n      }\n      case 'replace': {\n        const id = String(params.id ?? '');\n        const current = dbStore.get(id);\n        if (!current) {\n          return null as T;\n        }\n        const next: TestDocument = {\n          ...current,\n          value: params.value,\n          updatedAt: Date.now(),\n        };\n        dbStore.set(id, next);\n        return { _id: id, table: next.table, value: next.value } as T;\n      }\n      case 'delete': {\n        const id = String(params.id ?? '');\n        return dbStore.delete(id) as T;\n      }\n      default:\n        throw new Error(`unknown db op: ${op}`);\n    }\n  }\n\n  const db = createDB((op, params) => dbCall(op, params));\n\n  const engine = {\n    async call<T = unknown>(method: string, params: unknown): Promise<T> {\n      if (customHandlers[method]) {\n        return (await customHandlers[method](params)) as T;\n      }\n\n      const chunks = method.split('.');\n      if (chunks.length < 3 || chunks[0] !== appletId) {\n        throw new Error(`unsupported method: ${method}`);\n      }\n      const namespace = chunks[1];\n      const op = chunks.slice(2).join('.');\n      const payload = (params as Record<string, unknown>) ?? {};\n\n      if (namespace === 'kv') {\n        const key = String(payload.key ?? '');\n        const storageKey = scopedKey(key);\n        if (op === 'get') {\n          return (kvStore.get(storageKey) ?? null) as T;\n        }\n        if (op === 'set') {\n          kvStore.set(storageKey, payload.value);\n          return undefined as T;\n        }\n        if (op === 'del') {\n          return kvStore.delete(storageKey) as T;\n        }\n        if (op === 'mget') {\n          const keys = Array.isArray(payload.keys) ? payload.keys.map((v) => String(v)) : [];\n          return keys.map((k) => kvStore.get(scopedKey(k)) ?? null) as T;\n        }\n      }\n\n      if (namespace === 'db') {\n        return dbCall(op, payload) as Promise<T>;\n      }\n\n      if (namespace === 'jobs') {\n        if (op === 'enqueue') {\n          const id = randomID('job');\n          const record: ScheduledJob = {\n            id,\n            type: 'one_off',\n            cron: '',\n            method: String(payload.method ?? ''),\n            params: payload.params ?? {},\n            status: 'queued',\n            createdAt: new Date().toISOString(),\n            updatedAt: new Date().toISOString(),\n          };\n          jobsStore.set(id, record);\n          return record as T;\n        }\n        if (op === 'schedule') {\n          const id = randomID('job');\n          const record: ScheduledJob = {\n            id,\n            type: 'scheduled',\n            cron: String(payload.cron ?? ''),\n            method: String(payload.method ?? ''),\n            params: payload.params ?? {},\n            status: 'scheduled',\n            createdAt: new Date().toISOString(),\n            updatedAt: new Date().toISOString(),\n          };\n          jobsStore.set(id, record);\n          return record as T;\n        }\n        if (op === 'list') {\n          return [...jobsStore.values()] as T;\n        }\n        if (op === 'cancel') {\n          const id = String(payload.id ?? '');\n          return { ok: jobsStore.delete(id) } as T;\n        }\n      }\n\n      if (namespace === 'secrets' && op === 'get') {\n        const name = String(payload.name ?? '');\n        const value = secretStore.get(name);\n        if (value === undefined) {\n          throw new Error(`secret not found: ${name}`);\n        }\n        return { value } as T;\n      }\n\n      if (namespace === 'files') {\n        if (op === 'store') {\n          const id = randomID('file');\n          const name = String(payload.name ?? 'file.bin');\n          const dataBase64 = parseBase64Payload(payload.dataBase64);\n          const contentType = String(payload.contentType ?? '');\n          const size = Buffer.from(dataBase64, 'base64').byteLength;\n          const record: TestFileRecord = {\n            id,\n            name,\n            contentType,\n            size,\n            path: `/test/${currentUser.tenantId}/${appletId}/${id}-${name}`,\n            createdAt: new Date().toISOString(),\n            dataBase64,\n          };\n          filesStore.set(id, record);\n          return record as T;\n        }\n        if (op === 'get') {\n          const id = String(payload.id ?? '');\n          const record = filesStore.get(id);\n          if (!record) {\n            return null as T;\n          }\n          const { dataBase64: _, ...rest } = record;\n          return rest as T;\n        }\n        if (op === 'delete') {\n          const id = String(payload.id ?? '');\n          return filesStore.delete(id) as T;\n        }\n      }\n\n      throw new Error(`unsupported method: ${method}`);\n    },\n  };\n\n  return {\n    auth: {\n      async currentUser(): Promise<CurrentUser> {\n        return currentUser;\n      },\n    },\n    engine,\n    kv: {\n      async get<T = unknown>(key: string): Promise<T | null> {\n        return (kvStore.get(scopedKey(key)) ?? null) as T | null;\n      },\n      async set(key: string, value: unknown, ttlSeconds?: number): Promise<void> {\n        if (!Number.isNaN(toNumber(ttlSeconds)) && (ttlSeconds as number) <= 0) {\n          kvStore.delete(scopedKey(key));\n          return;\n        }\n        // Test KV store intentionally ignores positive TTL values; callers can still verify scopedKey+kvStore behavior.\n        kvStore.set(scopedKey(key), value);\n      },\n      async del(key: string): Promise<boolean> {\n        return kvStore.delete(scopedKey(key));\n      },\n      async mget<T = unknown>(keys: string[]): Promise<Array<T | null>> {\n        return keys.map((key) => (kvStore.get(scopedKey(key)) ?? null) as T | null);\n      },\n    },\n    db,\n    jobs: {\n      enqueue(method: string, params?: unknown): Promise<ScheduledJob> {\n        return engine.call(`${appletId}.jobs.enqueue`, { method, params: params ?? {} });\n      },\n      schedule(cron: string, method: string, params?: unknown): Promise<ScheduledJob> {\n        return engine.call(`${appletId}.jobs.schedule`, { cron, method, params: params ?? {} });\n      },\n      list(): Promise<ScheduledJob[]> {\n        return engine.call(`${appletId}.jobs.list`, {});\n      },\n      cancel(id: string): Promise<{ ok: boolean }> {\n        return engine.call(`${appletId}.jobs.cancel`, { id });\n      },\n    },\n    secrets: {\n      async get(name: string): Promise<string> {\n        const result = await engine.call<{ value: string }>(`${appletId}.secrets.get`, { name });\n        return result.value;\n      },\n    },\n    files: {\n      async store(input: { name: string; contentType?: string; data: Blob | ArrayBuffer | Uint8Array }): Promise<StoredFile> {\n        const dataBase64 = await toBase64(input.data);\n        return engine.call<StoredFile>(`${appletId}.files.store`, {\n          name: input.name,\n          contentType: input.contentType ?? '',\n          dataBase64,\n        });\n      },\n      get(id: string): Promise<StoredFile | null> {\n        return engine.call(`${appletId}.files.get`, { id });\n      },\n      delete(id: string): Promise<boolean> {\n        return engine.call(`${appletId}.files.delete`, { id });\n      },\n    },\n    setCurrentUser(nextUser: Partial<CurrentUser>) {\n      currentUser = normalizeUser(nextUser);\n    },\n  };\n}\n"]}