@iota-uz/sdk 0.4.20 → 0.4.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +20 -0
  2. package/dist/applet/core.cjs +8 -4
  3. package/dist/applet/core.cjs.map +1 -1
  4. package/dist/applet/core.mjs +8 -4
  5. package/dist/applet/core.mjs.map +1 -1
  6. package/dist/applet/devtools.cjs +24 -8
  7. package/dist/applet/devtools.cjs.map +1 -1
  8. package/dist/applet/devtools.mjs +24 -8
  9. package/dist/applet/devtools.mjs.map +1 -1
  10. package/dist/applet/host.cjs +47 -16
  11. package/dist/applet/host.cjs.map +1 -1
  12. package/dist/applet/host.mjs +47 -16
  13. package/dist/applet/host.mjs.map +1 -1
  14. package/dist/applet/vite.cjs +12 -4
  15. package/dist/applet/vite.cjs.map +1 -1
  16. package/dist/applet/vite.mjs +12 -4
  17. package/dist/applet/vite.mjs.map +1 -1
  18. package/dist/applet-runtime/index.cjs.map +1 -1
  19. package/dist/applet-runtime/index.mjs.map +1 -1
  20. package/dist/bichat/index.cjs +6971 -2646
  21. package/dist/bichat/index.cjs.map +1 -1
  22. package/dist/bichat/index.css +11 -1
  23. package/dist/bichat/index.css.map +1 -1
  24. package/dist/bichat/index.d.cts +453 -157
  25. package/dist/bichat/index.d.ts +453 -157
  26. package/dist/bichat/index.mjs +6969 -2652
  27. package/dist/bichat/index.mjs.map +1 -1
  28. package/dist/bichat/styles.css +17 -4
  29. package/dist/bichat/tailwind.cjs.map +1 -1
  30. package/dist/bichat/tailwind.mjs.map +1 -1
  31. package/dist/index.cjs +73 -26
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.mjs +73 -26
  34. package/dist/index.mjs.map +1 -1
  35. package/package.json +10 -3
  36. package/tailwind/compiled.css +1 -1
  37. package/tailwind/create-config.cjs +50 -2
  38. package/tailwind/iota.css +6 -6
  39. package/tailwind/sdk-content.cjs +177 -0
  40. package/tailwind/sdk-theme.cjs +12 -0
@@ -1 +1 @@
1
- {"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"]}
1
+ {"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"]}