khotan-data 0.1.0 → 0.2.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/factory.ts"],"names":["rows","flow","handler","result","plugs"],"mappings":"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","file":"factory.js","sourcesContent":["import { eq, desc, sql, count, inArray } from \"drizzle-orm\";\n\ndeclare const process: { env: Record<string, string | undefined> };\n\nconst _khotanDebug = process?.env?.[\"KHOTAN_DEBUG\"];\nfunction kd(scope: string, ...args: unknown[]) {\n if (_khotanDebug) console.log(`[khotan:${scope}]`, ...args);\n}\nimport {\n boolean,\n index,\n integer,\n jsonb,\n pgTable,\n text,\n timestamp,\n unique,\n} from \"drizzle-orm/pg-core\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\n\n// ---------------------------------------------------------------------------\n// Internal schema — mirrors the scaffolded template so the factory can query\n// the same tables without importing from the user's project.\n// ---------------------------------------------------------------------------\n\nconst khotanPlugs = pgTable(\"khotan_plugs\", {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n name: text(\"name\").notNull().unique(),\n baseUrl: text(\"base_url\").notNull(),\n authType: text(\"auth_type\", {\n enum: [\"bearer\", \"basic\", \"apiKey\", \"custom\"],\n }).notNull(),\n enabled: boolean(\"enabled\").default(true).notNull(),\n status: text(\"status\", {\n enum: [\"connected\", \"error\", \"idle\"],\n })\n .default(\"idle\")\n .notNull(),\n statusMessage: text(\"status_message\"),\n encryptedVars: text(\"encrypted_vars\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n});\n\nconst khotanResources = pgTable(\"khotan_resources\", {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n name: text(\"name\").notNull().unique(),\n connectField: text(\"connect_field\").notNull(),\n description: text(\"description\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n});\n\nconst khotanFlows = pgTable(\n \"khotan_flows\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n plugId: text(\"plug_id\").notNull(),\n name: text(\"name\").notNull(),\n type: text(\"type\", {\n enum: [\"inflow\", \"outflow\", \"relay\", \"webhook\"],\n }).notNull(),\n enabled: boolean(\"enabled\").default(true).notNull(),\n schedule: text(\"schedule\"),\n resourceId: text(\"resource_id\"),\n lastRunAt: timestamp(\"last_run_at\", { withTimezone: true }),\n lastRunStatus: text(\"last_run_status\", {\n enum: [\"completed\", \"partial\", \"failed\", \"cancelled\"],\n }),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n unique(\"khotan_flows_plug_id_name_unique\").on(table.plugId, table.name),\n index(\"khotan_flows_plug_id_idx\").on(table.plugId),\n index(\"khotan_flows_resource_id_idx\").on(table.resourceId),\n ],\n);\n\nconst khotanWires = pgTable(\n \"khotan_wires\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n plugId: text(\"plug_id\").notNull(),\n remoteId: text(\"remote_id\").notNull(),\n callbackUrl: text(\"callback_url\").notNull(),\n eventTypes: jsonb(\"event_types\").notNull().$type<string[]>(),\n status: text(\"status\", {\n enum: [\"active\", \"disabled\", \"pending\"],\n })\n .default(\"pending\")\n .notNull(),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index(\"khotan_wires_plug_id_idx\").on(table.plugId),\n index(\"khotan_wires_status_idx\").on(table.status),\n ],\n);\n\nconst khotanWebhookHandlers = pgTable(\n \"khotan_webhook_handlers\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n wireId: text(\"wire_id\").notNull(),\n name: text(\"name\").notNull(),\n type: text(\"type\", {\n enum: [\"catch\", \"pass\"],\n }).notNull(),\n destinationPlugId: text(\"destination_plug_id\"),\n enabled: boolean(\"enabled\").default(true).notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n unique(\"khotan_webhook_handlers_wire_id_name_unique\").on(\n table.wireId,\n table.name,\n ),\n index(\"khotan_webhook_handlers_wire_id_idx\").on(table.wireId),\n ],\n);\n\nconst khotanWebhookEvents = pgTable(\n \"khotan_webhook_events\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n wireId: text(\"wire_id\").notNull(),\n webhookHandlerId: text(\"webhook_handler_id\").notNull(),\n khotanRunId: text(\"khotan_run_id\").notNull(),\n eventType: text(\"event_type\").notNull(),\n payload: jsonb(\"payload\").notNull().$type<Record<string, unknown>>(),\n headers: jsonb(\"headers\").notNull().$type<Record<string, string>>(),\n receivedAt: timestamp(\"received_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index(\"khotan_webhook_events_wire_id_idx\").on(table.wireId),\n index(\"khotan_webhook_events_webhook_handler_id_idx\").on(\n table.webhookHandlerId,\n ),\n index(\"khotan_webhook_events_khotan_run_id_idx\").on(table.khotanRunId),\n index(\"khotan_webhook_events_received_at_idx\").on(table.receivedAt.desc()),\n ],\n);\n\nconst khotanRuns = pgTable(\n \"khotan_runs\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n flowId: text(\"flow_id\"),\n wireId: text(\"wire_id\"),\n webhookHandlerId: text(\"webhook_handler_id\"),\n workflowRunId: text(\"workflow_run_id\"),\n runType: text(\"run_type\", {\n enum: [\"full\", \"delta\", \"backfill\", \"reconcile\", \"dry-run\", \"webhook\"],\n }).notNull(),\n status: text(\"status\", {\n enum: [\n \"pending\",\n \"running\",\n \"completed\",\n \"partial\",\n \"failed\",\n \"cancelled\",\n ],\n })\n .default(\"pending\")\n .notNull(),\n startedAt: timestamp(\"started_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n completedAt: timestamp(\"completed_at\", { withTimezone: true }),\n durationMs: integer(\"duration_ms\"),\n extracted: integer(\"extracted\").default(0).notNull(),\n transformed: integer(\"transformed\").default(0).notNull(),\n created: integer(\"created\").default(0).notNull(),\n updated: integer(\"updated\").default(0).notNull(),\n deleted: integer(\"deleted\").default(0).notNull(),\n failed: integer(\"failed\").default(0).notNull(),\n error: text(\"error\"),\n metadata: jsonb(\"metadata\"),\n },\n (table) => [\n index(\"khotan_runs_flow_id_idx\").on(table.flowId),\n index(\"khotan_runs_wire_id_idx\").on(table.wireId),\n index(\"khotan_runs_webhook_handler_id_idx\").on(table.webhookHandlerId),\n index(\"khotan_runs_status_idx\").on(table.status),\n index(\"khotan_runs_flow_id_started_at_idx\").on(\n table.flowId,\n table.startedAt.desc(),\n ),\n ],\n);\n\nconst khotanMappings = pgTable(\n \"khotan_mappings\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n resourceId: text(\"resource_id\").notNull(),\n connectValue: text(\"connect_value\").notNull(),\n refs: jsonb(\"refs\").notNull().$type<Record<string, string>>().default({}),\n metadata: jsonb(\"metadata\").$type<Record<string, unknown>>(),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n unique(\"khotan_mappings_resource_id_connect_value_unique\").on(\n table.resourceId,\n table.connectValue,\n ),\n index(\"khotan_mappings_resource_id_idx\").on(table.resourceId),\n index(\"khotan_mappings_refs_gin_idx\").using(\"gin\", table.refs),\n ],\n);\n\n// ---------------------------------------------------------------------------\n// Encryption — AES-256-GCM for var store\n// ---------------------------------------------------------------------------\n\nasync function deriveKey(secret: string): Promise<CryptoKey> {\n const encoded = new TextEncoder().encode(secret);\n const hash = await crypto.subtle.digest(\"SHA-256\", encoded);\n return crypto.subtle.importKey(\"raw\", hash, { name: \"AES-GCM\" }, false, [\n \"encrypt\",\n \"decrypt\",\n ]);\n}\n\nasync function encryptVars(plaintext: string, secret: string): Promise<string> {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const key = await deriveKey(secret);\n const encoded = new TextEncoder().encode(plaintext);\n const ciphertext = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n encoded,\n );\n const combined = new Uint8Array(iv.length + ciphertext.byteLength);\n combined.set(iv, 0);\n combined.set(new Uint8Array(ciphertext), iv.length);\n return bytesToHex(combined);\n}\n\nasync function decryptVars(encrypted: string, secret: string): Promise<string> {\n const combined = hexToBytes(encrypted);\n const iv = combined.slice(0, 12);\n const ciphertext = combined.slice(12);\n const key = await deriveKey(secret);\n const decrypted = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv },\n key,\n ciphertext,\n );\n return new TextDecoder().decode(decrypted);\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ResourceRegistration {\n name: string;\n connectField: string;\n description?: string;\n}\n\nexport type FlowType = \"inflow\" | \"outflow\" | \"relay\" | \"webhook\";\n\nexport type KhotanRunStatus =\n | \"pending\"\n | \"running\"\n | \"completed\"\n | \"partial\"\n | \"failed\"\n | \"cancelled\";\nexport type KhotanTerminalRunStatus =\n | \"completed\"\n | \"partial\"\n | \"failed\"\n | \"cancelled\";\n\nexport interface FlowRunResult {\n status?: KhotanTerminalRunStatus;\n extracted?: number;\n transformed?: number;\n created?: number;\n updated?: number;\n deleted?: number;\n failed?: number;\n error?: string | null;\n metadata?: Record<string, unknown> | null;\n}\n\nexport interface FlowRunContext {\n plug: {\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: { headers?: Record<string, string> },\n ): Promise<T>;\n };\n flow: {\n id: string;\n name: string;\n type: FlowType;\n resource?: string | null;\n to?: string | null;\n };\n runType: string;\n body?: unknown;\n vars: Record<string, string>;\n setVars(updates: Record<string, string>): Promise<void>;\n}\n\nexport interface FlowWorkflowContext {\n flow: {\n id: string;\n name: string;\n type: FlowType;\n resource?: string | null;\n to?: string | null;\n };\n runType: string;\n body?: unknown;\n vars: Record<string, string>;\n khotanRunId: string;\n}\n\nexport interface KhotanRunUpdate {\n type?: \"progress\" | \"log\" | \"metric\" | \"error\";\n message: string;\n progress?: number;\n extracted?: number;\n transformed?: number;\n created?: number;\n updated?: number;\n deleted?: number;\n failed?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface FlowRegistration {\n name: string;\n type: FlowType;\n schedule?: string;\n resource?: string;\n to?: string;\n workflow?(ctx: FlowWorkflowContext): Promise<FlowRunResult | void>;\n run?(ctx: FlowRunContext): Promise<FlowRunResult | void>;\n}\n\nexport interface WireSubscribeContext {\n plug: {\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: { headers?: Record<string, string> },\n ): Promise<T>;\n };\n callbackUrl: string;\n events: string[];\n wireVars: Record<string, string>;\n setWireVars(updates: Record<string, string>): Promise<void>;\n}\n\nexport interface WireUnsubscribeContext {\n plug: {\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: { headers?: Record<string, string> },\n ): Promise<T>;\n };\n remoteId: string;\n wireVars: Record<string, string>;\n setWireVars(updates: Record<string, string>): Promise<void>;\n}\n\nexport interface WireVerifyContext {\n headers: Record<string, string>;\n body: string;\n wireVars: Record<string, string>;\n}\n\nexport interface WireRegistration {\n events: string[];\n onSubscribe(ctx: WireSubscribeContext): Promise<{ remoteId: string }>;\n onUnsubscribe(ctx: WireUnsubscribeContext): Promise<void>;\n onVerify?(ctx: WireVerifyContext): Promise<boolean>;\n}\n\nexport interface CatchRegistration {\n type: \"catch\";\n name: string;\n events?: string[];\n workflow: (ctx: {\n event: Record<string, unknown>;\n eventType: string;\n headers: Record<string, string>;\n khotanRunId: string;\n }) => Promise<void>;\n}\n\nexport interface PassRegistration {\n type: \"pass\";\n name: string;\n to: string;\n events?: string[];\n workflow: (ctx: {\n event: Record<string, unknown>;\n eventType: string;\n headers: Record<string, string>;\n destVars: Record<string, string>;\n khotanRunId: string;\n }) => Promise<void>;\n}\n\nexport type WebhookRegistration = CatchRegistration | PassRegistration;\n\nexport interface VarField {\n readonly key: string;\n label: string;\n type: \"text\" | \"password\" | \"url\";\n secret?: boolean;\n hidden?: boolean;\n required?: boolean;\n placeholder?: string;\n defaultValue?: string;\n}\n\nexport interface PlugRegistration {\n name: string;\n plug: {\n baseUrl: string;\n authType: string;\n varFields?: readonly VarField[];\n endpoints?: Record<\n string,\n {\n method: string;\n path: string;\n description?: string;\n body?: { _def?: unknown; shape?: Record<string, unknown> };\n query?: { _def?: unknown; shape?: Record<string, unknown> };\n responses?: Record<\n number,\n { _def?: unknown; shape?: Record<string, unknown> }\n >;\n }\n >;\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: {\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n };\n vars?: VarField[];\n flows?: FlowRegistration[];\n endpoints?: Record<string, { method: string; path: string }>;\n wires?: WireRegistration[];\n webhooks?: WebhookRegistration[];\n catches?: CatchRegistration[];\n passes?: PassRegistration[];\n}\n\nexport interface KhotanAdapter {\n upsertPlug(plug: {\n name: string;\n baseUrl: string;\n authType: string;\n }): Promise<{ id: string }>;\n upsertFlow(flow: {\n plugId: string;\n name: string;\n type: string;\n schedule?: string | null;\n }): Promise<{ id: string }>;\n listPlugs(): Promise<Record<string, unknown>[]>;\n getPlug(id: string): Promise<Record<string, unknown> | null>;\n getPlugFlows(plugId: string): Promise<Record<string, unknown>[]>;\n getFlow(flowId: string): Promise<Record<string, unknown> | null>;\n listFlows(): Promise<Record<string, unknown>[]>;\n getRun(runId: string): Promise<Record<string, unknown> | null>;\n listRuns(flowId: string): Promise<Record<string, unknown>[]>;\n listRunsPage(params: {\n limit: number;\n offset: number;\n }): Promise<{ items: Record<string, unknown>[]; hasMore: boolean }>;\n\n upsertResource(resource: {\n name: string;\n connectField: string;\n description?: string | null;\n }): Promise<{ id: string }>;\n listResources(): Promise<Record<string, unknown>[]>;\n getResource(id: string): Promise<Record<string, unknown> | null>;\n getResourceFlows(resourceId: string): Promise<Record<string, unknown>[]>;\n\n upsertMapping(mapping: {\n id?: string;\n resourceId: string;\n connectValue: string;\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n }): Promise<{ id: string; created: boolean }>;\n getMapping(id: string): Promise<Record<string, unknown> | null>;\n listMappings(resourceId: string): Promise<Record<string, unknown>[]>;\n deleteMapping(id: string): Promise<void>;\n lookupMapping(params: {\n resourceId: string;\n plugName: string;\n ref: string;\n }): Promise<Record<string, unknown> | null>;\n\n updateFlowResourceId(flowId: string, resourceId: string): Promise<void>;\n togglePlugEnabled(plugId: string, enabled: boolean): Promise<void>;\n toggleFlowEnabled(flowId: string, enabled: boolean): Promise<void>;\n toggleWebhookHandlerEnabled(\n handlerId: string,\n enabled: boolean,\n ): Promise<void>;\n\n insertWire(wire: {\n plugId: string;\n remoteId: string;\n callbackUrl: string;\n eventTypes: string[];\n }): Promise<{ id: string }>;\n upsertWire(wire: { plugId: string }): Promise<{ id: string }>;\n getActiveWire(plugId: string): Promise<Record<string, unknown> | null>;\n getPlugWire(plugId: string): Promise<Record<string, unknown> | null>;\n getWire(wireId: string): Promise<Record<string, unknown> | null>;\n updateWireStatus(\n wireId: string,\n status: \"active\" | \"disabled\" | \"pending\",\n ): Promise<void>;\n updateWireDetails(\n wireId: string,\n details: {\n remoteId: string;\n callbackUrl: string;\n eventTypes: string[];\n status: \"active\";\n },\n ): Promise<void>;\n getWireMetadata(wireId: string): Promise<string | null>;\n updateWireMetadata(wireId: string, metadata: string): Promise<void>;\n getEncryptedVariables(plugId: string): Promise<string | null>;\n setEncryptedVariables(plugId: string, encrypted: string): Promise<void>;\n clearEncryptedVariables(plugId: string): Promise<void>;\n\n upsertWebhookHandler(handler: {\n wireId: string;\n name: string;\n type: \"catch\" | \"pass\";\n destinationPlugId?: string | null;\n }): Promise<{ id: string }>;\n listWebhookHandlers(wireId: string): Promise<Record<string, unknown>[]>;\n getLatestWebhookHandlerRun(\n handlerId: string,\n ): Promise<Record<string, unknown> | null>;\n\n insertRun(run: {\n flowId?: string | null;\n wireId?: string | null;\n webhookHandlerId?: string | null;\n workflowRunId?: string | null;\n runType: string;\n status: string;\n }): Promise<{ id: string }>;\n updateRun(\n runId: string,\n updates: {\n status: KhotanRunStatus;\n workflowRunId?: string | null;\n completedAt?: Date;\n durationMs?: number;\n extracted?: number;\n transformed?: number;\n created?: number;\n updated?: number;\n deleted?: number;\n failed?: number;\n error?: string | null;\n metadata?: Record<string, unknown> | null;\n },\n ): Promise<void>;\n insertWebhookEvent(event: {\n wireId: string;\n webhookHandlerId: string;\n khotanRunId: string;\n eventType: string;\n payload: Record<string, unknown>;\n headers: Record<string, string>;\n }): Promise<{ id: string }>;\n listWebhookEventsPage(params: {\n limit: number;\n offset: number;\n }): Promise<{ items: Record<string, unknown>[]; hasMore: boolean }>;\n updateFlowLastRun(\n flowId: string,\n updates: {\n lastRunAt: Date;\n lastRunStatus: KhotanTerminalRunStatus;\n },\n ): Promise<void>;\n}\n\nexport interface KhotanConfig {\n adapter: KhotanAdapter;\n plugs: PlugRegistration[];\n resources?: ResourceRegistration[];\n secret?: string;\n}\n\nexport type KhotanHandler = (request: Request) => Promise<Response>;\n\nexport interface WireInstance {\n create(callbackUrl: string): Promise<Record<string, unknown>>;\n delete(wireId: string): Promise<void>;\n get(): Promise<Record<string, unknown> | null>;\n}\n\nexport interface FlowStartOptions {\n runType?: string;\n body?: unknown;\n}\n\nexport interface FlowSelectorOptions {\n plugName?: string;\n}\n\nexport interface FlowInstance {\n start(options?: FlowStartOptions): Promise<Record<string, unknown>>;\n}\n\nexport interface KhotanInstance {\n handler: KhotanHandler;\n init(): Promise<void>;\n flow(flowNameOrId: string, options?: FlowSelectorOptions): FlowInstance;\n wire(plugName: string): WireInstance;\n getVars(plugName: string): Promise<Record<string, string>>;\n setVars(plugName: string, vars: Record<string, string>): Promise<void>;\n clearVars(plugName: string): Promise<void>;\n hasVars(plugName: string): Promise<boolean>;\n getVarFields(plugName: string): readonly VarField[];\n getPlug(plugName: string): PlugRegistration[\"plug\"];\n}\n\n// ---------------------------------------------------------------------------\n// drizzleAdapter\n// ---------------------------------------------------------------------------\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function drizzleAdapter(db: PgDatabase<any, any, any>): KhotanAdapter {\n return {\n async upsertPlug(plug) {\n const rows = await db\n .insert(khotanPlugs)\n .values({\n name: plug.name,\n baseUrl: plug.baseUrl,\n authType: plug.authType as \"bearer\" | \"basic\" | \"apiKey\" | \"custom\",\n })\n .onConflictDoUpdate({\n target: khotanPlugs.name,\n set: {\n baseUrl: plug.baseUrl,\n authType: plug.authType as \"bearer\" | \"basic\" | \"apiKey\" | \"custom\",\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanPlugs.id });\n return { id: rows[0]!.id };\n },\n\n async upsertFlow(flow) {\n const rows = await db\n .insert(khotanFlows)\n .values({\n plugId: flow.plugId,\n name: flow.name,\n type: flow.type as FlowType,\n schedule: flow.schedule ?? null,\n })\n .onConflictDoUpdate({\n target: [khotanFlows.plugId, khotanFlows.name],\n set: {\n type: flow.type as FlowType,\n schedule: flow.schedule ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanFlows.id });\n return { id: rows[0]!.id };\n },\n\n async listPlugs() {\n const flowCounts = db\n .select({\n plugId: khotanFlows.plugId,\n flowCount: count(khotanFlows.id).as(\"flow_count\"),\n })\n .from(khotanFlows)\n .groupBy(khotanFlows.plugId)\n .as(\"flow_counts\");\n\n const rows = await db\n .select({\n id: khotanPlugs.id,\n name: khotanPlugs.name,\n baseUrl: khotanPlugs.baseUrl,\n authType: khotanPlugs.authType,\n enabled: khotanPlugs.enabled,\n status: khotanPlugs.status,\n statusMessage: khotanPlugs.statusMessage,\n createdAt: khotanPlugs.createdAt,\n updatedAt: khotanPlugs.updatedAt,\n flowCount: sql<number>`coalesce(${flowCounts.flowCount}, 0)`,\n })\n .from(khotanPlugs)\n .leftJoin(flowCounts, eq(khotanPlugs.id, flowCounts.plugId));\n\n return rows;\n },\n\n async getPlug(id) {\n const rows = await db\n .select()\n .from(khotanPlugs)\n .where(eq(khotanPlugs.id, id))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getPlugFlows(plugId) {\n return db\n .select()\n .from(khotanFlows)\n .where(eq(khotanFlows.plugId, plugId));\n },\n\n async getFlow(flowId) {\n const rows = await db\n .select({\n id: khotanFlows.id,\n plugId: khotanFlows.plugId,\n name: khotanFlows.name,\n type: khotanFlows.type,\n enabled: khotanFlows.enabled,\n schedule: khotanFlows.schedule,\n resourceId: khotanFlows.resourceId,\n lastRunAt: khotanFlows.lastRunAt,\n lastRunStatus: khotanFlows.lastRunStatus,\n createdAt: khotanFlows.createdAt,\n updatedAt: khotanFlows.updatedAt,\n plugName: khotanPlugs.name,\n })\n .from(khotanFlows)\n .leftJoin(khotanPlugs, eq(khotanFlows.plugId, khotanPlugs.id))\n .where(eq(khotanFlows.id, flowId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async listFlows() {\n const rows = await db\n .select({\n id: khotanFlows.id,\n plugId: khotanFlows.plugId,\n name: khotanFlows.name,\n type: khotanFlows.type,\n enabled: khotanFlows.enabled,\n schedule: khotanFlows.schedule,\n resourceId: khotanFlows.resourceId,\n lastRunAt: khotanFlows.lastRunAt,\n lastRunStatus: khotanFlows.lastRunStatus,\n createdAt: khotanFlows.createdAt,\n updatedAt: khotanFlows.updatedAt,\n plugName: khotanPlugs.name,\n })\n .from(khotanFlows)\n .leftJoin(khotanPlugs, eq(khotanFlows.plugId, khotanPlugs.id));\n\n return rows;\n },\n\n async listRuns(flowId) {\n return db\n .select()\n .from(khotanRuns)\n .where(eq(khotanRuns.flowId, flowId))\n .orderBy(desc(khotanRuns.startedAt));\n },\n\n async getRun(runId) {\n const rows = await db\n .select()\n .from(khotanRuns)\n .where(eq(khotanRuns.id, runId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async listRunsPage({ limit, offset }) {\n const rows = await db\n .select()\n .from(khotanRuns)\n .orderBy(desc(khotanRuns.startedAt))\n .limit(limit + 1)\n .offset(offset);\n\n const hasMore = rows.length > limit;\n const pageRows = rows.slice(0, limit);\n\n const flowIds = [\n ...new Set(\n pageRows\n .map((row) => row.flowId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n const handlerIds = [\n ...new Set(\n pageRows\n .map((row) => row.webhookHandlerId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n\n const flowRows =\n flowIds.length > 0\n ? await db\n .select({\n id: khotanFlows.id,\n name: khotanFlows.name,\n plugName: khotanPlugs.name,\n })\n .from(khotanFlows)\n .leftJoin(khotanPlugs, eq(khotanFlows.plugId, khotanPlugs.id))\n .where(inArray(khotanFlows.id, flowIds))\n : [];\n\n const handlerRows =\n handlerIds.length > 0\n ? await db\n .select({\n id: khotanWebhookHandlers.id,\n name: khotanWebhookHandlers.name,\n type: khotanWebhookHandlers.type,\n plugName: khotanPlugs.name,\n })\n .from(khotanWebhookHandlers)\n .leftJoin(\n khotanWires,\n eq(khotanWebhookHandlers.wireId, khotanWires.id),\n )\n .leftJoin(khotanPlugs, eq(khotanWires.plugId, khotanPlugs.id))\n .where(inArray(khotanWebhookHandlers.id, handlerIds))\n : [];\n\n const flowMap = new Map(flowRows.map((row) => [row.id, row]));\n const handlerMap = new Map(handlerRows.map((row) => [row.id, row]));\n\n return {\n items: pageRows.map((row) => {\n const flow = row.flowId ? flowMap.get(row.flowId) : null;\n const handler = row.webhookHandlerId\n ? handlerMap.get(row.webhookHandlerId)\n : null;\n return {\n ...row,\n sourceType: flow ? \"flow\" : handler ? \"webhook\" : \"unknown\",\n sourceName: flow?.name ?? handler?.name ?? null,\n sourceKind: handler?.type ?? null,\n plugName: flow?.plugName ?? handler?.plugName ?? null,\n };\n }),\n hasMore,\n };\n },\n\n async upsertResource(resource) {\n const rows = await db\n .insert(khotanResources)\n .values({\n name: resource.name,\n connectField: resource.connectField,\n description: resource.description ?? null,\n })\n .onConflictDoUpdate({\n target: khotanResources.name,\n set: {\n connectField: resource.connectField,\n description: resource.description ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanResources.id });\n return { id: rows[0]!.id };\n },\n\n async listResources() {\n const flowCounts = db\n .select({\n resourceId: khotanFlows.resourceId,\n flowCount: count(khotanFlows.id).as(\"flow_count\"),\n })\n .from(khotanFlows)\n .where(sql`${khotanFlows.resourceId} is not null`)\n .groupBy(khotanFlows.resourceId)\n .as(\"flow_counts\");\n\n const mappingCounts = db\n .select({\n resourceId: khotanMappings.resourceId,\n mappingCount: count(khotanMappings.id).as(\"mapping_count\"),\n })\n .from(khotanMappings)\n .groupBy(khotanMappings.resourceId)\n .as(\"mapping_counts\");\n\n const rows = await db\n .select({\n id: khotanResources.id,\n name: khotanResources.name,\n connectField: khotanResources.connectField,\n description: khotanResources.description,\n createdAt: khotanResources.createdAt,\n updatedAt: khotanResources.updatedAt,\n flowCount: sql<number>`coalesce(${flowCounts.flowCount}, 0)`,\n mappingCount: sql<number>`coalesce(${mappingCounts.mappingCount}, 0)`,\n })\n .from(khotanResources)\n .leftJoin(flowCounts, eq(khotanResources.id, flowCounts.resourceId))\n .leftJoin(\n mappingCounts,\n eq(khotanResources.id, mappingCounts.resourceId),\n );\n\n return rows;\n },\n\n async getResource(id) {\n const rows = await db\n .select()\n .from(khotanResources)\n .where(eq(khotanResources.id, id))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getResourceFlows(resourceId) {\n return db\n .select()\n .from(khotanFlows)\n .where(eq(khotanFlows.resourceId, resourceId));\n },\n\n async upsertMapping(mapping) {\n if (mapping.id) {\n const rows = await db\n .update(khotanMappings)\n .set({\n resourceId: mapping.resourceId,\n connectValue: mapping.connectValue,\n refs: mapping.refs,\n metadata: mapping.metadata ?? null,\n updatedAt: new Date(),\n })\n .where(eq(khotanMappings.id, mapping.id))\n .returning({ id: khotanMappings.id });\n return { id: rows[0]!.id, created: false };\n }\n\n const existing = await db\n .select({ id: khotanMappings.id })\n .from(khotanMappings)\n .where(\n sql`${khotanMappings.resourceId} = ${mapping.resourceId} and ${khotanMappings.connectValue} = ${mapping.connectValue}`,\n )\n .limit(1);\n\n const rows = await db\n .insert(khotanMappings)\n .values({\n resourceId: mapping.resourceId,\n connectValue: mapping.connectValue,\n refs: mapping.refs,\n metadata: mapping.metadata ?? null,\n })\n .onConflictDoUpdate({\n target: [khotanMappings.resourceId, khotanMappings.connectValue],\n set: {\n refs: sql`${khotanMappings.refs} || ${JSON.stringify(mapping.refs)}::jsonb`,\n metadata: mapping.metadata ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanMappings.id });\n return { id: rows[0]!.id, created: existing.length === 0 };\n },\n\n async getMapping(id) {\n const rows = await db\n .select()\n .from(khotanMappings)\n .where(eq(khotanMappings.id, id))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async listMappings(resourceId) {\n return db\n .select()\n .from(khotanMappings)\n .where(eq(khotanMappings.resourceId, resourceId));\n },\n\n async deleteMapping(id) {\n await db.delete(khotanMappings).where(eq(khotanMappings.id, id));\n },\n\n async lookupMapping({ resourceId, plugName, ref }) {\n const rows = await db\n .select()\n .from(khotanMappings)\n .where(\n sql`${khotanMappings.resourceId} = ${resourceId} and ${khotanMappings.refs}->>${plugName} = ${ref}`,\n )\n .limit(1);\n return rows[0] ?? null;\n },\n\n async updateFlowResourceId(flowId, resourceId) {\n await db\n .update(khotanFlows)\n .set({ resourceId, updatedAt: new Date() })\n .where(eq(khotanFlows.id, flowId));\n },\n\n async togglePlugEnabled(plugId, enabled) {\n await db\n .update(khotanPlugs)\n .set({ enabled, updatedAt: new Date() })\n .where(eq(khotanPlugs.id, plugId));\n },\n\n async toggleFlowEnabled(flowId, enabled) {\n await db\n .update(khotanFlows)\n .set({ enabled, updatedAt: new Date() })\n .where(eq(khotanFlows.id, flowId));\n },\n\n async toggleWebhookHandlerEnabled(handlerId, enabled) {\n await db\n .update(khotanWebhookHandlers)\n .set({ enabled, updatedAt: new Date() })\n .where(eq(khotanWebhookHandlers.id, handlerId));\n },\n\n async insertWire(wire) {\n const rows = await db\n .insert(khotanWires)\n .values({\n plugId: wire.plugId,\n remoteId: wire.remoteId,\n callbackUrl: wire.callbackUrl,\n eventTypes: wire.eventTypes,\n status: \"active\",\n })\n .returning();\n return { id: rows[0]!.id };\n },\n\n async upsertWire(wire) {\n const existing = await db\n .select({ id: khotanWires.id })\n .from(khotanWires)\n .where(eq(khotanWires.plugId, wire.plugId))\n .limit(1);\n\n if (existing.length > 0) {\n return { id: existing[0]!.id };\n }\n\n const rows = await db\n .insert(khotanWires)\n .values({\n plugId: wire.plugId,\n remoteId: \"\",\n callbackUrl: \"\",\n eventTypes: [],\n status: \"pending\",\n })\n .returning();\n return { id: rows[0]!.id };\n },\n\n async getActiveWire(plugId) {\n const rows = await db\n .select()\n .from(khotanWires)\n .where(\n sql`${khotanWires.plugId} = ${plugId} and ${khotanWires.status} = 'active'`,\n )\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getPlugWire(plugId) {\n const rows = await db\n .select()\n .from(khotanWires)\n .where(eq(khotanWires.plugId, plugId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getWire(wireId) {\n const rows = await db\n .select()\n .from(khotanWires)\n .where(eq(khotanWires.id, wireId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async updateWireStatus(wireId, status) {\n await db\n .update(khotanWires)\n .set({ status, updatedAt: new Date() })\n .where(eq(khotanWires.id, wireId));\n },\n\n async updateWireDetails(wireId, details) {\n await db\n .update(khotanWires)\n .set({\n remoteId: details.remoteId,\n callbackUrl: details.callbackUrl,\n eventTypes: details.eventTypes,\n status: details.status,\n updatedAt: new Date(),\n })\n .where(eq(khotanWires.id, wireId));\n },\n\n async getWireMetadata(wireId) {\n const rows = await db\n .select({ metadata: khotanWires.metadata })\n .from(khotanWires)\n .where(eq(khotanWires.id, wireId))\n .limit(1);\n const meta = rows[0]?.metadata;\n if (!meta) return null;\n return typeof meta === \"string\" ? meta : JSON.stringify(meta);\n },\n\n async updateWireMetadata(wireId, metadata) {\n await db\n .update(khotanWires)\n .set({ metadata, updatedAt: new Date() })\n .where(eq(khotanWires.id, wireId));\n },\n\n async getEncryptedVariables(plugId) {\n const rows = await db\n .select({ encryptedVars: khotanPlugs.encryptedVars })\n .from(khotanPlugs)\n .where(eq(khotanPlugs.id, plugId))\n .limit(1);\n return rows[0]?.encryptedVars ?? null;\n },\n\n async setEncryptedVariables(plugId, encrypted) {\n await db\n .update(khotanPlugs)\n .set({ encryptedVars: encrypted, updatedAt: new Date() })\n .where(eq(khotanPlugs.id, plugId));\n },\n\n async clearEncryptedVariables(plugId) {\n await db\n .update(khotanPlugs)\n .set({ encryptedVars: null, updatedAt: new Date() })\n .where(eq(khotanPlugs.id, plugId));\n },\n\n async upsertWebhookHandler(handler) {\n const rows = await db\n .insert(khotanWebhookHandlers)\n .values({\n wireId: handler.wireId,\n name: handler.name,\n type: handler.type,\n destinationPlugId: handler.destinationPlugId ?? null,\n })\n .onConflictDoUpdate({\n target: [khotanWebhookHandlers.wireId, khotanWebhookHandlers.name],\n set: {\n type: handler.type,\n destinationPlugId: handler.destinationPlugId ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanWebhookHandlers.id });\n return { id: rows[0]!.id };\n },\n\n async listWebhookHandlers(wireId) {\n return db\n .select()\n .from(khotanWebhookHandlers)\n .where(eq(khotanWebhookHandlers.wireId, wireId));\n },\n\n async getLatestWebhookHandlerRun(handlerId) {\n const rows = await db\n .select({\n id: khotanRuns.id,\n status: khotanRuns.status,\n startedAt: khotanRuns.startedAt,\n })\n .from(khotanRuns)\n .where(eq(khotanRuns.webhookHandlerId, handlerId))\n .orderBy(desc(khotanRuns.startedAt))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async insertRun(run) {\n const rows = await db\n .insert(khotanRuns)\n .values({\n flowId: run.flowId ?? null,\n wireId: run.wireId ?? null,\n webhookHandlerId: run.webhookHandlerId ?? null,\n workflowRunId: run.workflowRunId ?? null,\n runType: run.runType as\n | \"full\"\n | \"delta\"\n | \"backfill\"\n | \"reconcile\"\n | \"dry-run\"\n | \"webhook\",\n status: run.status as KhotanRunStatus,\n })\n .returning({ id: khotanRuns.id });\n return { id: rows[0]!.id };\n },\n\n async updateRun(runId, updates) {\n await db\n .update(khotanRuns)\n .set({\n status: updates.status,\n workflowRunId: updates.workflowRunId,\n completedAt: updates.completedAt,\n durationMs: updates.durationMs,\n extracted: updates.extracted,\n transformed: updates.transformed,\n created: updates.created,\n updated: updates.updated,\n deleted: updates.deleted,\n failed: updates.failed,\n error: updates.error,\n metadata: updates.metadata,\n })\n .where(eq(khotanRuns.id, runId));\n },\n\n async insertWebhookEvent(event) {\n const rows = await db\n .insert(khotanWebhookEvents)\n .values({\n wireId: event.wireId,\n webhookHandlerId: event.webhookHandlerId,\n khotanRunId: event.khotanRunId,\n eventType: event.eventType,\n payload: event.payload,\n headers: event.headers,\n })\n .returning({ id: khotanWebhookEvents.id });\n return { id: rows[0]!.id };\n },\n\n async listWebhookEventsPage({ limit, offset }) {\n let rows: {\n id: string;\n wireId: string | null;\n webhookHandlerId: string | null;\n khotanRunId: string;\n eventType: string;\n payload: Record<string, unknown>;\n headers: Record<string, string>;\n receivedAt: Date;\n }[];\n\n try {\n rows = await db\n .select()\n .from(khotanWebhookEvents)\n .orderBy(desc(khotanWebhookEvents.receivedAt))\n .limit(limit + 1)\n .offset(offset);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const isLegacyShapeError =\n message.includes(`column \"wire_id\" does not exist`) ||\n message.includes(`column \"webhook_handler_id\" does not exist`) ||\n message.includes(`column \"headers\" does not exist`);\n\n if (!isLegacyShapeError) {\n throw error;\n }\n\n const legacyResult = await db.execute(sql`\n select\n \"id\",\n null::text as \"wire_id\",\n null::text as \"webhook_handler_id\",\n \"khotan_run_id\",\n \"event_type\",\n \"payload\",\n '{}'::jsonb as \"headers\",\n \"received_at\"\n from \"khotan_webhook_events\"\n order by \"received_at\" desc\n limit ${limit + 1}\n offset ${offset}\n `);\n\n const rawRows: Record<string, unknown>[] = Array.isArray(legacyResult)\n ? (legacyResult as Record<string, unknown>[])\n : \"rows\" in legacyResult && Array.isArray(legacyResult.rows)\n ? (legacyResult.rows as Record<string, unknown>[])\n : [];\n\n rows = rawRows.map((row) => ({\n id: String(row[\"id\"]),\n wireId: typeof row[\"wire_id\"] === \"string\" ? row[\"wire_id\"] : null,\n webhookHandlerId:\n typeof row[\"webhook_handler_id\"] === \"string\"\n ? row[\"webhook_handler_id\"]\n : null,\n khotanRunId: String(row[\"khotan_run_id\"]),\n eventType: String(row[\"event_type\"]),\n payload:\n row[\"payload\"] && typeof row[\"payload\"] === \"object\"\n ? (row[\"payload\"] as Record<string, unknown>)\n : {},\n headers:\n row[\"headers\"] && typeof row[\"headers\"] === \"object\"\n ? (row[\"headers\"] as Record<string, string>)\n : {},\n receivedAt:\n row[\"received_at\"] instanceof Date\n ? row[\"received_at\"]\n : new Date(String(row[\"received_at\"])),\n }));\n }\n\n const hasMore = rows.length > limit;\n const pageRows = rows.slice(0, limit);\n\n const handlerIds = [\n ...new Set(\n pageRows\n .map((row) => row.webhookHandlerId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n const runIds = [\n ...new Set(\n pageRows\n .map((row) => row.khotanRunId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n\n const handlerRows =\n handlerIds.length > 0\n ? await db\n .select({\n id: khotanWebhookHandlers.id,\n name: khotanWebhookHandlers.name,\n type: khotanWebhookHandlers.type,\n plugName: khotanPlugs.name,\n })\n .from(khotanWebhookHandlers)\n .leftJoin(\n khotanWires,\n eq(khotanWebhookHandlers.wireId, khotanWires.id),\n )\n .leftJoin(khotanPlugs, eq(khotanWires.plugId, khotanPlugs.id))\n .where(inArray(khotanWebhookHandlers.id, handlerIds))\n : [];\n\n const runRows =\n runIds.length > 0\n ? await db\n .select({\n id: khotanRuns.id,\n workflowRunId: khotanRuns.workflowRunId,\n status: khotanRuns.status,\n startedAt: khotanRuns.startedAt,\n })\n .from(khotanRuns)\n .where(inArray(khotanRuns.id, runIds))\n : [];\n\n const handlerMap = new Map(handlerRows.map((row) => [row.id, row]));\n const runMap = new Map(runRows.map((row) => [row.id, row]));\n\n return {\n items: pageRows.map((row) => {\n const handler = row.webhookHandlerId\n ? handlerMap.get(row.webhookHandlerId)\n : undefined;\n const run = runMap.get(row.khotanRunId);\n return {\n ...row,\n handlerName: handler?.name ?? null,\n handlerType: handler?.type ?? null,\n plugName: handler?.plugName ?? null,\n workflowRunId: run?.workflowRunId ?? null,\n runStatus: run?.status ?? null,\n runStartedAt: run?.startedAt ?? null,\n };\n }),\n hasMore,\n };\n },\n\n async updateFlowLastRun(flowId, updates) {\n await db\n .update(khotanFlows)\n .set({\n lastRunAt: updates.lastRunAt,\n lastRunStatus: updates.lastRunStatus,\n updatedAt: new Date(),\n })\n .where(eq(khotanFlows.id, flowId));\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Workflow integration — dynamic import of workflow/api\n// ---------------------------------------------------------------------------\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype WorkflowStartFn = (\n workflowFn: (...args: any[]) => any,\n args: unknown[],\n) => Promise<unknown>;\ninterface WorkflowRunHandle {\n runId?: string;\n status?: Promise<string>;\n returnValue?: Promise<unknown>;\n cancel?: () => Promise<void>;\n getReadable?: (options?: {\n startIndex?: number;\n namespace?: string;\n }) => ReadableStream;\n}\ntype WorkflowGetRunFn = (runId: string) => WorkflowRunHandle;\ntype WorkflowGetWritableFn = <T = unknown>(options?: {\n namespace?: string;\n}) => WritableStream<T>;\n\nlet _workflowStart: WorkflowStartFn | null = null;\nlet _workflowGetRun: WorkflowGetRunFn | null = null;\nlet _workflowGetWritable: WorkflowGetWritableFn | null = null;\n\nexport function __setWorkflowStartForTests(\n start: WorkflowStartFn | null,\n): void {\n _workflowStart = start;\n}\n\nexport function __setWorkflowGetRunForTests(\n getRun: WorkflowGetRunFn | null,\n): void {\n _workflowGetRun = getRun;\n}\n\nexport function __setWorkflowGetWritableForTests(\n getWritable: WorkflowGetWritableFn | null,\n): void {\n _workflowGetWritable = getWritable;\n}\n\nasync function importWorkflowStart(): Promise<WorkflowStartFn> {\n if (_workflowStart) return _workflowStart;\n try {\n const mod = (await import(/* webpackIgnore: true */ \"workflow/api\")) as {\n start: WorkflowStartFn;\n };\n _workflowStart = mod.start;\n return _workflowStart;\n } catch {\n throw new Error(\n \"Failed to import workflow/api. Install Vercel Workflow: npm install workflow\",\n );\n }\n}\n\nasync function importWorkflowGetRun(): Promise<WorkflowGetRunFn> {\n if (_workflowGetRun) return _workflowGetRun;\n try {\n const mod = (await import(/* webpackIgnore: true */ \"workflow/api\")) as {\n getRun: WorkflowGetRunFn;\n };\n _workflowGetRun = mod.getRun;\n return _workflowGetRun;\n } catch {\n throw new Error(\n \"Failed to import workflow/api. Install Vercel Workflow: npm install workflow\",\n );\n }\n}\n\nasync function importWorkflowGetWritable(): Promise<WorkflowGetWritableFn> {\n if (_workflowGetWritable) return _workflowGetWritable;\n try {\n const mod = (await import(/* webpackIgnore: true */ \"workflow\")) as {\n getWritable: WorkflowGetWritableFn;\n };\n _workflowGetWritable = mod.getWritable;\n return _workflowGetWritable;\n } catch {\n throw new Error(\n \"Failed to import workflow. Install Vercel Workflow: npm install workflow\",\n );\n }\n}\n\nexport async function sendUpdate(\n update: KhotanRunUpdate | string,\n options: { namespace?: string } = {},\n): Promise<void> {\n const getWritable = await importWorkflowGetWritable();\n const writable = getWritable<string>(options);\n const writer = writable.getWriter();\n const payload =\n typeof update === \"string\"\n ? { type: \"log\", message: update }\n : { type: \"progress\", ...update };\n\n try {\n await writer.write(\n `${JSON.stringify({ ...payload, timestamp: new Date().toISOString() })}\\n`,\n );\n } finally {\n writer.releaseLock();\n }\n}\n\nfunction getWorkflowRunId(result: unknown): string | null {\n if (!result || typeof result !== \"object\") return null;\n if (\"runId\" in result) return String(result.runId);\n if (\"id\" in result) return String(result.id);\n return null;\n}\n\nfunction getWorkflowReturnValue(result: unknown): Promise<unknown> | null {\n if (!result || typeof result !== \"object\" || !(\"returnValue\" in result)) {\n return null;\n }\n const returnValue = result.returnValue;\n return returnValue &&\n typeof (returnValue as Promise<unknown>).then === \"function\"\n ? (returnValue as Promise<unknown>)\n : null;\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (\n error &&\n typeof error === \"object\" &&\n \"cause\" in error &&\n (error as { cause?: unknown }).cause instanceof Error\n ) {\n return (error as { cause: Error }).cause.message;\n }\n if (error instanceof Error) return error.message;\n return \"Unknown error\";\n}\n\nfunction isWorkflowCancelledError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const record = error as Record<string, unknown>;\n const name = typeof record[\"name\"] === \"string\" ? record[\"name\"] : \"\";\n const status = typeof record[\"status\"] === \"string\" ? record[\"status\"] : \"\";\n const message =\n typeof record[\"message\"] === \"string\" ? record[\"message\"] : \"\";\n return (\n name === \"WorkflowRunCancelledError\" ||\n status === \"cancelled\" ||\n message.toLowerCase().includes(\"cancelled\")\n );\n}\n\nfunction toFlowRunResult(value: unknown): FlowRunResult | undefined {\n return value && typeof value === \"object\" ? value : undefined;\n}\n\nfunction getFlowRunCounters(result: FlowRunResult | undefined) {\n return {\n extracted: result?.extracted ?? 0,\n transformed: result?.transformed ?? 0,\n created: result?.created ?? 0,\n updated: result?.updated ?? 0,\n deleted: result?.deleted ?? 0,\n failed: result?.failed ?? 0,\n };\n}\n\nfunction resolveTerminalRunStatus(\n result: FlowRunResult | undefined,\n counters: ReturnType<typeof getFlowRunCounters>,\n): KhotanTerminalRunStatus {\n if (\n result?.status === \"completed\" ||\n result?.status === \"partial\" ||\n result?.status === \"failed\" ||\n result?.status === \"cancelled\"\n ) {\n return result.status;\n }\n return counters.failed > 0 ? \"partial\" : \"completed\";\n}\n\n// ---------------------------------------------------------------------------\n// khotan factory\n// ---------------------------------------------------------------------------\n\nfunction extractEventTypes(body: Record<string, unknown>): string[] {\n const candidates =\n body[\"eventTypes\"] ??\n body[\"event_types\"] ??\n body[\"events\"] ??\n body[\"enabled_events\"];\n if (Array.isArray(candidates)) return candidates as string[];\n return [];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction serializeZodSchema(schema: any): Record<string, unknown> | null {\n if (!schema) return null;\n try {\n const def = schema?._def ?? schema?.def ?? null;\n const rawTypeName: string =\n typeof def?.typeName === \"string\"\n ? def.typeName\n : typeof def?.type === \"string\"\n ? `Zod${def.type.charAt(0).toUpperCase()}${def.type.slice(1)}`\n : \"\";\n const inner =\n def?.innerType ??\n def?.element ??\n (typeof def?.type === \"object\" ? def.type : null) ??\n null;\n\n if (\n (rawTypeName === \"ZodOptional\" || rawTypeName === \"ZodNullable\") &&\n inner\n ) {\n return serializeZodSchema(inner);\n }\n\n const shape =\n typeof schema.shape === \"function\"\n ? schema.shape()\n : (schema.shape ??\n (typeof def?.shape === \"function\" ? def.shape() : def?.shape));\n if (shape && typeof shape === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(shape)) {\n result[key] = serializeZodField(val);\n }\n return result;\n }\n\n if (rawTypeName === \"ZodArray\" && inner) {\n return {\n _type: \"array\",\n items: serializeZodSchema(inner),\n };\n }\n\n if (rawTypeName) {\n return { _type: rawTypeName.replace(\"Zod\", \"\").toLowerCase() };\n }\n } catch {\n /* best-effort */\n }\n return null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction serializeZodField(field: any): string | Record<string, unknown> {\n const def = field?._def ?? field?.def ?? null;\n if (!def) return \"unknown\";\n const typeName: string =\n typeof def.typeName === \"string\"\n ? def.typeName\n : typeof def.type === \"string\"\n ? `Zod${def.type.charAt(0).toUpperCase()}${def.type.slice(1)}`\n : \"\";\n const inner =\n def.innerType ??\n def.element ??\n (typeof def.type === \"object\" ? def.type : null) ??\n null;\n\n if (typeName === \"ZodOptional\" && inner) {\n const serialized = serializeZodField(inner);\n if (typeof serialized === \"string\") {\n return serialized.endsWith(\"?\") ? serialized : `${serialized}?`;\n }\n return serialized;\n }\n\n if (typeName === \"ZodNullable\" && inner) {\n const serialized = serializeZodField(inner);\n if (typeof serialized === \"string\") {\n return serialized.includes(\" | null\")\n ? serialized\n : `${serialized} | null`;\n }\n return serialized;\n }\n\n if (\n typeName === \"ZodObject\" ||\n typeName === \"ZodArray\" ||\n typeName === \"ZodRecord\" ||\n typeName === \"ZodUnion\" ||\n typeName === \"ZodDiscriminatedUnion\"\n ) {\n return serializeZodSchema(field) ?? \"unknown\";\n }\n\n if (typeName === \"ZodEnum\") {\n const values = Array.isArray(def.values)\n ? def.values\n : def.entries && typeof def.entries === \"object\"\n ? Object.values(def.entries)\n : [];\n if (values.length > 0) {\n return values.map((v: string) => `\"${v}\"`).join(\" | \");\n }\n }\n\n return typeName.replace(\"Zod\", \"\").toLowerCase() || \"unknown\";\n}\n\nfunction serializeEndpoints(\n endpoints: Record<\n string,\n {\n method: string;\n path: string;\n description?: string;\n body?: unknown;\n query?: unknown;\n responses?: Record<number, unknown>;\n }\n > | null,\n) {\n if (!endpoints) return null;\n const result: Record<string, Record<string, unknown>> = {};\n for (const [name, ep] of Object.entries(endpoints)) {\n const entry: Record<string, unknown> = {\n method: ep.method,\n path: ep.path,\n };\n if (ep.description) entry[\"description\"] = ep.description;\n const bodySchema = serializeZodSchema(ep.body);\n if (bodySchema) entry[\"body\"] = bodySchema;\n const querySchema = serializeZodSchema(ep.query);\n if (querySchema) entry[\"query\"] = querySchema;\n if (ep.responses) {\n entry[\"responses\"] = Object.fromEntries(\n Object.entries(ep.responses).map(([code, schema]) => [\n code,\n serializeZodSchema(schema),\n ]),\n );\n }\n result[name] = entry;\n }\n return result;\n}\n\nexport function khotan(config: KhotanConfig): KhotanInstance {\n const { adapter, plugs, resources = [] } = config;\n\n // Validate: no duplicate resource names\n const resourceNames = new Set<string>();\n for (const resource of resources) {\n if (resourceNames.has(resource.name)) {\n throw new Error(`Duplicate resource name: \"${resource.name}\"`);\n }\n resourceNames.add(resource.name);\n }\n\n // Validate: no duplicate plug names\n const plugNames = new Set<string>();\n for (const plug of plugs) {\n if (plugNames.has(plug.name)) {\n throw new Error(`Duplicate plug name: \"${plug.name}\"`);\n }\n plugNames.add(plug.name);\n\n // Validate: flow resource references must match a registered resource\n if (plug.flows) {\n for (const flow of plug.flows) {\n if (flow.resource && !resourceNames.has(flow.resource)) {\n throw new Error(\n `Flow \"${flow.name}\" references unknown resource: \"${flow.resource}\"`,\n );\n }\n }\n }\n }\n\n const registeredFlowKeys = new Set(\n plugs.flatMap((plug) =>\n (plug.flows ?? []).map(\n (flow) => `${plug.name}\\0${flow.name}\\0${flow.type}`,\n ),\n ),\n );\n\n function isRegisteredFlowRecord(flow: Record<string, unknown>): boolean {\n return (\n typeof flow[\"plugName\"] === \"string\" &&\n typeof flow[\"name\"] === \"string\" &&\n typeof flow[\"type\"] === \"string\" &&\n registeredFlowKeys.has(\n `${flow[\"plugName\"]}\\0${flow[\"name\"]}\\0${flow[\"type\"]}`,\n )\n );\n }\n\n function getWebhookHandlersForPlug(\n plug: PlugRegistration,\n ): WebhookRegistration[] {\n const handlers: WebhookRegistration[] = [];\n if (plug.webhooks) handlers.push(...plug.webhooks);\n if (plug.catches) handlers.push(...plug.catches);\n if (plug.passes) handlers.push(...plug.passes);\n return handlers;\n }\n\n // Validate: webhook handlers require wire with onVerify; passes must reference existing plugs\n for (const plug of plugs) {\n const webhookHandlers = getWebhookHandlersForPlug(plug);\n if (webhookHandlers.length > 0) {\n const wireConfig = plug.wires?.[0];\n if (!wireConfig?.onVerify) {\n throw new Error(\n `Plug \"${plug.name}\" has webhook handlers but its wire does not define onVerify. ` +\n `onVerify is required for webhook processing.`,\n );\n }\n }\n for (const handler of webhookHandlers) {\n if (handler.type === \"pass\") {\n if (!plugNames.has(handler.to)) {\n throw new Error(\n `Pass on plug \"${plug.name}\" references unknown destination plug: \"${handler.to}\"`,\n );\n }\n }\n }\n }\n\n let initialized = false;\n let initPromise: Promise<void> | null = null;\n\n async function doInit(): Promise<void> {\n if (initialized) return;\n\n // Upsert resources first, collect name→id map\n const resourceIdMap = new Map<string, string>();\n for (const resource of resources) {\n const { id } = await adapter.upsertResource({\n name: resource.name,\n connectField: resource.connectField,\n description: resource.description ?? null,\n });\n resourceIdMap.set(resource.name, id);\n }\n\n for (const plug of plugs) {\n const { id: plugId } = await adapter.upsertPlug({\n name: plug.name,\n baseUrl: plug.plug.baseUrl,\n authType: plug.plug.authType,\n });\n\n await seedDefaultVarsForPlug(plugId, plug.name);\n\n if (plug.flows) {\n for (const flow of plug.flows) {\n const { id: flowId } = await adapter.upsertFlow({\n plugId,\n name: flow.name,\n type: flow.type,\n schedule: flow.schedule ?? null,\n });\n\n if (flow.resource) {\n const resourceId = resourceIdMap.get(flow.resource)!;\n await adapter.updateFlowResourceId(flowId, resourceId);\n }\n }\n }\n\n if (plug.wires) {\n for (const _wire of plug.wires) {\n const { id: wireId } = await adapter.upsertWire({ plugId });\n const webhookHandlers = getWebhookHandlersForPlug(plug);\n for (const handler of webhookHandlers) {\n if (handler.type === \"catch\") {\n await adapter.upsertWebhookHandler({\n wireId,\n name: handler.name,\n type: \"catch\",\n });\n continue;\n }\n\n // Resolve destination plug ID for pass handlers\n const destPlugRow = await adapter\n .listPlugs()\n .then((all) => all.find((row) => row[\"name\"] === handler.to));\n await adapter.upsertWebhookHandler({\n wireId,\n name: handler.name,\n type: \"pass\",\n destinationPlugId: destPlugRow\n ? (destPlugRow[\"id\"] as string)\n : null,\n });\n }\n }\n }\n }\n\n initialized = true;\n }\n\n async function init(): Promise<void> {\n initPromise ??= doInit();\n return initPromise;\n }\n\n function wire(plugName: string): WireInstance {\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n throw new Error(`Plug \"${plugName}\" not registered`);\n }\n if (!plugReg.wires || plugReg.wires.length === 0) {\n throw new Error(`Plug \"${plugName}\" has no wire configuration`);\n }\n const wireConfig = plugReg.wires[0]!;\n\n function createBoundPlug(\n vars: Record<string, string>,\n _setVars?: (updates: Record<string, string>) => Promise<void>,\n ) {\n const plug = plugReg!.plug;\n const opts = (extra?: {\n body?: unknown;\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n }) => ({\n ...extra,\n vars,\n ...(_setVars && { _setVars }),\n });\n return {\n get<T>(\n path: string,\n extra?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ) {\n return plug.get<T>(path, opts(extra));\n },\n post<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plug.post<T>(path, opts(extra));\n },\n put<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plug.put<T>(path, opts(extra));\n },\n patch<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plug.patch<T>(path, opts(extra));\n },\n delete<T>(path: string, extra?: { headers?: Record<string, string> }) {\n return plug.delete<T>(path, opts(extra));\n },\n };\n }\n\n async function getWireVars(\n wireId: string,\n ): Promise<Record<string, string>> {\n const raw = await adapter.getWireMetadata(wireId);\n if (!raw) return {};\n if (!secret) {\n try {\n return JSON.parse(raw) as Record<string, string>;\n } catch {\n return {};\n }\n }\n try {\n const decrypted = await decryptVars(raw, secret);\n return JSON.parse(decrypted) as Record<string, string>;\n } catch {\n try {\n return JSON.parse(raw) as Record<string, string>;\n } catch {\n return {};\n }\n }\n }\n\n async function setWireVars(\n wireId: string,\n vars: Record<string, string>,\n ): Promise<void> {\n const serialized = JSON.stringify(vars);\n const toStore = secret\n ? await encryptVars(serialized, secret)\n : serialized;\n await adapter.updateWireMetadata(wireId, toStore);\n }\n\n return {\n async create(callbackUrl: string) {\n await init();\n kd(\n \"wire\",\n `${plugName}: creating subscription, callbackUrl=${callbackUrl}`,\n );\n\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n throw new Error(`Plug \"${plugName}\" not found in database`);\n }\n const plugId = dbPlug[\"id\"] as string;\n\n const existingWire = await adapter.getPlugWire(plugId);\n const wireId = existingWire\n ? (existingWire[\"id\"] as string)\n : (\n await adapter.insertWire({\n plugId,\n remoteId: \"\",\n callbackUrl,\n eventTypes: wireConfig.events,\n })\n ).id;\n\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const _setVars = secret\n ? (updates: Record<string, string>) =>\n setVars(plugName, { ...vars, ...updates })\n : undefined;\n const boundPlug = createBoundPlug(vars, _setVars);\n\n const wireVars = await getWireVars(wireId);\n\n const result = await wireConfig.onSubscribe({\n plug: boundPlug,\n callbackUrl,\n events: wireConfig.events,\n wireVars,\n setWireVars: (updates) =>\n setWireVars(wireId, { ...wireVars, ...updates }),\n });\n\n kd(\n \"wire\",\n `${plugName}: subscription created, remoteId=${result.remoteId}`,\n );\n\n await adapter.updateWireDetails(wireId, {\n remoteId: result.remoteId,\n callbackUrl,\n eventTypes: wireConfig.events,\n status: \"active\",\n });\n\n const record = await adapter.getWire(wireId);\n return record!;\n },\n\n async delete(wireId: string) {\n await init();\n kd(\"wire\", `${plugName}: deleting wire ${wireId}`);\n const wireRecord = await adapter.getWire(wireId);\n if (!wireRecord) {\n throw new Error(`Wire \"${wireId}\" not found`);\n }\n\n const remoteId = (wireRecord[\"remoteId\"] ??\n wireRecord[\"remote_id\"]) as string;\n kd(\"wire\", `${plugName}: remoteId=${remoteId}`);\n if (!remoteId) {\n await adapter.updateWireStatus(wireId, \"disabled\");\n return;\n }\n\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const _setVars = secret\n ? (updates: Record<string, string>) =>\n setVars(plugName, { ...vars, ...updates })\n : undefined;\n const boundPlug = createBoundPlug(vars, _setVars);\n\n const wireVars = await getWireVars(wireId);\n\n await wireConfig.onUnsubscribe({\n plug: boundPlug,\n remoteId,\n wireVars,\n setWireVars: (updates) =>\n setWireVars(wireId, { ...wireVars, ...updates }),\n });\n\n kd(\"wire\", `${plugName}: unsubscribed successfully`);\n await adapter.updateWireStatus(wireId, \"disabled\");\n },\n\n async get() {\n await init();\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) return null;\n\n return adapter.getPlugWire(dbPlug[\"id\"] as string);\n },\n };\n }\n\n async function triggerFlowRun(\n flowId: string,\n body: unknown,\n ): Promise<Response> {\n const flow = await adapter.getFlow(flowId);\n if (\n !flow ||\n typeof flow[\"plugName\"] !== \"string\" ||\n !plugNames.has(flow[\"plugName\"])\n ) {\n return Response.json({ error: \"Flow not found\" }, { status: 404 });\n }\n\n if (flow[\"enabled\"] === false) {\n return Response.json({ error: \"Flow is disabled\" }, { status: 409 });\n }\n\n const plugName = flow[\"plugName\"];\n const plugReg = plugs.find((p) => p.name === plugName);\n const flowName = flow[\"name\"];\n const flowType = flow[\"type\"];\n const flowReg = plugReg?.flows?.find(\n (candidate) => candidate.name === flowName && candidate.type === flowType,\n );\n\n if (!plugReg || !flowReg) {\n return Response.json({ error: \"Flow not registered\" }, { status: 404 });\n }\n\n if (flowReg.type === \"webhook\") {\n return Response.json(\n { error: \"Webhook flows are triggered through webhook routes\" },\n { status: 400 },\n );\n }\n\n const requestBody =\n body && typeof body === \"object\" ? (body as Record<string, unknown>) : {};\n const runType =\n typeof requestBody[\"runType\"] === \"string\"\n ? requestBody[\"runType\"]\n : \"full\";\n\n const { id: runId } = await adapter.insertRun({\n flowId,\n runType,\n status: \"running\",\n });\n const startedAt = Date.now();\n\n async function completeRunOk(result: FlowRunResult | undefined) {\n const completedAt = new Date();\n const counters = getFlowRunCounters(result);\n const status = resolveTerminalRunStatus(result, counters);\n\n await adapter.updateRun(runId, {\n status,\n completedAt,\n durationMs: Date.now() - startedAt,\n ...counters,\n error: result?.error ?? null,\n metadata: result?.metadata ?? null,\n });\n await adapter.updateFlowLastRun(flowId, {\n lastRunAt: completedAt,\n lastRunStatus: status,\n });\n\n return { completedAt, counters, status };\n }\n\n async function completeRunFailed(error: unknown) {\n const completedAt = new Date();\n const message = getErrorMessage(error);\n const status: KhotanTerminalRunStatus = isWorkflowCancelledError(error)\n ? \"cancelled\"\n : \"failed\";\n await adapter.updateRun(runId, {\n status,\n completedAt,\n durationMs: Date.now() - startedAt,\n failed: status === \"failed\" ? 1 : 0,\n error: message,\n });\n await adapter.updateFlowLastRun(flowId, {\n lastRunAt: completedAt,\n lastRunStatus: status,\n });\n return message;\n }\n\n function observeWorkflowCompletion(workflowResult: unknown) {\n const returnValue = getWorkflowReturnValue(workflowResult);\n if (!returnValue) return;\n\n void returnValue\n .then(async (value) => {\n await completeRunOk(toFlowRunResult(value));\n })\n .catch(async (error) => {\n await completeRunFailed(error);\n })\n .catch((error) => {\n kd(\"flow\", `Failed to reconcile workflow run ${runId}`, error);\n });\n }\n\n try {\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const setFlowVars = async (updates: Record<string, string>) => {\n await setVars(plugName, { ...vars, ...updates });\n };\n const opts = (extra?: {\n body?: unknown;\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n }) => ({\n ...extra,\n vars,\n ...(secret ? { _setVars: setFlowVars } : {}),\n });\n const boundPlug = {\n get<T>(\n path: string,\n extra?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ) {\n return plugReg.plug.get<T>(path, opts(extra));\n },\n post<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plugReg.plug.post<T>(path, opts(extra));\n },\n put<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plugReg.plug.put<T>(path, opts(extra));\n },\n patch<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plugReg.plug.patch<T>(path, opts(extra));\n },\n delete<T>(path: string, extra?: { headers?: Record<string, string> }) {\n return plugReg.plug.delete<T>(path, opts(extra));\n },\n };\n\n const flowContext = {\n id: flowId,\n name: flowReg.name,\n type: flowReg.type,\n resource: flowReg.resource ?? null,\n to: flowReg.to ?? null,\n };\n\n if (flowReg.workflow) {\n const startWorkflow = await importWorkflowStart();\n const result = await startWorkflow(flowReg.workflow, [\n {\n flow: flowContext,\n runType,\n body: requestBody[\"body\"],\n vars,\n khotanRunId: runId,\n },\n ]);\n const workflowRunId = getWorkflowRunId(result);\n\n if (workflowRunId) {\n await adapter.updateRun(runId, {\n status: \"running\",\n workflowRunId,\n });\n }\n\n observeWorkflowCompletion(result);\n\n return Response.json({\n id: runId,\n flowId,\n workflowRunId,\n status: \"running\",\n runType,\n });\n }\n\n const result = await flowReg.run?.({\n plug: boundPlug,\n flow: flowContext,\n runType,\n body: requestBody[\"body\"],\n vars,\n setVars: setFlowVars,\n });\n const runResult = toFlowRunResult(result);\n\n const { counters, status } = await completeRunOk(runResult);\n\n return Response.json({\n id: runId,\n flowId,\n status,\n runType,\n ...counters,\n error: runResult?.error ?? null,\n metadata: runResult?.metadata ?? null,\n });\n } catch (error) {\n const message = await completeRunFailed(error);\n return Response.json(\n { id: runId, flowId, status: \"failed\", error: message },\n { status: 500 },\n );\n }\n }\n\n async function resolveFlowId(\n flowNameOrId: string,\n options: FlowSelectorOptions = {},\n ): Promise<string> {\n await init();\n\n const byId = await adapter.getFlow(flowNameOrId);\n if (\n byId &&\n typeof byId[\"plugName\"] === \"string\" &&\n plugNames.has(byId[\"plugName\"])\n ) {\n return flowNameOrId;\n }\n\n const matches = (await adapter.listFlows()).filter((flow) => {\n if (flow[\"name\"] !== flowNameOrId) return false;\n if (!isRegisteredFlowRecord(flow)) return false;\n return !options.plugName || flow[\"plugName\"] === options.plugName;\n });\n\n if (matches.length === 0) {\n const suffix = options.plugName ? ` on plug \"${options.plugName}\"` : \"\";\n throw new Error(`Flow \"${flowNameOrId}\"${suffix} not found`);\n }\n\n if (matches.length > 1) {\n const plugs = matches\n .map((flow) => String(flow[\"plugName\"]))\n .filter(Boolean)\n .join(\", \");\n throw new Error(\n `Flow \"${flowNameOrId}\" is registered on multiple plugs (${plugs}). Pass { plugName } to select one.`,\n );\n }\n\n const id = matches[0]?.[\"id\"];\n if (typeof id !== \"string\") {\n throw new Error(`Flow \"${flowNameOrId}\" has no database ID`);\n }\n\n return id;\n }\n\n function flow(\n flowNameOrId: string,\n selectorOptions: FlowSelectorOptions = {},\n ): FlowInstance {\n return {\n async start(startOptions: FlowStartOptions = {}) {\n const flowId = await resolveFlowId(flowNameOrId, selectorOptions);\n const response = await triggerFlowRun(flowId, startOptions);\n const payload = await response.json().catch(() => ({}));\n\n if (!response.ok) {\n const message =\n payload && typeof payload === \"object\" && \"error\" in payload\n ? String((payload as { error: unknown }).error)\n : `Failed to start flow \"${flowNameOrId}\"`;\n throw new Error(message);\n }\n\n return payload as Record<string, unknown>;\n },\n };\n }\n\n async function getRunWithWorkflowStatus(\n runId: string,\n ): Promise<Record<string, unknown> | null> {\n const run = await adapter.getRun(runId);\n if (!run) return null;\n\n const workflowRunId =\n typeof run[\"workflowRunId\"] === \"string\"\n ? run[\"workflowRunId\"]\n : typeof run[\"workflow_run_id\"] === \"string\"\n ? run[\"workflow_run_id\"]\n : null;\n\n if (!workflowRunId) {\n return { ...run, workflowStatus: null };\n }\n\n try {\n const getRun = await importWorkflowGetRun();\n const workflowRun = getRun(workflowRunId);\n const workflowStatus = workflowRun.status\n ? await workflowRun.status\n : null;\n return { ...run, workflowStatus };\n } catch (error) {\n return {\n ...run,\n workflowStatus: null,\n workflowError: getErrorMessage(error),\n };\n }\n }\n\n function getRunWorkflowId(run: Record<string, unknown>): string | null {\n return typeof run[\"workflowRunId\"] === \"string\"\n ? run[\"workflowRunId\"]\n : typeof run[\"workflow_run_id\"] === \"string\"\n ? run[\"workflow_run_id\"]\n : null;\n }\n\n async function handler(request: Request): Promise<Response> {\n await init();\n\n const url = new URL(request.url);\n const segments = url.pathname\n .replace(/^\\/+|\\/+$/g, \"\")\n .split(\"/\")\n .filter(Boolean);\n\n const plugsIdx = segments.indexOf(\"plugs\");\n const flowsIdx = segments.indexOf(\"flows\");\n const resourcesIdx = segments.indexOf(\"resources\");\n const mappingsIdx = segments.indexOf(\"mappings\");\n const runsIdx = segments.indexOf(\"runs\");\n const wiresIdx = segments.indexOf(\"wires\");\n const webhookHandlersIdx = segments.indexOf(\"webhook-handlers\");\n const webhookEventsIdx = segments.indexOf(\"webhook-events\");\n const variablesIdx = segments.indexOf(\"variables\");\n\n const debugIdx = segments.indexOf(\"debug\");\n\n const limit = Math.min(\n Math.max(\n Number.parseInt(url.searchParams.get(\"limit\") ?? \"20\", 10) || 20,\n 1,\n ),\n 100,\n );\n const offset = Math.max(\n Number.parseInt(url.searchParams.get(\"offset\") ?? \"0\", 10) || 0,\n 0,\n );\n\n if (request.method === \"GET\") {\n // GET .../debug — check if debug mode is active\n if (debugIdx !== -1 && debugIdx === segments.length - 1) {\n const debugActive = process?.env?.[\"KHOTAN_DEBUG\"];\n if (!debugActive) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n return Response.json({ enabled: true });\n }\n\n // GET .../debug/:plugName — plug metadata for the debugger UI\n if (debugIdx !== -1 && debugIdx === segments.length - 2) {\n const debugActive = process?.env?.[\"KHOTAN_DEBUG\"];\n if (!debugActive) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n const plugName = segments[debugIdx + 1]!;\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const fields = plugReg.vars ?? plugReg.plug.varFields ?? [];\n const hasConfigured = await hasVars(plugName).catch(() => false);\n const rawEndpoints =\n plugReg.plug.endpoints ?? plugReg.endpoints ?? null;\n\n let varValues: Record<string, string> = {};\n if (hasConfigured || Object.keys(getDefaultVars(plugName)).length > 0) {\n try {\n const raw = await getVars(plugName);\n varValues = Object.fromEntries(\n Object.entries(maskVars(plugName, raw)).filter(([key]) => {\n const field = fields.find((f) => f.key === key);\n return field && !field.hidden;\n }),\n );\n } catch {\n /* no secret configured */\n }\n }\n\n return Response.json({\n name: plugReg.name,\n baseUrl: plugReg.plug.baseUrl,\n authType: plugReg.plug.authType,\n endpoints: serializeEndpoints(rawEndpoints),\n vars: {\n fields: fields.filter((f) => !f.hidden),\n configured: hasConfigured,\n values: varValues,\n },\n });\n }\n\n // GET .../variables/:plugName\n if (variablesIdx !== -1 && variablesIdx === segments.length - 2) {\n const plugName = segments[variablesIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const fields = getVarFields(plugName);\n const hasValues = await hasVars(plugName);\n let masked: Record<string, string> = {};\n if (hasValues || Object.keys(getDefaultVars(plugName)).length > 0) {\n try {\n const vars = await getVars(plugName);\n masked = maskVars(plugName, vars);\n } catch {\n masked = {};\n }\n }\n return Response.json({ fields, values: masked, configured: hasValues });\n }\n\n // GET .../wires/:plugName\n if (wiresIdx !== -1 && wiresIdx === segments.length - 2) {\n const plugName = segments[wiresIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg?.wires || plugReg.wires.length === 0) {\n return Response.json({ wire: null, configured: false });\n }\n const wireRecord = await wire(plugName).get();\n return Response.json({ wire: wireRecord, configured: true });\n }\n\n // GET .../webhook-handlers/:plugName\n if (\n webhookHandlersIdx !== -1 &&\n webhookHandlersIdx === segments.length - 2\n ) {\n const plugName = segments[webhookHandlersIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n return Response.json([]);\n }\n const plugId = dbPlug[\"id\"] as string;\n const wireRecord = await adapter.getPlugWire(plugId);\n if (!wireRecord) {\n return Response.json([]);\n }\n const wireId = wireRecord[\"id\"] as string;\n const handlers = await adapter.listWebhookHandlers(wireId);\n const plugReg = plugs.find((p) => p.name === plugName);\n const configuredHandlerEvents = new Map<string, string[] | undefined>();\n for (const handler of plugReg\n ? getWebhookHandlersForPlug(plugReg)\n : []) {\n configuredHandlerEvents.set(\n `${handler.type}:${handler.name}`,\n handler.events,\n );\n }\n const handlersWithRuns = await Promise.all(\n handlers.map(async (handler) => {\n const handlerId = handler[\"id\"];\n if (typeof handlerId !== \"string\") return handler;\n const latestRun =\n await adapter.getLatestWebhookHandlerRun(handlerId);\n return {\n ...handler,\n events:\n configuredHandlerEvents.get(\n `${String(handler[\"type\"])}:${String(handler[\"name\"])}`,\n ) ?? null,\n lastRunStatus: latestRun?.[\"status\"] ?? null,\n lastRunAt: latestRun?.[\"startedAt\"] ?? null,\n };\n }),\n );\n return Response.json(handlersWithRuns);\n }\n\n // GET .../plugs\n if (plugsIdx !== -1 && plugsIdx === segments.length - 1) {\n const data = await adapter.listPlugs();\n const filtered = data.filter(\n (p) => typeof p[\"name\"] === \"string\" && plugNames.has(p[\"name\"]),\n );\n const withVarState = await Promise.all(\n filtered.map(async (plug) => {\n const plugName = plug[\"name\"] as string;\n let varsConfigured = false;\n try {\n varsConfigured = await hasVars(plugName);\n } catch {\n varsConfigured = false;\n }\n return { ...plug, varsConfigured };\n }),\n );\n return Response.json(withVarState);\n }\n\n // GET .../plugs/:id\n if (plugsIdx !== -1 && plugsIdx === segments.length - 2) {\n const plugId = segments[plugsIdx + 1]!;\n const plug = await adapter.getPlug(plugId);\n if (\n !plug ||\n typeof plug[\"name\"] !== \"string\" ||\n !plugNames.has(plug[\"name\"])\n ) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const flows = await adapter.getPlugFlows(plugId);\n return Response.json({ ...plug, flows });\n }\n\n // GET .../flows — only flows belonging to registered plugs\n if (flowsIdx !== -1 && flowsIdx === segments.length - 1) {\n const data = await adapter.listFlows();\n const filtered = data.filter((flow) => isRegisteredFlowRecord(flow));\n return Response.json(filtered);\n }\n\n // GET .../flows/:id/runs\n if (\n flowsIdx !== -1 &&\n flowsIdx === segments.length - 3 &&\n segments[flowsIdx + 2] === \"runs\"\n ) {\n const flowId = segments[flowsIdx + 1]!;\n const data = await adapter.listRuns(flowId);\n return Response.json(data);\n }\n\n // GET .../runs\n if (runsIdx !== -1 && runsIdx === segments.length - 1) {\n const page = await adapter.listRunsPage({ limit, offset });\n return Response.json({\n items: page.items,\n page: {\n limit,\n offset,\n hasMore: page.hasMore,\n prevOffset: Math.max(offset - limit, 0),\n nextOffset: offset + limit,\n },\n });\n }\n\n // GET .../runs/:id/stream\n if (\n runsIdx !== -1 &&\n runsIdx === segments.length - 3 &&\n segments[runsIdx + 2] === \"stream\"\n ) {\n const runId = segments[runsIdx + 1]!;\n const run = await adapter.getRun(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n const workflowRunId = getRunWorkflowId(run);\n if (!workflowRunId) {\n return Response.json(\n { error: \"Run does not have a Workflow run ID\" },\n { status: 400 },\n );\n }\n\n const startIndexParam = url.searchParams.get(\"startIndex\");\n const parsedStartIndex =\n startIndexParam == null ? null : Number.parseInt(startIndexParam, 10);\n const namespace = url.searchParams.get(\"namespace\") ?? undefined;\n const getRun = await importWorkflowGetRun();\n const workflowRun = getRun(workflowRunId);\n const streamOptions: { startIndex?: number; namespace?: string } = {};\n if (\n typeof parsedStartIndex === \"number\" &&\n Number.isFinite(parsedStartIndex)\n ) {\n streamOptions.startIndex = parsedStartIndex;\n }\n if (namespace) streamOptions.namespace = namespace;\n const stream = workflowRun.getReadable?.(streamOptions);\n\n if (!stream) {\n return Response.json(\n { error: \"Workflow run does not expose a readable stream\" },\n { status: 400 },\n );\n }\n\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"application/x-ndjson; charset=utf-8\",\n \"Cache-Control\": \"no-cache, no-transform\",\n },\n });\n }\n\n // GET .../runs/:id\n if (runsIdx !== -1 && runsIdx === segments.length - 2) {\n const runId = segments[runsIdx + 1]!;\n const run = await getRunWithWorkflowStatus(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n return Response.json(run);\n }\n\n // GET .../webhook-events\n if (webhookEventsIdx !== -1 && webhookEventsIdx === segments.length - 1) {\n const page = await adapter.listWebhookEventsPage({ limit, offset });\n return Response.json({\n items: page.items,\n page: {\n limit,\n offset,\n hasMore: page.hasMore,\n prevOffset: Math.max(offset - limit, 0),\n nextOffset: offset + limit,\n },\n });\n }\n\n // GET .../resources — only resources registered in config\n if (resourcesIdx !== -1 && resourcesIdx === segments.length - 1) {\n const data = await adapter.listResources();\n const filtered = data.filter(\n (r) => typeof r[\"name\"] === \"string\" && resourceNames.has(r[\"name\"]),\n );\n return Response.json(filtered);\n }\n\n // GET .../resources/:id/mappings\n if (\n resourcesIdx !== -1 &&\n resourcesIdx === segments.length - 3 &&\n segments[resourcesIdx + 2] === \"mappings\"\n ) {\n const resourceId = segments[resourcesIdx + 1]!;\n const data = await adapter.listMappings(resourceId);\n return Response.json(data);\n }\n\n // GET .../resources/:id\n if (resourcesIdx !== -1 && resourcesIdx === segments.length - 2) {\n const resourceId = segments[resourcesIdx + 1]!;\n const resource = await adapter.getResource(resourceId);\n if (\n !resource ||\n typeof resource[\"name\"] !== \"string\" ||\n !resourceNames.has(resource[\"name\"])\n ) {\n return Response.json(\n { error: \"Resource not found\" },\n { status: 404 },\n );\n }\n const flows = await adapter.getResourceFlows(resourceId);\n return Response.json({ ...resource, flows });\n }\n\n // GET .../mappings/:id\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 2) {\n const mappingId = segments[mappingsIdx + 1]!;\n const mapping = await adapter.getMapping(mappingId);\n if (!mapping) {\n return Response.json({ error: \"Mapping not found\" }, { status: 404 });\n }\n return Response.json(mapping);\n }\n }\n\n if (request.method === \"POST\") {\n // POST .../webhook/:plugName — receive inbound webhooks\n const webhookIdx = segments.indexOf(\"webhook\");\n if (webhookIdx !== -1 && webhookIdx === segments.length - 2) {\n const plugName = segments[webhookIdx + 1]!;\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n return Response.json(\n { error: `Unknown plug: ${plugName}` },\n { status: 404 },\n );\n }\n\n const wireConfig = plugReg.wires?.[0];\n if (!wireConfig?.onVerify) {\n return Response.json(\n { error: `No active wire for plug: ${plugName}` },\n { status: 404 },\n );\n }\n\n const rawBody = await request.text();\n\n // Get wireVars for verification\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n return Response.json(\n { error: `Plug \"${plugName}\" not found in database` },\n { status: 404 },\n );\n }\n const plugId = dbPlug[\"id\"] as string;\n const wireRecord = await adapter.getPlugWire(plugId);\n const wireId = wireRecord ? (wireRecord[\"id\"] as string) : null;\n\n let wireVars: Record<string, string> = {};\n if (wireId) {\n const raw = await adapter.getWireMetadata(wireId);\n if (raw) {\n if (secret) {\n try {\n const decrypted = await decryptVars(raw, secret);\n wireVars = JSON.parse(decrypted) as Record<string, string>;\n } catch {\n try {\n wireVars = JSON.parse(raw) as Record<string, string>;\n } catch {\n /* empty */\n }\n }\n } else {\n try {\n wireVars = JSON.parse(raw) as Record<string, string>;\n } catch {\n /* empty */\n }\n }\n }\n }\n\n // Convert headers to plain Record\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n const verified = await wireConfig.onVerify({\n headers,\n body: rawBody,\n wireVars,\n });\n if (!verified) {\n return Response.json(\n { error: \"Webhook verification failed\" },\n { status: 401 },\n );\n }\n\n // Parse JSON after verification\n let event: Record<string, unknown>;\n try {\n event = JSON.parse(rawBody) as Record<string, unknown>;\n } catch {\n event = {};\n }\n const eventType =\n typeof event[\"type\"] === \"string\" ? event[\"type\"] : \"unknown\";\n\n const webhookHandlers = getWebhookHandlersForPlug(plugReg);\n const catches = webhookHandlers.filter(\n (handler): handler is CatchRegistration => handler.type === \"catch\",\n );\n const passes = webhookHandlers.filter(\n (handler): handler is PassRegistration => handler.type === \"pass\",\n );\n\n void Promise.resolve().then(async () => {\n try {\n const startWorkflow = await importWorkflowStart();\n\n // Look up handler IDs from DB for run tracking\n const dbHandlers = wireId\n ? await adapter.listWebhookHandlers(wireId)\n : [];\n\n for (const c of catches) {\n if (\n Array.isArray(c.events) &&\n c.events.length > 0 &&\n !c.events.includes(eventType)\n ) {\n continue;\n }\n const handlerRow = dbHandlers.find(\n (h) => h[\"name\"] === c.name && h[\"type\"] === \"catch\",\n );\n if (handlerRow?.[\"enabled\"] === false) {\n continue;\n }\n const handlerId = handlerRow\n ? (handlerRow[\"id\"] as string)\n : null;\n const { id: khotanRunId } = await adapter.insertRun({\n webhookHandlerId: handlerId,\n wireId,\n workflowRunId: null,\n runType: \"webhook\",\n status: \"running\",\n });\n if (handlerId && wireId) {\n await adapter.insertWebhookEvent({\n wireId,\n webhookHandlerId: handlerId,\n khotanRunId,\n eventType,\n payload: event,\n headers,\n });\n }\n try {\n const result = await startWorkflow(c.workflow, [\n { event, eventType, headers, khotanRunId },\n ]);\n const workflowRunId =\n result && typeof result === \"object\"\n ? \"runId\" in result\n ? String(result.runId)\n : \"id\" in result\n ? String(result.id)\n : null\n : null;\n if (workflowRunId) {\n await adapter.updateRun(khotanRunId, {\n status: \"running\",\n workflowRunId,\n });\n }\n } catch (err) {\n const message =\n err instanceof Error ? err.message : \"Unknown error\";\n await adapter.updateRun(khotanRunId, {\n status: \"failed\",\n completedAt: new Date(),\n failed: 1,\n error: message,\n });\n throw err;\n }\n }\n\n for (const p of passes) {\n if (\n Array.isArray(p.events) &&\n p.events.length > 0 &&\n !p.events.includes(eventType)\n ) {\n continue;\n }\n const handlerRow = dbHandlers.find(\n (h) => h[\"name\"] === p.name && h[\"type\"] === \"pass\",\n );\n if (handlerRow?.[\"enabled\"] === false) {\n continue;\n }\n let destVars: Record<string, string> = {};\n const destPlug = allPlugs.find((dp) => dp[\"name\"] === p.to);\n if (destPlug) {\n const destPlugId = destPlug[\"id\"] as string;\n const encrypted =\n await adapter.getEncryptedVariables(destPlugId);\n if (encrypted && secret) {\n try {\n const json = await decryptVars(encrypted, secret);\n destVars = JSON.parse(json) as Record<string, string>;\n } catch {\n /* empty */\n }\n }\n }\n const handlerId = handlerRow\n ? (handlerRow[\"id\"] as string)\n : null;\n const { id: khotanRunId } = await adapter.insertRun({\n webhookHandlerId: handlerId,\n wireId,\n workflowRunId: null,\n runType: \"webhook\",\n status: \"running\",\n });\n if (handlerId && wireId) {\n await adapter.insertWebhookEvent({\n wireId,\n webhookHandlerId: handlerId,\n khotanRunId,\n eventType,\n payload: event,\n headers,\n });\n }\n try {\n const result = await startWorkflow(p.workflow, [\n { event, eventType, headers, destVars, khotanRunId },\n ]);\n const workflowRunId =\n result && typeof result === \"object\"\n ? \"runId\" in result\n ? String(result.runId)\n : \"id\" in result\n ? String(result.id)\n : null\n : null;\n if (workflowRunId) {\n await adapter.updateRun(khotanRunId, {\n status: \"running\",\n workflowRunId,\n });\n }\n } catch (err) {\n const message =\n err instanceof Error ? err.message : \"Unknown error\";\n await adapter.updateRun(khotanRunId, {\n status: \"failed\",\n completedAt: new Date(),\n failed: 1,\n error: message,\n });\n throw err;\n }\n }\n } catch (err) {\n kd(\"webhook\", `${plugName}: workflow start failed:`, err);\n }\n });\n\n return Response.json({ received: true }, { status: 202 });\n }\n\n // POST .../debug/:plugName — dev-only proxy through plug\n if (debugIdx !== -1 && debugIdx === segments.length - 2) {\n const debugActive = process?.env?.[\"KHOTAN_DEBUG\"];\n if (!debugActive) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n const plugName = segments[debugIdx + 1]!;\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n\n const body = (await request.json()) as {\n method: string;\n path: string;\n body?: unknown;\n params?: Record<string, string>;\n headers?: Record<string, string>;\n };\n\n const method = (body.method ?? \"GET\").toUpperCase();\n const reqPath = body.path ?? \"/\";\n const start = Date.now();\n\n try {\n const plug = plugReg.plug;\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const _setVars = secret\n ? (updates: Record<string, string>) =>\n setVars(plugName, { ...vars, ...updates })\n : undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const opts: any = { vars };\n if (_setVars) opts._setVars = _setVars;\n if (body.params) opts.params = body.params;\n if (body.headers) opts.headers = body.headers;\n if (body.body) opts.body = body.body;\n\n let result: unknown;\n switch (method) {\n case \"GET\":\n result = await plug.get(reqPath, opts);\n break;\n case \"POST\":\n result = await plug.post(reqPath, opts);\n break;\n case \"PUT\":\n result = await plug.put(reqPath, opts);\n break;\n case \"PATCH\":\n result = await plug.patch(reqPath, opts);\n break;\n case \"DELETE\":\n result = await plug.delete(reqPath, opts);\n break;\n default:\n result = await plug.get(reqPath, opts);\n }\n\n const timing = Date.now() - start;\n\n const response: Record<string, unknown> = {\n status: 200,\n statusText: \"OK\",\n headers: {},\n body: result,\n timing,\n };\n\n const allEndpoints:\n | Record<string, { method: string; path: string }>\n | undefined = plugReg.plug.endpoints ?? plugReg.endpoints;\n if (allEndpoints) {\n const matched = Object.entries(allEndpoints).find(\n ([, ep]) =>\n ep.method.toUpperCase() === method && ep.path === reqPath,\n );\n if (matched) {\n response[\"endpoint\"] = {\n name: matched[0],\n method: matched[1].method,\n path: matched[1].path,\n };\n }\n }\n\n return Response.json(response);\n } catch (err) {\n const timing = Date.now() - start;\n const error = err instanceof Error ? err.message : \"Unknown error\";\n const errBody =\n err && typeof err === \"object\" && \"body\" in err ? err.body : null;\n const errStatus =\n err && typeof err === \"object\" && \"status\" in err\n ? (err as { status: number }).status\n : 500;\n\n return Response.json({\n status: errStatus,\n statusText: \"Error\",\n headers: {},\n body: errBody,\n timing,\n error,\n });\n }\n }\n\n // POST .../variables/:plugName\n if (variablesIdx !== -1 && variablesIdx === segments.length - 2) {\n const plugName = segments[variablesIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as Record<string, string>;\n const fields = getVarFields(plugName);\n const merged = {\n ...(await getVars(plugName).catch(() => ({}))),\n };\n\n for (const field of fields) {\n const value = body[field.key];\n if (value !== undefined) {\n merged[field.key] = value;\n }\n }\n\n const missing = fields\n .filter((f) => f.required !== false && !merged[f.key])\n .map((f) => f.key);\n if (missing.length > 0) {\n return Response.json(\n { error: `Missing required fields: ${missing.join(\", \")}` },\n { status: 400 },\n );\n }\n\n const vars: Record<string, string> = {};\n for (const field of fields) {\n const value = merged[field.key];\n if (value !== undefined) {\n vars[field.key] = value;\n }\n }\n\n try {\n await setVars(plugName, vars);\n return Response.json({ ok: true });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown error\";\n return Response.json({ error: message }, { status: 500 });\n }\n }\n\n // POST .../runs/:id/cancel\n if (\n runsIdx !== -1 &&\n runsIdx === segments.length - 3 &&\n segments[runsIdx + 2] === \"cancel\"\n ) {\n const runId = segments[runsIdx + 1]!;\n const run = await adapter.getRun(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n const workflowRunId = getRunWorkflowId(run);\n if (!workflowRunId) {\n return Response.json(\n { error: \"Run does not have a Workflow run ID\" },\n { status: 400 },\n );\n }\n\n const getRun = await importWorkflowGetRun();\n const workflowRun = getRun(workflowRunId);\n await workflowRun.cancel?.();\n\n const completedAt = new Date();\n await adapter.updateRun(runId, {\n status: \"cancelled\",\n completedAt,\n error: \"Cancelled\",\n });\n const flowId = typeof run[\"flowId\"] === \"string\" ? run[\"flowId\"] : null;\n if (flowId) {\n await adapter.updateFlowLastRun(flowId, {\n lastRunAt: completedAt,\n lastRunStatus: \"cancelled\",\n });\n }\n\n return Response.json({\n ok: true,\n id: runId,\n workflowRunId,\n status: \"cancelled\",\n error: \"Cancelled\",\n });\n }\n\n // POST .../runs/:id/retry\n if (\n runsIdx !== -1 &&\n runsIdx === segments.length - 3 &&\n segments[runsIdx + 2] === \"retry\"\n ) {\n const runId = segments[runsIdx + 1]!;\n const run = await adapter.getRun(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n const flowId = typeof run[\"flowId\"] === \"string\" ? run[\"flowId\"] : null;\n if (!flowId) {\n return Response.json(\n { error: \"Only flow runs can be retried from the Hub\" },\n { status: 400 },\n );\n }\n const runType =\n typeof run[\"runType\"] === \"string\" ? run[\"runType\"] : \"full\";\n return triggerFlowRun(flowId, { runType });\n }\n\n // POST .../flows/:id/runs\n if (\n flowsIdx !== -1 &&\n flowsIdx === segments.length - 3 &&\n segments[flowsIdx + 2] === \"runs\"\n ) {\n const flowId = segments[flowsIdx + 1]!;\n const body = await request.json().catch(() => ({}));\n return triggerFlowRun(flowId, body);\n }\n\n // POST .../wires/:plugName\n if (wiresIdx !== -1 && wiresIdx === segments.length - 2) {\n const plugName = segments[wiresIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as { callbackUrl: string };\n if (!body.callbackUrl) {\n return Response.json(\n { error: \"callbackUrl is required\" },\n { status: 400 },\n );\n }\n try {\n const record = await wire(plugName).create(body.callbackUrl);\n return Response.json({ wire: record }, { status: 201 });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown error\";\n kd(\"wire\", `${plugName}: create failed:`, message);\n if (error && typeof error === \"object\" && \"body\" in error) {\n kd(\"wire\", `${plugName}: response body:`, error.body);\n }\n return Response.json({ error: message }, { status: 500 });\n }\n }\n\n // POST .../mappings/lookup\n if (\n mappingsIdx !== -1 &&\n mappingsIdx === segments.length - 2 &&\n segments[mappingsIdx + 1] === \"lookup\"\n ) {\n const body = (await request.json()) as {\n resourceId: string;\n plugName: string;\n ref: string;\n };\n const mapping = await adapter.lookupMapping(body);\n if (!mapping) {\n return Response.json({ error: \"Mapping not found\" }, { status: 404 });\n }\n return Response.json(mapping);\n }\n\n // POST .../mappings\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 1) {\n const body = (await request.json()) as {\n resourceId: string;\n connectValue: string;\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n };\n const result = await adapter.upsertMapping(body);\n return Response.json(\n { id: result.id },\n { status: result.created ? 201 : 200 },\n );\n }\n }\n\n if (request.method === \"PATCH\") {\n // PATCH .../plugs/:id\n if (plugsIdx !== -1 && plugsIdx === segments.length - 2) {\n const plugId = segments[plugsIdx + 1]!;\n const plug = await adapter.getPlug(plugId);\n if (\n !plug ||\n typeof plug[\"name\"] !== \"string\" ||\n !plugNames.has(plug[\"name\"])\n ) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as { enabled?: boolean };\n if (typeof body.enabled === \"boolean\") {\n await adapter.togglePlugEnabled(plugId, body.enabled);\n }\n const updated = await adapter.getPlug(plugId);\n return Response.json(updated);\n }\n\n // PATCH .../flows/:id\n if (flowsIdx !== -1 && flowsIdx === segments.length - 2) {\n const flowId = segments[flowsIdx + 1]!;\n const body = (await request.json()) as { enabled?: boolean };\n if (typeof body.enabled === \"boolean\") {\n await adapter.toggleFlowEnabled(flowId, body.enabled);\n }\n return Response.json({ id: flowId, ...body });\n }\n\n // PATCH .../webhook-handlers/:id\n if (\n webhookHandlersIdx !== -1 &&\n webhookHandlersIdx === segments.length - 2\n ) {\n const handlerId = segments[webhookHandlersIdx + 1]!;\n const body = (await request.json()) as { enabled?: boolean };\n if (typeof body.enabled === \"boolean\") {\n await adapter.toggleWebhookHandlerEnabled(handlerId, body.enabled);\n }\n return Response.json({ id: handlerId, ...body });\n }\n }\n\n if (request.method === \"PUT\") {\n // PUT .../mappings/:id\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 2) {\n const mappingId = segments[mappingsIdx + 1]!;\n const body = (await request.json()) as {\n resourceId: string;\n connectValue: string;\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n };\n const result = await adapter.upsertMapping({ ...body, id: mappingId });\n return Response.json(result);\n }\n }\n\n if (request.method === \"DELETE\") {\n // DELETE .../variables/:plugName\n if (variablesIdx !== -1 && variablesIdx === segments.length - 2) {\n const plugName = segments[variablesIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n await clearVars(plugName);\n return new Response(null, { status: 204 });\n }\n\n // DELETE .../wires/:plugName\n if (wiresIdx !== -1 && wiresIdx === segments.length - 2) {\n const plugName = segments[wiresIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as { wireId: string };\n if (!body.wireId) {\n return Response.json(\n { error: \"wireId is required\" },\n { status: 400 },\n );\n }\n try {\n await wire(plugName).delete(body.wireId);\n return new Response(null, { status: 204 });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown error\";\n kd(\"wire\", `${plugName}: delete failed: ${message}`);\n return Response.json({ error: message }, { status: 500 });\n }\n }\n\n // DELETE .../mappings/:id\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 2) {\n const mappingId = segments[mappingsIdx + 1]!;\n await adapter.deleteMapping(mappingId);\n return new Response(null, { status: 204 });\n }\n }\n\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n\n const secret = config.secret ?? process.env[\"KHOTAN_SECRET\"] ?? \"\";\n\n async function resolvePlugId(plugName: string): Promise<string> {\n await init();\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n throw new Error(`Plug \"${plugName}\" not found in database`);\n }\n return dbPlug[\"id\"] as string;\n }\n\n function getDefaultVars(plugName: string): Record<string, string> {\n const defaults: Record<string, string> = {};\n for (const field of getVarFields(plugName)) {\n if (field.defaultValue !== undefined) {\n defaults[field.key] = field.defaultValue;\n }\n }\n return defaults;\n }\n\n async function getStoredVarsByPlugId(\n plugId: string,\n ): Promise<Record<string, string>> {\n if (!secret) {\n throw new Error(\"KHOTAN_SECRET is required for var operations\");\n }\n const encrypted = await adapter.getEncryptedVariables(plugId);\n if (!encrypted) return {};\n const json = await decryptVars(encrypted, secret);\n return JSON.parse(json) as Record<string, string>;\n }\n\n async function setVarsByPlugId(\n plugId: string,\n vars: Record<string, string>,\n ): Promise<void> {\n if (!secret) {\n throw new Error(\"KHOTAN_SECRET is required for var operations\");\n }\n const json = JSON.stringify(vars);\n const encrypted = await encryptVars(json, secret);\n await adapter.setEncryptedVariables(plugId, encrypted);\n }\n\n async function seedDefaultVarsForPlug(\n plugId: string,\n plugName: string,\n ): Promise<void> {\n const defaults = getDefaultVars(plugName);\n if (!secret || Object.keys(defaults).length === 0) {\n return;\n }\n\n const storedVars: Record<string, string> = await getStoredVarsByPlugId(\n plugId,\n ).catch(() => ({}));\n const seededVars = { ...defaults, ...storedVars };\n const hasChanges = Object.keys(seededVars).some(\n (key) => seededVars[key] !== storedVars[key],\n );\n\n if (hasChanges) {\n await setVarsByPlugId(plugId, seededVars);\n }\n }\n\n async function getVars(plugName: string): Promise<Record<string, string>> {\n const plugId = await resolvePlugId(plugName);\n const defaults = getDefaultVars(plugName);\n const stored = await getStoredVarsByPlugId(plugId);\n return { ...defaults, ...stored };\n }\n\n async function setVars(\n plugName: string,\n vars: Record<string, string>,\n ): Promise<void> {\n const plugId = await resolvePlugId(plugName);\n await setVarsByPlugId(plugId, vars);\n }\n\n async function clearVars(plugName: string): Promise<void> {\n const plugId = await resolvePlugId(plugName);\n await adapter.clearEncryptedVariables(plugId);\n }\n\n async function hasVars(plugName: string): Promise<boolean> {\n const plugId = await resolvePlugId(plugName);\n const encrypted = await adapter.getEncryptedVariables(plugId);\n return encrypted !== null && encrypted !== \"\";\n }\n\n function getVarFields(plugName: string): readonly VarField[] {\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n throw new Error(`Plug \"${plugName}\" not registered`);\n }\n return plugReg.vars ?? plugReg.plug.varFields ?? [];\n }\n\n function maskVars(\n plugName: string,\n vars: Record<string, string>,\n ): Record<string, string> {\n const fields = getVarFields(plugName);\n return Object.fromEntries(\n Object.entries(vars).map(([key, value]) => {\n const field = fields.find((f) => f.key === key);\n if (field?.secret) {\n return [key, value ? \"••••••••\" : \"\"];\n }\n return [key, value];\n }),\n );\n }\n\n function getPlug(plugName: string): PlugRegistration[\"plug\"] {\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n throw new Error(`Plug \"${plugName}\" not registered`);\n }\n return plugReg.plug;\n }\n\n return {\n handler,\n init,\n flow,\n wire,\n getVars,\n setVars,\n clearVars,\n hasVars,\n getVarFields,\n getPlug,\n };\n}\n\n// ---------------------------------------------------------------------------\n// toNextJsHandler\n// ---------------------------------------------------------------------------\n\ninterface NextJsRequest extends Request {\n nextUrl?: URL;\n}\n\ninterface NextJsRouteHandlers {\n GET: (req: NextJsRequest) => Promise<Response>;\n POST: (req: NextJsRequest) => Promise<Response>;\n PUT: (req: NextJsRequest) => Promise<Response>;\n PATCH: (req: NextJsRequest) => Promise<Response>;\n DELETE: (req: NextJsRequest) => Promise<Response>;\n}\n\nexport function toNextJsHandler(\n factoryHandler: KhotanHandler,\n): NextJsRouteHandlers {\n function handle(req: NextJsRequest): Promise<Response> {\n return factoryHandler(req);\n }\n\n return {\n GET: handle,\n POST: handle,\n PUT: handle,\n PATCH: handle,\n DELETE: handle,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/factory.ts"],"names":["timestamp","rows","flow","handler","result","plugs"],"mappings":"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","file":"factory.js","sourcesContent":["import { and, eq, desc, sql, count, inArray } from \"drizzle-orm\";\n\ndeclare const process: { env: Record<string, string | undefined> };\n\nconst _khotanDebug = process?.env?.[\"KHOTAN_DEBUG\"];\nfunction kd(scope: string, ...args: unknown[]) {\n if (_khotanDebug) console.log(`[khotan:${scope}]`, ...args);\n}\nimport {\n boolean,\n index,\n integer,\n jsonb,\n pgTable,\n text,\n timestamp,\n unique,\n} from \"drizzle-orm/pg-core\";\nimport type { PgDatabase } from \"drizzle-orm/pg-core\";\n\n// ---------------------------------------------------------------------------\n// Internal schema — mirrors the scaffolded template so the factory can query\n// the same tables without importing from the user's project.\n// ---------------------------------------------------------------------------\n\nconst khotanPlugs = pgTable(\"khotan_plugs\", {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n name: text(\"name\").notNull().unique(),\n baseUrl: text(\"base_url\").notNull(),\n authType: text(\"auth_type\", {\n enum: [\"bearer\", \"basic\", \"apiKey\", \"custom\"],\n }).notNull(),\n enabled: boolean(\"enabled\").default(true).notNull(),\n status: text(\"status\", {\n enum: [\"connected\", \"error\", \"idle\"],\n })\n .default(\"idle\")\n .notNull(),\n statusMessage: text(\"status_message\"),\n encryptedVars: text(\"encrypted_vars\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n});\n\nconst khotanResources = pgTable(\"khotan_resources\", {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n name: text(\"name\").notNull().unique(),\n connectField: text(\"connect_field\").notNull(),\n description: text(\"description\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n});\n\nconst khotanFlows = pgTable(\n \"khotan_flows\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n plugId: text(\"plug_id\").notNull(),\n name: text(\"name\").notNull(),\n type: text(\"type\", {\n enum: [\"inflow\", \"outflow\", \"relay\", \"webhook\"],\n }).notNull(),\n enabled: boolean(\"enabled\").default(true).notNull(),\n schedule: text(\"schedule\"),\n resourceId: text(\"resource_id\"),\n lastRunAt: timestamp(\"last_run_at\", { withTimezone: true }),\n lastRunStatus: text(\"last_run_status\", {\n enum: [\"completed\", \"partial\", \"failed\", \"cancelled\"],\n }),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n unique(\"khotan_flows_plug_id_name_unique\").on(table.plugId, table.name),\n index(\"khotan_flows_plug_id_idx\").on(table.plugId),\n index(\"khotan_flows_resource_id_idx\").on(table.resourceId),\n ],\n);\n\nconst khotanWires = pgTable(\n \"khotan_wires\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n plugId: text(\"plug_id\").notNull(),\n remoteId: text(\"remote_id\").notNull(),\n callbackUrl: text(\"callback_url\").notNull(),\n eventTypes: jsonb(\"event_types\").notNull().$type<string[]>(),\n status: text(\"status\", {\n enum: [\"active\", \"disabled\", \"pending\"],\n })\n .default(\"pending\")\n .notNull(),\n metadata: jsonb(\"metadata\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index(\"khotan_wires_plug_id_idx\").on(table.plugId),\n index(\"khotan_wires_status_idx\").on(table.status),\n ],\n);\n\nconst khotanWebhookHandlers = pgTable(\n \"khotan_webhook_handlers\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n wireId: text(\"wire_id\").notNull(),\n name: text(\"name\").notNull(),\n type: text(\"type\", {\n enum: [\"catch\", \"pass\"],\n }).notNull(),\n destinationPlugId: text(\"destination_plug_id\"),\n enabled: boolean(\"enabled\").default(true).notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n unique(\"khotan_webhook_handlers_wire_id_name_unique\").on(\n table.wireId,\n table.name,\n ),\n index(\"khotan_webhook_handlers_wire_id_idx\").on(table.wireId),\n ],\n);\n\nconst khotanWebhookEvents = pgTable(\n \"khotan_webhook_events\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n wireId: text(\"wire_id\").notNull(),\n webhookHandlerId: text(\"webhook_handler_id\").notNull(),\n khotanRunId: text(\"khotan_run_id\").notNull(),\n eventType: text(\"event_type\").notNull(),\n payload: jsonb(\"payload\").notNull().$type<Record<string, unknown>>(),\n headers: jsonb(\"headers\").notNull().$type<Record<string, string>>(),\n receivedAt: timestamp(\"received_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index(\"khotan_webhook_events_wire_id_idx\").on(table.wireId),\n index(\"khotan_webhook_events_webhook_handler_id_idx\").on(\n table.webhookHandlerId,\n ),\n index(\"khotan_webhook_events_khotan_run_id_idx\").on(table.khotanRunId),\n index(\"khotan_webhook_events_received_at_idx\").on(table.receivedAt.desc()),\n ],\n);\n\nconst khotanRuns = pgTable(\n \"khotan_runs\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n flowId: text(\"flow_id\"),\n wireId: text(\"wire_id\"),\n webhookHandlerId: text(\"webhook_handler_id\"),\n workflowRunId: text(\"workflow_run_id\"),\n runType: text(\"run_type\", {\n enum: [\"full\", \"delta\", \"backfill\", \"reconcile\", \"dry-run\", \"webhook\"],\n }).notNull(),\n status: text(\"status\", {\n enum: [\n \"pending\",\n \"running\",\n \"completed\",\n \"partial\",\n \"failed\",\n \"cancelled\",\n ],\n })\n .default(\"pending\")\n .notNull(),\n startedAt: timestamp(\"started_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n completedAt: timestamp(\"completed_at\", { withTimezone: true }),\n durationMs: integer(\"duration_ms\"),\n extracted: integer(\"extracted\").default(0).notNull(),\n transformed: integer(\"transformed\").default(0).notNull(),\n created: integer(\"created\").default(0).notNull(),\n updated: integer(\"updated\").default(0).notNull(),\n deleted: integer(\"deleted\").default(0).notNull(),\n failed: integer(\"failed\").default(0).notNull(),\n error: text(\"error\"),\n metadata: jsonb(\"metadata\"),\n },\n (table) => [\n index(\"khotan_runs_flow_id_idx\").on(table.flowId),\n index(\"khotan_runs_wire_id_idx\").on(table.wireId),\n index(\"khotan_runs_webhook_handler_id_idx\").on(table.webhookHandlerId),\n index(\"khotan_runs_status_idx\").on(table.status),\n index(\"khotan_runs_flow_id_started_at_idx\").on(\n table.flowId,\n table.startedAt.desc(),\n ),\n ],\n);\n\nconst khotanMappingsTable = pgTable(\n \"khotan_mappings\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n resourceId: text(\"resource_id\").notNull(),\n connectValue: text(\"connect_value\").notNull(),\n refs: jsonb(\"refs\").notNull().$type<Record<string, string>>().default({}),\n metadata: jsonb(\"metadata\").$type<Record<string, unknown>>(),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n unique(\"khotan_mappings_resource_id_connect_value_unique\").on(\n table.resourceId,\n table.connectValue,\n ),\n index(\"khotan_mappings_resource_id_idx\").on(table.resourceId),\n index(\"khotan_mappings_refs_gin_idx\").using(\"gin\", table.refs),\n ],\n);\n\nconst khotanCaches = pgTable(\n \"khotan_caches\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n name: text(\"name\").notNull().unique(),\n scope: jsonb(\"scope\").$type<CacheScope>(),\n ttlSeconds: integer(\"ttl_seconds\"),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [index(\"khotan_caches_name_idx\").on(table.name)],\n);\n\nconst khotanCacheEntries = pgTable(\n \"khotan_cache_entries\",\n {\n id: text(\"id\")\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n cacheId: text(\"cache_id\").notNull(),\n key: text(\"key\").notNull(),\n value: jsonb(\"value\").notNull().$type<unknown>(),\n expiresAt: timestamp(\"expires_at\", { withTimezone: true }),\n createdAt: timestamp(\"created_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n unique(\"khotan_cache_entries_cache_id_key_unique\").on(\n table.cacheId,\n table.key,\n ),\n index(\"khotan_cache_entries_cache_id_idx\").on(table.cacheId),\n index(\"khotan_cache_entries_cache_id_key_idx\").on(table.cacheId, table.key),\n index(\"khotan_cache_entries_expires_at_idx\").on(table.expiresAt),\n ],\n);\n\n// ---------------------------------------------------------------------------\n// Encryption — AES-256-GCM for var store\n// ---------------------------------------------------------------------------\n\nasync function deriveKey(secret: string): Promise<CryptoKey> {\n const encoded = new TextEncoder().encode(secret);\n const hash = await crypto.subtle.digest(\"SHA-256\", encoded);\n return crypto.subtle.importKey(\"raw\", hash, { name: \"AES-GCM\" }, false, [\n \"encrypt\",\n \"decrypt\",\n ]);\n}\n\nasync function encryptVars(plaintext: string, secret: string): Promise<string> {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const key = await deriveKey(secret);\n const encoded = new TextEncoder().encode(plaintext);\n const ciphertext = await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n encoded,\n );\n const combined = new Uint8Array(iv.length + ciphertext.byteLength);\n combined.set(iv, 0);\n combined.set(new Uint8Array(ciphertext), iv.length);\n return bytesToHex(combined);\n}\n\nasync function decryptVars(encrypted: string, secret: string): Promise<string> {\n const combined = hexToBytes(encrypted);\n const iv = combined.slice(0, 12);\n const ciphertext = combined.slice(12);\n const key = await deriveKey(secret);\n const decrypted = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv },\n key,\n ciphertext,\n );\n return new TextDecoder().decode(decrypted);\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\n// ---------------------------------------------------------------------------\n// CLI authentication — dev-only HMAC bearer derived from KHOTAN_SECRET\n// ---------------------------------------------------------------------------\n\n/** Authorization scheme used by the khotan CLI. Distinct from `Bearer` so it\n * never collides with a consumer's own token auth in their `authorize` hook. */\nconst CLI_TOKEN_SCHEME = \"KhotanCLI\";\n\n/** Max clock skew between the CLI signing the token and the server verifying\n * it. Keeps a logged token from being replayable beyond a short window. */\nconst CLI_TOKEN_WINDOW_MS = 60_000;\n\n/**\n * Derives the CLI auth token: HMAC-SHA256 over the timestamp, keyed by the\n * KHOTAN_SECRET. One-way, so the raw secret (the encryption key) never travels\n * over the wire — even a token captured from a dev log can't be reversed into\n * the secret. Exported so the CLI can compute the same value.\n */\nexport async function deriveCliToken(\n secret: string,\n timestamp: string,\n): Promise<string> {\n const key = await crypto.subtle.importKey(\n \"raw\",\n new TextEncoder().encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const sig = await crypto.subtle.sign(\n \"HMAC\",\n key,\n new TextEncoder().encode(`khotan-cli:${timestamp}`),\n );\n return bytesToHex(new Uint8Array(sig));\n}\n\nfunction timingSafeEqualHex(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/**\n * Verifies the dev-only CLI auth token on a request. The khotan CLI is a local\n * tool that hits the dev server over loopback; instead of sending the raw\n * KHOTAN_SECRET, it sends a timestamped HMAC derived from it\n * (`Authorization: KhotanCLI <timestamp>.<hmac>`).\n *\n * Returns true only when ALL of the following hold:\n * - `NODE_ENV` is not `\"production\"` (the bypass never applies on a deployed app),\n * - a `KHOTAN_SECRET` is configured,\n * - the timestamp is within {@link CLI_TOKEN_WINDOW_MS} of now (anti-replay), and\n * - the HMAC matches (constant-time comparison).\n */\nasync function isCliRequestAuthorized(\n request: Request,\n secret: string | undefined,\n): Promise<boolean> {\n if (process.env[\"NODE_ENV\"] === \"production\") return false;\n if (!secret) return false;\n\n const header = request.headers.get(\"authorization\");\n if (!header?.startsWith(`${CLI_TOKEN_SCHEME} `)) return false;\n\n const token = header.slice(CLI_TOKEN_SCHEME.length + 1).trim();\n const dotIdx = token.indexOf(\".\");\n if (dotIdx === -1) return false;\n\n const timestamp = token.slice(0, dotIdx);\n const provided = token.slice(dotIdx + 1);\n const ts = Number.parseInt(timestamp, 10);\n if (!Number.isFinite(ts)) return false;\n if (Math.abs(Date.now() - ts) > CLI_TOKEN_WINDOW_MS) return false;\n\n const expected = await deriveCliToken(secret, timestamp);\n return timingSafeEqualHex(provided, expected);\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ResourceConnectField = string | [string, ...string[]];\n\nexport interface ResourcePlugParticipation {\n uniqueIdentifier: string;\n}\n\nexport interface ResourceMappingRegistration {\n connectField: ResourceConnectField;\n plugs?: Record<string, ResourcePlugParticipation>;\n}\n\nexport interface ResourceRegistration {\n name: string;\n description?: string;\n mapping: ResourceMappingRegistration;\n}\n\nexport type FlowType = \"inflow\" | \"outflow\" | \"relay\" | \"webhook\";\n\nexport type KhotanRunStatus =\n | \"pending\"\n | \"running\"\n | \"completed\"\n | \"partial\"\n | \"failed\"\n | \"cancelled\";\nexport type KhotanTerminalRunStatus =\n | \"completed\"\n | \"partial\"\n | \"failed\"\n | \"cancelled\";\n\nexport interface FlowRunResult {\n status?: KhotanTerminalRunStatus;\n extracted?: number;\n transformed?: number;\n created?: number;\n updated?: number;\n deleted?: number;\n failed?: number;\n error?: string | null;\n metadata?: Record<string, unknown> | null;\n}\n\nexport interface BoundPlug {\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: { headers?: Record<string, string> },\n ): Promise<T>;\n}\n\nexport interface BindablePlug {\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: {\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n },\n ): Promise<T>;\n}\n\nexport interface FlowRunContext {\n plug: BoundPlug;\n flow: {\n id: string;\n name: string;\n plugName: string;\n type: FlowType;\n resource?: string | null;\n to?: string | null;\n };\n runType: string;\n body?: unknown;\n vars: Record<string, string>;\n setVars(updates: Record<string, string>): Promise<void>;\n cache(cacheName: string): CacheInstance;\n}\n\nexport interface FlowWorkflowContext {\n flow: {\n id: string;\n name: string;\n plugName: string;\n type: FlowType;\n resource?: string | null;\n to?: string | null;\n };\n runType: string;\n body?: unknown;\n vars: Record<string, string>;\n plugVarsByName?: Record<string, Record<string, string>>;\n khotanRunId: string;\n khotanInstanceId: string;\n}\n\nfunction bindPlugWithVars(\n plug: BindablePlug,\n vars: Record<string, string>,\n setVars?: (updates: Record<string, string>) => Promise<void>,\n): BoundPlug {\n const opts = (extra?: {\n body?: unknown;\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n }) => ({\n ...extra,\n vars,\n ...(setVars ? { _setVars: setVars } : {}),\n });\n\n return {\n get<T>(\n path: string,\n extra?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ) {\n return plug.get<T>(path, opts(extra));\n },\n post<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plug.post<T>(path, opts(extra));\n },\n put<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plug.put<T>(path, opts(extra));\n },\n patch<T>(\n path: string,\n extra?: { body?: unknown; headers?: Record<string, string> },\n ) {\n return plug.patch<T>(path, opts(extra));\n },\n delete<T>(path: string, extra?: { headers?: Record<string, string> }) {\n return plug.delete<T>(path, opts(extra));\n },\n };\n}\n\nexport function bindWorkflowPlug(\n plug: BindablePlug,\n ctx: FlowWorkflowContext,\n plugName = ctx.flow.plugName,\n): BoundPlug {\n const vars =\n plugName === ctx.flow.plugName\n ? ctx.vars\n : (ctx.plugVarsByName?.[plugName] ?? {});\n\n if (plugName !== ctx.flow.plugName) {\n ctx.plugVarsByName ??= {};\n ctx.plugVarsByName[plugName] = vars;\n }\n\n return bindPlugWithVars(plug, vars, async (updates) => {\n Object.assign(vars, updates);\n });\n}\n\nexport interface KhotanRunUpdate {\n type?: \"progress\" | \"log\" | \"metric\" | \"error\";\n message: string;\n progress?: number;\n extracted?: number;\n transformed?: number;\n created?: number;\n updated?: number;\n deleted?: number;\n failed?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface FlowRegistration {\n name: string;\n type: FlowType;\n schedule?: string;\n resource?: string;\n to?: string;\n workflow?(ctx: FlowWorkflowContext): Promise<FlowRunResult | void>;\n run?(ctx: FlowRunContext): Promise<FlowRunResult | void>;\n}\n\nexport interface WireSubscribeContext {\n plug: {\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: { headers?: Record<string, string> },\n ): Promise<T>;\n };\n callbackUrl: string;\n events: string[];\n wireVars: Record<string, string>;\n setWireVars(updates: Record<string, string>): Promise<void>;\n}\n\nexport interface WireUnsubscribeContext {\n plug: {\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: { body?: unknown; headers?: Record<string, string> },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: { headers?: Record<string, string> },\n ): Promise<T>;\n };\n remoteId: string;\n wireVars: Record<string, string>;\n setWireVars(updates: Record<string, string>): Promise<void>;\n}\n\nexport interface WireVerifyContext {\n headers: Record<string, string>;\n body: string;\n wireVars: Record<string, string>;\n}\n\nexport interface WireRegistration {\n events: string[];\n onSubscribe(ctx: WireSubscribeContext): Promise<{ remoteId: string }>;\n onUnsubscribe(ctx: WireUnsubscribeContext): Promise<void>;\n onVerify?(ctx: WireVerifyContext): Promise<boolean>;\n}\n\nexport interface CatchRegistration {\n type: \"catch\";\n name: string;\n events?: string[];\n workflow: (ctx: CatchWorkflowContext) => Promise<void>;\n}\n\nexport interface PassRegistration {\n type: \"pass\";\n name: string;\n to: string;\n events?: string[];\n workflow: (ctx: PassWorkflowContext) => Promise<void>;\n}\n\nexport type WebhookRegistration = CatchRegistration | PassRegistration;\n\nexport interface CacheScope {\n plug?: string;\n resource?: string;\n flow?: string;\n}\n\nexport interface CacheRegistration {\n name: string;\n scope?: CacheScope;\n ttl?: string | number;\n}\n\nexport interface CacheEntryRecord {\n id: string;\n cacheId: string;\n key: string;\n value: unknown;\n expiresAt: Date | null;\n createdAt?: Date | undefined;\n updatedAt?: Date | undefined;\n}\n\nexport interface CacheInstance {\n get<T = unknown>(key: string): Promise<T | null>;\n set<T = unknown>(key: string, value: T): Promise<T>;\n delete(key: string): Promise<void>;\n}\n\nexport interface CatchWorkflowContext {\n event: Record<string, unknown>;\n eventType: string;\n headers: Record<string, string>;\n khotanRunId: string;\n khotanInstanceId: string;\n}\n\nexport interface PassWorkflowContext {\n event: Record<string, unknown>;\n eventType: string;\n headers: Record<string, string>;\n destVars: Record<string, string>;\n khotanRunId: string;\n khotanInstanceId: string;\n}\n\ninterface KhotanWorkflowContextRef {\n khotanInstanceId: string;\n}\n\ninterface KhotanWorkflowRuntimeHelpers {\n cache(cacheName: string): CacheInstance;\n listMappings: KhotanInstance[\"listMappings\"];\n lookupMapping: KhotanInstance[\"lookupMapping\"];\n upsertMapping: KhotanInstance[\"upsertMapping\"];\n updateMapping: KhotanInstance[\"updateMapping\"];\n deleteMapping: KhotanInstance[\"deleteMapping\"];\n}\n\nconst khotanRuntimeRegistry = new Map<string, KhotanWorkflowRuntimeHelpers>();\n\nfunction getWorkflowRuntimeHelpers(\n ctx: KhotanWorkflowContextRef,\n): KhotanWorkflowRuntimeHelpers {\n const helpers = khotanRuntimeRegistry.get(ctx.khotanInstanceId);\n if (!helpers) {\n throw new Error(\n `Khotan runtime helpers for instance \"${ctx.khotanInstanceId}\" are not registered`,\n );\n }\n return helpers;\n}\n\nexport function khotanCache(\n ctx: KhotanWorkflowContextRef,\n cacheName: string,\n): CacheInstance {\n return getWorkflowRuntimeHelpers(ctx).cache(cacheName);\n}\n\nexport function khotanMappings(ctx: KhotanWorkflowContextRef) {\n const helpers = getWorkflowRuntimeHelpers(ctx);\n return {\n list: helpers.listMappings,\n lookup: helpers.lookupMapping,\n upsert: helpers.upsertMapping,\n update: helpers.updateMapping,\n delete: helpers.deleteMapping,\n };\n}\n\nexport interface VarField {\n readonly key: string;\n label: string;\n type: \"text\" | \"password\" | \"url\";\n secret?: boolean;\n hidden?: boolean;\n required?: boolean;\n placeholder?: string;\n defaultValue?: string;\n}\n\nexport interface PlugRegistration {\n name: string;\n plug: {\n baseUrl: string;\n authType: string;\n varFields?: readonly VarField[];\n endpoints?: Record<\n string,\n {\n method: string;\n path: string;\n description?: string;\n body?: { _def?: unknown; shape?: Record<string, unknown> };\n query?: { _def?: unknown; shape?: Record<string, unknown> };\n responses?: Record<\n number,\n { _def?: unknown; shape?: Record<string, unknown> }\n >;\n }\n >;\n get<T>(\n path: string,\n options?: {\n params?: Record<string, unknown>;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n post<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n put<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n patch<T>(\n path: string,\n options?: {\n body?: unknown;\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n delete<T>(\n path: string,\n options?: {\n headers?: Record<string, string>;\n vars?: Record<string, string>;\n _setVars?: (updates: Record<string, string>) => Promise<void>;\n _skipHooks?: boolean;\n },\n ): Promise<T>;\n };\n vars?: VarField[];\n flows?: FlowRegistration[];\n endpoints?: Record<string, { method: string; path: string }>;\n wires?: WireRegistration[];\n webhooks?: WebhookRegistration[];\n catches?: CatchRegistration[];\n passes?: PassRegistration[];\n}\n\nexport interface KhotanAdapter {\n upsertPlug(plug: {\n name: string;\n baseUrl: string;\n authType: string;\n }): Promise<{ id: string }>;\n upsertFlow(flow: {\n plugId: string;\n name: string;\n type: string;\n schedule?: string | null;\n }): Promise<{ id: string }>;\n listPlugs(): Promise<Record<string, unknown>[]>;\n getPlug(id: string): Promise<Record<string, unknown> | null>;\n getPlugFlows(plugId: string): Promise<Record<string, unknown>[]>;\n getFlow(flowId: string): Promise<Record<string, unknown> | null>;\n listFlows(): Promise<Record<string, unknown>[]>;\n getRun(runId: string): Promise<Record<string, unknown> | null>;\n listRuns(flowId: string): Promise<Record<string, unknown>[]>;\n listRunsPage(params: {\n limit: number;\n offset: number;\n }): Promise<{ items: Record<string, unknown>[]; hasMore: boolean }>;\n\n upsertResource(resource: {\n name: string;\n connectField: ResourceConnectField;\n description?: string | null;\n }): Promise<{ id: string }>;\n upsertCache(cache: {\n name: string;\n scope?: CacheScope | null;\n ttlSeconds?: number | null;\n }): Promise<{ id: string }>;\n getCacheByName(name: string): Promise<Record<string, unknown> | null>;\n getCacheEntry(cacheId: string, key: string): Promise<Record<string, unknown> | null>;\n upsertCacheEntry(entry: {\n cacheId: string;\n key: string;\n value: unknown;\n expiresAt?: Date | null;\n }): Promise<{ id: string; created: boolean }>;\n deleteCacheEntry(cacheId: string, key: string): Promise<void>;\n listResources(): Promise<Record<string, unknown>[]>;\n getResource(id: string): Promise<Record<string, unknown> | null>;\n getResourceFlows(resourceId: string): Promise<Record<string, unknown>[]>;\n\n upsertMapping(mapping: {\n id?: string;\n resourceId: string;\n connectValue: string;\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n }): Promise<{ id: string; created: boolean }>;\n getMapping(id: string): Promise<Record<string, unknown> | null>;\n listMappings(params: {\n resourceId: string;\n limit: number;\n offset: number;\n search?: string;\n }): Promise<{\n items: Record<string, unknown>[];\n hasMore: boolean;\n total: number;\n }>;\n deleteMapping(id: string): Promise<void>;\n lookupMapping(\n params:\n | {\n resourceId: string;\n connectValue: string;\n }\n | {\n resourceId: string;\n plugName: string;\n ref: string;\n },\n ): Promise<Record<string, unknown> | null>;\n\n updateFlowResourceId(flowId: string, resourceId: string): Promise<void>;\n togglePlugEnabled(plugId: string, enabled: boolean): Promise<void>;\n toggleFlowEnabled(flowId: string, enabled: boolean): Promise<void>;\n toggleWebhookHandlerEnabled(\n handlerId: string,\n enabled: boolean,\n ): Promise<void>;\n\n insertWire(wire: {\n plugId: string;\n remoteId: string;\n callbackUrl: string;\n eventTypes: string[];\n }): Promise<{ id: string }>;\n upsertWire(wire: { plugId: string }): Promise<{ id: string }>;\n getActiveWire(plugId: string): Promise<Record<string, unknown> | null>;\n getPlugWire(plugId: string): Promise<Record<string, unknown> | null>;\n getWire(wireId: string): Promise<Record<string, unknown> | null>;\n updateWireStatus(\n wireId: string,\n status: \"active\" | \"disabled\" | \"pending\",\n ): Promise<void>;\n updateWireDetails(\n wireId: string,\n details: {\n remoteId: string;\n callbackUrl: string;\n eventTypes: string[];\n status: \"active\";\n },\n ): Promise<void>;\n getWireMetadata(wireId: string): Promise<string | null>;\n updateWireMetadata(wireId: string, metadata: string): Promise<void>;\n getEncryptedVariables(plugId: string): Promise<string | null>;\n setEncryptedVariables(plugId: string, encrypted: string): Promise<void>;\n clearEncryptedVariables(plugId: string): Promise<void>;\n\n upsertWebhookHandler(handler: {\n wireId: string;\n name: string;\n type: \"catch\" | \"pass\";\n destinationPlugId?: string | null;\n }): Promise<{ id: string }>;\n listWebhookHandlers(wireId: string): Promise<Record<string, unknown>[]>;\n getLatestWebhookHandlerRun(\n handlerId: string,\n ): Promise<Record<string, unknown> | null>;\n\n insertRun(run: {\n flowId?: string | null;\n wireId?: string | null;\n webhookHandlerId?: string | null;\n workflowRunId?: string | null;\n runType: string;\n status: string;\n }): Promise<{ id: string }>;\n updateRun(\n runId: string,\n updates: {\n status: KhotanRunStatus;\n workflowRunId?: string | null;\n completedAt?: Date;\n durationMs?: number;\n extracted?: number;\n transformed?: number;\n created?: number;\n updated?: number;\n deleted?: number;\n failed?: number;\n error?: string | null;\n metadata?: Record<string, unknown> | null;\n },\n ): Promise<void>;\n insertWebhookEvent(event: {\n wireId: string;\n webhookHandlerId: string;\n khotanRunId: string;\n eventType: string;\n payload: Record<string, unknown>;\n headers: Record<string, string>;\n }): Promise<{ id: string }>;\n listWebhookEventsPage(params: {\n limit: number;\n offset: number;\n }): Promise<{ items: Record<string, unknown>[]; hasMore: boolean }>;\n updateFlowLastRun(\n flowId: string,\n updates: {\n lastRunAt: Date;\n lastRunStatus: KhotanTerminalRunStatus;\n },\n ): Promise<void>;\n}\n\n/**\n * Authorize an incoming request to the khotan management API.\n *\n * Return `true` to allow the request, `false` to reject it with `401`.\n * The function receives the raw `Request`, so it composes directly with\n * session libraries such as better-auth:\n *\n * ```ts\n * authorize: async (request) => {\n * const session = await auth.api.getSession({ headers: request.headers });\n * return session?.user?.role === \"admin\";\n * }\n * ```\n *\n * Throwing is treated the same as returning `false`.\n *\n * The following routes are intentionally exempt and are NOT passed to\n * `authorize` (they have their own protection):\n * - Inbound webhooks (`POST .../webhook/:plug`) — verified per-plug via `onVerify`.\n * - The cron dispatcher (`.../cron`) — protected by `CRON_SECRET`.\n * - Debug routes (`.../debug...`) — gated by `KHOTAN_DEBUG` and disabled in production.\n */\nexport type KhotanAuthorize = (\n request: Request,\n) => boolean | Promise<boolean>;\n\nexport interface KhotanConfig {\n adapter: KhotanAdapter;\n plugs: PlugRegistration[];\n resources?: ResourceRegistration[];\n caches?: CacheRegistration[];\n secret?: string;\n /**\n * Gate every management route (plugs, variables, flows, runs, wires,\n * mappings, caches, resources, webhook handlers/events) behind a custom\n * authorization check. Strongly recommended for any deployed app — without\n * it the management API is publicly accessible. See {@link KhotanAuthorize}.\n */\n authorize?: KhotanAuthorize;\n}\n\nexport type KhotanHandler = (request: Request) => Promise<Response>;\n\nexport interface WireInstance {\n create(callbackUrl: string): Promise<Record<string, unknown>>;\n delete(wireId: string): Promise<void>;\n get(): Promise<Record<string, unknown> | null>;\n}\n\nexport interface FlowStartOptions {\n runType?: string;\n body?: unknown;\n}\n\nexport interface FlowSelectorOptions {\n plugName?: string;\n}\n\nexport interface FlowInstance {\n start(options?: FlowStartOptions): Promise<Record<string, unknown>>;\n}\n\nexport interface KhotanInstance {\n handler: KhotanHandler;\n init(): Promise<void>;\n flow(flowNameOrId: string, options?: FlowSelectorOptions): FlowInstance;\n wire(plugName: string): WireInstance;\n cache(cacheName: string): CacheInstance;\n listMappings(params: {\n resourceId: string;\n limit?: number;\n offset?: number;\n search?: string;\n }): Promise<{\n items: Record<string, unknown>[];\n page: {\n limit: number;\n offset: number;\n hasMore: boolean;\n prevOffset: number;\n nextOffset: number;\n total: number;\n };\n }>;\n lookupMapping(\n params:\n | {\n resourceId: string;\n connectValue: string | string[];\n }\n | {\n resourceId: string;\n plugName: string;\n ref: string;\n },\n ): Promise<Record<string, unknown> | null>;\n upsertMapping(mapping: {\n resourceId: string;\n connectValue: string | string[];\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n }): Promise<Record<string, unknown>>;\n updateMapping(\n id: string,\n mapping: {\n resourceId: string;\n connectValue: string | string[];\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n },\n ): Promise<Record<string, unknown>>;\n deleteMapping(id: string): Promise<void>;\n getVars(plugName: string): Promise<Record<string, string>>;\n setVars(plugName: string, vars: Record<string, string>): Promise<void>;\n clearVars(plugName: string): Promise<void>;\n hasVars(plugName: string): Promise<boolean>;\n getVarFields(plugName: string): readonly VarField[];\n getPlug(plugName: string): PlugRegistration[\"plug\"];\n}\n\n// ---------------------------------------------------------------------------\n// drizzleAdapter\n// ---------------------------------------------------------------------------\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function drizzleAdapter(db: PgDatabase<any, any, any>): KhotanAdapter {\n return {\n async upsertPlug(plug) {\n const rows = await db\n .insert(khotanPlugs)\n .values({\n name: plug.name,\n baseUrl: plug.baseUrl,\n authType: plug.authType as \"bearer\" | \"basic\" | \"apiKey\" | \"custom\",\n })\n .onConflictDoUpdate({\n target: khotanPlugs.name,\n set: {\n baseUrl: plug.baseUrl,\n authType: plug.authType as \"bearer\" | \"basic\" | \"apiKey\" | \"custom\",\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanPlugs.id });\n return { id: rows[0]!.id };\n },\n\n async upsertFlow(flow) {\n const rows = await db\n .insert(khotanFlows)\n .values({\n plugId: flow.plugId,\n name: flow.name,\n type: flow.type as FlowType,\n schedule: flow.schedule ?? null,\n })\n .onConflictDoUpdate({\n target: [khotanFlows.plugId, khotanFlows.name],\n set: {\n type: flow.type as FlowType,\n schedule: flow.schedule ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanFlows.id });\n return { id: rows[0]!.id };\n },\n\n async listPlugs() {\n const flowCounts = db\n .select({\n plugId: khotanFlows.plugId,\n flowCount: count(khotanFlows.id).as(\"flow_count\"),\n })\n .from(khotanFlows)\n .groupBy(khotanFlows.plugId)\n .as(\"flow_counts\");\n\n const rows = await db\n .select({\n id: khotanPlugs.id,\n name: khotanPlugs.name,\n baseUrl: khotanPlugs.baseUrl,\n authType: khotanPlugs.authType,\n enabled: khotanPlugs.enabled,\n status: khotanPlugs.status,\n statusMessage: khotanPlugs.statusMessage,\n createdAt: khotanPlugs.createdAt,\n updatedAt: khotanPlugs.updatedAt,\n flowCount: sql<number>`coalesce(${flowCounts.flowCount}, 0)`,\n })\n .from(khotanPlugs)\n .leftJoin(flowCounts, eq(khotanPlugs.id, flowCounts.plugId));\n\n return rows;\n },\n\n async getPlug(id) {\n const rows = await db\n .select()\n .from(khotanPlugs)\n .where(eq(khotanPlugs.id, id))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getPlugFlows(plugId) {\n return db\n .select()\n .from(khotanFlows)\n .where(eq(khotanFlows.plugId, plugId));\n },\n\n async getFlow(flowId) {\n const rows = await db\n .select({\n id: khotanFlows.id,\n plugId: khotanFlows.plugId,\n name: khotanFlows.name,\n type: khotanFlows.type,\n enabled: khotanFlows.enabled,\n schedule: khotanFlows.schedule,\n resourceId: khotanFlows.resourceId,\n lastRunAt: khotanFlows.lastRunAt,\n lastRunStatus: khotanFlows.lastRunStatus,\n createdAt: khotanFlows.createdAt,\n updatedAt: khotanFlows.updatedAt,\n plugName: khotanPlugs.name,\n })\n .from(khotanFlows)\n .leftJoin(khotanPlugs, eq(khotanFlows.plugId, khotanPlugs.id))\n .where(eq(khotanFlows.id, flowId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async listFlows() {\n const rows = await db\n .select({\n id: khotanFlows.id,\n plugId: khotanFlows.plugId,\n name: khotanFlows.name,\n type: khotanFlows.type,\n enabled: khotanFlows.enabled,\n schedule: khotanFlows.schedule,\n resourceId: khotanFlows.resourceId,\n lastRunAt: khotanFlows.lastRunAt,\n lastRunStatus: khotanFlows.lastRunStatus,\n createdAt: khotanFlows.createdAt,\n updatedAt: khotanFlows.updatedAt,\n plugName: khotanPlugs.name,\n })\n .from(khotanFlows)\n .leftJoin(khotanPlugs, eq(khotanFlows.plugId, khotanPlugs.id));\n\n return rows;\n },\n\n async listRuns(flowId) {\n return db\n .select()\n .from(khotanRuns)\n .where(eq(khotanRuns.flowId, flowId))\n .orderBy(desc(khotanRuns.startedAt));\n },\n\n async getRun(runId) {\n const rows = await db\n .select()\n .from(khotanRuns)\n .where(eq(khotanRuns.id, runId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async listRunsPage({ limit, offset }) {\n const rows = await db\n .select()\n .from(khotanRuns)\n .orderBy(desc(khotanRuns.startedAt))\n .limit(limit + 1)\n .offset(offset);\n\n const hasMore = rows.length > limit;\n const pageRows = rows.slice(0, limit);\n\n const flowIds = [\n ...new Set(\n pageRows\n .map((row) => row.flowId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n const handlerIds = [\n ...new Set(\n pageRows\n .map((row) => row.webhookHandlerId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n\n const flowRows =\n flowIds.length > 0\n ? await db\n .select({\n id: khotanFlows.id,\n name: khotanFlows.name,\n plugName: khotanPlugs.name,\n })\n .from(khotanFlows)\n .leftJoin(khotanPlugs, eq(khotanFlows.plugId, khotanPlugs.id))\n .where(inArray(khotanFlows.id, flowIds))\n : [];\n\n const handlerRows =\n handlerIds.length > 0\n ? await db\n .select({\n id: khotanWebhookHandlers.id,\n name: khotanWebhookHandlers.name,\n type: khotanWebhookHandlers.type,\n plugName: khotanPlugs.name,\n })\n .from(khotanWebhookHandlers)\n .leftJoin(\n khotanWires,\n eq(khotanWebhookHandlers.wireId, khotanWires.id),\n )\n .leftJoin(khotanPlugs, eq(khotanWires.plugId, khotanPlugs.id))\n .where(inArray(khotanWebhookHandlers.id, handlerIds))\n : [];\n\n const flowMap = new Map(flowRows.map((row) => [row.id, row]));\n const handlerMap = new Map(handlerRows.map((row) => [row.id, row]));\n\n return {\n items: pageRows.map((row) => {\n const flow = row.flowId ? flowMap.get(row.flowId) : null;\n const handler = row.webhookHandlerId\n ? handlerMap.get(row.webhookHandlerId)\n : null;\n return {\n ...row,\n sourceType: flow ? \"flow\" : handler ? \"webhook\" : \"unknown\",\n sourceName: flow?.name ?? handler?.name ?? null,\n sourceKind: handler?.type ?? null,\n plugName: flow?.plugName ?? handler?.plugName ?? null,\n };\n }),\n hasMore,\n };\n },\n\n async upsertResource(resource) {\n const rows = await db\n .insert(khotanResources)\n .values({\n name: resource.name,\n connectField: serializeConnectField(resource.connectField),\n description: resource.description ?? null,\n })\n .onConflictDoUpdate({\n target: khotanResources.name,\n set: {\n connectField: serializeConnectField(resource.connectField),\n description: resource.description ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanResources.id });\n return { id: rows[0]!.id };\n },\n\n async upsertCache(cache) {\n const rows = await db\n .insert(khotanCaches)\n .values({\n name: cache.name,\n scope: cache.scope ?? null,\n ttlSeconds: cache.ttlSeconds ?? null,\n })\n .onConflictDoUpdate({\n target: khotanCaches.name,\n set: {\n scope: cache.scope ?? null,\n ttlSeconds: cache.ttlSeconds ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanCaches.id });\n return { id: rows[0]!.id };\n },\n\n async getCacheByName(name) {\n const rows = await db\n .select()\n .from(khotanCaches)\n .where(eq(khotanCaches.name, name))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getCacheEntry(cacheId, key) {\n const rows = await db\n .select({\n id: khotanCacheEntries.id,\n cacheId: khotanCacheEntries.cacheId,\n key: khotanCacheEntries.key,\n value: khotanCacheEntries.value,\n expiresAt: khotanCacheEntries.expiresAt,\n createdAt: khotanCacheEntries.createdAt,\n updatedAt: khotanCacheEntries.updatedAt,\n })\n .from(khotanCacheEntries)\n .where(\n and(\n eq(khotanCacheEntries.cacheId, cacheId),\n eq(khotanCacheEntries.key, key),\n ),\n )\n .limit(1);\n return rows[0] ?? null;\n },\n\n async upsertCacheEntry(entry) {\n const existing = await db\n .select({ id: khotanCacheEntries.id })\n .from(khotanCacheEntries)\n .where(\n and(\n eq(khotanCacheEntries.cacheId, entry.cacheId),\n eq(khotanCacheEntries.key, entry.key),\n ),\n )\n .limit(1);\n\n const rows = await db\n .insert(khotanCacheEntries)\n .values({\n cacheId: entry.cacheId,\n key: entry.key,\n value: entry.value,\n expiresAt: entry.expiresAt ?? null,\n })\n .onConflictDoUpdate({\n target: [khotanCacheEntries.cacheId, khotanCacheEntries.key],\n set: {\n value: entry.value,\n expiresAt: entry.expiresAt ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanCacheEntries.id });\n\n return { id: rows[0]!.id, created: existing.length === 0 };\n },\n\n async deleteCacheEntry(cacheId, key) {\n await db\n .delete(khotanCacheEntries)\n .where(\n and(\n eq(khotanCacheEntries.cacheId, cacheId),\n eq(khotanCacheEntries.key, key),\n ),\n );\n },\n\n async listResources() {\n const flowCounts = db\n .select({\n resourceId: khotanFlows.resourceId,\n flowCount: count(khotanFlows.id).as(\"flow_count\"),\n })\n .from(khotanFlows)\n .where(sql`${khotanFlows.resourceId} is not null`)\n .groupBy(khotanFlows.resourceId)\n .as(\"flow_counts\");\n\n const mappingCounts = db\n .select({\n resourceId: khotanMappingsTable.resourceId,\n mappingCount: count(khotanMappingsTable.id).as(\"mapping_count\"),\n })\n .from(khotanMappingsTable)\n .groupBy(khotanMappingsTable.resourceId)\n .as(\"mapping_counts\");\n\n const rows = await db\n .select({\n id: khotanResources.id,\n name: khotanResources.name,\n connectField: khotanResources.connectField,\n description: khotanResources.description,\n createdAt: khotanResources.createdAt,\n updatedAt: khotanResources.updatedAt,\n flowCount: sql<number>`coalesce(${flowCounts.flowCount}, 0)`,\n mappingCount: sql<number>`coalesce(${mappingCounts.mappingCount}, 0)`,\n })\n .from(khotanResources)\n .leftJoin(flowCounts, eq(khotanResources.id, flowCounts.resourceId))\n .leftJoin(\n mappingCounts,\n eq(khotanResources.id, mappingCounts.resourceId),\n );\n\n return rows.map((row) => ({\n ...row,\n connectField: deserializeConnectField(row.connectField),\n }));\n },\n\n async getResource(id) {\n const rows = await db\n .select()\n .from(khotanResources)\n .where(eq(khotanResources.id, id))\n .limit(1);\n if (!rows[0]) return null;\n return {\n ...rows[0],\n connectField: deserializeConnectField(rows[0].connectField),\n };\n },\n\n async getResourceFlows(resourceId) {\n return db\n .select()\n .from(khotanFlows)\n .where(eq(khotanFlows.resourceId, resourceId));\n },\n\n async upsertMapping(mapping) {\n if (mapping.id) {\n const rows = await db\n .update(khotanMappingsTable)\n .set({\n resourceId: mapping.resourceId,\n connectValue: mapping.connectValue,\n refs: mapping.refs,\n metadata: mapping.metadata ?? null,\n updatedAt: new Date(),\n })\n .where(eq(khotanMappingsTable.id, mapping.id))\n .returning({ id: khotanMappingsTable.id });\n return { id: rows[0]!.id, created: false };\n }\n\n const existing = await db\n .select({ id: khotanMappingsTable.id })\n .from(khotanMappingsTable)\n .where(\n sql`${khotanMappingsTable.resourceId} = ${mapping.resourceId} and ${khotanMappingsTable.connectValue} = ${mapping.connectValue}`,\n )\n .limit(1);\n\n const rows = await db\n .insert(khotanMappingsTable)\n .values({\n resourceId: mapping.resourceId,\n connectValue: mapping.connectValue,\n refs: mapping.refs,\n metadata: mapping.metadata ?? null,\n })\n .onConflictDoUpdate({\n target: [khotanMappingsTable.resourceId, khotanMappingsTable.connectValue],\n set: {\n refs: sql`${khotanMappingsTable.refs} || ${JSON.stringify(mapping.refs)}::jsonb`,\n metadata: mapping.metadata ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanMappingsTable.id });\n return { id: rows[0]!.id, created: existing.length === 0 };\n },\n\n async getMapping(id) {\n const rows = await db\n .select()\n .from(khotanMappingsTable)\n .where(eq(khotanMappingsTable.id, id))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async listMappings({ resourceId, limit, offset, search }) {\n const normalizedSearch = search?.trim();\n const searchPattern = normalizedSearch\n ? `%${normalizedSearch.replace(/[%_]/g, \"\\\\$&\")}%`\n : null;\n\n const filters = searchPattern\n ? sql`${khotanMappingsTable.resourceId} = ${resourceId} and (${khotanMappingsTable.connectValue} ilike ${searchPattern} escape '\\\\' or ${khotanMappingsTable.refs}::text ilike ${searchPattern} escape '\\\\' or ${khotanMappingsTable.metadata}::text ilike ${searchPattern} escape '\\\\')`\n : sql`${khotanMappingsTable.resourceId} = ${resourceId}`;\n\n const totalRows = await db\n .select({ total: count(khotanMappingsTable.id) })\n .from(khotanMappingsTable)\n .where(filters);\n\n const rows = await db\n .select()\n .from(khotanMappingsTable)\n .where(filters)\n .orderBy(khotanMappingsTable.connectValue, khotanMappingsTable.id)\n .limit(limit + 1)\n .offset(offset);\n\n return {\n items: rows.slice(0, limit),\n hasMore: rows.length > limit,\n total: totalRows[0]?.total ?? 0,\n };\n },\n\n async deleteMapping(id) {\n await db.delete(khotanMappingsTable).where(eq(khotanMappingsTable.id, id));\n },\n\n async lookupMapping(params) {\n if (\"connectValue\" in params) {\n const rows = await db\n .select()\n .from(khotanMappingsTable)\n .where(\n sql`${khotanMappingsTable.resourceId} = ${params.resourceId} and ${khotanMappingsTable.connectValue} = ${params.connectValue}`,\n )\n .limit(1);\n return rows[0] ?? null;\n }\n\n const rows = await db\n .select()\n .from(khotanMappingsTable)\n .where(\n sql`${khotanMappingsTable.resourceId} = ${params.resourceId} and ${khotanMappingsTable.refs}->>${params.plugName} = ${params.ref}`,\n )\n .limit(1);\n return rows[0] ?? null;\n },\n\n async updateFlowResourceId(flowId, resourceId) {\n await db\n .update(khotanFlows)\n .set({ resourceId, updatedAt: new Date() })\n .where(eq(khotanFlows.id, flowId));\n },\n\n async togglePlugEnabled(plugId, enabled) {\n await db\n .update(khotanPlugs)\n .set({ enabled, updatedAt: new Date() })\n .where(eq(khotanPlugs.id, plugId));\n },\n\n async toggleFlowEnabled(flowId, enabled) {\n await db\n .update(khotanFlows)\n .set({ enabled, updatedAt: new Date() })\n .where(eq(khotanFlows.id, flowId));\n },\n\n async toggleWebhookHandlerEnabled(handlerId, enabled) {\n await db\n .update(khotanWebhookHandlers)\n .set({ enabled, updatedAt: new Date() })\n .where(eq(khotanWebhookHandlers.id, handlerId));\n },\n\n async insertWire(wire) {\n const rows = await db\n .insert(khotanWires)\n .values({\n plugId: wire.plugId,\n remoteId: wire.remoteId,\n callbackUrl: wire.callbackUrl,\n eventTypes: wire.eventTypes,\n status: \"active\",\n })\n .returning();\n return { id: rows[0]!.id };\n },\n\n async upsertWire(wire) {\n const existing = await db\n .select({ id: khotanWires.id })\n .from(khotanWires)\n .where(eq(khotanWires.plugId, wire.plugId))\n .limit(1);\n\n if (existing.length > 0) {\n return { id: existing[0]!.id };\n }\n\n const rows = await db\n .insert(khotanWires)\n .values({\n plugId: wire.plugId,\n remoteId: \"\",\n callbackUrl: \"\",\n eventTypes: [],\n status: \"pending\",\n })\n .returning();\n return { id: rows[0]!.id };\n },\n\n async getActiveWire(plugId) {\n const rows = await db\n .select()\n .from(khotanWires)\n .where(\n sql`${khotanWires.plugId} = ${plugId} and ${khotanWires.status} = 'active'`,\n )\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getPlugWire(plugId) {\n const rows = await db\n .select()\n .from(khotanWires)\n .where(eq(khotanWires.plugId, plugId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async getWire(wireId) {\n const rows = await db\n .select()\n .from(khotanWires)\n .where(eq(khotanWires.id, wireId))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async updateWireStatus(wireId, status) {\n await db\n .update(khotanWires)\n .set({ status, updatedAt: new Date() })\n .where(eq(khotanWires.id, wireId));\n },\n\n async updateWireDetails(wireId, details) {\n await db\n .update(khotanWires)\n .set({\n remoteId: details.remoteId,\n callbackUrl: details.callbackUrl,\n eventTypes: details.eventTypes,\n status: details.status,\n updatedAt: new Date(),\n })\n .where(eq(khotanWires.id, wireId));\n },\n\n async getWireMetadata(wireId) {\n const rows = await db\n .select({ metadata: khotanWires.metadata })\n .from(khotanWires)\n .where(eq(khotanWires.id, wireId))\n .limit(1);\n const meta = rows[0]?.metadata;\n if (!meta) return null;\n return typeof meta === \"string\" ? meta : JSON.stringify(meta);\n },\n\n async updateWireMetadata(wireId, metadata) {\n await db\n .update(khotanWires)\n .set({ metadata, updatedAt: new Date() })\n .where(eq(khotanWires.id, wireId));\n },\n\n async getEncryptedVariables(plugId) {\n const rows = await db\n .select({ encryptedVars: khotanPlugs.encryptedVars })\n .from(khotanPlugs)\n .where(eq(khotanPlugs.id, plugId))\n .limit(1);\n return rows[0]?.encryptedVars ?? null;\n },\n\n async setEncryptedVariables(plugId, encrypted) {\n await db\n .update(khotanPlugs)\n .set({ encryptedVars: encrypted, updatedAt: new Date() })\n .where(eq(khotanPlugs.id, plugId));\n },\n\n async clearEncryptedVariables(plugId) {\n await db\n .update(khotanPlugs)\n .set({ encryptedVars: null, updatedAt: new Date() })\n .where(eq(khotanPlugs.id, plugId));\n },\n\n async upsertWebhookHandler(handler) {\n const rows = await db\n .insert(khotanWebhookHandlers)\n .values({\n wireId: handler.wireId,\n name: handler.name,\n type: handler.type,\n destinationPlugId: handler.destinationPlugId ?? null,\n })\n .onConflictDoUpdate({\n target: [khotanWebhookHandlers.wireId, khotanWebhookHandlers.name],\n set: {\n type: handler.type,\n destinationPlugId: handler.destinationPlugId ?? null,\n updatedAt: new Date(),\n },\n })\n .returning({ id: khotanWebhookHandlers.id });\n return { id: rows[0]!.id };\n },\n\n async listWebhookHandlers(wireId) {\n return db\n .select()\n .from(khotanWebhookHandlers)\n .where(eq(khotanWebhookHandlers.wireId, wireId));\n },\n\n async getLatestWebhookHandlerRun(handlerId) {\n const rows = await db\n .select({\n id: khotanRuns.id,\n status: khotanRuns.status,\n startedAt: khotanRuns.startedAt,\n })\n .from(khotanRuns)\n .where(eq(khotanRuns.webhookHandlerId, handlerId))\n .orderBy(desc(khotanRuns.startedAt))\n .limit(1);\n return rows[0] ?? null;\n },\n\n async insertRun(run) {\n const rows = await db\n .insert(khotanRuns)\n .values({\n flowId: run.flowId ?? null,\n wireId: run.wireId ?? null,\n webhookHandlerId: run.webhookHandlerId ?? null,\n workflowRunId: run.workflowRunId ?? null,\n runType: run.runType as\n | \"full\"\n | \"delta\"\n | \"backfill\"\n | \"reconcile\"\n | \"dry-run\"\n | \"webhook\",\n status: run.status as KhotanRunStatus,\n })\n .returning({ id: khotanRuns.id });\n return { id: rows[0]!.id };\n },\n\n async updateRun(runId, updates) {\n await db\n .update(khotanRuns)\n .set({\n status: updates.status,\n workflowRunId: updates.workflowRunId,\n completedAt: updates.completedAt,\n durationMs: updates.durationMs,\n extracted: updates.extracted,\n transformed: updates.transformed,\n created: updates.created,\n updated: updates.updated,\n deleted: updates.deleted,\n failed: updates.failed,\n error: updates.error,\n metadata: updates.metadata,\n })\n .where(eq(khotanRuns.id, runId));\n },\n\n async insertWebhookEvent(event) {\n const rows = await db\n .insert(khotanWebhookEvents)\n .values({\n wireId: event.wireId,\n webhookHandlerId: event.webhookHandlerId,\n khotanRunId: event.khotanRunId,\n eventType: event.eventType,\n payload: event.payload,\n headers: event.headers,\n })\n .returning({ id: khotanWebhookEvents.id });\n return { id: rows[0]!.id };\n },\n\n async listWebhookEventsPage({ limit, offset }) {\n let rows: {\n id: string;\n wireId: string | null;\n webhookHandlerId: string | null;\n khotanRunId: string;\n eventType: string;\n payload: Record<string, unknown>;\n headers: Record<string, string>;\n receivedAt: Date;\n }[];\n\n try {\n rows = await db\n .select()\n .from(khotanWebhookEvents)\n .orderBy(desc(khotanWebhookEvents.receivedAt))\n .limit(limit + 1)\n .offset(offset);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const isLegacyShapeError =\n message.includes(`column \"wire_id\" does not exist`) ||\n message.includes(`column \"webhook_handler_id\" does not exist`) ||\n message.includes(`column \"headers\" does not exist`);\n\n if (!isLegacyShapeError) {\n throw error;\n }\n\n const legacyResult = await db.execute(sql`\n select\n \"id\",\n null::text as \"wire_id\",\n null::text as \"webhook_handler_id\",\n \"khotan_run_id\",\n \"event_type\",\n \"payload\",\n '{}'::jsonb as \"headers\",\n \"received_at\"\n from \"khotan_webhook_events\"\n order by \"received_at\" desc\n limit ${limit + 1}\n offset ${offset}\n `);\n\n const rawRows: Record<string, unknown>[] = Array.isArray(legacyResult)\n ? (legacyResult as Record<string, unknown>[])\n : \"rows\" in legacyResult && Array.isArray(legacyResult.rows)\n ? (legacyResult.rows as Record<string, unknown>[])\n : [];\n\n rows = rawRows.map((row) => ({\n id: String(row[\"id\"]),\n wireId: typeof row[\"wire_id\"] === \"string\" ? row[\"wire_id\"] : null,\n webhookHandlerId:\n typeof row[\"webhook_handler_id\"] === \"string\"\n ? row[\"webhook_handler_id\"]\n : null,\n khotanRunId: String(row[\"khotan_run_id\"]),\n eventType: String(row[\"event_type\"]),\n payload:\n row[\"payload\"] && typeof row[\"payload\"] === \"object\"\n ? (row[\"payload\"] as Record<string, unknown>)\n : {},\n headers:\n row[\"headers\"] && typeof row[\"headers\"] === \"object\"\n ? (row[\"headers\"] as Record<string, string>)\n : {},\n receivedAt:\n row[\"received_at\"] instanceof Date\n ? row[\"received_at\"]\n : new Date(String(row[\"received_at\"])),\n }));\n }\n\n const hasMore = rows.length > limit;\n const pageRows = rows.slice(0, limit);\n\n const handlerIds = [\n ...new Set(\n pageRows\n .map((row) => row.webhookHandlerId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n const runIds = [\n ...new Set(\n pageRows\n .map((row) => row.khotanRunId)\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n\n const handlerRows =\n handlerIds.length > 0\n ? await db\n .select({\n id: khotanWebhookHandlers.id,\n name: khotanWebhookHandlers.name,\n type: khotanWebhookHandlers.type,\n plugName: khotanPlugs.name,\n })\n .from(khotanWebhookHandlers)\n .leftJoin(\n khotanWires,\n eq(khotanWebhookHandlers.wireId, khotanWires.id),\n )\n .leftJoin(khotanPlugs, eq(khotanWires.plugId, khotanPlugs.id))\n .where(inArray(khotanWebhookHandlers.id, handlerIds))\n : [];\n\n const runRows =\n runIds.length > 0\n ? await db\n .select({\n id: khotanRuns.id,\n workflowRunId: khotanRuns.workflowRunId,\n status: khotanRuns.status,\n startedAt: khotanRuns.startedAt,\n })\n .from(khotanRuns)\n .where(inArray(khotanRuns.id, runIds))\n : [];\n\n const handlerMap = new Map(handlerRows.map((row) => [row.id, row]));\n const runMap = new Map(runRows.map((row) => [row.id, row]));\n\n return {\n items: pageRows.map((row) => {\n const handler = row.webhookHandlerId\n ? handlerMap.get(row.webhookHandlerId)\n : undefined;\n const run = runMap.get(row.khotanRunId);\n return {\n ...row,\n handlerName: handler?.name ?? null,\n handlerType: handler?.type ?? null,\n plugName: handler?.plugName ?? null,\n workflowRunId: run?.workflowRunId ?? null,\n runStatus: run?.status ?? null,\n runStartedAt: run?.startedAt ?? null,\n };\n }),\n hasMore,\n };\n },\n\n async updateFlowLastRun(flowId, updates) {\n await db\n .update(khotanFlows)\n .set({\n lastRunAt: updates.lastRunAt,\n lastRunStatus: updates.lastRunStatus,\n updatedAt: new Date(),\n })\n .where(eq(khotanFlows.id, flowId));\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Workflow integration — dynamic import of workflow/api\n// ---------------------------------------------------------------------------\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype WorkflowStartFn = (\n workflowFn: (...args: any[]) => any,\n args: unknown[],\n) => Promise<unknown>;\ninterface WorkflowRunHandle {\n runId?: string;\n status?: Promise<string>;\n returnValue?: Promise<unknown>;\n cancel?: () => Promise<void>;\n getReadable?: (options?: {\n startIndex?: number;\n namespace?: string;\n }) => ReadableStream;\n}\ntype WorkflowGetRunFn = (runId: string) => WorkflowRunHandle;\ntype WorkflowGetWritableFn = <T = unknown>(options?: {\n namespace?: string;\n}) => WritableStream<T>;\n\nlet _workflowStart: WorkflowStartFn | null = null;\nlet _workflowGetRun: WorkflowGetRunFn | null = null;\nlet _workflowGetWritable: WorkflowGetWritableFn | null = null;\n\nexport function __setWorkflowStartForTests(\n start: WorkflowStartFn | null,\n): void {\n _workflowStart = start;\n}\n\nexport function __setWorkflowGetRunForTests(\n getRun: WorkflowGetRunFn | null,\n): void {\n _workflowGetRun = getRun;\n}\n\nexport function __setWorkflowGetWritableForTests(\n getWritable: WorkflowGetWritableFn | null,\n): void {\n _workflowGetWritable = getWritable;\n}\n\nasync function importWorkflowStart(): Promise<WorkflowStartFn> {\n if (_workflowStart) return _workflowStart;\n try {\n const mod = (await import(/* webpackIgnore: true */ \"workflow/api\")) as {\n start: WorkflowStartFn;\n };\n _workflowStart = mod.start;\n return _workflowStart;\n } catch {\n throw new Error(\n \"Failed to import workflow/api. Install Vercel Workflow: npm install workflow\",\n );\n }\n}\n\nasync function importWorkflowGetRun(): Promise<WorkflowGetRunFn> {\n if (_workflowGetRun) return _workflowGetRun;\n try {\n const mod = (await import(/* webpackIgnore: true */ \"workflow/api\")) as {\n getRun: WorkflowGetRunFn;\n };\n _workflowGetRun = mod.getRun;\n return _workflowGetRun;\n } catch {\n throw new Error(\n \"Failed to import workflow/api. Install Vercel Workflow: npm install workflow\",\n );\n }\n}\n\nasync function importWorkflowGetWritable(): Promise<WorkflowGetWritableFn> {\n if (_workflowGetWritable) return _workflowGetWritable;\n try {\n const mod = (await import(/* webpackIgnore: true */ \"workflow\")) as {\n getWritable: WorkflowGetWritableFn;\n };\n _workflowGetWritable = mod.getWritable;\n return _workflowGetWritable;\n } catch {\n throw new Error(\n \"Failed to import workflow. Install Vercel Workflow: npm install workflow\",\n );\n }\n}\n\nexport async function sendUpdate(\n update: KhotanRunUpdate | string,\n options: { namespace?: string } = {},\n): Promise<void> {\n const getWritable = await importWorkflowGetWritable();\n const writable = getWritable<string>(options);\n const writer = writable.getWriter();\n const payload =\n typeof update === \"string\"\n ? { type: \"log\", message: update }\n : { type: \"progress\", ...update };\n\n try {\n await writer.write(\n `${JSON.stringify({ ...payload, timestamp: new Date().toISOString() })}\\n`,\n );\n } finally {\n writer.releaseLock();\n }\n}\n\nfunction getWorkflowRunId(result: unknown): string | null {\n if (!result || typeof result !== \"object\") return null;\n if (\"runId\" in result) return String(result.runId);\n if (\"id\" in result) return String(result.id);\n return null;\n}\n\nfunction getWorkflowReturnValue(result: unknown): Promise<unknown> | null {\n if (!result || typeof result !== \"object\" || !(\"returnValue\" in result)) {\n return null;\n }\n const returnValue = result.returnValue;\n return returnValue &&\n typeof (returnValue as Promise<unknown>).then === \"function\"\n ? (returnValue as Promise<unknown>)\n : null;\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (\n error &&\n typeof error === \"object\" &&\n \"cause\" in error &&\n (error as { cause?: unknown }).cause instanceof Error\n ) {\n return (error as { cause: Error }).cause.message;\n }\n if (error instanceof Error) return error.message;\n return \"Unknown error\";\n}\n\ntype CronFieldSpec = {\n min: number;\n max: number;\n aliases?: Record<string, number>;\n};\n\nconst CRON_MONTH_ALIASES: Record<string, number> = {\n jan: 1,\n feb: 2,\n mar: 3,\n apr: 4,\n may: 5,\n jun: 6,\n jul: 7,\n aug: 8,\n sep: 9,\n oct: 10,\n nov: 11,\n dec: 12,\n};\n\nconst CRON_DAY_ALIASES: Record<string, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6,\n};\n\nfunction parseCronValue(token: string, spec: CronFieldSpec): number {\n const normalized = token.trim().toLowerCase();\n if (normalized === \"\") {\n throw new Error(\"Cron token cannot be empty\");\n }\n\n if (spec.aliases?.[normalized] !== undefined) {\n return spec.aliases[normalized]!;\n }\n\n const parsed = Number.parseInt(normalized, 10);\n if (!Number.isFinite(parsed)) {\n throw new Error(`Invalid cron token: \"${token}\"`);\n }\n\n if (spec.aliases === CRON_DAY_ALIASES && parsed === 7) {\n return 0;\n }\n\n if (parsed < spec.min || parsed > spec.max) {\n throw new Error(\n `Cron value \"${token}\" is out of range ${spec.min}-${spec.max}`,\n );\n }\n\n return parsed;\n}\n\nfunction cronFieldIsWildcard(field: string): boolean {\n return field.trim() === \"*\";\n}\n\nfunction matchesCronField(\n field: string,\n value: number,\n spec: CronFieldSpec,\n): boolean {\n return field\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean)\n .some((part) => {\n if (part === \"*\") return true;\n\n const [baseRaw, stepRaw] = part.split(\"/\");\n const base = baseRaw?.trim() ?? \"\";\n const step = stepRaw ? Number.parseInt(stepRaw.trim(), 10) : 1;\n\n if (!Number.isFinite(step) || step <= 0) {\n throw new Error(`Invalid cron step: \"${part}\"`);\n }\n\n let start: number;\n let end: number;\n\n if (base === \"*\" || base === \"\") {\n start = spec.min;\n end = spec.max;\n } else if (base.includes(\"-\")) {\n const [startRaw, endRaw] = base.split(\"-\");\n start = parseCronValue(startRaw ?? \"\", spec);\n end = parseCronValue(endRaw ?? \"\", spec);\n if (end < start) {\n throw new Error(`Invalid cron range: \"${part}\"`);\n }\n } else {\n start = parseCronValue(base, spec);\n end = stepRaw ? spec.max : start;\n }\n\n if (value < start || value > end) return false;\n return (value - start) % step === 0;\n });\n}\n\nfunction matchesCronSchedule(schedule: string, now: Date): boolean {\n const parts = schedule.trim().split(/\\s+/);\n if (parts.length !== 5) {\n throw new Error(`Cron schedule must have 5 fields: \"${schedule}\"`);\n }\n\n const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;\n const minuteMatch = matchesCronField(minute!, now.getUTCMinutes(), {\n min: 0,\n max: 59,\n });\n const hourMatch = matchesCronField(hour!, now.getUTCHours(), {\n min: 0,\n max: 23,\n });\n const monthMatch = matchesCronField(month!, now.getUTCMonth() + 1, {\n min: 1,\n max: 12,\n aliases: CRON_MONTH_ALIASES,\n });\n const dayOfMonthMatch = matchesCronField(dayOfMonth!, now.getUTCDate(), {\n min: 1,\n max: 31,\n });\n const dayOfWeekMatch = matchesCronField(dayOfWeek!, now.getUTCDay(), {\n min: 0,\n max: 6,\n aliases: CRON_DAY_ALIASES,\n });\n\n const dayOfMonthWildcard = cronFieldIsWildcard(dayOfMonth!);\n const dayOfWeekWildcard = cronFieldIsWildcard(dayOfWeek!);\n const dayMatches =\n dayOfMonthWildcard && dayOfWeekWildcard\n ? true\n : dayOfMonthWildcard\n ? dayOfWeekMatch\n : dayOfWeekWildcard\n ? dayOfMonthMatch\n : dayOfMonthMatch || dayOfWeekMatch;\n\n return minuteMatch && hourMatch && monthMatch && dayMatches;\n}\n\nfunction startOfUtcMinute(date: Date): Date {\n return new Date(\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n 0,\n 0,\n ),\n );\n}\n\nfunction coerceDate(value: unknown): Date | null {\n if (value instanceof Date && Number.isFinite(value.getTime())) {\n return value;\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n const parsed = new Date(value);\n if (Number.isFinite(parsed.getTime())) return parsed;\n }\n return null;\n}\n\nfunction isCronRequestAuthorized(request: Request): boolean {\n const secret = process.env[\"CRON_SECRET\"]?.trim();\n if (!secret) {\n // Fail closed in production: an unset CRON_SECRET must not leave the\n // dispatcher open on a deployed app. Allowed in dev for local testing.\n return process.env[\"NODE_ENV\"] !== \"production\";\n }\n return request.headers.get(\"authorization\") === `Bearer ${secret}`;\n}\n\n/**\n * Debug routes (and the `plug`/`probe` CLI) are only available when\n * `KHOTAN_DEBUG` is set AND the app is not running in production. This keeps\n * the credentialed debug proxy from ever being reachable on a deployed app.\n */\nfunction isDebugEnabled(): boolean {\n return (\n Boolean(process?.env?.[\"KHOTAN_DEBUG\"]) &&\n process?.env?.[\"NODE_ENV\"] !== \"production\"\n );\n}\n\nfunction isWorkflowCancelledError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const record = error as Record<string, unknown>;\n const name = typeof record[\"name\"] === \"string\" ? record[\"name\"] : \"\";\n const status = typeof record[\"status\"] === \"string\" ? record[\"status\"] : \"\";\n const message =\n typeof record[\"message\"] === \"string\" ? record[\"message\"] : \"\";\n return (\n name === \"WorkflowRunCancelledError\" ||\n status === \"cancelled\" ||\n message.toLowerCase().includes(\"cancelled\")\n );\n}\n\nfunction toFlowRunResult(value: unknown): FlowRunResult | undefined {\n return value && typeof value === \"object\" ? value : undefined;\n}\n\nfunction getFlowRunCounters(result: FlowRunResult | undefined) {\n return {\n extracted: result?.extracted ?? 0,\n transformed: result?.transformed ?? 0,\n created: result?.created ?? 0,\n updated: result?.updated ?? 0,\n deleted: result?.deleted ?? 0,\n failed: result?.failed ?? 0,\n };\n}\n\nfunction resolveTerminalRunStatus(\n result: FlowRunResult | undefined,\n counters: ReturnType<typeof getFlowRunCounters>,\n): KhotanTerminalRunStatus {\n if (\n result?.status === \"completed\" ||\n result?.status === \"partial\" ||\n result?.status === \"failed\" ||\n result?.status === \"cancelled\"\n ) {\n return result.status;\n }\n return counters.failed > 0 ? \"partial\" : \"completed\";\n}\n\n// ---------------------------------------------------------------------------\n// khotan factory\n// ---------------------------------------------------------------------------\n\nfunction extractEventTypes(body: Record<string, unknown>): string[] {\n const candidates =\n body[\"eventTypes\"] ??\n body[\"event_types\"] ??\n body[\"events\"] ??\n body[\"enabled_events\"];\n if (Array.isArray(candidates)) return candidates as string[];\n return [];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction serializeZodSchema(schema: any): Record<string, unknown> | null {\n if (!schema) return null;\n try {\n const def = schema?._def ?? schema?.def ?? null;\n const rawTypeName: string =\n typeof def?.typeName === \"string\"\n ? def.typeName\n : typeof def?.type === \"string\"\n ? `Zod${def.type.charAt(0).toUpperCase()}${def.type.slice(1)}`\n : \"\";\n const inner =\n def?.innerType ??\n def?.element ??\n (typeof def?.type === \"object\" ? def.type : null) ??\n null;\n\n if (\n (rawTypeName === \"ZodOptional\" || rawTypeName === \"ZodNullable\") &&\n inner\n ) {\n return serializeZodSchema(inner);\n }\n\n const shape =\n typeof schema.shape === \"function\"\n ? schema.shape()\n : (schema.shape ??\n (typeof def?.shape === \"function\" ? def.shape() : def?.shape));\n if (shape && typeof shape === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(shape)) {\n result[key] = serializeZodField(val);\n }\n return result;\n }\n\n if (rawTypeName === \"ZodArray\" && inner) {\n return {\n _type: \"array\",\n items: serializeZodSchema(inner),\n };\n }\n\n if (rawTypeName) {\n return { _type: rawTypeName.replace(\"Zod\", \"\").toLowerCase() };\n }\n } catch {\n /* best-effort */\n }\n return null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction serializeZodField(field: any): string | Record<string, unknown> {\n const def = field?._def ?? field?.def ?? null;\n if (!def) return \"unknown\";\n const typeName: string =\n typeof def.typeName === \"string\"\n ? def.typeName\n : typeof def.type === \"string\"\n ? `Zod${def.type.charAt(0).toUpperCase()}${def.type.slice(1)}`\n : \"\";\n const inner =\n def.innerType ??\n def.element ??\n (typeof def.type === \"object\" ? def.type : null) ??\n null;\n\n if (typeName === \"ZodOptional\" && inner) {\n const serialized = serializeZodField(inner);\n if (typeof serialized === \"string\") {\n return serialized.endsWith(\"?\") ? serialized : `${serialized}?`;\n }\n return serialized;\n }\n\n if (typeName === \"ZodNullable\" && inner) {\n const serialized = serializeZodField(inner);\n if (typeof serialized === \"string\") {\n return serialized.includes(\" | null\")\n ? serialized\n : `${serialized} | null`;\n }\n return serialized;\n }\n\n if (\n typeName === \"ZodObject\" ||\n typeName === \"ZodArray\" ||\n typeName === \"ZodRecord\" ||\n typeName === \"ZodUnion\" ||\n typeName === \"ZodDiscriminatedUnion\"\n ) {\n return serializeZodSchema(field) ?? \"unknown\";\n }\n\n if (typeName === \"ZodEnum\") {\n const values = Array.isArray(def.values)\n ? def.values\n : def.entries && typeof def.entries === \"object\"\n ? Object.values(def.entries)\n : [];\n if (values.length > 0) {\n return values.map((v: string) => `\"${v}\"`).join(\" | \");\n }\n }\n\n return typeName.replace(\"Zod\", \"\").toLowerCase() || \"unknown\";\n}\n\nfunction serializeEndpoints(\n endpoints: Record<\n string,\n {\n method: string;\n path: string;\n description?: string;\n body?: unknown;\n query?: unknown;\n responses?: Record<number, unknown>;\n }\n > | null,\n) {\n if (!endpoints) return null;\n const result: Record<string, Record<string, unknown>> = {};\n for (const [name, ep] of Object.entries(endpoints)) {\n const entry: Record<string, unknown> = {\n method: ep.method,\n path: ep.path,\n };\n if (ep.description) entry[\"description\"] = ep.description;\n const bodySchema = serializeZodSchema(ep.body);\n if (bodySchema) entry[\"body\"] = bodySchema;\n const querySchema = serializeZodSchema(ep.query);\n if (querySchema) entry[\"query\"] = querySchema;\n if (ep.responses) {\n entry[\"responses\"] = Object.fromEntries(\n Object.entries(ep.responses).map(([code, schema]) => [\n code,\n serializeZodSchema(schema),\n ]),\n );\n }\n result[name] = entry;\n }\n return result;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction serializeConnectField(connectField: ResourceConnectField): string {\n return Array.isArray(connectField) ? JSON.stringify(connectField) : connectField;\n}\n\nfunction deserializeConnectField(connectField: unknown): ResourceConnectField {\n if (Array.isArray(connectField)) {\n return connectField as [string, ...string[]];\n }\n\n if (typeof connectField !== \"string\") {\n throw new Error(\"Resource connectField must be a string or string array\");\n }\n\n const trimmed = connectField.trim();\n if (!trimmed.startsWith(\"[\")) {\n return connectField;\n }\n\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (\n Array.isArray(parsed) &&\n parsed.length > 0 &&\n parsed.every((value) => typeof value === \"string\" && value.length > 0)\n ) {\n return parsed as [string, ...string[]];\n }\n } catch {\n // Keep the raw string for backward compatibility with older rows.\n }\n\n return connectField;\n}\n\nfunction validateConnectField(\n resourceName: string,\n connectField: ResourceConnectField,\n): void {\n if (typeof connectField === \"string\") {\n if (!connectField.trim()) {\n throw new Error(\n `Resource \"${resourceName}\" must declare a non-empty connectField`,\n );\n }\n return;\n }\n\n if (!Array.isArray(connectField) || connectField.length === 0) {\n throw new Error(\n `Resource \"${resourceName}\" must declare connectField as a string or non-empty ordered string array`,\n );\n }\n\n for (const field of connectField) {\n if (typeof field !== \"string\" || !field.trim()) {\n throw new Error(\n `Resource \"${resourceName}\" has an invalid composite connectField entry`,\n );\n }\n }\n}\n\nfunction validateResourcePlugs(\n resource: ResourceRegistration,\n plugNames: Set<string>,\n): void {\n if (resource.mapping.plugs === undefined) {\n return;\n }\n\n if (!isPlainObject(resource.mapping.plugs)) {\n throw new Error(\n `Resource \"${resource.name}\" must declare mapping.plugs as an object keyed by plug name`,\n );\n }\n\n for (const [plugName, declaration] of Object.entries(resource.mapping.plugs)) {\n if (!plugNames.has(plugName)) {\n throw new Error(\n `Resource \"${resource.name}\" references unknown plug: \"${plugName}\"`,\n );\n }\n if (!isPlainObject(declaration)) {\n throw new Error(\n `Resource \"${resource.name}\" has an invalid plug declaration for \"${plugName}\"`,\n );\n }\n\n const keys = Object.keys(declaration);\n if (\n keys.length !== 1 ||\n typeof declaration[\"uniqueIdentifier\"] !== \"string\" ||\n !declaration[\"uniqueIdentifier\"].trim()\n ) {\n throw new Error(\n `Resource \"${resource.name}\" must declare exactly one uniqueIdentifier for plug \"${plugName}\"`,\n );\n }\n }\n}\n\nfunction normalizeCacheScope(\n cacheName: string,\n scope: CacheRegistration[\"scope\"],\n): CacheScope | undefined {\n if (scope === undefined) {\n return undefined;\n }\n\n if (!isPlainObject(scope)) {\n throw new Error(`Cache \"${cacheName}\" must declare scope as an object`);\n }\n\n const normalized: CacheScope = {};\n for (const key of [\"plug\", \"resource\", \"flow\"] as const) {\n const value = scope[key];\n if (value === undefined) {\n continue;\n }\n if (typeof value !== \"string\" || !value.trim()) {\n throw new Error(`Cache \"${cacheName}\" has an invalid scope.${key} value`);\n }\n normalized[key] = value.trim();\n }\n\n return Object.keys(normalized).length > 0 ? normalized : undefined;\n}\n\nfunction parseCacheTtlSeconds(\n cacheName: string,\n ttl: CacheRegistration[\"ttl\"],\n): number | null {\n if (ttl === undefined) {\n return null;\n }\n\n if (typeof ttl === \"number\") {\n if (!Number.isFinite(ttl) || ttl <= 0) {\n throw new Error(`Cache \"${cacheName}\" must declare a positive ttl`);\n }\n return Math.ceil(ttl);\n }\n\n if (typeof ttl !== \"string\") {\n throw new Error(`Cache \"${cacheName}\" must declare ttl as a string or number`);\n }\n\n const normalized = ttl.trim().toLowerCase();\n const match = /^(\\d+)\\s*(ms|s|m|h|d)$/.exec(normalized);\n if (!match) {\n throw new Error(\n `Cache \"${cacheName}\" has an invalid ttl \"${ttl}\". Use values like \"30s\", \"15m\", or \"6h\"`,\n );\n }\n\n const amount = Number.parseInt(match[1]!, 10);\n const unit = match[2]!;\n const milliseconds =\n unit === \"ms\"\n ? amount\n : unit === \"s\"\n ? amount * 1_000\n : unit === \"m\"\n ? amount * 60_000\n : unit === \"h\"\n ? amount * 3_600_000\n : amount * 86_400_000;\n\n return Math.max(1, Math.ceil(milliseconds / 1_000));\n}\n\nfunction validateCacheKey(key: string): void {\n if (typeof key !== \"string\" || !key.trim()) {\n throw new Error(\"Cache key must be a non-empty string\");\n }\n}\n\nfunction coerceCacheEntryRecord(\n row: Record<string, unknown>,\n): CacheEntryRecord | null {\n if (\n typeof row[\"id\"] !== \"string\" ||\n typeof row[\"cacheId\"] !== \"string\" ||\n typeof row[\"key\"] !== \"string\"\n ) {\n return null;\n }\n\n return {\n id: row[\"id\"],\n cacheId: row[\"cacheId\"],\n key: row[\"key\"],\n value: row[\"value\"],\n expiresAt: coerceDate(row[\"expiresAt\"]),\n createdAt: coerceDate(row[\"createdAt\"]) ?? undefined,\n updatedAt: coerceDate(row[\"updatedAt\"]) ?? undefined,\n };\n}\n\nfunction isCacheEntryExpired(entry: CacheEntryRecord, now = new Date()): boolean {\n return entry.expiresAt !== null && entry.expiresAt.getTime() <= now.getTime();\n}\n\nfunction canonicalizeConnectValue(\n resource: ResourceRegistration,\n connectValue: unknown,\n): string {\n const { connectField } = resource.mapping;\n\n if (Array.isArray(connectField)) {\n if (typeof connectValue === \"string\") {\n return connectValue;\n }\n if (!Array.isArray(connectValue)) {\n throw new Error(\n `Resource \"${resource.name}\" expects composite connectValue input matching connectField order`,\n );\n }\n if (connectValue.length !== connectField.length) {\n throw new Error(\n `Resource \"${resource.name}\" expects ${String(connectField.length)} connectValue parts in declared order`,\n );\n }\n\n const parts = connectValue.map((part) => {\n if (typeof part === \"string\") return part;\n if (typeof part === \"number\" || typeof part === \"boolean\") {\n return String(part);\n }\n throw new Error(\n `Resource \"${resource.name}\" connectValue parts must be strings, numbers, or booleans`,\n );\n });\n\n return JSON.stringify(parts);\n }\n\n if (typeof connectValue === \"string\") {\n return connectValue;\n }\n if (typeof connectValue === \"number\" || typeof connectValue === \"boolean\") {\n return String(connectValue);\n }\n\n throw new Error(\n `Resource \"${resource.name}\" expects connectValue to be a string, number, or boolean`,\n );\n}\n\nexport function khotan(config: KhotanConfig): KhotanInstance {\n const { adapter, plugs, resources = [], caches = [], authorize } = config;\n const instanceId = crypto.randomUUID();\n\n // Security posture warnings — surfaced once at construction time.\n if (!authorize) {\n console.warn(\n \"[khotan] No `authorize` hook configured: the management API \" +\n \"(/api/khotan/*) is publicly accessible. Pass `authorize` to gate it \" +\n \"behind your auth layer (e.g. better-auth). This is required for any \" +\n \"deployed environment.\",\n );\n }\n if (!(config.secret ?? process.env[\"KHOTAN_SECRET\"])) {\n console.warn(\n \"[khotan] No `secret`/`KHOTAN_SECRET` configured: plug credentials and \" +\n \"wire metadata will not be encrypted at rest. Set KHOTAN_SECRET to a \" +\n \"high-entropy value.\",\n );\n }\n\n // Validate: no duplicate plug names\n const plugNames = new Set<string>();\n for (const plug of plugs) {\n if (plugNames.has(plug.name)) {\n throw new Error(`Duplicate plug name: \"${plug.name}\"`);\n }\n plugNames.add(plug.name);\n }\n\n // Validate: no duplicate resource names and resource declarations are sane\n const resourceNames = new Set<string>();\n const resourceConfigByName = new Map<string, ResourceRegistration>();\n for (const resource of resources) {\n if (resourceNames.has(resource.name)) {\n throw new Error(`Duplicate resource name: \"${resource.name}\"`);\n }\n validateConnectField(resource.name, resource.mapping.connectField);\n validateResourcePlugs(resource, plugNames);\n resourceNames.add(resource.name);\n resourceConfigByName.set(resource.name, resource);\n }\n\n // Validate: flow resource references must match a registered resource\n const registeredFlowNames = new Set<string>();\n for (const plug of plugs) {\n if (!plug.flows) continue;\n for (const flow of plug.flows) {\n registeredFlowNames.add(flow.name);\n if (flow.resource && !resourceNames.has(flow.resource)) {\n throw new Error(\n `Flow \"${flow.name}\" references unknown resource: \"${flow.resource}\"`,\n );\n }\n }\n }\n\n const cacheStateByName = new Map<\n string,\n { id: string; config: CacheRegistration; ttlSeconds: number | null }\n >();\n\n for (const cache of caches) {\n if (cacheStateByName.has(cache.name)) {\n throw new Error(`Duplicate cache name: \"${cache.name}\"`);\n }\n if (typeof cache.name !== \"string\" || !cache.name.trim()) {\n throw new Error(\"Cache registrations must declare a non-empty name\");\n }\n\n const normalizedScope = normalizeCacheScope(cache.name, cache.scope);\n if (normalizedScope?.plug && !plugNames.has(normalizedScope.plug)) {\n throw new Error(\n `Cache \"${cache.name}\" references unknown plug: \"${normalizedScope.plug}\"`,\n );\n }\n if (normalizedScope?.resource && !resourceNames.has(normalizedScope.resource)) {\n throw new Error(\n `Cache \"${cache.name}\" references unknown resource: \"${normalizedScope.resource}\"`,\n );\n }\n if (normalizedScope?.flow && !registeredFlowNames.has(normalizedScope.flow)) {\n throw new Error(\n `Cache \"${cache.name}\" references unknown flow: \"${normalizedScope.flow}\"`,\n );\n }\n\n cacheStateByName.set(cache.name, {\n id: \"\",\n config: {\n ...cache,\n name: cache.name.trim(),\n ...(normalizedScope ? { scope: normalizedScope } : {}),\n },\n ttlSeconds: parseCacheTtlSeconds(cache.name, cache.ttl),\n });\n }\n\n const registeredFlowKeys = new Set(\n plugs.flatMap((plug) =>\n (plug.flows ?? []).map(\n (flow) => `${plug.name}\\0${flow.name}\\0${flow.type}`,\n ),\n ),\n );\n\n function isRegisteredFlowRecord(flow: Record<string, unknown>): boolean {\n return (\n typeof flow[\"plugName\"] === \"string\" &&\n typeof flow[\"name\"] === \"string\" &&\n typeof flow[\"type\"] === \"string\" &&\n registeredFlowKeys.has(\n `${flow[\"plugName\"]}\\0${flow[\"name\"]}\\0${flow[\"type\"]}`,\n )\n );\n }\n\n function getWebhookHandlersForPlug(\n plug: PlugRegistration,\n ): WebhookRegistration[] {\n const handlers: WebhookRegistration[] = [];\n if (plug.webhooks) handlers.push(...plug.webhooks);\n if (plug.catches) handlers.push(...plug.catches);\n if (plug.passes) handlers.push(...plug.passes);\n return handlers;\n }\n\n // Validate: webhook handlers require wire with onVerify; passes must reference existing plugs\n for (const plug of plugs) {\n const webhookHandlers = getWebhookHandlersForPlug(plug);\n if (webhookHandlers.length > 0) {\n const wireConfig = plug.wires?.[0];\n if (!wireConfig?.onVerify) {\n throw new Error(\n `Plug \"${plug.name}\" has webhook handlers but its wire does not define onVerify. ` +\n `onVerify is required for webhook processing.`,\n );\n }\n }\n for (const handler of webhookHandlers) {\n if (handler.type === \"pass\") {\n if (!plugNames.has(handler.to)) {\n throw new Error(\n `Pass on plug \"${plug.name}\" references unknown destination plug: \"${handler.to}\"`,\n );\n }\n }\n }\n }\n\n let initialized = false;\n let initPromise: Promise<void> | null = null;\n const resourceIdByName = new Map<string, string>();\n const resourceConfigById = new Map<string, ResourceRegistration>();\n\n async function doInit(): Promise<void> {\n if (initialized) return;\n\n // Upsert resources first, collect name→id map\n resourceIdByName.clear();\n resourceConfigById.clear();\n for (const resource of resources) {\n const { id } = await adapter.upsertResource({\n name: resource.name,\n connectField: resource.mapping.connectField,\n description: resource.description ?? null,\n });\n resourceIdByName.set(resource.name, id);\n resourceConfigById.set(id, resource);\n }\n\n for (const [cacheName, cacheState] of cacheStateByName) {\n const { id } = await adapter.upsertCache({\n name: cacheName,\n scope: cacheState.config.scope ?? null,\n ttlSeconds: cacheState.ttlSeconds,\n });\n cacheStateByName.set(cacheName, {\n ...cacheState,\n id,\n });\n }\n\n for (const plug of plugs) {\n const { id: plugId } = await adapter.upsertPlug({\n name: plug.name,\n baseUrl: plug.plug.baseUrl,\n authType: plug.plug.authType,\n });\n\n await seedDefaultVarsForPlug(plugId, plug.name);\n\n if (plug.flows) {\n for (const flow of plug.flows) {\n const { id: flowId } = await adapter.upsertFlow({\n plugId,\n name: flow.name,\n type: flow.type,\n schedule: flow.schedule ?? null,\n });\n\n if (flow.resource) {\n const resourceId = resourceIdByName.get(flow.resource)!;\n await adapter.updateFlowResourceId(flowId, resourceId);\n }\n }\n }\n\n if (plug.wires) {\n for (const _wire of plug.wires) {\n const { id: wireId } = await adapter.upsertWire({ plugId });\n const webhookHandlers = getWebhookHandlersForPlug(plug);\n for (const handler of webhookHandlers) {\n if (handler.type === \"catch\") {\n await adapter.upsertWebhookHandler({\n wireId,\n name: handler.name,\n type: \"catch\",\n });\n continue;\n }\n\n // Resolve destination plug ID for pass handlers\n const destPlugRow = await adapter\n .listPlugs()\n .then((all) => all.find((row) => row[\"name\"] === handler.to));\n await adapter.upsertWebhookHandler({\n wireId,\n name: handler.name,\n type: \"pass\",\n destinationPlugId: destPlugRow\n ? (destPlugRow[\"id\"] as string)\n : null,\n });\n }\n }\n }\n }\n\n initialized = true;\n }\n\n async function init(): Promise<void> {\n initPromise ??= doInit();\n return initPromise;\n }\n\n async function getRegisteredResourceById(\n resourceId: string,\n ): Promise<ResourceRegistration | null> {\n await init();\n return resourceConfigById.get(resourceId) ?? null;\n }\n\n async function resolveCacheState(cacheName: string) {\n await init();\n const cacheState = cacheStateByName.get(cacheName);\n if (!cacheState || !cacheState.id) {\n throw new Error(`Cache \"${cacheName}\" is not registered`);\n }\n return cacheState;\n }\n\n function createCacheInstance(cacheName: string): CacheInstance {\n return {\n async get<T = unknown>(key: string): Promise<T | null> {\n const entry = await readCacheEntry(cacheName, key);\n return entry ? (entry.value as T) : null;\n },\n async set<T = unknown>(key: string, value: T): Promise<T> {\n validateCacheKey(key);\n const cacheState = await resolveCacheState(cacheName);\n const expiresAt =\n cacheState.ttlSeconds !== null\n ? new Date(Date.now() + cacheState.ttlSeconds * 1_000)\n : null;\n await adapter.upsertCacheEntry({\n cacheId: cacheState.id,\n key,\n value,\n expiresAt,\n });\n return value;\n },\n async delete(key: string): Promise<void> {\n validateCacheKey(key);\n const cacheState = await resolveCacheState(cacheName);\n await adapter.deleteCacheEntry(cacheState.id, key);\n },\n };\n }\n\n async function readCacheEntry(\n cacheName: string,\n key: string,\n ): Promise<CacheEntryRecord | null> {\n validateCacheKey(key);\n const cacheState = await resolveCacheState(cacheName);\n const row = await adapter.getCacheEntry(cacheState.id, key);\n if (!row) {\n return null;\n }\n const entry = coerceCacheEntryRecord(row);\n if (!entry || isCacheEntryExpired(entry)) {\n return null;\n }\n return entry;\n }\n\n function decorateResourceRecord(\n resource: Record<string, unknown>,\n ): Record<string, unknown> {\n const { connectField: storedConnectField, ...rest } = resource;\n const configResource =\n typeof resource[\"name\"] === \"string\"\n ? resourceConfigByName.get(resource[\"name\"])\n : undefined;\n\n return {\n ...rest,\n mapping: {\n connectField:\n configResource?.mapping.connectField ??\n deserializeConnectField(storedConnectField),\n ...(configResource?.mapping.plugs\n ? { plugs: configResource.mapping.plugs }\n : {}),\n },\n };\n }\n\n function buildMappingPage(params: {\n limit: number;\n offset: number;\n hasMore: boolean;\n total: number;\n items: Record<string, unknown>[];\n }) {\n return {\n items: params.items,\n page: {\n limit: params.limit,\n offset: params.offset,\n hasMore: params.hasMore,\n prevOffset: Math.max(params.offset - params.limit, 0),\n nextOffset: params.offset + params.limit,\n total: params.total,\n },\n };\n }\n\n async function validateMappingPayload(params: {\n resourceId: string;\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n }): Promise<ResourceRegistration> {\n if (!isPlainObject(params.refs)) {\n throw new Error(\"Mapping refs must be an object keyed by plug name\");\n }\n\n for (const [plugName, ref] of Object.entries(params.refs)) {\n if (typeof ref !== \"string\") {\n throw new Error(`Mapping ref \"${plugName}\" must be a string`);\n }\n }\n\n if (params.metadata !== undefined && params.metadata !== null) {\n if (!isPlainObject(params.metadata)) {\n throw new Error(\"Mapping metadata must be an object when provided\");\n }\n }\n\n const resource = await getRegisteredResourceById(params.resourceId);\n if (!resource) {\n throw new Error(`Resource \"${params.resourceId}\" is not registered`);\n }\n\n if (resource.mapping.plugs) {\n const invalidPlugs = Object.keys(params.refs).filter(\n (plugName) => !resource.mapping.plugs?.[plugName],\n );\n if (invalidPlugs.length > 0) {\n throw new Error(\n `Resource \"${resource.name}\" only allows refs for declared plugs. Invalid refs: ${invalidPlugs.join(\", \")}`,\n );\n }\n }\n\n return resource;\n }\n\n async function listMappings(params: {\n resourceId: string;\n limit?: number;\n offset?: number;\n search?: string;\n }) {\n const resource = await getRegisteredResourceById(params.resourceId);\n if (!resource) {\n throw new Error(`Resource \"${params.resourceId}\" is not registered`);\n }\n\n const limit = Math.min(Math.max(params.limit ?? 20, 1), 100);\n const offset = Math.max(params.offset ?? 0, 0);\n const page = await adapter.listMappings({\n resourceId: params.resourceId,\n limit,\n offset,\n ...(params.search?.trim()\n ? { search: params.search.trim() }\n : {}),\n });\n\n return buildMappingPage({\n limit,\n offset,\n hasMore: page.hasMore,\n total: page.total,\n items: page.items,\n });\n }\n\n async function lookupMapping(\n params:\n | { resourceId: string; connectValue: string | string[] }\n | { resourceId: string; plugName: string; ref: string },\n ): Promise<Record<string, unknown> | null> {\n const resource = await getRegisteredResourceById(params.resourceId);\n if (!resource) {\n throw new Error(`Resource \"${params.resourceId}\" is not registered`);\n }\n\n if (\"connectValue\" in params) {\n return adapter.lookupMapping({\n resourceId: params.resourceId,\n connectValue: canonicalizeConnectValue(resource, params.connectValue),\n });\n }\n\n if (resource.mapping.plugs && !resource.mapping.plugs[params.plugName]) {\n throw new Error(\n `Resource \"${resource.name}\" does not declare plug \"${params.plugName}\"`,\n );\n }\n\n return adapter.lookupMapping(params);\n }\n\n async function upsertMapping(mapping: {\n resourceId: string;\n connectValue: string | string[];\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n }): Promise<Record<string, unknown>> {\n const resource = await validateMappingPayload(mapping);\n const result = await adapter.upsertMapping({\n resourceId: mapping.resourceId,\n connectValue: canonicalizeConnectValue(resource, mapping.connectValue),\n refs: mapping.refs,\n metadata: mapping.metadata ?? null,\n });\n const saved = await adapter.getMapping(result.id);\n if (!saved) {\n throw new Error(\"Mapping was saved but could not be reloaded\");\n }\n return saved;\n }\n\n async function updateMapping(\n id: string,\n mapping: {\n resourceId: string;\n connectValue: string | string[];\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n },\n ): Promise<Record<string, unknown>> {\n const existing = await adapter.getMapping(id);\n if (!existing) {\n throw new Error(`Mapping \"${id}\" not found`);\n }\n\n const resource = await validateMappingPayload(mapping);\n await adapter.upsertMapping({\n id,\n resourceId: mapping.resourceId,\n connectValue: canonicalizeConnectValue(resource, mapping.connectValue),\n refs: mapping.refs,\n metadata: mapping.metadata ?? null,\n });\n const saved = await adapter.getMapping(id);\n if (!saved) {\n throw new Error(`Mapping \"${id}\" disappeared after update`);\n }\n return saved;\n }\n\n async function deleteMapping(id: string): Promise<void> {\n const existing = await adapter.getMapping(id);\n if (!existing) {\n throw new Error(`Mapping \"${id}\" not found`);\n }\n await adapter.deleteMapping(id);\n }\n\n function wire(plugName: string): WireInstance {\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n throw new Error(`Plug \"${plugName}\" not registered`);\n }\n if (!plugReg.wires || plugReg.wires.length === 0) {\n throw new Error(`Plug \"${plugName}\" has no wire configuration`);\n }\n const wireConfig = plugReg.wires[0]!;\n\n function createBoundPlug(\n vars: Record<string, string>,\n _setVars?: (updates: Record<string, string>) => Promise<void>,\n ) {\n return bindPlugWithVars(plugReg!.plug, vars, _setVars);\n }\n\n async function getWireVars(\n wireId: string,\n ): Promise<Record<string, string>> {\n const raw = await adapter.getWireMetadata(wireId);\n if (!raw) return {};\n if (!secret) {\n try {\n return JSON.parse(raw) as Record<string, string>;\n } catch {\n return {};\n }\n }\n try {\n const decrypted = await decryptVars(raw, secret);\n return JSON.parse(decrypted) as Record<string, string>;\n } catch {\n try {\n return JSON.parse(raw) as Record<string, string>;\n } catch {\n return {};\n }\n }\n }\n\n async function setWireVars(\n wireId: string,\n vars: Record<string, string>,\n ): Promise<void> {\n const serialized = JSON.stringify(vars);\n const toStore = secret\n ? await encryptVars(serialized, secret)\n : serialized;\n await adapter.updateWireMetadata(wireId, toStore);\n }\n\n return {\n async create(callbackUrl: string) {\n await init();\n kd(\n \"wire\",\n `${plugName}: creating subscription, callbackUrl=${callbackUrl}`,\n );\n\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n throw new Error(`Plug \"${plugName}\" not found in database`);\n }\n const plugId = dbPlug[\"id\"] as string;\n\n const existingWire = await adapter.getPlugWire(plugId);\n const wireId = existingWire\n ? (existingWire[\"id\"] as string)\n : (\n await adapter.insertWire({\n plugId,\n remoteId: \"\",\n callbackUrl,\n eventTypes: wireConfig.events,\n })\n ).id;\n\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const _setVars = secret\n ? (updates: Record<string, string>) =>\n setVars(plugName, { ...vars, ...updates })\n : undefined;\n const boundPlug = createBoundPlug(vars, _setVars);\n\n const wireVars = await getWireVars(wireId);\n\n const result = await wireConfig.onSubscribe({\n plug: boundPlug,\n callbackUrl,\n events: wireConfig.events,\n wireVars,\n setWireVars: (updates) =>\n setWireVars(wireId, { ...wireVars, ...updates }),\n });\n\n kd(\n \"wire\",\n `${plugName}: subscription created, remoteId=${result.remoteId}`,\n );\n\n await adapter.updateWireDetails(wireId, {\n remoteId: result.remoteId,\n callbackUrl,\n eventTypes: wireConfig.events,\n status: \"active\",\n });\n\n const record = await adapter.getWire(wireId);\n return record!;\n },\n\n async delete(wireId: string) {\n await init();\n kd(\"wire\", `${plugName}: deleting wire ${wireId}`);\n const wireRecord = await adapter.getWire(wireId);\n if (!wireRecord) {\n throw new Error(`Wire \"${wireId}\" not found`);\n }\n\n const remoteId = (wireRecord[\"remoteId\"] ??\n wireRecord[\"remote_id\"]) as string;\n kd(\"wire\", `${plugName}: remoteId=${remoteId}`);\n if (!remoteId) {\n await adapter.updateWireStatus(wireId, \"disabled\");\n return;\n }\n\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const _setVars = secret\n ? (updates: Record<string, string>) =>\n setVars(plugName, { ...vars, ...updates })\n : undefined;\n const boundPlug = createBoundPlug(vars, _setVars);\n\n const wireVars = await getWireVars(wireId);\n\n await wireConfig.onUnsubscribe({\n plug: boundPlug,\n remoteId,\n wireVars,\n setWireVars: (updates) =>\n setWireVars(wireId, { ...wireVars, ...updates }),\n });\n\n kd(\"wire\", `${plugName}: unsubscribed successfully`);\n await adapter.updateWireStatus(wireId, \"disabled\");\n },\n\n async get() {\n await init();\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) return null;\n\n return adapter.getPlugWire(dbPlug[\"id\"] as string);\n },\n };\n }\n\n async function triggerFlowRun(\n flowId: string,\n body: unknown,\n ): Promise<Response> {\n const flow = await adapter.getFlow(flowId);\n if (\n !flow ||\n typeof flow[\"plugName\"] !== \"string\" ||\n !plugNames.has(flow[\"plugName\"])\n ) {\n return Response.json({ error: \"Flow not found\" }, { status: 404 });\n }\n\n if (flow[\"enabled\"] === false) {\n return Response.json({ error: \"Flow is disabled\" }, { status: 409 });\n }\n\n const plugName = flow[\"plugName\"];\n const plugReg = plugs.find((p) => p.name === plugName);\n const flowName = flow[\"name\"];\n const flowType = flow[\"type\"];\n const flowReg = plugReg?.flows?.find(\n (candidate) => candidate.name === flowName && candidate.type === flowType,\n );\n\n if (!plugReg || !flowReg) {\n return Response.json({ error: \"Flow not registered\" }, { status: 404 });\n }\n\n if (flowReg.type === \"webhook\") {\n return Response.json(\n { error: \"Webhook flows are triggered through webhook routes\" },\n { status: 400 },\n );\n }\n\n const requestBody =\n body && typeof body === \"object\" ? (body as Record<string, unknown>) : {};\n const runType =\n typeof requestBody[\"runType\"] === \"string\"\n ? requestBody[\"runType\"]\n : \"full\";\n\n const { id: runId } = await adapter.insertRun({\n flowId,\n runType,\n status: \"running\",\n });\n const startedAt = Date.now();\n\n async function completeRunOk(result: FlowRunResult | undefined) {\n const completedAt = new Date();\n const counters = getFlowRunCounters(result);\n const status = resolveTerminalRunStatus(result, counters);\n\n await adapter.updateRun(runId, {\n status,\n completedAt,\n durationMs: Date.now() - startedAt,\n ...counters,\n error: result?.error ?? null,\n metadata: result?.metadata ?? null,\n });\n await adapter.updateFlowLastRun(flowId, {\n lastRunAt: completedAt,\n lastRunStatus: status,\n });\n\n return { completedAt, counters, status };\n }\n\n async function completeRunFailed(error: unknown) {\n const completedAt = new Date();\n const message = getErrorMessage(error);\n const status: KhotanTerminalRunStatus = isWorkflowCancelledError(error)\n ? \"cancelled\"\n : \"failed\";\n await adapter.updateRun(runId, {\n status,\n completedAt,\n durationMs: Date.now() - startedAt,\n failed: status === \"failed\" ? 1 : 0,\n error: message,\n });\n await adapter.updateFlowLastRun(flowId, {\n lastRunAt: completedAt,\n lastRunStatus: status,\n });\n return message;\n }\n\n function observeWorkflowCompletion(workflowResult: unknown) {\n const returnValue = getWorkflowReturnValue(workflowResult);\n if (!returnValue) return;\n\n void returnValue\n .then(async (value) => {\n await completeRunOk(toFlowRunResult(value));\n })\n .catch(async (error) => {\n await completeRunFailed(error);\n })\n .catch((error) => {\n kd(\"flow\", `Failed to reconcile workflow run ${runId}`, error);\n });\n }\n\n try {\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const setFlowVars = async (updates: Record<string, string>) => {\n await setVars(plugName, { ...vars, ...updates });\n };\n const boundPlug = bindPlugWithVars(\n plugReg.plug,\n vars,\n secret ? setFlowVars : undefined,\n );\n const plugVarsByName: Record<string, Record<string, string>> = {\n [plugName]: vars,\n };\n if (flowReg.to && plugNames.has(flowReg.to)) {\n plugVarsByName[flowReg.to] = secret\n ? await getVars(flowReg.to).catch(() => ({}))\n : {};\n }\n\n const flowContext = {\n id: flowId,\n name: flowReg.name,\n plugName,\n type: flowReg.type,\n resource: flowReg.resource ?? null,\n to: flowReg.to ?? null,\n };\n\n if (flowReg.workflow) {\n const startWorkflow = await importWorkflowStart();\n const result = await startWorkflow(flowReg.workflow, [\n {\n flow: flowContext,\n runType,\n body: requestBody[\"body\"],\n vars,\n plugVarsByName,\n khotanRunId: runId,\n khotanInstanceId: instanceId,\n },\n ]);\n const workflowRunId = getWorkflowRunId(result);\n\n if (workflowRunId) {\n await adapter.updateRun(runId, {\n status: \"running\",\n workflowRunId,\n });\n }\n\n observeWorkflowCompletion(result);\n\n return Response.json({\n id: runId,\n flowId,\n workflowRunId,\n status: \"running\",\n runType,\n });\n }\n\n const result = await flowReg.run?.({\n plug: boundPlug,\n flow: flowContext,\n runType,\n body: requestBody[\"body\"],\n vars,\n setVars: setFlowVars,\n cache: createCacheInstance,\n });\n const runResult = toFlowRunResult(result);\n\n const { counters, status } = await completeRunOk(runResult);\n\n return Response.json({\n id: runId,\n flowId,\n status,\n runType,\n ...counters,\n error: runResult?.error ?? null,\n metadata: runResult?.metadata ?? null,\n });\n } catch (error) {\n const message = await completeRunFailed(error);\n return Response.json(\n { id: runId, flowId, status: \"failed\", error: message },\n { status: 500 },\n );\n }\n }\n\n async function wasFlowTriggeredInMinuteWindow(\n flowId: string,\n slotStart: Date,\n slotEnd: Date,\n ): Promise<boolean> {\n const runs = await adapter.listRuns(flowId);\n return runs.some((run) => {\n const startedAt = coerceDate(run[\"startedAt\"]);\n if (!startedAt) return false;\n const startedAtMs = startedAt.getTime();\n return (\n startedAtMs >= slotStart.getTime() && startedAtMs < slotEnd.getTime()\n );\n });\n }\n\n async function dispatchScheduledFlows(options: {\n now?: Date;\n runType?: string;\n } = {}) {\n await init();\n\n const now = options.now ?? new Date();\n const slotStart = startOfUtcMinute(now);\n const slotEnd = new Date(slotStart.getTime() + 60_000);\n const runType = options.runType ?? \"full\";\n const registeredFlows = (await adapter.listFlows()).filter((flow) =>\n isRegisteredFlowRecord(flow),\n );\n\n const scheduledFlows = registeredFlows.filter(\n (flow) => typeof flow[\"schedule\"] === \"string\" && flow[\"schedule\"].trim(),\n );\n\n const triggered: Array<Record<string, unknown>> = [];\n const skipped: Array<Record<string, unknown>> = [];\n\n for (const flow of scheduledFlows) {\n const flowId = typeof flow[\"id\"] === \"string\" ? flow[\"id\"] : null;\n const flowName = typeof flow[\"name\"] === \"string\" ? flow[\"name\"] : null;\n const plugName =\n typeof flow[\"plugName\"] === \"string\" ? flow[\"plugName\"] : null;\n const schedule =\n typeof flow[\"schedule\"] === \"string\" ? flow[\"schedule\"].trim() : \"\";\n\n if (!flowId || !flowName || !plugName || !schedule) continue;\n\n if (flow[\"enabled\"] === false) {\n skipped.push({\n flowId,\n flowName,\n plugName,\n schedule,\n reason: \"disabled\",\n });\n continue;\n }\n\n let isDue = false;\n try {\n isDue = matchesCronSchedule(schedule, now);\n } catch (error) {\n skipped.push({\n flowId,\n flowName,\n plugName,\n schedule,\n reason: \"invalid_schedule\",\n detail: getErrorMessage(error),\n });\n continue;\n }\n\n if (!isDue) {\n skipped.push({\n flowId,\n flowName,\n plugName,\n schedule,\n reason: \"not_due\",\n });\n continue;\n }\n\n if (await wasFlowTriggeredInMinuteWindow(flowId, slotStart, slotEnd)) {\n skipped.push({\n flowId,\n flowName,\n plugName,\n schedule,\n reason: \"already_triggered\",\n });\n continue;\n }\n\n const response = await triggerFlowRun(flowId, { runType });\n const payload = (await response.json().catch(() => ({}))) as Record<\n string,\n unknown\n >;\n\n if (!response.ok) {\n skipped.push({\n flowId,\n flowName,\n plugName,\n schedule,\n reason: \"trigger_failed\",\n status: response.status,\n detail:\n typeof payload[\"error\"] === \"string\"\n ? payload[\"error\"]\n : response.statusText,\n });\n continue;\n }\n\n triggered.push({\n flowId,\n flowName,\n plugName,\n schedule,\n runId: payload[\"id\"] ?? null,\n workflowRunId: payload[\"workflowRunId\"] ?? null,\n status:\n typeof payload[\"status\"] === \"string\" ? payload[\"status\"] : \"running\",\n });\n }\n\n return {\n ok: true,\n tickAt: slotStart.toISOString(),\n runType,\n evaluated: scheduledFlows.length,\n triggered,\n skipped,\n };\n }\n\n async function resolveFlowId(\n flowNameOrId: string,\n options: FlowSelectorOptions = {},\n ): Promise<string> {\n await init();\n\n const byId = await adapter.getFlow(flowNameOrId);\n if (\n byId &&\n typeof byId[\"plugName\"] === \"string\" &&\n plugNames.has(byId[\"plugName\"])\n ) {\n return flowNameOrId;\n }\n\n const matches = (await adapter.listFlows()).filter((flow) => {\n if (flow[\"name\"] !== flowNameOrId) return false;\n if (!isRegisteredFlowRecord(flow)) return false;\n return !options.plugName || flow[\"plugName\"] === options.plugName;\n });\n\n if (matches.length === 0) {\n const suffix = options.plugName ? ` on plug \"${options.plugName}\"` : \"\";\n throw new Error(`Flow \"${flowNameOrId}\"${suffix} not found`);\n }\n\n if (matches.length > 1) {\n const plugs = matches\n .map((flow) => String(flow[\"plugName\"]))\n .filter(Boolean)\n .join(\", \");\n throw new Error(\n `Flow \"${flowNameOrId}\" is registered on multiple plugs (${plugs}). Pass { plugName } to select one.`,\n );\n }\n\n const id = matches[0]?.[\"id\"];\n if (typeof id !== \"string\") {\n throw new Error(`Flow \"${flowNameOrId}\" has no database ID`);\n }\n\n return id;\n }\n\n function flow(\n flowNameOrId: string,\n selectorOptions: FlowSelectorOptions = {},\n ): FlowInstance {\n return {\n async start(startOptions: FlowStartOptions = {}) {\n const flowId = await resolveFlowId(flowNameOrId, selectorOptions);\n const response = await triggerFlowRun(flowId, startOptions);\n const payload = await response.json().catch(() => ({}));\n\n if (!response.ok) {\n const message =\n payload && typeof payload === \"object\" && \"error\" in payload\n ? String((payload as { error: unknown }).error)\n : `Failed to start flow \"${flowNameOrId}\"`;\n throw new Error(message);\n }\n\n return payload as Record<string, unknown>;\n },\n };\n }\n\n async function getRunWithWorkflowStatus(\n runId: string,\n ): Promise<Record<string, unknown> | null> {\n const run = await adapter.getRun(runId);\n if (!run) return null;\n\n const workflowRunId =\n typeof run[\"workflowRunId\"] === \"string\"\n ? run[\"workflowRunId\"]\n : typeof run[\"workflow_run_id\"] === \"string\"\n ? run[\"workflow_run_id\"]\n : null;\n\n if (!workflowRunId) {\n return { ...run, workflowStatus: null };\n }\n\n try {\n const getRun = await importWorkflowGetRun();\n const workflowRun = getRun(workflowRunId);\n const workflowStatus = workflowRun.status\n ? await workflowRun.status\n : null;\n return { ...run, workflowStatus };\n } catch (error) {\n return {\n ...run,\n workflowStatus: null,\n workflowError: getErrorMessage(error),\n };\n }\n }\n\n function getRunWorkflowId(run: Record<string, unknown>): string | null {\n return typeof run[\"workflowRunId\"] === \"string\"\n ? run[\"workflowRunId\"]\n : typeof run[\"workflow_run_id\"] === \"string\"\n ? run[\"workflow_run_id\"]\n : null;\n }\n\n async function handler(request: Request): Promise<Response> {\n await init();\n\n const url = new URL(request.url);\n const segments = url.pathname\n .replace(/^\\/+|\\/+$/g, \"\")\n .split(\"/\")\n .filter(Boolean);\n\n const plugsIdx = segments.indexOf(\"plugs\");\n const flowsIdx = segments.indexOf(\"flows\");\n const resourcesIdx = segments.indexOf(\"resources\");\n const cachesIdx = segments.indexOf(\"caches\");\n const mappingsIdx = segments.indexOf(\"mappings\");\n const runsIdx = segments.indexOf(\"runs\");\n const wiresIdx = segments.indexOf(\"wires\");\n const webhookHandlersIdx = segments.indexOf(\"webhook-handlers\");\n const webhookEventsIdx = segments.indexOf(\"webhook-events\");\n const variablesIdx = segments.indexOf(\"variables\");\n const cronIdx = segments.indexOf(\"cron\");\n const webhookIdx = segments.indexOf(\"webhook\");\n\n const debugIdx = segments.indexOf(\"debug\");\n\n // Authorization gate. Inbound webhooks, the cron dispatcher, and debug\n // routes carry their own protection and are exempt; everything else is a\n // management route that must pass the consumer-supplied `authorize` hook.\n const isInboundWebhook =\n webhookIdx !== -1 && webhookIdx === segments.length - 2;\n const isCronRoute = cronIdx !== -1 && cronIdx === segments.length - 1;\n const isDebugRoute = debugIdx !== -1;\n\n if (authorize && !isInboundWebhook && !isCronRoute && !isDebugRoute) {\n // The local CLI authenticates with a dev-only HMAC token derived from\n // KHOTAN_SECRET, so it can reach management routes without a user session.\n let allowed = await isCliRequestAuthorized(request, secret);\n if (!allowed) {\n try {\n allowed = await authorize(request);\n } catch {\n allowed = false;\n }\n }\n if (!allowed) {\n return Response.json({ error: \"Unauthorized\" }, { status: 401 });\n }\n }\n\n const limit = Math.min(\n Math.max(\n Number.parseInt(url.searchParams.get(\"limit\") ?? \"20\", 10) || 20,\n 1,\n ),\n 100,\n );\n const offset = Math.max(\n Number.parseInt(url.searchParams.get(\"offset\") ?? \"0\", 10) || 0,\n 0,\n );\n const search = url.searchParams.get(\"search\")?.trim() || undefined;\n const wantsMappingPage =\n url.searchParams.has(\"limit\") ||\n url.searchParams.has(\"offset\") ||\n url.searchParams.has(\"search\");\n\n if (request.method === \"GET\") {\n if (cachesIdx !== -1 && cachesIdx === segments.length - 3) {\n const cacheName = decodeURIComponent(segments[cachesIdx + 1]!);\n const key = decodeURIComponent(segments[cachesIdx + 2]!);\n\n try {\n const entry = await readCacheEntry(cacheName, key);\n if (!entry) {\n return Response.json({ error: \"Cache entry not found\" }, { status: 404 });\n }\n\n return Response.json({\n cache: cacheName,\n key: entry.key,\n value: entry.value,\n expiresAt: entry.expiresAt,\n });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid cache request\";\n return Response.json({ error: message }, { status: 400 });\n }\n }\n\n if (cronIdx !== -1 && cronIdx === segments.length - 1) {\n if (!isCronRequestAuthorized(request)) {\n return Response.json({ error: \"Unauthorized\" }, { status: 401 });\n }\n const result = await dispatchScheduledFlows();\n return Response.json(result);\n }\n\n // GET .../debug — check if debug mode is active\n if (debugIdx !== -1 && debugIdx === segments.length - 1) {\n if (!isDebugEnabled()) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n return Response.json({ enabled: true });\n }\n\n // GET .../debug/:plugName — plug metadata for the debugger UI\n if (debugIdx !== -1 && debugIdx === segments.length - 2) {\n if (!isDebugEnabled()) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n const plugName = segments[debugIdx + 1]!;\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const fields = plugReg.vars ?? plugReg.plug.varFields ?? [];\n const hasConfigured = await hasVars(plugName).catch(() => false);\n const rawEndpoints =\n plugReg.plug.endpoints ?? plugReg.endpoints ?? null;\n\n let varValues: Record<string, string> = {};\n if (hasConfigured || Object.keys(getDefaultVars(plugName)).length > 0) {\n try {\n const raw = await getVars(plugName);\n varValues = Object.fromEntries(\n Object.entries(maskVars(plugName, raw)).filter(([key]) => {\n const field = fields.find((f) => f.key === key);\n return field && !field.hidden;\n }),\n );\n } catch {\n /* no secret configured */\n }\n }\n\n return Response.json({\n name: plugReg.name,\n baseUrl: plugReg.plug.baseUrl,\n authType: plugReg.plug.authType,\n endpoints: serializeEndpoints(rawEndpoints),\n vars: {\n fields: fields.filter((f) => !f.hidden),\n configured: hasConfigured,\n values: varValues,\n },\n });\n }\n\n // GET .../variables/:plugName\n if (variablesIdx !== -1 && variablesIdx === segments.length - 2) {\n const plugName = segments[variablesIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const fields = getVarFields(plugName);\n const hasValues = await hasVars(plugName);\n let masked: Record<string, string> = {};\n if (hasValues || Object.keys(getDefaultVars(plugName)).length > 0) {\n try {\n const vars = await getVars(plugName);\n masked = maskVars(plugName, vars);\n } catch {\n masked = {};\n }\n }\n return Response.json({ fields, values: masked, configured: hasValues });\n }\n\n // GET .../wires/:plugName\n if (wiresIdx !== -1 && wiresIdx === segments.length - 2) {\n const plugName = segments[wiresIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg?.wires || plugReg.wires.length === 0) {\n return Response.json({ wire: null, configured: false });\n }\n const wireRecord = await wire(plugName).get();\n return Response.json({ wire: wireRecord, configured: true });\n }\n\n // GET .../webhook-handlers/:plugName\n if (\n webhookHandlersIdx !== -1 &&\n webhookHandlersIdx === segments.length - 2\n ) {\n const plugName = segments[webhookHandlersIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n return Response.json([]);\n }\n const plugId = dbPlug[\"id\"] as string;\n const wireRecord = await adapter.getPlugWire(plugId);\n if (!wireRecord) {\n return Response.json([]);\n }\n const wireId = wireRecord[\"id\"] as string;\n const handlers = await adapter.listWebhookHandlers(wireId);\n const plugReg = plugs.find((p) => p.name === plugName);\n const configuredHandlerEvents = new Map<string, string[] | undefined>();\n for (const handler of plugReg\n ? getWebhookHandlersForPlug(plugReg)\n : []) {\n configuredHandlerEvents.set(\n `${handler.type}:${handler.name}`,\n handler.events,\n );\n }\n const handlersWithRuns = await Promise.all(\n handlers.map(async (handler) => {\n const handlerId = handler[\"id\"];\n if (typeof handlerId !== \"string\") return handler;\n const latestRun =\n await adapter.getLatestWebhookHandlerRun(handlerId);\n return {\n ...handler,\n events:\n configuredHandlerEvents.get(\n `${String(handler[\"type\"])}:${String(handler[\"name\"])}`,\n ) ?? null,\n lastRunStatus: latestRun?.[\"status\"] ?? null,\n lastRunAt: latestRun?.[\"startedAt\"] ?? null,\n };\n }),\n );\n return Response.json(handlersWithRuns);\n }\n\n // GET .../plugs\n if (plugsIdx !== -1 && plugsIdx === segments.length - 1) {\n const data = await adapter.listPlugs();\n const filtered = data.filter(\n (p) => typeof p[\"name\"] === \"string\" && plugNames.has(p[\"name\"]),\n );\n const withVarState = await Promise.all(\n filtered.map(async (plug) => {\n const plugName = plug[\"name\"] as string;\n let varsConfigured = false;\n try {\n varsConfigured = await hasVars(plugName);\n } catch {\n varsConfigured = false;\n }\n return { ...plug, varsConfigured };\n }),\n );\n return Response.json(withVarState);\n }\n\n // GET .../plugs/:id\n if (plugsIdx !== -1 && plugsIdx === segments.length - 2) {\n const plugId = segments[plugsIdx + 1]!;\n const plug = await adapter.getPlug(plugId);\n if (\n !plug ||\n typeof plug[\"name\"] !== \"string\" ||\n !plugNames.has(plug[\"name\"])\n ) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const flows = await adapter.getPlugFlows(plugId);\n return Response.json({ ...plug, flows });\n }\n\n // GET .../flows — only flows belonging to registered plugs\n if (flowsIdx !== -1 && flowsIdx === segments.length - 1) {\n const data = await adapter.listFlows();\n const filtered = data.filter((flow) => isRegisteredFlowRecord(flow));\n return Response.json(filtered);\n }\n\n // GET .../flows/:id/runs\n if (\n flowsIdx !== -1 &&\n flowsIdx === segments.length - 3 &&\n segments[flowsIdx + 2] === \"runs\"\n ) {\n const flowId = segments[flowsIdx + 1]!;\n const data = await adapter.listRuns(flowId);\n return Response.json(data);\n }\n\n // GET .../runs\n if (runsIdx !== -1 && runsIdx === segments.length - 1) {\n const page = await adapter.listRunsPage({ limit, offset });\n return Response.json({\n items: page.items,\n page: {\n limit,\n offset,\n hasMore: page.hasMore,\n prevOffset: Math.max(offset - limit, 0),\n nextOffset: offset + limit,\n },\n });\n }\n\n // GET .../runs/:id/stream\n if (\n runsIdx !== -1 &&\n runsIdx === segments.length - 3 &&\n segments[runsIdx + 2] === \"stream\"\n ) {\n const runId = segments[runsIdx + 1]!;\n const run = await adapter.getRun(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n const workflowRunId = getRunWorkflowId(run);\n if (!workflowRunId) {\n return Response.json(\n { error: \"Run does not have a Workflow run ID\" },\n { status: 400 },\n );\n }\n\n const startIndexParam = url.searchParams.get(\"startIndex\");\n const parsedStartIndex =\n startIndexParam == null ? null : Number.parseInt(startIndexParam, 10);\n const namespace = url.searchParams.get(\"namespace\") ?? undefined;\n const getRun = await importWorkflowGetRun();\n const workflowRun = getRun(workflowRunId);\n const streamOptions: { startIndex?: number; namespace?: string } = {};\n if (\n typeof parsedStartIndex === \"number\" &&\n Number.isFinite(parsedStartIndex)\n ) {\n streamOptions.startIndex = parsedStartIndex;\n }\n if (namespace) streamOptions.namespace = namespace;\n const stream = workflowRun.getReadable?.(streamOptions);\n\n if (!stream) {\n return Response.json(\n { error: \"Workflow run does not expose a readable stream\" },\n { status: 400 },\n );\n }\n\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"application/x-ndjson; charset=utf-8\",\n \"Cache-Control\": \"no-cache, no-transform\",\n },\n });\n }\n\n // GET .../runs/:id\n if (runsIdx !== -1 && runsIdx === segments.length - 2) {\n const runId = segments[runsIdx + 1]!;\n const run = await getRunWithWorkflowStatus(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n return Response.json(run);\n }\n\n // GET .../webhook-events\n if (webhookEventsIdx !== -1 && webhookEventsIdx === segments.length - 1) {\n const page = await adapter.listWebhookEventsPage({ limit, offset });\n return Response.json({\n items: page.items,\n page: {\n limit,\n offset,\n hasMore: page.hasMore,\n prevOffset: Math.max(offset - limit, 0),\n nextOffset: offset + limit,\n },\n });\n }\n\n // GET .../resources — only resources registered in config\n if (resourcesIdx !== -1 && resourcesIdx === segments.length - 1) {\n const data = await adapter.listResources();\n const filtered = data.filter(\n (r) => typeof r[\"name\"] === \"string\" && resourceNames.has(r[\"name\"]),\n );\n return Response.json(filtered.map(decorateResourceRecord));\n }\n\n // GET .../resources/:id/mappings\n if (\n resourcesIdx !== -1 &&\n resourcesIdx === segments.length - 3 &&\n segments[resourcesIdx + 2] === \"mappings\"\n ) {\n const resourceId = segments[resourcesIdx + 1]!;\n const resource = await getRegisteredResourceById(resourceId);\n if (!resource) {\n return Response.json(\n { error: \"Resource not found\" },\n { status: 404 },\n );\n }\n\n const page = await listMappings({\n resourceId,\n limit,\n offset,\n ...(search ? { search } : {}),\n });\n\n if (!wantsMappingPage) {\n return Response.json(page.items);\n }\n\n return Response.json(page);\n }\n\n // GET .../resources/:id\n if (resourcesIdx !== -1 && resourcesIdx === segments.length - 2) {\n const resourceId = segments[resourcesIdx + 1]!;\n const resource = await adapter.getResource(resourceId);\n if (\n !resource ||\n typeof resource[\"name\"] !== \"string\" ||\n !resourceNames.has(resource[\"name\"])\n ) {\n return Response.json(\n { error: \"Resource not found\" },\n { status: 404 },\n );\n }\n const flows = await adapter.getResourceFlows(resourceId);\n return Response.json({ ...decorateResourceRecord(resource), flows });\n }\n\n // GET .../mappings/:id\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 2) {\n const mappingId = segments[mappingsIdx + 1]!;\n const mapping = await adapter.getMapping(mappingId);\n if (!mapping) {\n return Response.json({ error: \"Mapping not found\" }, { status: 404 });\n }\n return Response.json(mapping);\n }\n }\n\n if (request.method === \"POST\") {\n if (cachesIdx !== -1 && cachesIdx === segments.length - 3) {\n const cacheName = decodeURIComponent(segments[cachesIdx + 1]!);\n const key = decodeURIComponent(segments[cachesIdx + 2]!);\n const body = (await request.json().catch(() => ({}))) as {\n value?: unknown;\n };\n\n if (!(\"value\" in body)) {\n return Response.json({ error: \"Cache writes require a value\" }, { status: 400 });\n }\n\n try {\n const cacheHandle = createCacheInstance(cacheName);\n await cacheHandle.set(key, body.value);\n const entry = await readCacheEntry(cacheName, key);\n return Response.json({\n cache: cacheName,\n key,\n value: body.value,\n expiresAt: entry?.expiresAt ?? null,\n });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid cache payload\";\n return Response.json({ error: message }, { status: 400 });\n }\n }\n\n if (cronIdx !== -1 && cronIdx === segments.length - 1) {\n if (!isCronRequestAuthorized(request)) {\n return Response.json({ error: \"Unauthorized\" }, { status: 401 });\n }\n\n let body: Record<string, unknown> = {};\n try {\n body = (await request.json()) as Record<string, unknown>;\n } catch {\n body = {};\n }\n\n const runType =\n typeof body[\"runType\"] === \"string\" ? body[\"runType\"] : \"full\";\n const result = await dispatchScheduledFlows({ runType });\n return Response.json(result);\n }\n\n // POST .../webhook/:plugName — receive inbound webhooks\n if (webhookIdx !== -1 && webhookIdx === segments.length - 2) {\n const plugName = segments[webhookIdx + 1]!;\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n return Response.json(\n { error: `Unknown plug: ${plugName}` },\n { status: 404 },\n );\n }\n\n const wireConfig = plugReg.wires?.[0];\n if (!wireConfig?.onVerify) {\n return Response.json(\n { error: `No active wire for plug: ${plugName}` },\n { status: 404 },\n );\n }\n\n const rawBody = await request.text();\n\n // Get wireVars for verification\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n return Response.json(\n { error: `Plug \"${plugName}\" not found in database` },\n { status: 404 },\n );\n }\n const plugId = dbPlug[\"id\"] as string;\n const wireRecord = await adapter.getPlugWire(plugId);\n const wireId = wireRecord ? (wireRecord[\"id\"] as string) : null;\n\n let wireVars: Record<string, string> = {};\n if (wireId) {\n const raw = await adapter.getWireMetadata(wireId);\n if (raw) {\n if (secret) {\n try {\n const decrypted = await decryptVars(raw, secret);\n wireVars = JSON.parse(decrypted) as Record<string, string>;\n } catch {\n try {\n wireVars = JSON.parse(raw) as Record<string, string>;\n } catch {\n /* empty */\n }\n }\n } else {\n try {\n wireVars = JSON.parse(raw) as Record<string, string>;\n } catch {\n /* empty */\n }\n }\n }\n }\n\n // Convert headers to plain Record\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n const verified = await wireConfig.onVerify({\n headers,\n body: rawBody,\n wireVars,\n });\n if (!verified) {\n return Response.json(\n { error: \"Webhook verification failed\" },\n { status: 401 },\n );\n }\n\n // Parse JSON after verification\n let event: Record<string, unknown>;\n try {\n event = JSON.parse(rawBody) as Record<string, unknown>;\n } catch {\n event = {};\n }\n const eventType =\n typeof event[\"type\"] === \"string\" ? event[\"type\"] : \"unknown\";\n\n const webhookHandlers = getWebhookHandlersForPlug(plugReg);\n const catches = webhookHandlers.filter(\n (handler): handler is CatchRegistration => handler.type === \"catch\",\n );\n const passes = webhookHandlers.filter(\n (handler): handler is PassRegistration => handler.type === \"pass\",\n );\n\n void Promise.resolve().then(async () => {\n try {\n const startWorkflow = await importWorkflowStart();\n\n // Look up handler IDs from DB for run tracking\n const dbHandlers = wireId\n ? await adapter.listWebhookHandlers(wireId)\n : [];\n\n for (const c of catches) {\n if (\n Array.isArray(c.events) &&\n c.events.length > 0 &&\n !c.events.includes(eventType)\n ) {\n continue;\n }\n const handlerRow = dbHandlers.find(\n (h) => h[\"name\"] === c.name && h[\"type\"] === \"catch\",\n );\n if (handlerRow?.[\"enabled\"] === false) {\n continue;\n }\n const handlerId = handlerRow\n ? (handlerRow[\"id\"] as string)\n : null;\n const { id: khotanRunId } = await adapter.insertRun({\n webhookHandlerId: handlerId,\n wireId,\n workflowRunId: null,\n runType: \"webhook\",\n status: \"running\",\n });\n if (handlerId && wireId) {\n await adapter.insertWebhookEvent({\n wireId,\n webhookHandlerId: handlerId,\n khotanRunId,\n eventType,\n payload: event,\n headers,\n });\n }\n try {\n const result = await startWorkflow(c.workflow, [\n {\n event,\n eventType,\n headers,\n khotanRunId,\n khotanInstanceId: instanceId,\n },\n ]);\n const workflowRunId =\n result && typeof result === \"object\"\n ? \"runId\" in result\n ? String(result.runId)\n : \"id\" in result\n ? String(result.id)\n : null\n : null;\n if (workflowRunId) {\n await adapter.updateRun(khotanRunId, {\n status: \"running\",\n workflowRunId,\n });\n }\n } catch (err) {\n const message =\n err instanceof Error ? err.message : \"Unknown error\";\n await adapter.updateRun(khotanRunId, {\n status: \"failed\",\n completedAt: new Date(),\n failed: 1,\n error: message,\n });\n throw err;\n }\n }\n\n for (const p of passes) {\n if (\n Array.isArray(p.events) &&\n p.events.length > 0 &&\n !p.events.includes(eventType)\n ) {\n continue;\n }\n const handlerRow = dbHandlers.find(\n (h) => h[\"name\"] === p.name && h[\"type\"] === \"pass\",\n );\n if (handlerRow?.[\"enabled\"] === false) {\n continue;\n }\n let destVars: Record<string, string> = {};\n const destPlug = allPlugs.find((dp) => dp[\"name\"] === p.to);\n if (destPlug) {\n const destPlugId = destPlug[\"id\"] as string;\n const encrypted =\n await adapter.getEncryptedVariables(destPlugId);\n if (encrypted && secret) {\n try {\n const json = await decryptVars(encrypted, secret);\n destVars = JSON.parse(json) as Record<string, string>;\n } catch {\n /* empty */\n }\n }\n }\n const handlerId = handlerRow\n ? (handlerRow[\"id\"] as string)\n : null;\n const { id: khotanRunId } = await adapter.insertRun({\n webhookHandlerId: handlerId,\n wireId,\n workflowRunId: null,\n runType: \"webhook\",\n status: \"running\",\n });\n if (handlerId && wireId) {\n await adapter.insertWebhookEvent({\n wireId,\n webhookHandlerId: handlerId,\n khotanRunId,\n eventType,\n payload: event,\n headers,\n });\n }\n try {\n const result = await startWorkflow(p.workflow, [\n {\n event,\n eventType,\n headers,\n destVars,\n khotanRunId,\n khotanInstanceId: instanceId,\n },\n ]);\n const workflowRunId =\n result && typeof result === \"object\"\n ? \"runId\" in result\n ? String(result.runId)\n : \"id\" in result\n ? String(result.id)\n : null\n : null;\n if (workflowRunId) {\n await adapter.updateRun(khotanRunId, {\n status: \"running\",\n workflowRunId,\n });\n }\n } catch (err) {\n const message =\n err instanceof Error ? err.message : \"Unknown error\";\n await adapter.updateRun(khotanRunId, {\n status: \"failed\",\n completedAt: new Date(),\n failed: 1,\n error: message,\n });\n throw err;\n }\n }\n } catch (err) {\n kd(\"webhook\", `${plugName}: workflow start failed:`, err);\n }\n });\n\n return Response.json({ received: true }, { status: 202 });\n }\n\n // POST .../debug/:plugName — dev-only proxy through plug\n if (debugIdx !== -1 && debugIdx === segments.length - 2) {\n if (!isDebugEnabled()) {\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n const plugName = segments[debugIdx + 1]!;\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n\n const body = (await request.json()) as {\n method: string;\n path: string;\n body?: unknown;\n params?: Record<string, string>;\n headers?: Record<string, string>;\n };\n\n const method = (body.method ?? \"GET\").toUpperCase();\n const reqPath = body.path ?? \"/\";\n const start = Date.now();\n\n try {\n const plug = plugReg.plug;\n const vars = secret ? await getVars(plugName).catch(() => ({})) : {};\n const _setVars = secret\n ? (updates: Record<string, string>) =>\n setVars(plugName, { ...vars, ...updates })\n : undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const opts: any = { vars };\n if (_setVars) opts._setVars = _setVars;\n if (body.params) opts.params = body.params;\n if (body.headers) opts.headers = body.headers;\n if (body.body) opts.body = body.body;\n\n let result: unknown;\n switch (method) {\n case \"GET\":\n result = await plug.get(reqPath, opts);\n break;\n case \"POST\":\n result = await plug.post(reqPath, opts);\n break;\n case \"PUT\":\n result = await plug.put(reqPath, opts);\n break;\n case \"PATCH\":\n result = await plug.patch(reqPath, opts);\n break;\n case \"DELETE\":\n result = await plug.delete(reqPath, opts);\n break;\n default:\n result = await plug.get(reqPath, opts);\n }\n\n const timing = Date.now() - start;\n\n const response: Record<string, unknown> = {\n status: 200,\n statusText: \"OK\",\n headers: {},\n body: result,\n timing,\n };\n\n const allEndpoints:\n | Record<string, { method: string; path: string }>\n | undefined = plugReg.plug.endpoints ?? plugReg.endpoints;\n if (allEndpoints) {\n const matched = Object.entries(allEndpoints).find(\n ([, ep]) =>\n ep.method.toUpperCase() === method && ep.path === reqPath,\n );\n if (matched) {\n response[\"endpoint\"] = {\n name: matched[0],\n method: matched[1].method,\n path: matched[1].path,\n };\n }\n }\n\n return Response.json(response);\n } catch (err) {\n const timing = Date.now() - start;\n const error = err instanceof Error ? err.message : \"Unknown error\";\n const errBody =\n err && typeof err === \"object\" && \"body\" in err ? err.body : null;\n const errStatus =\n err && typeof err === \"object\" && \"status\" in err\n ? (err as { status: number }).status\n : 500;\n\n return Response.json({\n status: errStatus,\n statusText: \"Error\",\n headers: {},\n body: errBody,\n timing,\n error,\n });\n }\n }\n\n // POST .../variables/:plugName\n if (variablesIdx !== -1 && variablesIdx === segments.length - 2) {\n const plugName = segments[variablesIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as Record<string, string>;\n const fields = getVarFields(plugName);\n const merged = {\n ...(await getVars(plugName).catch(() => ({}))),\n };\n\n for (const field of fields) {\n const value = body[field.key];\n if (value !== undefined) {\n merged[field.key] = value;\n }\n }\n\n const missing = fields\n .filter((f) => f.required !== false && !merged[f.key])\n .map((f) => f.key);\n if (missing.length > 0) {\n return Response.json(\n { error: `Missing required fields: ${missing.join(\", \")}` },\n { status: 400 },\n );\n }\n\n const vars: Record<string, string> = {};\n for (const field of fields) {\n const value = merged[field.key];\n if (value !== undefined) {\n vars[field.key] = value;\n }\n }\n\n try {\n await setVars(plugName, vars);\n return Response.json({ ok: true });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown error\";\n return Response.json({ error: message }, { status: 500 });\n }\n }\n\n // POST .../runs/:id/cancel\n if (\n runsIdx !== -1 &&\n runsIdx === segments.length - 3 &&\n segments[runsIdx + 2] === \"cancel\"\n ) {\n const runId = segments[runsIdx + 1]!;\n const run = await adapter.getRun(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n const workflowRunId = getRunWorkflowId(run);\n if (!workflowRunId) {\n return Response.json(\n { error: \"Run does not have a Workflow run ID\" },\n { status: 400 },\n );\n }\n\n const getRun = await importWorkflowGetRun();\n const workflowRun = getRun(workflowRunId);\n await workflowRun.cancel?.();\n\n const completedAt = new Date();\n await adapter.updateRun(runId, {\n status: \"cancelled\",\n completedAt,\n error: \"Cancelled\",\n });\n const flowId = typeof run[\"flowId\"] === \"string\" ? run[\"flowId\"] : null;\n if (flowId) {\n await adapter.updateFlowLastRun(flowId, {\n lastRunAt: completedAt,\n lastRunStatus: \"cancelled\",\n });\n }\n\n return Response.json({\n ok: true,\n id: runId,\n workflowRunId,\n status: \"cancelled\",\n error: \"Cancelled\",\n });\n }\n\n // POST .../runs/:id/retry\n if (\n runsIdx !== -1 &&\n runsIdx === segments.length - 3 &&\n segments[runsIdx + 2] === \"retry\"\n ) {\n const runId = segments[runsIdx + 1]!;\n const run = await adapter.getRun(runId);\n if (!run) {\n return Response.json({ error: \"Run not found\" }, { status: 404 });\n }\n const flowId = typeof run[\"flowId\"] === \"string\" ? run[\"flowId\"] : null;\n if (!flowId) {\n return Response.json(\n { error: \"Only flow runs can be retried from the Hub\" },\n { status: 400 },\n );\n }\n const runType =\n typeof run[\"runType\"] === \"string\" ? run[\"runType\"] : \"full\";\n return triggerFlowRun(flowId, { runType });\n }\n\n // POST .../flows/:id/runs\n if (\n flowsIdx !== -1 &&\n flowsIdx === segments.length - 3 &&\n segments[flowsIdx + 2] === \"runs\"\n ) {\n const flowId = segments[flowsIdx + 1]!;\n const body = await request.json().catch(() => ({}));\n return triggerFlowRun(flowId, body);\n }\n\n // POST .../wires/:plugName\n if (wiresIdx !== -1 && wiresIdx === segments.length - 2) {\n const plugName = segments[wiresIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as { callbackUrl: string };\n if (!body.callbackUrl) {\n return Response.json(\n { error: \"callbackUrl is required\" },\n { status: 400 },\n );\n }\n try {\n const record = await wire(plugName).create(body.callbackUrl);\n return Response.json({ wire: record }, { status: 201 });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown error\";\n kd(\"wire\", `${plugName}: create failed:`, message);\n if (error && typeof error === \"object\" && \"body\" in error) {\n kd(\"wire\", `${plugName}: response body:`, error.body);\n }\n return Response.json({ error: message }, { status: 500 });\n }\n }\n\n // POST .../mappings/lookup\n if (\n mappingsIdx !== -1 &&\n mappingsIdx === segments.length - 2 &&\n segments[mappingsIdx + 1] === \"lookup\"\n ) {\n const body = (await request.json()) as\n | {\n resourceId: string;\n connectValue: string | string[];\n }\n | {\n resourceId: string;\n plugName: string;\n ref: string;\n };\n if (\n !body ||\n typeof body !== \"object\" ||\n typeof body[\"resourceId\"] !== \"string\"\n ) {\n return Response.json(\n {\n error:\n \"Lookup requires resourceId plus either connectValue or plugName with ref\",\n },\n { status: 400 },\n );\n }\n\n const hasConnectValue = \"connectValue\" in body;\n const hasPlugRef =\n \"plugName\" in body &&\n typeof body.plugName === \"string\" &&\n \"ref\" in body &&\n typeof body.ref === \"string\";\n\n if (!hasConnectValue && !hasPlugRef) {\n return Response.json(\n {\n error:\n \"Lookup requires either connectValue or plugName with ref\",\n },\n { status: 400 },\n );\n }\n\n let mapping: Record<string, unknown> | null;\n try {\n mapping = hasConnectValue\n ? await lookupMapping({\n resourceId: body.resourceId,\n connectValue: body.connectValue,\n })\n : await lookupMapping({\n resourceId: body.resourceId,\n plugName: body.plugName,\n ref: body.ref,\n });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid lookup request\";\n return Response.json({ error: message }, { status: 400 });\n }\n\n if (!mapping) {\n return Response.json({ error: \"Mapping not found\" }, { status: 404 });\n }\n return Response.json(mapping);\n }\n\n // POST .../mappings\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 1) {\n const body = (await request.json()) as {\n resourceId: string;\n connectValue: string | string[];\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n };\n try {\n const existing = await lookupMapping({\n resourceId: body.resourceId,\n connectValue: body.connectValue,\n });\n const saved = await upsertMapping(body);\n return Response.json(saved, { status: existing ? 200 : 201 });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid mapping payload\";\n return Response.json({ error: message }, { status: 400 });\n }\n }\n }\n\n if (request.method === \"PATCH\") {\n // PATCH .../plugs/:id\n if (plugsIdx !== -1 && plugsIdx === segments.length - 2) {\n const plugId = segments[plugsIdx + 1]!;\n const plug = await adapter.getPlug(plugId);\n if (\n !plug ||\n typeof plug[\"name\"] !== \"string\" ||\n !plugNames.has(plug[\"name\"])\n ) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as { enabled?: boolean };\n if (typeof body.enabled === \"boolean\") {\n await adapter.togglePlugEnabled(plugId, body.enabled);\n }\n const updated = await adapter.getPlug(plugId);\n return Response.json(updated);\n }\n\n // PATCH .../flows/:id\n if (flowsIdx !== -1 && flowsIdx === segments.length - 2) {\n const flowId = segments[flowsIdx + 1]!;\n const body = (await request.json()) as { enabled?: boolean };\n if (typeof body.enabled === \"boolean\") {\n await adapter.toggleFlowEnabled(flowId, body.enabled);\n }\n return Response.json({ id: flowId, ...body });\n }\n\n // PATCH .../webhook-handlers/:id\n if (\n webhookHandlersIdx !== -1 &&\n webhookHandlersIdx === segments.length - 2\n ) {\n const handlerId = segments[webhookHandlersIdx + 1]!;\n const body = (await request.json()) as { enabled?: boolean };\n if (typeof body.enabled === \"boolean\") {\n await adapter.toggleWebhookHandlerEnabled(handlerId, body.enabled);\n }\n return Response.json({ id: handlerId, ...body });\n }\n }\n\n if (request.method === \"PUT\") {\n // PUT .../mappings/:id\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 2) {\n const mappingId = segments[mappingsIdx + 1]!;\n const body = (await request.json()) as {\n resourceId: string;\n connectValue: string | string[];\n refs: Record<string, string>;\n metadata?: Record<string, unknown> | null;\n };\n try {\n const saved = await updateMapping(mappingId, body);\n return Response.json(saved);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid mapping payload\";\n return Response.json(\n { error: message },\n { status: message.includes(\"not found\") ? 404 : 400 },\n );\n }\n }\n }\n\n if (request.method === \"DELETE\") {\n if (cachesIdx !== -1 && cachesIdx === segments.length - 3) {\n const cacheName = decodeURIComponent(segments[cachesIdx + 1]!);\n const key = decodeURIComponent(segments[cachesIdx + 2]!);\n\n try {\n await createCacheInstance(cacheName).delete(key);\n return new Response(null, { status: 204 });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Invalid cache request\";\n return Response.json({ error: message }, { status: 400 });\n }\n }\n\n // DELETE .../variables/:plugName\n if (variablesIdx !== -1 && variablesIdx === segments.length - 2) {\n const plugName = segments[variablesIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n await clearVars(plugName);\n return new Response(null, { status: 204 });\n }\n\n // DELETE .../wires/:plugName\n if (wiresIdx !== -1 && wiresIdx === segments.length - 2) {\n const plugName = segments[wiresIdx + 1]!;\n if (!plugNames.has(plugName)) {\n return Response.json({ error: \"Plug not found\" }, { status: 404 });\n }\n const body = (await request.json()) as { wireId: string };\n if (!body.wireId) {\n return Response.json(\n { error: \"wireId is required\" },\n { status: 400 },\n );\n }\n try {\n await wire(plugName).delete(body.wireId);\n return new Response(null, { status: 204 });\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown error\";\n kd(\"wire\", `${plugName}: delete failed: ${message}`);\n return Response.json({ error: message }, { status: 500 });\n }\n }\n\n // DELETE .../mappings/:id\n if (mappingsIdx !== -1 && mappingsIdx === segments.length - 2) {\n const mappingId = segments[mappingsIdx + 1]!;\n const existing = await adapter.getMapping(mappingId);\n if (!existing) {\n return Response.json({ error: \"Mapping not found\" }, { status: 404 });\n }\n await adapter.deleteMapping(mappingId);\n return new Response(null, { status: 204 });\n }\n }\n\n return Response.json({ error: \"Not found\" }, { status: 404 });\n }\n\n const secret = config.secret ?? process.env[\"KHOTAN_SECRET\"] ?? \"\";\n\n async function resolvePlugId(plugName: string): Promise<string> {\n await init();\n const allPlugs = await adapter.listPlugs();\n const dbPlug = allPlugs.find((p) => p[\"name\"] === plugName);\n if (!dbPlug) {\n throw new Error(`Plug \"${plugName}\" not found in database`);\n }\n return dbPlug[\"id\"] as string;\n }\n\n function getDefaultVars(plugName: string): Record<string, string> {\n const defaults: Record<string, string> = {};\n for (const field of getVarFields(plugName)) {\n if (field.defaultValue !== undefined) {\n defaults[field.key] = field.defaultValue;\n }\n }\n return defaults;\n }\n\n async function getStoredVarsByPlugId(\n plugId: string,\n ): Promise<Record<string, string>> {\n if (!secret) {\n throw new Error(\"KHOTAN_SECRET is required for var operations\");\n }\n const encrypted = await adapter.getEncryptedVariables(plugId);\n if (!encrypted) return {};\n const json = await decryptVars(encrypted, secret);\n return JSON.parse(json) as Record<string, string>;\n }\n\n async function setVarsByPlugId(\n plugId: string,\n vars: Record<string, string>,\n ): Promise<void> {\n if (!secret) {\n throw new Error(\"KHOTAN_SECRET is required for var operations\");\n }\n const json = JSON.stringify(vars);\n const encrypted = await encryptVars(json, secret);\n await adapter.setEncryptedVariables(plugId, encrypted);\n }\n\n async function seedDefaultVarsForPlug(\n plugId: string,\n plugName: string,\n ): Promise<void> {\n const defaults = getDefaultVars(plugName);\n if (!secret || Object.keys(defaults).length === 0) {\n return;\n }\n\n const storedVars: Record<string, string> = await getStoredVarsByPlugId(\n plugId,\n ).catch(() => ({}));\n const seededVars = { ...defaults, ...storedVars };\n const hasChanges = Object.keys(seededVars).some(\n (key) => seededVars[key] !== storedVars[key],\n );\n\n if (hasChanges) {\n await setVarsByPlugId(plugId, seededVars);\n }\n }\n\n async function getVars(plugName: string): Promise<Record<string, string>> {\n const plugId = await resolvePlugId(plugName);\n const defaults = getDefaultVars(plugName);\n const stored = await getStoredVarsByPlugId(plugId);\n return { ...defaults, ...stored };\n }\n\n async function setVars(\n plugName: string,\n vars: Record<string, string>,\n ): Promise<void> {\n const plugId = await resolvePlugId(plugName);\n await setVarsByPlugId(plugId, vars);\n }\n\n async function clearVars(plugName: string): Promise<void> {\n const plugId = await resolvePlugId(plugName);\n await adapter.clearEncryptedVariables(plugId);\n }\n\n async function hasVars(plugName: string): Promise<boolean> {\n const plugId = await resolvePlugId(plugName);\n const encrypted = await adapter.getEncryptedVariables(plugId);\n return encrypted !== null && encrypted !== \"\";\n }\n\n function getVarFields(plugName: string): readonly VarField[] {\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n throw new Error(`Plug \"${plugName}\" not registered`);\n }\n return plugReg.vars ?? plugReg.plug.varFields ?? [];\n }\n\n function maskVars(\n plugName: string,\n vars: Record<string, string>,\n ): Record<string, string> {\n const fields = getVarFields(plugName);\n return Object.fromEntries(\n Object.entries(vars).map(([key, value]) => {\n const field = fields.find((f) => f.key === key);\n if (field?.secret) {\n return [key, value ? \"••••••••\" : \"\"];\n }\n return [key, value];\n }),\n );\n }\n\n function getPlug(plugName: string): PlugRegistration[\"plug\"] {\n const plugReg = plugs.find((p) => p.name === plugName);\n if (!plugReg) {\n throw new Error(`Plug \"${plugName}\" not registered`);\n }\n return plugReg.plug;\n }\n\n khotanRuntimeRegistry.set(instanceId, {\n cache: createCacheInstance,\n listMappings,\n lookupMapping,\n upsertMapping,\n updateMapping,\n deleteMapping,\n });\n\n return {\n handler,\n init,\n flow,\n wire,\n cache: createCacheInstance,\n listMappings,\n lookupMapping,\n upsertMapping,\n updateMapping,\n deleteMapping,\n getVars,\n setVars,\n clearVars,\n hasVars,\n getVarFields,\n getPlug,\n };\n}\n\n// ---------------------------------------------------------------------------\n// toNextJsHandler\n// ---------------------------------------------------------------------------\n\ninterface NextJsRequest extends Request {\n nextUrl?: URL;\n}\n\ninterface NextJsRouteHandlers {\n GET: (req: NextJsRequest) => Promise<Response>;\n POST: (req: NextJsRequest) => Promise<Response>;\n PUT: (req: NextJsRequest) => Promise<Response>;\n PATCH: (req: NextJsRequest) => Promise<Response>;\n DELETE: (req: NextJsRequest) => Promise<Response>;\n}\n\nexport function toNextJsHandler(\n factoryHandler: KhotanHandler,\n): NextJsRouteHandlers {\n function handle(req: NextJsRequest): Promise<Response> {\n return factoryHandler(req);\n }\n\n return {\n GET: handle,\n POST: handle,\n PUT: handle,\n PATCH: handle,\n DELETE: handle,\n };\n}\n"]}