{"version":3,"sources":["../src/storage/index.ts","../src/integration-orm.ts","../src/agent-runtime.ts","../src/routing/specificity.ts","../src/plugins/route-pattern.ts","../src/integration-api.ts","../src/utils/decode.ts","../src/request-context.ts","../src/server-http.ts","../src/integrations.ts"],"sourcesContent":["import { createStorage, prefixStorage, builtinDrivers, type BuiltinDriverName } from \"unstorage\";\nimport type { Driver, Storage, TransactionOptions } from \"unstorage\";\nimport type { Database } from \"db0\";\nimport memoryDriver from \"unstorage/drivers/memory\";\nimport type {\n  FarmStorageClient,\n  FarmStorageClientConfig,\n  FarmStorageConfigObject,\n  FarmStorageLocalDriverConfig,\n  FarmStorageDatabaseConfig,\n  FarmStorageDatabaseDriverMap,\n  FarmStorageDatabaseDriverName,\n  FarmStorageRuntimeClient,\n  FarmStorageMountConfig,\n  FarmStorageMounts,\n  FarmStorageUserConfig,\n} from \"./types\";\n\nexport type {\n  FarmStorageBuiltinDriverConfig,\n  FarmStorageClient,\n  FarmStorageClientConfig,\n  FarmStorageConfigObject,\n  FarmStorageCustomDriverConfig,\n  FarmStorageDatabaseConfig,\n  FarmStorageDatabaseDriverName,\n  FarmStorageLocalDriverConfig,\n  FarmStorageRuntimeClient,\n  FarmStorageMountConfig,\n  FarmStorageMounts,\n  FarmStorageUserConfig,\n} from \"./types\";\nexport type {\n  BuiltinDriverName,\n  BuiltinDriverOptions,\n  Driver,\n  Storage,\n  StorageMeta,\n  StorageValue,\n  TransactionOptions,\n} from \"unstorage\";\nexport type { ConnectorName, ConnectorOptions, Database } from \"db0\";\n\ntype DriverFactoryModule = {\n  default: (options?: Record<string, any>) => Driver;\n};\n\ntype DriverResolver = () => Driver | Promise<Driver>;\ntype ModuleLoader = <T = any>(specifier: string) => Promise<T>;\n\nconst loadModule: ModuleLoader = (specifier) => import(/* @vite-ignore */ specifier);\n\nconst DATABASE_CONNECTORS: {\n  [K in FarmStorageDatabaseDriverName]: {\n    connector: FarmStorageDatabaseDriverMap[K];\n    load: () => Promise<{ default: (options?: any) => any }>;\n  };\n} = {\n  sqlite: {\n    connector: \"node-sqlite\",\n    load: () => loadModule(\"db0/connectors/node-sqlite\"),\n  },\n  \"node-sqlite\": {\n    connector: \"node-sqlite\",\n    load: () => loadModule(\"db0/connectors/node-sqlite\"),\n  },\n  sqlite3: {\n    connector: \"sqlite3\",\n    load: () => loadModule(\"db0/connectors/sqlite3\"),\n  },\n  \"better-sqlite3\": {\n    connector: \"better-sqlite3\",\n    load: () => loadModule(\"db0/connectors/better-sqlite3\"),\n  },\n  postgres: {\n    connector: \"postgresql\",\n    load: () => loadModule(\"db0/connectors/postgresql\"),\n  },\n  postgresql: {\n    connector: \"postgresql\",\n    load: () => loadModule(\"db0/connectors/postgresql\"),\n  },\n  pg: {\n    connector: \"postgresql\",\n    load: () => loadModule(\"db0/connectors/postgresql\"),\n  },\n  mysql: {\n    connector: \"mysql2\",\n    load: () => loadModule(\"db0/connectors/mysql2\"),\n  },\n  mysql2: {\n    connector: \"mysql2\",\n    load: () => loadModule(\"db0/connectors/mysql2\"),\n  },\n  pglite: {\n    connector: \"pglite\",\n    load: () => loadModule(\"db0/connectors/pglite\"),\n  },\n  planetscale: {\n    connector: \"planetscale\",\n    load: () => loadModule(\"db0/connectors/planetscale\"),\n  },\n  libsql: {\n    connector: \"libsql\",\n    load: () => loadModule(\"db0/connectors/libsql/node\"),\n  },\n  \"libsql-node\": {\n    connector: \"libsql-node\",\n    load: () => loadModule(\"db0/connectors/libsql/node\"),\n  },\n  \"libsql-http\": {\n    connector: \"libsql-http\",\n    load: () => loadModule(\"db0/connectors/libsql/http\"),\n  },\n};\n\nfunction createMemoryStorage(): Storage {\n  return createStorage({\n    driver: memoryDriver(),\n  });\n}\n\nconst GLOBAL_STORAGE_KEY = Symbol.for(\"farmjs.storage.global\");\n\nfunction readGlobalStorage(): Storage | undefined {\n  return (globalThis as unknown as Record<PropertyKey, Storage | undefined>)[GLOBAL_STORAGE_KEY];\n}\n\nfunction writeGlobalStorage(storage: Storage): Storage {\n  (globalThis as unknown as Record<PropertyKey, Storage | undefined>)[GLOBAL_STORAGE_KEY] = storage;\n  return storage;\n}\n\nfunction getActiveGlobalStorage(): Storage {\n  const existing = readGlobalStorage();\n  if (existing) {\n    return existing;\n  }\n  return writeGlobalStorage(createMemoryStorage());\n}\n\nlet globalStorage = getActiveGlobalStorage();\n\nfunction normalizeMountKey(base?: string): string {\n  return (base || \"\")\n    .trim()\n    .replace(/^[:/\\\\]+|[:/\\\\]+$/g, \"\")\n    .replace(/[\\\\/]+/g, \":\");\n}\n\nfunction isDriverInstance(value: unknown): value is Driver {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as Driver).getItem === \"function\" &&\n    typeof (value as Driver).getKeys === \"function\"\n  );\n}\n\nfunction isStorageInstance(value: unknown): value is Storage {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as Storage).mount === \"function\" &&\n    typeof (value as Storage).getMount === \"function\"\n  );\n}\n\nfunction isStorageClient(value: unknown): value is FarmStorageClient {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (value as FarmStorageClient).kind === \"farm-storage-client\" &&\n    typeof (value as FarmStorageClient).resolveDriver === \"function\" &&\n    typeof (value as FarmStorageClient).createStorage === \"function\"\n  );\n}\n\nfunction isDatabaseDriverName(name: string): name is FarmStorageDatabaseDriverName {\n  return name in DATABASE_CONNECTORS;\n}\n\nfunction extractDriverOptions(config: FarmStorageClientConfig): Record<string, any> | undefined {\n  const source = config as Record<string, any>;\n  const {\n    client: _client,\n    driver: _driver,\n    mounts: _mounts,\n    options,\n    tableName: _tableName,\n    ...inlineOptions\n  } = source;\n  const hasInlineOptions = Object.keys(inlineOptions).length > 0;\n\n  if (options && typeof options === \"object\" && !Array.isArray(options)) {\n    return hasInlineOptions ? { ...inlineOptions, ...options } : options;\n  }\n\n  if (hasInlineOptions) {\n    return inlineOptions;\n  }\n\n  return options;\n}\n\nasync function loadBuiltinDriver(\n  name: BuiltinDriverName,\n  options?: Record<string, any>,\n): Promise<Driver> {\n  const modulePath = builtinDrivers[name];\n\n  if (!modulePath) {\n    throw new Error(`Unsupported storage driver \"${name}\".`);\n  }\n\n  const module = (await loadModule(modulePath)) as DriverFactoryModule;\n  return module.default(options);\n}\n\nasync function loadDatabaseDriver(config: FarmStorageDatabaseConfig): Promise<Driver> {\n  const connectorEntry = DATABASE_CONNECTORS[config.driver as FarmStorageDatabaseDriverName];\n  const [{ createDatabase }, connectorModule, db0DriverModule] = await Promise.all([\n    loadModule<typeof import(\"db0\")>(\"db0\"),\n    connectorEntry.load(),\n    loadModule<typeof import(\"unstorage/drivers/db0\")>(\"unstorage/drivers/db0\"),\n  ]);\n\n  const database = createDatabase(connectorModule.default(extractDriverOptions(config) || {}));\n  const driver = db0DriverModule.default({\n    database,\n    tableName: config.tableName,\n  });\n\n  // The db0 driver has no dispose, so this connection is Farm's to close. Databases\n  // handed to `databaseStorage` stay owned by the caller and are left open.\n  return {\n    ...driver,\n    async dispose() {\n      await driver.dispose?.();\n      await database.dispose();\n    },\n  };\n}\n\nasync function resolveDriver(config?: FarmStorageMountConfig): Promise<Driver> {\n  if (config && isStorageClient(config)) {\n    return config.resolveDriver();\n  }\n\n  const driverInput = config?.driver ?? \"memory\";\n\n  if (typeof driverInput === \"function\") {\n    return await driverInput();\n  }\n\n  if (isDriverInstance(driverInput)) {\n    return driverInput;\n  }\n\n  if (isDatabaseDriverName(driverInput)) {\n    return loadDatabaseDriver(config as FarmStorageDatabaseConfig);\n  }\n\n  if (driverInput === \"local\") {\n    return loadBuiltinDriver(\"fs-lite\", extractDriverOptions(config as FarmStorageMountConfig));\n  }\n\n  return loadBuiltinDriver(\n    driverInput as BuiltinDriverName,\n    extractDriverOptions(config as FarmStorageClientConfig),\n  );\n}\n\nfunction createStorageClientFromResolver(resolveDriver: DriverResolver): FarmStorageClient {\n  let driverPromise: Promise<Driver> | undefined;\n  let storagePromise: Promise<Storage> | undefined;\n\n  const ensureDriver = () => {\n    if (driverPromise) return driverPromise;\n\n    const pending = Promise.resolve().then(resolveDriver);\n    driverPromise = pending;\n    void pending.catch(() => {\n      if (driverPromise === pending) {\n        driverPromise = undefined;\n        storagePromise = undefined;\n      }\n    });\n    return pending;\n  };\n\n  const ensureStorage = () => {\n    if (storagePromise) return storagePromise;\n\n    const pending = ensureDriver().then((driver) =>\n      createStorage({\n        driver,\n      }),\n    );\n    storagePromise = pending;\n    void pending.catch(() => {\n      if (storagePromise === pending) storagePromise = undefined;\n    });\n    return pending;\n  };\n\n  const target = {\n    kind: \"farm-storage-client\" as const,\n    ready: ensureStorage,\n    createStorage: ensureStorage,\n    resolveDriver: ensureDriver,\n  };\n\n  return new Proxy(target as FarmStorageClient, {\n    get(currentTarget, prop, receiver) {\n      if (prop === \"then\") {\n        return undefined;\n      }\n\n      if (Reflect.has(currentTarget, prop)) {\n        return Reflect.get(currentTarget, prop, receiver);\n      }\n\n      return (...args: any[]) =>\n        ensureStorage().then(async (storage) => {\n          const member = Reflect.get(storage as object, prop);\n\n          if (typeof member !== \"function\") {\n            return member;\n          }\n\n          const result = Reflect.apply(member, storage, args);\n\n          if (prop === \"dispose\") {\n            return Promise.resolve(result).finally(() => {\n              // Disposing the storage also disposed the driver, so drop both\n              // cached promises: a later call must re-run the driver factory\n              // instead of rebuilding storage over the dead driver.\n              storagePromise = undefined;\n              driverPromise = undefined;\n            });\n          }\n\n          return result;\n        });\n    },\n  });\n}\n\nexport function defineStorageClient(resolveDriver: DriverResolver): FarmStorageClient {\n  return createStorageClientFromResolver(resolveDriver);\n}\n\nexport function createStorageClient(config: FarmStorageClientConfig): FarmStorageClient {\n  return defineStorageClient(() => resolveDriver(config));\n}\n\nexport function driverStorage(\n  driver: Driver | (() => Driver | Promise<Driver>),\n): FarmStorageClient {\n  return defineStorageClient(() => (typeof driver === \"function\" ? driver() : driver));\n}\n\nexport function databaseStorage(\n  database: Database,\n  options: { tableName?: string } = {},\n): FarmStorageClient {\n  return defineStorageClient(async () => {\n    const db0DriverModule =\n      await loadModule<typeof import(\"unstorage/drivers/db0\")>(\"unstorage/drivers/db0\");\n    return db0DriverModule.default({\n      database,\n      tableName: options.tableName,\n    });\n  });\n}\n\nexport function memoryStorage(): FarmStorageClient {\n  return createStorageClient({ driver: \"memory\" });\n}\n\nexport function localStorage(options: Omit<FarmStorageLocalDriverConfig, \"driver\"> = {}) {\n  return createStorageClient({\n    driver: \"local\",\n    ...options,\n  });\n}\n\nexport function sqliteStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"sqlite\",\n    ...options,\n  });\n}\n\nexport function mysqlStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"mysql\",\n    ...options,\n  });\n}\n\nexport function mysql2Storage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return mysqlStorage(options);\n}\n\nexport function postgresStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"postgres\",\n    ...options,\n  });\n}\n\nexport function pgStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return postgresStorage(options);\n}\n\nexport function pgliteStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"pglite\",\n    ...options,\n  });\n}\n\nexport function planetscaleStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"planetscale\",\n    ...options,\n  });\n}\n\nexport function libsqlStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"libsql\",\n    ...options,\n  });\n}\n\nexport function redisStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"redis\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"redis\",\n    ...options,\n  });\n}\n\nexport function s3Storage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"s3\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"s3\",\n    ...options,\n  });\n}\n\nexport function mongodbStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"mongodb\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"mongodb\",\n    ...options,\n  });\n}\n\nexport function upstashStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"upstash\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"upstash\",\n    ...options,\n  });\n}\n\nexport function netlifyBlobsStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"netlify-blobs\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"netlify-blobs\",\n    ...options,\n  });\n}\n\nexport function vercelKVStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"vercel-kv\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"vercel-kv\",\n    ...options,\n  });\n}\n\nexport function vercelBlobStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"vercel-blob\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"vercel-blob\",\n    ...options,\n  });\n}\n\nasync function mountNamespaces(storage: Storage, mounts?: FarmStorageMounts): Promise<void> {\n  if (!mounts) {\n    return;\n  }\n\n  for (const [base, config] of Object.entries(mounts)) {\n    storage.mount(normalizeMountKey(base), await resolveDriver(config));\n  }\n}\n\nexport async function createFarmStorage(config: FarmStorageUserConfig = {}): Promise<Storage> {\n  if (isStorageInstance(config)) {\n    return config;\n  }\n\n  if (isStorageClient(config)) {\n    return config.createStorage();\n  }\n\n  const rootConfig = isStorageClient(config.client) ? config.client : config;\n  const storage = createStorage({\n    driver: await resolveDriver(rootConfig),\n  });\n\n  try {\n    await mountNamespaces(storage, config.mounts);\n  } catch (error) {\n    await storage.dispose().catch(() => {});\n    throw error;\n  }\n  return storage;\n}\n\nexport async function resolveStorageRuntimeClient(\n  config: FarmStorageUserConfig | undefined,\n): Promise<unknown | undefined> {\n  if (!config || isStorageInstance(config) || isStorageClient(config)) {\n    return undefined;\n  }\n\n  const client = config.client;\n  if (!client || isStorageInstance(client) || isStorageClient(client)) {\n    return undefined;\n  }\n\n  return typeof client === \"function\" ? await client() : client;\n}\n\nexport async function initStorage(config: FarmStorageUserConfig = {}): Promise<Storage> {\n  globalStorage = getActiveGlobalStorage();\n  const nextStorage = await createFarmStorage(config);\n  const previousStorage = globalStorage;\n  globalStorage = writeGlobalStorage(nextStorage);\n\n  if (previousStorage !== nextStorage) {\n    await previousStorage.dispose().catch(() => {});\n  }\n\n  return globalStorage;\n}\n\nexport function getStorage(namespace?: string): Storage {\n  globalStorage = getActiveGlobalStorage();\n  const base = normalizeMountKey(namespace);\n  if (!base) {\n    return globalStorage;\n  }\n\n  const namespaced = prefixStorage(globalStorage, base);\n  // prefixStorage re-prefixes the key methods, but copies dispose/watch/getMount(s)\n  // straight from the parent, so on a namespaced view they operate on the whole\n  // global store: dispose() tears down every namespace, watch() sees (and leaks\n  // the raw keys of) every other namespace's writes, getMounts() lists them all.\n  // Scope those too, so a handle handed out as \"namespace X\" stays confined to X.\n  const store = globalStorage;\n  const prefix = `${base}:`;\n  const stripPrefix = (key: string) => (key.startsWith(prefix) ? key.slice(prefix.length) : key);\n  const viewUnwatchers = new Set<Awaited<ReturnType<Storage[\"watch\"]>>>();\n  const releaseViewWatchers = async () => {\n    const current = [...viewUnwatchers];\n    viewUnwatchers.clear();\n    await Promise.all(current.map((unwatch) => unwatch()));\n  };\n\n  return {\n    ...namespaced,\n    // Scope the wipe to the namespace instead of the whole storage, and keep\n    // the caller's base so `clear(\"sessions\")` cannot take unrelated keys with\n    // it. Dropping the argument silently widens a targeted clear into a\n    // namespace-wide delete.\n    async clear(base?: string, opts?: TransactionOptions) {\n      const keys = await namespaced.getKeys(base);\n      await Promise.all(keys.map((key) => namespaced.removeItem(key, opts)));\n    },\n    async watch(callback) {\n      const unwatch = await store.watch((event, key) => {\n        if (key.startsWith(prefix)) callback(event, stripPrefix(key));\n      });\n      viewUnwatchers.add(unwatch);\n      return async () => {\n        viewUnwatchers.delete(unwatch);\n        await unwatch();\n      };\n    },\n    async unwatch() {\n      await releaseViewWatchers();\n    },\n    async dispose() {\n      // A namespaced view shares the global store's lifecycle and owns no\n      // drivers, so disposing it must not tear down the global store (that is\n      // what disposeStorage is for). Release only this view's watchers.\n      await releaseViewWatchers();\n    },\n    getMount(key = \"\") {\n      return store.getMount(prefix + key);\n    },\n    getMounts(base = \"\", options) {\n      return store\n        .getMounts(prefix + base, options)\n        .map((mount) => ({ ...mount, base: stripPrefix(mount.base) }));\n    },\n  } as Storage;\n}\n\nexport async function disposeStorage(): Promise<void> {\n  globalStorage = getActiveGlobalStorage();\n  const previousStorage = globalStorage;\n  globalStorage = writeGlobalStorage(createMemoryStorage());\n  await previousStorage.dispose().catch(() => {});\n}\n","import type {\n  AnyFieldBuilder,\n  AnyModelDefinition,\n  FieldBuilder,\n  JsonValue,\n  ModelDefinition,\n  OrmClient,\n  SchemaDefinition,\n  SchemaModels,\n} from \"@farming-labs/orm\";\nimport type {\n  FarmIntegrationSchema,\n  FarmIntegrationSchemaField,\n  FarmIntegrationSchemaModel,\n} from \"./integrations\";\nimport { resolveStorageRuntimeClient } from \"./storage\";\nimport type { FarmStorageUserConfig } from \"./storage/types\";\nimport type { FarmConfig } from \"./types\";\n\ntype RuntimeClientFactory<TClient> = () => TClient | Promise<TClient>;\n\nexport type FarmIntegrationOrmSchema = SchemaDefinition<Record<string, AnyModelDefinition>>;\n\nexport type FarmIntegrationOrmClient<TSchema extends FarmIntegrationOrmSchema> = OrmClient<TSchema>;\n\ntype FarmIntegrationOrmFieldKind<TField extends FarmIntegrationSchemaField> = TField[\"type\"] extends\n  | \"id\"\n  | \"uuid\"\n  ? \"id\"\n  : TField[\"type\"] extends \"text\"\n    ? \"string\"\n    : TField[\"type\"] extends \"number\"\n      ? \"decimal\"\n      : Extract<TField[\"type\"], \"string\" | \"boolean\" | \"integer\" | \"datetime\" | \"json\" | \"enum\">;\n\ntype FarmIntegrationOrmFieldNullable<TField extends FarmIntegrationSchemaField> = TField extends {\n  nullable: true;\n}\n  ? true\n  : TField extends { required: false }\n    ? true\n    : false;\n\ntype FarmIntegrationOrmEnumValue<TField extends FarmIntegrationSchemaField> = TField extends {\n  values: readonly (infer TValue extends string)[];\n}\n  ? TValue\n  : string;\n\ntype FarmIntegrationOrmFieldValue<TField extends FarmIntegrationSchemaField> =\n  TField[\"type\"] extends \"id\" | \"uuid\" | \"string\" | \"text\"\n    ? string\n    : TField[\"type\"] extends \"boolean\"\n      ? boolean\n      : TField[\"type\"] extends \"integer\"\n        ? number\n        : TField[\"type\"] extends \"number\"\n          ? string\n          : TField[\"type\"] extends \"datetime\"\n            ? Date\n            : TField[\"type\"] extends \"json\"\n              ? JsonValue\n              : TField[\"type\"] extends \"enum\"\n                ? FarmIntegrationOrmEnumValue<TField>\n                : never;\n\nexport type InferFarmIntegrationOrmField<TField extends FarmIntegrationSchemaField> = FieldBuilder<\n  FarmIntegrationOrmFieldKind<TField>,\n  FarmIntegrationOrmFieldNullable<TField>,\n  FarmIntegrationOrmFieldValue<TField>\n>;\n\nexport type InferFarmIntegrationOrmFields<TModel extends FarmIntegrationSchemaModel> = {\n  [TFieldKey in keyof TModel[\"fields\"] & string]: InferFarmIntegrationOrmField<\n    Extract<TModel[\"fields\"][TFieldKey], FarmIntegrationSchemaField>\n  >;\n};\n\nexport type InferFarmIntegrationOrmSchema<TSchema extends FarmIntegrationSchema> =\n  SchemaDefinition<{\n    [TModelKey in keyof TSchema[\"models\"] & string]: ModelDefinition<\n      InferFarmIntegrationOrmFields<\n        Extract<TSchema[\"models\"][TModelKey], FarmIntegrationSchemaModel>\n      >,\n      {}\n    >;\n  }>;\n\nexport type InferFarmIntegrationOrmClient<TSchema extends FarmIntegrationSchema | undefined> =\n  TSchema extends FarmIntegrationSchema ? OrmClient<InferFarmIntegrationOrmSchema<TSchema>> : never;\n\nexport interface CreateIntegrationOrmOptions<\n  TClient = unknown,\n  TSchema extends FarmIntegrationSchema = FarmIntegrationSchema,\n> {\n  schema: TSchema;\n  config?: Pick<FarmConfig, \"storage\">;\n  storage?: FarmStorageUserConfig;\n  client?: TClient | RuntimeClientFactory<TClient>;\n}\n\nexport async function createIntegrationOrm<\n  TClient = unknown,\n  TSchema extends FarmIntegrationSchema = FarmIntegrationSchema,\n>(\n  options: CreateIntegrationOrmOptions<TClient, TSchema>,\n): Promise<InferFarmIntegrationOrmClient<TSchema>> {\n  const [schema, client] = await Promise.all([\n    farmIntegrationSchemaToOrmSchema(options.schema),\n    resolveIntegrationOrmRuntimeClient(options),\n  ]);\n\n  if (!client) {\n    throw new Error(\n      \"Schema-backed integration storage requires a runtime client at farm.config storage.client.\",\n    );\n  }\n\n  const { createOrmFromRuntime } = await import(\"@farming-labs/orm-runtime\");\n  return createOrmFromRuntime({\n    schema,\n    client,\n  }) as Promise<InferFarmIntegrationOrmClient<TSchema>>;\n}\n\nexport async function resolveIntegrationOrmRuntimeClient<TClient = unknown>(\n  options: Omit<CreateIntegrationOrmOptions<TClient>, \"schema\">,\n): Promise<TClient | unknown | undefined> {\n  if (options.client !== undefined) {\n    return typeof options.client === \"function\"\n      ? await (options.client as RuntimeClientFactory<TClient>)()\n      : options.client;\n  }\n\n  return resolveStorageRuntimeClient(options.storage ?? options.config?.storage);\n}\n\nexport async function farmIntegrationSchemaToOrmSchema(\n  schema: FarmIntegrationSchema,\n): Promise<FarmIntegrationOrmSchema> {\n  const orm = await import(\"@farming-labs/orm\");\n  const models: Record<string, AnyModelDefinition> = {};\n\n  for (const [modelKey, modelSchema] of Object.entries(schema.models)) {\n    models[modelKey] = orm.model({\n      table: modelSchema.name ?? modelKey,\n      fields: createOrmModelFields(orm, modelSchema),\n      constraints: createOrmModelConstraints(modelSchema),\n      description: modelSchema.description,\n    }) as AnyModelDefinition;\n  }\n\n  return orm.defineSchema(models) as FarmIntegrationOrmSchema;\n}\n\nfunction createOrmModelFields(\n  orm: typeof import(\"@farming-labs/orm\"),\n  modelSchema: FarmIntegrationSchemaModel,\n): Record<string, AnyFieldBuilder> {\n  return Object.fromEntries(\n    Object.entries(modelSchema.fields).map(([fieldKey, fieldSchema]) => [\n      fieldKey,\n      createOrmField(orm, fieldKey, fieldSchema),\n    ]),\n  );\n}\n\nfunction createOrmField(\n  orm: typeof import(\"@farming-labs/orm\"),\n  fieldKey: string,\n  field: FarmIntegrationSchemaField,\n): AnyFieldBuilder {\n  let builder = createOrmFieldBuilder(orm, fieldKey, field) as AnyFieldBuilder;\n\n  if (field.unique) {\n    builder = builder.unique();\n  }\n\n  if (field.nullable || field.required === false) {\n    builder = builder.nullable();\n  }\n\n  if (field.default !== undefined) {\n    builder =\n      field.type === \"datetime\" && field.default === \"now\"\n        ? builder.defaultNow()\n        : builder.default(field.default as never);\n  }\n\n  if (field.reference) {\n    builder = builder.references(`${field.reference.model}.${field.reference.field}`);\n  }\n\n  if (field.name && field.name !== fieldKey) {\n    builder = builder.map(field.name);\n  }\n\n  if (field.description) {\n    builder = builder.describe(field.description);\n  }\n\n  return builder;\n}\n\nfunction createOrmFieldBuilder(\n  orm: typeof import(\"@farming-labs/orm\"),\n  fieldKey: string,\n  field: FarmIntegrationSchemaField,\n): AnyFieldBuilder {\n  switch (field.type) {\n    case \"id\":\n    case \"uuid\":\n      return orm.id();\n    case \"string\":\n    case \"text\":\n      return orm.string();\n    case \"boolean\":\n      return orm.boolean();\n    case \"integer\":\n      return orm.integer();\n    case \"number\":\n      return orm.decimal();\n    case \"datetime\":\n      return orm.datetime();\n    case \"json\":\n      return orm.json();\n    case \"enum\": {\n      if (!field.values?.length) {\n        throw new Error(`Integration schema enum field \"${fieldKey}\" must define values.`);\n      }\n\n      return orm.enumeration(field.values as readonly [string, ...string[]]);\n    }\n    default:\n      throw new Error(\n        `Unsupported integration schema field type \"${field.type}\" for \"${fieldKey}\".`,\n      );\n  }\n}\n\nfunction createOrmModelConstraints(modelSchema: FarmIntegrationSchemaModel) {\n  const unique: Array<readonly [string, ...string[]]> = [];\n  const indexes: Array<readonly [string, ...string[]]> = [];\n\n  for (const constraint of modelSchema.constraints ?? []) {\n    if (!constraint.fields.length) {\n      continue;\n    }\n\n    const fields = constraint.fields as readonly [string, ...string[]];\n    if (constraint.type === \"unique\") {\n      unique.push(fields);\n    } else {\n      indexes.push(fields);\n    }\n  }\n\n  return {\n    unique,\n    indexes,\n  };\n}\n\nexport type IntegrationOrmModelNames<TSchema extends FarmIntegrationOrmSchema> =\n  keyof SchemaModels<TSchema> & string;\n","import { spawn, type ChildProcess } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { createServer as createNetServer } from \"node:net\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { defineIntegration, type FarmIntegration } from \"./integrations\";\nimport type { BundleResultPayload, FarmPlugin } from \"./plugin\";\n\nconst AGENT_RUNTIME_METHODS = [\n  \"GET\",\n  \"HEAD\",\n  \"QUERY\",\n  \"POST\",\n  \"PUT\",\n  \"PATCH\",\n  \"DELETE\",\n  \"OPTIONS\",\n] as const;\n\nconst HOP_BY_HOP_HEADERS = [\n  \"connection\",\n  \"keep-alive\",\n  \"proxy-authenticate\",\n  \"proxy-authorization\",\n  \"te\",\n  \"trailer\",\n  \"transfer-encoding\",\n  \"upgrade\",\n] as const;\n\nconst DECODED_CONTENT_CODINGS: readonly string[] = [\"gzip\", \"x-gzip\", \"deflate\", \"br\"];\n\nconst ZSTD_FRAME_MAGIC = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd]);\n\nexport interface FarmAgentRuntimeInstance {\n  readonly provider: string;\n  readonly routePrefix: string;\n  readonly routePrefixes: readonly string[];\n  getOrigin(): string | undefined;\n}\n\nexport interface FarmManagedAgentRuntime {\n  readonly origin: string;\n  readonly process?: ChildProcess;\n  stop(): Promise<void>;\n}\n\nexport interface FarmAgentRuntimeStartContext {\n  readonly root: string;\n  readonly log: {\n    info(message: string, meta?: Record<string, unknown>): void;\n    warn(message: string, meta?: Record<string, unknown>): void;\n    error(message: string, meta?: Record<string, unknown>): void;\n  };\n}\n\nexport interface FarmAgentRuntimeBuildContext extends BundleResultPayload {\n  readonly provider: string;\n  readonly routePrefix: string;\n  readonly routePrefixes: readonly string[];\n}\n\nexport interface FarmAgentRuntimeIntegrationOptions {\n  provider: string;\n  routePrefix: string;\n  /** Whether Farm's production server must dispatch this runtime's proxy routes. */\n  serverRuntime?: boolean;\n  additionalRoutePrefixes?: readonly string[];\n  origin?: string;\n  originEnv?: string | readonly string[];\n  webSockets?: boolean;\n  startDev?(context: FarmAgentRuntimeStartContext): Promise<FarmManagedAgentRuntime>;\n  afterBuild?(context: FarmAgentRuntimeBuildContext): Promise<void> | void;\n  plugins?: readonly FarmPlugin[];\n  instance?: Record<string, unknown>;\n}\n\nexport interface FarmManagedProcessOptions {\n  command: string;\n  args?: readonly string[];\n  cwd: string;\n  env?: Record<string, string | undefined>;\n  label: string;\n  origin?: string;\n  resolveOrigin?(output: string): string | undefined;\n  healthPath?: string;\n  timeoutMs?: number;\n  stopTimeoutMs?: number;\n  onOutput?(line: string, stream: \"stdout\" | \"stderr\"): void;\n}\n\nexport interface FarmAgentProxyOptions {\n  fetch?: typeof globalThis.fetch;\n}\n\ninterface RuntimeState {\n  origin?: string;\n  managed?: FarmManagedAgentRuntime;\n}\n\nexport function createAgentRuntimeIntegration(\n  options: FarmAgentRuntimeIntegrationOptions,\n): FarmIntegration {\n  const provider = normalizeProviderName(options.provider);\n  const routePrefix = normalizeAgentRoutePrefix(options.routePrefix);\n  const routePrefixes = [\n    routePrefix,\n    ...(options.additionalRoutePrefixes || []).map(normalizeAgentRoutePrefix),\n  ].filter((prefix, index, values) => values.indexOf(prefix) === index);\n  const originEnv = normalizeOriginEnv(options.originEnv);\n  const state: RuntimeState = {\n    origin: resolveConfiguredOrigin(options.origin, originEnv),\n  };\n\n  const runtimeInstance: FarmAgentRuntimeInstance & Record<string, unknown> = {\n    ...options.instance,\n    provider,\n    routePrefix,\n    routePrefixes,\n    getOrigin: () => state.origin ?? resolveConfiguredOrigin(options.origin, originEnv),\n  };\n\n  const runtimePlugin: FarmPlugin = {\n    name: `farm:agent-runtime:${provider}`,\n    config(config, context) {\n      if (!context.isDev) {\n        return config;\n      }\n\n      const origin = runtimeInstance.getOrigin();\n      if (!origin) {\n        return config;\n      }\n\n      for (const prefix of routePrefixes) {\n        applyAgentRuntimeViteProxy(config, {\n          origin,\n          routePrefix: prefix,\n          webSockets: options.webSockets,\n        });\n      }\n      return config;\n    },\n    async afterBundle(result) {\n      if (!result.success || !options.afterBuild) {\n        return;\n      }\n\n      await options.afterBuild({\n        ...result,\n        provider,\n        routePrefix,\n        routePrefixes,\n      });\n    },\n  };\n\n  return defineIntegration({\n    category: \"agent\",\n    type: provider,\n    serverRuntime: options.serverRuntime,\n    instance: runtimeInstance,\n    async setup(context) {\n      if (!context.isDev || state.origin || !options.startDev) {\n        return;\n      }\n\n      state.managed = await options.startDev({\n        root: context.appConfig.root || process.cwd(),\n        log: context.log,\n      });\n      state.origin = normalizeAgentOrigin(state.managed.origin);\n      context.log.info(`${provider} runtime ready`, {\n        origin: state.origin,\n      });\n      await context.cleanup(async () => {\n        await state.managed?.stop();\n        state.managed = undefined;\n        state.origin = undefined;\n      });\n    },\n    routes: routePrefixes.map((prefix) => ({\n      path: `${prefix}/[...farmAgentRuntimePath]`,\n      methods: AGENT_RUNTIME_METHODS,\n      rawBody: true,\n      async handler(request) {\n        const origin = runtimeInstance.getOrigin();\n        if (!origin) {\n          return Response.json(\n            {\n              error: \"Agent runtime unavailable\",\n              provider,\n            },\n            { status: 503 },\n          );\n        }\n\n        return proxyAgentRuntimeRequest(request, origin);\n      },\n    })),\n    plugins: [runtimePlugin, ...(options.plugins || [])],\n  });\n}\n\nexport function applyAgentRuntimeViteProxy(\n  config: { vite?: Record<string, any> },\n  input: {\n    origin: string;\n    routePrefix: string;\n    webSockets?: boolean;\n  },\n): void {\n  const origin = normalizeAgentOrigin(input.origin);\n  const routePrefix = normalizeAgentRoutePrefix(input.routePrefix);\n  const vite = config.vite || {};\n  const server = vite.server || {};\n  const proxy = server.proxy || {};\n\n  if (proxy[routePrefix]) {\n    throw new Error(\n      `Farm agent runtime cannot own ${routePrefix} because vite.server.proxy already defines it.`,\n    );\n  }\n\n  config.vite = {\n    ...vite,\n    server: {\n      ...server,\n      proxy: {\n        ...proxy,\n        [routePrefix]: {\n          target: origin,\n          changeOrigin: true,\n          ws: input.webSockets === true,\n        },\n      },\n    },\n  };\n}\n\nexport async function proxyAgentRuntimeRequest(\n  request: Request,\n  origin: string,\n  options: FarmAgentProxyOptions = {},\n): Promise<Response> {\n  const upstreamOrigin = normalizeAgentOrigin(origin);\n  const incomingUrl = new URL(request.url);\n  const targetUrl = new URL(`${incomingUrl.pathname}${incomingUrl.search}`, upstreamOrigin);\n  const headers = createProxyRequestHeaders(request.headers, incomingUrl);\n  const method = request.method.toUpperCase();\n  const init: RequestInit & { duplex?: \"half\" } = {\n    method,\n    headers,\n    redirect: \"manual\",\n    signal: request.signal,\n  };\n\n  if (method !== \"GET\" && method !== \"HEAD\" && request.body) {\n    init.body = request.body;\n    init.duplex = \"half\";\n  }\n\n  try {\n    const upstream = await (options.fetch || globalThis.fetch)(targetUrl, init);\n    const responseHeaders = new Headers(upstream.headers);\n    removeHopByHopHeaders(responseHeaders);\n    // Fetch decodes supported content codings before exposing the body while\n    // retaining the upstream metadata, so forwarding those headers would make the\n    // client decode an already-decoded stream and trust a stale byte length.\n    // gzip/x-gzip/deflate/br are decoded by every supported Node, so the headers\n    // are stripped unconditionally. zstd is only decoded by undici >=7.11\n    // (Node >=24.4); on older runtimes the body stays a raw zstd frame and the\n    // headers are truthful, so the strip decision is derived from whether this\n    // fetch actually decoded by peeking the zstd frame magic.\n    const contentCodings = responseHeaders\n      .get(\"content-encoding\")\n      ?.toLowerCase()\n      .split(\",\")\n      .map((coding) => coding.trim())\n      .filter(Boolean);\n    let responseBody: ReadableStream<Uint8Array> | null = upstream.body;\n    if (upstream.body && contentCodings && contentCodings.length) {\n      if (contentCodings.every((coding) => DECODED_CONTENT_CODINGS.includes(coding))) {\n        responseHeaders.delete(\"content-encoding\");\n        responseHeaders.delete(\"content-length\");\n      } else if (\n        contentCodings.includes(\"zstd\") &&\n        contentCodings.every(\n          (coding) => DECODED_CONTENT_CODINGS.includes(coding) || coding === \"zstd\",\n        )\n      ) {\n        const { decoded, body } = await detectZstdDecoding(upstream.body);\n        responseBody = body;\n        if (decoded) {\n          responseHeaders.delete(\"content-encoding\");\n          responseHeaders.delete(\"content-length\");\n        }\n      }\n    }\n    rewriteProxyLocation(responseHeaders, upstreamOrigin, incomingUrl.origin);\n\n    return new Response(responseBody, {\n      status: upstream.status,\n      statusText: upstream.statusText,\n      headers: responseHeaders,\n    });\n  } catch (error) {\n    if (request.signal.aborted || isAbortError(error)) {\n      throw error;\n    }\n\n    return Response.json(\n      {\n        error: \"Agent runtime request failed\",\n      },\n      { status: 502 },\n    );\n  }\n}\n\nexport async function startManagedAgentRuntime(\n  options: FarmManagedProcessOptions,\n): Promise<FarmManagedAgentRuntime> {\n  const timeoutMs = options.timeoutMs ?? 30_000;\n  const stopTimeoutMs = options.stopTimeoutMs ?? 2_000;\n  const fixedOrigin = options.origin ? normalizeAgentOrigin(options.origin) : undefined;\n  let output = \"\";\n  let settled = false;\n  let checkingReadiness = false;\n\n  const child = spawn(options.command, [...(options.args || [])], {\n    cwd: options.cwd,\n    env: {\n      ...process.env,\n      ...options.env,\n    },\n    stdio: [\"ignore\", \"pipe\", \"pipe\"],\n  });\n\n  const origin = await new Promise<string>((resolveOrigin, reject) => {\n    let timer: ReturnType<typeof setTimeout>;\n\n    const finish = () => {\n      if (settled) return;\n      settled = true;\n      clearTimeout(timer);\n      child.off(\"error\", onError);\n      child.off(\"exit\", onExit);\n    };\n\n    const succeed = async (candidate: string) => {\n      if (settled || checkingReadiness) return;\n      checkingReadiness = true;\n      try {\n        const normalized = normalizeAgentOrigin(candidate);\n        await waitForAgentRuntime(normalized, options.healthPath, timeoutMs, child);\n        finish();\n        resolveOrigin(normalized);\n      } catch (error) {\n        finish();\n        terminateChild(child);\n        reject(error);\n      }\n    };\n\n    timer = setTimeout(() => {\n      finish();\n      terminateChild(child);\n      reject(new Error(`${options.label} did not become ready within ${timeoutMs}ms.`));\n    }, timeoutMs);\n\n    const onError = (error: Error) => {\n      finish();\n      reject(error);\n    };\n\n    const onExit = (code: number | null, signal: NodeJS.Signals | null) => {\n      finish();\n      reject(\n        new Error(\n          `${options.label} exited before it was ready (code ${String(code)}, signal ${String(signal)}).`,\n        ),\n      );\n    };\n\n    const onData = (chunk: Buffer, stream: \"stdout\" | \"stderr\") => {\n      const text = chunk.toString(\"utf8\");\n      output = `${output}${text}`.slice(-16_384);\n      emitProcessOutput(text, stream, options.onOutput);\n\n      if (!fixedOrigin && options.resolveOrigin) {\n        const candidate = options.resolveOrigin(output);\n        if (candidate) {\n          void succeed(candidate);\n        }\n      }\n    };\n\n    child.once(\"error\", onError);\n    child.once(\"exit\", onExit);\n    child.stdout?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stdout\"));\n    child.stderr?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stderr\"));\n\n    if (fixedOrigin) {\n      void succeed(fixedOrigin);\n    }\n  });\n\n  return {\n    origin,\n    process: child,\n    async stop() {\n      if (child.exitCode !== null || child.signalCode !== null) {\n        return;\n      }\n\n      child.kill(\"SIGTERM\");\n      const exited = await waitForChildExit(child, stopTimeoutMs);\n      if (!exited && child.exitCode === null && child.signalCode === null) {\n        child.kill(\"SIGKILL\");\n        await waitForChildExit(child, stopTimeoutMs);\n      }\n    },\n  };\n}\n\nexport async function findAvailableAgentRuntimePort(host = \"127.0.0.1\"): Promise<number> {\n  return await new Promise<number>((resolvePort, reject) => {\n    const server = createNetServer();\n    server.unref();\n    server.once(\"error\", reject);\n    server.listen(0, host, () => {\n      const address = server.address();\n      if (!address || typeof address === \"string\") {\n        server.close();\n        reject(new Error(\"Unable to allocate an agent runtime port.\"));\n        return;\n      }\n\n      const port = address.port;\n      server.close((error) => {\n        if (error) reject(error);\n        else resolvePort(port);\n      });\n    });\n  });\n}\n\nexport async function resolveProjectPackageBin(\n  projectRoot: string,\n  packageName: string,\n  binName?: string,\n): Promise<string> {\n  const root = resolve(projectRoot);\n  const projectRequire = createRequire(join(root, \"package.json\"));\n  let packageJsonPath: string;\n\n  try {\n    packageJsonPath = projectRequire.resolve(`${packageName}/package.json`);\n  } catch {\n    throw new Error(\n      `${packageName} is required by this agent integration. Install it in ${root} and try again.`,\n    );\n  }\n\n  const packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\")) as {\n    bin?: string | Record<string, string>;\n  };\n  const bin =\n    typeof packageJson.bin === \"string\"\n      ? packageJson.bin\n      : packageJson.bin?.[binName || packageName.split(\"/\").at(-1) || packageName];\n\n  if (!bin) {\n    throw new Error(\n      `${packageName} does not expose the expected ${binName || packageName} binary.`,\n    );\n  }\n\n  const packageRoot = dirname(packageJsonPath);\n  const binaryPath = resolve(packageRoot, bin);\n  if (\n    relative(packageRoot, binaryPath).startsWith(\"..\") ||\n    isAbsolute(relative(packageRoot, binaryPath))\n  ) {\n    throw new Error(`${packageName} exposes a binary outside its package root.`);\n  }\n\n  return binaryPath;\n}\n\nexport function normalizeAgentOrigin(value: string): string {\n  const input = value.trim();\n  if (!input) {\n    throw new Error(\"Agent runtime origin cannot be empty.\");\n  }\n\n  const url = new URL(input);\n  if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n    throw new Error(\"Agent runtime origin must use http or https.\");\n  }\n  if (url.username || url.password) {\n    throw new Error(\"Agent runtime origin cannot contain credentials.\");\n  }\n  if (url.pathname !== \"/\" || url.search || url.hash) {\n    throw new Error(\"Agent runtime origin must not contain a path, query, or hash.\");\n  }\n\n  return url.origin;\n}\n\nexport function normalizeAgentRoutePrefix(value: string): string {\n  const normalized = `/${value.trim()}`.replace(/\\/{2,}/g, \"/\");\n  if (normalized === \"/\") {\n    throw new Error(\"Agent runtime route prefix cannot own the application root.\");\n  }\n  return normalized.replace(/\\/$/, \"\");\n}\n\nfunction normalizeProviderName(value: string): string {\n  const provider = value.trim();\n  if (!provider || !/^[a-z0-9][a-z0-9._-]*$/i.test(provider)) {\n    throw new Error(\"Agent runtime provider must be a non-empty package-style name.\");\n  }\n  return provider;\n}\n\nfunction normalizeOriginEnv(value: string | readonly string[] | undefined): readonly string[] {\n  if (!value) return [];\n  return (Array.isArray(value) ? value : [value]).map((entry) => entry.trim()).filter(Boolean);\n}\n\nfunction resolveConfiguredOrigin(\n  configuredOrigin: string | undefined,\n  envNames: readonly string[],\n): string | undefined {\n  if (configuredOrigin) {\n    return normalizeAgentOrigin(configuredOrigin);\n  }\n\n  for (const envName of envNames) {\n    const value = process.env[envName];\n    if (value?.trim()) {\n      return normalizeAgentOrigin(value);\n    }\n  }\n\n  return undefined;\n}\n\nfunction createProxyRequestHeaders(input: Headers, incomingUrl: URL): Headers {\n  const headers = new Headers(input);\n  removeHopByHopHeaders(headers);\n  headers.delete(\"host\");\n  headers.delete(\"content-length\");\n  // Node fetch supplies its own compression preference when this header is\n  // absent, then exposes a decoded body with the original encoding headers.\n  headers.set(\"accept-encoding\", \"identity\");\n  if (!headers.has(\"x-forwarded-host\")) headers.set(\"x-forwarded-host\", incomingUrl.host);\n  if (!headers.has(\"x-forwarded-proto\")) {\n    headers.set(\"x-forwarded-proto\", incomingUrl.protocol.replace(\":\", \"\"));\n  }\n  return headers;\n}\n\nfunction removeHopByHopHeaders(headers: Headers): void {\n  const connectionOptions = headers.get(\"connection\")?.split(\",\") ?? [];\n  for (const option of connectionOptions) {\n    const header = option.trim();\n    if (/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(header)) {\n      headers.delete(header);\n    }\n  }\n\n  for (const header of HOP_BY_HOP_HEADERS) {\n    headers.delete(header);\n  }\n}\n\nasync function detectZstdDecoding(body: ReadableStream<Uint8Array>): Promise<{\n  decoded: boolean;\n  body: ReadableStream<Uint8Array>;\n}> {\n  const reader = body.getReader();\n  const consumed: Uint8Array[] = [];\n  let total = 0;\n  try {\n    while (total < ZSTD_FRAME_MAGIC.byteLength) {\n      const { value, done } = await reader.read();\n      if (done) break;\n      if (!value || value.byteLength === 0) continue;\n      consumed.push(value);\n      total += value.byteLength;\n    }\n  } catch {\n    // The upstream read failure is surfaced through the rebuilt body below;\n    // fall back to stripping the stale framing rather than forwarding it.\n  }\n  const lookahead = concatUint8(consumed);\n  const decoded = !startsWithZstdFrameMagic(lookahead);\n  const rebuilt = new ReadableStream<Uint8Array>({\n    start(controller) {\n      if (lookahead.byteLength > 0) controller.enqueue(lookahead);\n    },\n    async pull(controller) {\n      try {\n        const { value, done } = await reader.read();\n        if (done) {\n          controller.close();\n          return;\n        }\n        controller.enqueue(value ?? new Uint8Array());\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    cancel(reason) {\n      reader.cancel(reason).catch(() => {});\n    },\n  });\n  return { decoded, body: rebuilt };\n}\n\nfunction concatUint8(chunks: Uint8Array[]): Uint8Array {\n  if (chunks.length === 0) return new Uint8Array(0);\n  if (chunks.length === 1) return chunks[0];\n  const total = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n  const merged = new Uint8Array(total);\n  let offset = 0;\n  for (const chunk of chunks) {\n    merged.set(chunk, offset);\n    offset += chunk.byteLength;\n  }\n  return merged;\n}\n\nfunction startsWithZstdFrameMagic(buffer: Uint8Array): boolean {\n  if (buffer.byteLength < ZSTD_FRAME_MAGIC.byteLength) return false;\n  let isStandardFrame = true;\n  for (let index = 0; index < ZSTD_FRAME_MAGIC.byteLength; index++) {\n    if (buffer[index] !== ZSTD_FRAME_MAGIC[index]) {\n      isStandardFrame = false;\n      break;\n    }\n  }\n  if (isStandardFrame) return true;\n\n  // RFC 8878 permits a zstd stream to begin with one or more skippable\n  // frames. Their little-endian magic range is 0x184D2A50-0x184D2A5F, so\n  // only the low byte varies. Treating those frames as decoded plaintext\n  // would strip truthful Content-Encoding metadata on Node versions whose\n  // fetch implementation does not decode zstd.\n  return (\n    buffer[0] >= 0x50 &&\n    buffer[0] <= 0x5f &&\n    buffer[1] === 0x2a &&\n    buffer[2] === 0x4d &&\n    buffer[3] === 0x18\n  );\n}\n\nfunction rewriteProxyLocation(\n  headers: Headers,\n  upstreamOrigin: string,\n  incomingOrigin: string,\n): void {\n  const location = headers.get(\"location\");\n  if (!location) return;\n\n  try {\n    const url = new URL(location, upstreamOrigin);\n    if (url.origin === upstreamOrigin) {\n      headers.set(\"location\", `${incomingOrigin}${url.pathname}${url.search}${url.hash}`);\n    }\n  } catch {\n    // Preserve non-URL Location values exactly as returned by the runtime.\n  }\n}\n\nfunction isAbortError(error: unknown): boolean {\n  return error instanceof Error && error.name === \"AbortError\";\n}\n\nasync function waitForAgentRuntime(\n  origin: string,\n  healthPath: string | undefined,\n  timeoutMs: number,\n  child: ChildProcess,\n): Promise<void> {\n  const deadline = Date.now() + timeoutMs;\n  const healthUrl = new URL(healthPath || \"/\", origin);\n\n  while (Date.now() < deadline) {\n    if (child.exitCode !== null || child.signalCode !== null) {\n      throw new Error(\"Agent runtime exited while Farm was waiting for it to become ready.\");\n    }\n\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), 750);\n    try {\n      await fetch(healthUrl, {\n        signal: controller.signal,\n        redirect: \"manual\",\n      });\n      return;\n    } catch {\n      await delay(100);\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n\n  throw new Error(`Agent runtime at ${origin} did not answer before the startup timeout.`);\n}\n\nfunction emitProcessOutput(\n  text: string,\n  stream: \"stdout\" | \"stderr\",\n  onOutput: FarmManagedProcessOptions[\"onOutput\"],\n): void {\n  if (!onOutput) return;\n  for (const line of text.split(/\\r?\\n/)) {\n    const value = line.trimEnd();\n    if (value) onOutput(value, stream);\n  }\n}\n\nfunction terminateChild(child: ChildProcess): void {\n  if (child.exitCode === null && child.signalCode === null) {\n    child.kill(\"SIGTERM\");\n  }\n}\n\nasync function waitForChildExit(child: ChildProcess, timeoutMs: number): Promise<boolean> {\n  if (child.exitCode !== null || child.signalCode !== null) return true;\n  return await new Promise<boolean>((resolveExit) => {\n    const timer = setTimeout(() => {\n      child.off(\"exit\", onExit);\n      resolveExit(false);\n    }, timeoutMs);\n    const onExit = () => {\n      clearTimeout(timer);\n      resolveExit(true);\n    };\n    child.once(\"exit\", onExit);\n  });\n}\n\nfunction delay(ms: number): Promise<void> {\n  return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n","export type RouteSegmentSpecificity = \"static\" | \"dynamic\" | \"catch-all\" | \"optional-catch-all\";\n\nexport class AmbiguousRouteError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AmbiguousRouteError\";\n  }\n}\n\nexport class NonTerminalCatchAllRouteError extends TypeError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"NonTerminalCatchAllRouteError\";\n  }\n}\n\nexport class DuplicateRouteParameterError extends AmbiguousRouteError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"DuplicateRouteParameterError\";\n  }\n}\n\nexport class ReservedRouteParameterError extends AmbiguousRouteError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"ReservedRouteParameterError\";\n  }\n}\n\nexport class BrowserUnstableRouteError extends TypeError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"BrowserUnstableRouteError\";\n  }\n}\n\nconst SEGMENT_RANK: Record<RouteSegmentSpecificity, number> = {\n  static: 4,\n  dynamic: 3,\n  \"catch-all\": 1,\n  \"optional-catch-all\": 0,\n};\n\n// Ending a route is more specific than consuming the same path through a\n// catch-all, while a following static or dynamic segment remains more specific.\nconst ROUTE_END_RANK = 2;\n\n/** Sort route patterns from the most specific segment sequence to the least specific. */\nexport function compareRouteSpecificity(\n  left: readonly RouteSegmentSpecificity[],\n  right: readonly RouteSegmentSpecificity[],\n): number {\n  const length = Math.max(left.length, right.length);\n\n  for (let index = 0; index < length; index++) {\n    const leftRank = index < left.length ? SEGMENT_RANK[left[index]!] : ROUTE_END_RANK;\n    const rightRank = index < right.length ? SEGMENT_RANK[right[index]!] : ROUTE_END_RANK;\n    if (leftRank !== rightRank) return rightRank - leftRank;\n  }\n\n  return 0;\n}\n\nexport type RoutePatternSyntax = \"page\" | \"router\" | \"api\";\n\nconst ROUTER_PARAMETER_NAME = \"[A-Za-z0-9_$-]+\";\nconst PAGE_PARAMETER_PATTERN = /^(?:\\[\\[\\.\\.\\.(.+)\\]\\]|\\[\\.\\.\\.(.+)\\]|\\[(.+)\\])$/;\nconst ROUTER_PARAMETER_PATTERN =\n  /^(?:\\[\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]\\]|\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]|\\[([A-Za-z0-9_$-]+)\\]|:([A-Za-z0-9_$-]+)|\\*([A-Za-z0-9_$-]+)\\??)$/;\nconst RESERVED_PARAMETER_NAMES = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function assertBrowserStableRoutePath(pattern: string): void {\n  if (pattern.includes(\"\\\\\") || hasControlCharacter(pattern)) {\n    throw new BrowserUnstableRouteError(\n      `Route path \"${pattern}\" cannot contain backslashes or control characters.`,\n    );\n  }\n\n  for (const segment of pattern.split(\"/\").filter(Boolean)) {\n    if (\n      (segment.startsWith(\"(\") && segment.endsWith(\")\")) ||\n      (segment.startsWith(\"[\") && segment.endsWith(\"]\"))\n    ) {\n      continue;\n    }\n\n    let decoded = segment;\n    try {\n      decoded = decodeURIComponent(segment);\n    } catch {\n      // Malformed escapes stay literal in browser pathnames.\n    }\n    if (\n      decoded === \".\" ||\n      decoded === \"..\" ||\n      decoded.includes(\"/\") ||\n      decoded.includes(\"\\\\\") ||\n      hasControlCharacter(decoded)\n    ) {\n      throw new BrowserUnstableRouteError(\n        `Route path \"${pattern}\" contains browser-unstable segment \"${segment}\".`,\n      );\n    }\n  }\n}\n\nfunction hasControlCharacter(value: string): boolean {\n  return Array.from(value).some((character) => {\n    const code = character.charCodeAt(0);\n    return code <= 31 || (code >= 127 && code <= 159);\n  });\n}\n\nexport function assertUniqueRouteParameters(\n  pattern: string,\n  syntax: RoutePatternSyntax = \"page\",\n): void {\n  const parameterPattern = syntax === \"router\" ? ROUTER_PARAMETER_PATTERN : PAGE_PARAMETER_PATTERN;\n  const names = new Set<string>();\n\n  for (const segment of splitRoutePattern(pattern, syntax)) {\n    const match = parameterPattern.exec(segment);\n    const name = match?.slice(1).find(Boolean);\n    if (!name) continue;\n    if (RESERVED_PARAMETER_NAMES.has(name)) {\n      throw new ReservedRouteParameterError(\n        `Route parameter \"${name}\" in route \"${pattern}\" is reserved. Use a different parameter name.`,\n      );\n    }\n    if (names.has(name)) {\n      throw new DuplicateRouteParameterError(\n        `Duplicate route parameter \"${name}\" in route \"${pattern}\". Each dynamic segment must use a unique name.`,\n      );\n    }\n    names.add(name);\n  }\n}\n\nfunction splitRoutePattern(pattern: string, syntax: RoutePatternSyntax): string[] {\n  return pattern\n    .replace(/\\\\/g, \"/\")\n    .split(\"/\")\n    .filter(Boolean)\n    .filter((segment) =>\n      syntax === \"api\" ? true : !(segment.startsWith(\"(\") && segment.endsWith(\")\")),\n    );\n}\n\nexport function assertTerminalCatchAll(pattern: string, syntax: RoutePatternSyntax = \"page\"): void {\n  const segments = splitRoutePattern(pattern, syntax);\n  const parameterName = syntax === \"router\" ? ROUTER_PARAMETER_NAME : \".+\";\n  const catchAllPattern = new RegExp(\n    syntax === \"router\"\n      ? `^(?:\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]|\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]|\\\\*${parameterName}\\\\??)$`\n      : `^(?:\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]|\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\])$`,\n  );\n  const catchAllIndex = segments.findIndex((segment) => catchAllPattern.test(segment));\n  if (catchAllIndex >= 0 && catchAllIndex !== segments.length - 1) {\n    throw new NonTerminalCatchAllRouteError(\n      `Catch-all segment \"${segments[catchAllIndex]}\" must be the final segment in route \"${pattern}\".`,\n    );\n  }\n}\n\n/** Return the URL-matching shape of a route without its parameter names. */\nexport function getRoutePatternShape(pattern: string, syntax: RoutePatternSyntax = \"page\"): string {\n  assertTerminalCatchAll(pattern, syntax);\n  const segments = splitRoutePattern(pattern, syntax).map((segment) => {\n    const specificity = getPatternSegmentSpecificity(segment, syntax);\n    if (specificity !== \"static\") return specificity;\n\n    try {\n      return `static:${decodeURIComponent(segment)}`;\n    } catch {\n      return `static:${segment}`;\n    }\n  });\n\n  return segments.length === 0 ? \"/\" : JSON.stringify(segments);\n}\n\n/** Return the specificity of every URL-consuming segment in a route pattern. */\nexport function getRoutePatternSpecificity(\n  pattern: string,\n  syntax: RoutePatternSyntax = \"page\",\n): RouteSegmentSpecificity[] {\n  assertTerminalCatchAll(pattern, syntax);\n  return splitRoutePattern(pattern, syntax).map((segment) =>\n    getPatternSegmentSpecificity(segment, syntax),\n  );\n}\n\nfunction getPatternSegmentSpecificity(\n  segment: string,\n  syntax: RoutePatternSyntax,\n): RouteSegmentSpecificity {\n  const parameterName = syntax === \"router\" ? ROUTER_PARAMETER_NAME : \".+\";\n  const supportsColonAndStar = syntax === \"router\";\n  if (\n    new RegExp(`^\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]$`).test(segment) ||\n    (supportsColonAndStar && new RegExp(`^\\\\*${parameterName}\\\\?$`).test(segment))\n  ) {\n    return \"optional-catch-all\";\n  }\n  if (\n    new RegExp(`^\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]$`).test(segment) ||\n    (supportsColonAndStar && new RegExp(`^\\\\*${parameterName}$`).test(segment))\n  ) {\n    return \"catch-all\";\n  }\n  if (\n    new RegExp(`^\\\\[${parameterName}\\\\]$`).test(segment) ||\n    (supportsColonAndStar && new RegExp(`^:${parameterName}$`).test(segment))\n  ) {\n    return \"dynamic\";\n  }\n\n  return \"static\";\n}\n","import { localizeFarmHref, resolveFarmLocalePath } from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { assertBrowserStableRoutePath } from \"../routing/specificity\";\n\ntype ConfigRoutePatternToken =\n  | { kind: \"param\"; name: string; captureIndex: number; catchAll: boolean }\n  | { kind: \"wildcard\"; captureIndex: number };\n\nexport interface CompiledConfigRoutePattern {\n  regex: RegExp;\n  tokens: ConfigRoutePatternToken[];\n}\n\nexport function validateConfigRouteSource(source: string, field = \"Config route source\"): string {\n  if (typeof source !== \"string\" || source.length === 0) {\n    throw new TypeError(`${field} must be a non-empty pathname pattern.`);\n  }\n  if (source.trim() !== source) {\n    throw new Error(`${field} cannot contain leading or trailing whitespace.`);\n  }\n  if (!source.startsWith(\"/\")) {\n    throw new Error(`${field} must start with \"/\".`);\n  }\n  if (source.includes(\"?\") || source.includes(\"#\")) {\n    throw new Error(`${field} must be a pathname without a query string or hash.`);\n  }\n  if (\n    source.includes(\"\\\\\") ||\n    Array.from(source).some((character) => {\n      const code = character.charCodeAt(0);\n      return code <= 31 || (code >= 127 && code <= 159);\n    })\n  ) {\n    throw new Error(`${field} cannot contain backslashes or control characters.`);\n  }\n  assertBrowserStableRoutePath(source);\n  return source;\n}\n\nexport function resolveConfigRoutePathname(\n  pathname: string,\n  i18n?: ResolvedFarmI18nConfig,\n): { pathname: string; locale?: string } {\n  if (!i18n?.enabled) return { pathname: normalizeConfigRoutePathname(pathname) };\n  const match = resolveFarmLocalePath(pathname, i18n);\n  return { pathname: normalizeConfigRoutePathname(match.pathname), locale: match.locale };\n}\n\n/**\n * Drop a trailing slash before matching, mirroring `normalizeRuntimePath` in\n * the generated production matcher. Without this a request for `/old/` misses\n * a `/old` rule in dev while matching it in a built app.\n */\nfunction normalizeConfigRoutePathname(pathname: string): string {\n  if (!pathname || pathname === \"/\") return \"/\";\n  return pathname.endsWith(\"/\") ? pathname.replace(/\\/+$/, \"\") || \"/\" : pathname;\n}\n\nexport function localizeConfigRouteDestination(\n  destination: string,\n  locale: string | undefined,\n  i18n?: ResolvedFarmI18nConfig,\n): string {\n  return locale && i18n?.enabled ? localizeFarmHref(destination, locale, i18n) : destination;\n}\n\n/**\n * Append a catch-all capture, absorbing the separator that precedes it.\n *\n * The production matcher works on split segments and lets a non-terminal\n * catch-all consume zero of them (`minConsume = 0`), so `/x/*` + `/y` matches\n * `/x/y` and `/files/:path*` matches `/files`. Emitting a bare `(.*)` after a\n * literal `/` instead demands at least that separator, so the same rule was\n * inert in dev. Folding the slash into the optional group is how path-to-regexp\n * expresses the same thing, and it keeps one capture group so capture indexes\n * are unchanged (a non-participating group reads back as \"\").\n */\nfunction appendCatchAll(pattern: string): string {\n  return pattern.endsWith(\"/\") ? `${pattern.slice(0, -1)}(?:/(.*))?` : `${pattern}(.*)`;\n}\n\nfunction escapeRegexCharacter(character: string): string {\n  return /[\\\\^$.*+?()[\\]{}|]/.test(character) ? `\\\\${character}` : character;\n}\n\nexport function compileConfigRoutePattern(source: string): CompiledConfigRoutePattern {\n  validateConfigRouteSource(source);\n  const tokens: ConfigRoutePatternToken[] = [];\n  let pattern = \"\";\n  let captureIndex = 1;\n\n  for (let index = 0; index < source.length; ) {\n    const rest = source.slice(index);\n    const parameter = rest.match(/^:([A-Za-z0-9_]+)(\\*)?/);\n    if (parameter) {\n      tokens.push({\n        kind: \"param\",\n        name: parameter[1],\n        captureIndex,\n        catchAll: parameter[2] === \"*\",\n      });\n      pattern = parameter[2] ? appendCatchAll(pattern) : `${pattern}([^/]+)`;\n      captureIndex += 1;\n      index += parameter[0].length;\n      continue;\n    }\n\n    if (source[index] === \"*\") {\n      tokens.push({ kind: \"wildcard\", captureIndex });\n      pattern = appendCatchAll(pattern);\n      captureIndex += 1;\n      index += 1;\n      continue;\n    }\n\n    pattern += escapeRegexCharacter(source[index]);\n    index += 1;\n  }\n\n  return { regex: new RegExp(`^${pattern}$`), tokens };\n}\n\nexport function interpolateConfigRouteDestination(\n  destination: string,\n  match: RegExpMatchArray,\n  tokens: readonly ConfigRoutePatternToken[],\n): string {\n  const namedCaptures = new Map<string, string>();\n  const wildcardCaptures: string[] = [];\n  const captures = new Map<number, string>();\n\n  for (const token of tokens) {\n    const value = normalizeConfigRouteCapture(\n      match[token.captureIndex] || \"\",\n      token.kind === \"wildcard\" || token.catchAll,\n    );\n    captures.set(token.captureIndex, value);\n    if (token.kind === \"param\") {\n      namedCaptures.set(token.name, value);\n    } else {\n      wildcardCaptures.push(value);\n    }\n  }\n\n  let result = \"\";\n  let wildcardIndex = 0;\n  for (let index = 0; index < destination.length; ) {\n    const rest = destination.slice(index);\n    const parameter = rest.match(/^:([A-Za-z0-9_]+)(\\*)?/);\n    if (parameter) {\n      const value = namedCaptures.get(parameter[1]);\n      result += value === undefined ? parameter[0] : value;\n      index += parameter[0].length;\n      continue;\n    }\n\n    const capture = rest.match(/^\\$(\\d+)/);\n    if (capture) {\n      result += captures.get(Number(capture[1])) ?? \"\";\n      index += capture[0].length;\n      continue;\n    }\n\n    if (destination[index] === \"*\") {\n      result += wildcardCaptures[wildcardIndex] || \"\";\n      wildcardIndex += 1;\n      index += 1;\n      continue;\n    }\n\n    result += destination[index];\n    index += 1;\n  }\n\n  return result;\n}\n\nfunction normalizeConfigRouteCapture(value: string, catchAll: boolean): string {\n  const segments = catchAll ? value.split(\"/\").filter(Boolean) : [value];\n  return segments\n    .map((segment) => encodeConfigRouteSegment(decodeConfigRouteSegment(segment)))\n    .join(\"/\");\n}\n\nfunction decodeConfigRouteSegment(segment: string): string {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n\nfunction encodeConfigRouteSegment(segment: string): string {\n  return encodeURIComponent(segment).replace(\n    /[!'()*]/g,\n    (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,\n  );\n}\n","export type FarmIntegrationAPIMethod =\n  | \"GET\"\n  | \"QUERY\"\n  | \"POST\"\n  | \"PUT\"\n  | \"PATCH\"\n  | \"DELETE\"\n  | \"OPTIONS\"\n  | \"HEAD\";\n\nexport type FarmIntegrationAPIBodyFormat = \"json\" | \"form\" | \"none\";\nexport type FarmIntegrationAPIResponseFormat = \"json\" | \"text\" | \"response\";\n\nexport interface FarmIntegrationAPIOperation<\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n> {\n  readonly kind: \"farm-integration-api-operation\";\n  path: string;\n  method: TMethod;\n  bodyFormat?: FarmIntegrationAPIBodyFormat;\n  responseFormat?: FarmIntegrationAPIResponseFormat;\n  headers?: Record<string, string>;\n  credentials?: RequestCredentials;\n  isServer?: TServer;\n  __pathless?: boolean;\n  __types?: {\n    body: TBody;\n    query: TQuery;\n    response: TResponse;\n  };\n}\n\nexport type FarmIntegrationAPI = {\n  [key: string]: FarmIntegrationAPI | FarmIntegrationAPIOperation<any, any, any, any, any>;\n};\n\nexport type FarmIntegrationRouteOperationCarrier<\n  TPath extends string = string,\n  TOperation extends FarmIntegrationAPIOperation<any, any, any, any, any> =\n    FarmIntegrationAPIOperation<any, any, any, any, any>,\n> = {\n  path: TPath;\n  __operation: TOperation;\n};\n\ntype IntegrationAPIBuilderOptions<TServer extends boolean = false> = Omit<\n  FarmIntegrationAPIOperation<any, any, any, TServer>,\n  \"kind\" | \"method\" | \"path\" | \"__pathless\" | \"__types\"\n>;\n\nexport function defineIntegrationAPIOperation<\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n>(\n  operation: Omit<\n    FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>,\n    \"kind\" | \"__types\"\n  >,\n): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod> {\n  return {\n    kind: \"farm-integration-api-operation\",\n    ...operation,\n  };\n}\n\nexport function defineIntegrationAPI<TAPI extends FarmIntegrationAPI>(api: TAPI): TAPI {\n  return api;\n}\n\nfunction operation<\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n>(\n  method: TMethod,\n  pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n  maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod> {\n  const hasExplicitPath = typeof pathOrOptions === \"string\";\n  const path = hasExplicitPath ? pathOrOptions : \"\";\n  const options = (\n    hasExplicitPath\n      ? maybeOptions\n      : {\n          ...maybeOptions,\n          ...pathOrOptions,\n        }\n  ) as IntegrationAPIBuilderOptions<TServer>;\n\n  return defineIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>({\n    path,\n    method,\n    __pathless: !hasExplicitPath,\n    ...options,\n  });\n}\n\nfunction get<TResponse = unknown, TServer extends boolean = false>(\n  path: string,\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, never, TResponse, TServer, \"GET\">;\nfunction get<TQuery = never, TResponse = unknown, TServer extends boolean = false>(\n  path: string,\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"GET\">;\nfunction get<TResponse = unknown, TServer extends boolean = false>(\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, never, TResponse, TServer, \"GET\">;\nfunction get<TQuery = never, TResponse = unknown, TServer extends boolean = false>(\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"GET\">;\nfunction get(\n  pathOrOptions?: string | IntegrationAPIBuilderOptions<boolean>,\n  maybeOptions: IntegrationAPIBuilderOptions<boolean> = {} as IntegrationAPIBuilderOptions<boolean>,\n) {\n  return operation<never, any, any, boolean>(\"GET\", pathOrOptions, maybeOptions);\n}\n\nfunction isOperation(value: unknown): value is FarmIntegrationAPIOperation<any, any, any, any> {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (value as FarmIntegrationAPIOperation<any, any, any, any>).kind ===\n      \"farm-integration-api-operation\"\n  );\n}\n\nfunction bindRoutePath<TAPI extends FarmIntegrationAPI>(path: string, api: TAPI): TAPI {\n  const entries = Object.entries(api as Record<string, unknown>).map(([key, value]) => {\n    if (isOperation(value)) {\n      return [\n        key,\n        {\n          ...value,\n          path,\n          __pathless: false,\n        },\n      ];\n    }\n\n    if (value && typeof value === \"object\") {\n      return [key, bindRoutePath(path, value as FarmIntegrationAPI)];\n    }\n\n    return [key, value];\n  });\n\n  return Object.fromEntries(entries) as TAPI;\n}\n\ntype RouteOperationsToAPI<\n  TOperations extends readonly FarmIntegrationAPIOperation<any, any, any, any, any>[],\n> = {\n  [TMethod in Lowercase<TOperations[number][\"method\"] & string>]: Extract<\n    TOperations[number],\n    { method: Uppercase<TMethod> }\n  >;\n};\n\ntype StripRouteClientPrefix<TPath extends string> = TPath extends `/api/${string}/${infer TRest}`\n  ? TRest\n  : TPath extends `/${string}/${infer TRest}`\n    ? TRest\n    : TPath extends `/${infer TRest}`\n      ? TRest\n      : TPath;\n\ntype NormalizeRouteSegment<TSegment extends string> = TSegment extends `[...${infer TName}]`\n  ? TName\n  : TSegment extends `[${infer TName}]`\n    ? TName\n    : TSegment extends `${infer TName}(${string}`\n      ? TName\n      : CamelCaseRouteSegment<TSegment>;\n\ntype CamelCaseRouteSegment<TSegment extends string> =\n  TSegment extends `${infer THead}-${infer TTail}`\n    ? `${THead}${Capitalize<CamelCaseRouteSegment<TTail>>}`\n    : TSegment;\n\ntype RouteNamespaceFromPath<\n  TPath extends string,\n  TOperation extends FarmIntegrationAPIOperation<any, any, any, any, any>,\n> = TPath extends `${infer THead}/${infer TTail}`\n  ? {\n      [TKey in NormalizeRouteSegment<THead>]: RouteNamespaceFromPath<TTail, TOperation>;\n    }\n  : {\n      [TKey in NormalizeRouteSegment<TPath>]: {\n        [TMethod in Lowercase<TOperation[\"method\"] & string>]: TOperation;\n      };\n    };\n\ntype UnionToIntersection<TUnion> = (\n  TUnion extends unknown ? (value: TUnion) => void : never\n) extends (value: infer TIntersection) => void\n  ? TIntersection\n  : never;\n\ntype ExpandRecursively<TValue> = TValue extends (...args: any[]) => any\n  ? TValue\n  : TValue extends object\n    ? { [TKey in keyof TValue]: ExpandRecursively<TValue[TKey]> }\n    : TValue;\n\ntype RoutesToAPI<TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[]> =\n  ExpandRecursively<\n    UnionToIntersection<\n      TRoutes[number] extends FarmIntegrationRouteOperationCarrier<infer TPath, infer TOperation>\n        ? RouteNamespaceFromPath<StripRouteClientPrefix<TPath>, TOperation>\n        : never\n    >\n  >;\n\nexport type InferIntegrationAPIFromRoutes<\n  TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[],\n> = RoutesToAPI<TRoutes>;\n\nfunction route<TAPI extends FarmIntegrationAPI>(path: string, definition: TAPI): TAPI;\nfunction route<TOperations extends readonly FarmIntegrationAPIOperation<any, any, any, any, any>[]>(\n  path: string,\n  ...operations: TOperations\n): RouteOperationsToAPI<TOperations>;\nfunction route(\n  path: string,\n  definitionOrOperation: FarmIntegrationAPI | FarmIntegrationAPIOperation<any, any, any, any, any>,\n  ...operations: readonly FarmIntegrationAPIOperation<any, any, any, any, any>[]\n) {\n  if (isOperation(definitionOrOperation)) {\n    const allOperations = [definitionOrOperation, ...operations];\n    return Object.fromEntries(\n      allOperations.map((operation) => [\n        operation.method.toLowerCase(),\n        {\n          ...operation,\n          path,\n          __pathless: false,\n        },\n      ]),\n    );\n  }\n\n  return bindRoutePath(path, definitionOrOperation as FarmIntegrationAPI);\n}\n\nfunction normalizeRouteSegment(segment: string): string {\n  if (!segment) {\n    return \"index\";\n  }\n\n  if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n    return segment.slice(4, -1) || \"index\";\n  }\n\n  if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n    return segment.slice(1, -1) || \"index\";\n  }\n\n  const matcherIndex = segment.indexOf(\"(\");\n  if (matcherIndex > 0) {\n    return segment.slice(0, matcherIndex);\n  }\n\n  return camelCaseRouteSegment(segment);\n}\n\nfunction camelCaseRouteSegment(segment: string): string {\n  return segment.replace(/-([a-zA-Z0-9])/g, (_match, value: string) => value.toUpperCase());\n}\n\nfunction getRouteClientSegments(path: string): string[] {\n  const segments = path.split(\"/\").filter(Boolean);\n  if (segments.length === 0) {\n    return [\"index\"];\n  }\n\n  const stripped =\n    segments[0] === \"api\" && segments.length > 2\n      ? segments.slice(2)\n      : segments.length > 1\n        ? segments.slice(1)\n        : [segments[segments.length - 1]];\n\n  return stripped.map(normalizeRouteSegment).filter(Boolean);\n}\n\nfunction setRouteOperation(\n  target: Record<string, unknown>,\n  pathSegments: string[],\n  operation: FarmIntegrationAPIOperation<any, any, any, any, any>,\n) {\n  const [head, ...tail] = pathSegments;\n  if (!head) {\n    return;\n  }\n\n  if (tail.length === 0) {\n    const leaf = ((target[head] as Record<string, unknown> | undefined) || {}) as Record<\n      string,\n      unknown\n    >;\n    leaf[operation.method.toLowerCase()] = {\n      ...operation,\n      path: operation.path,\n      __pathless: false,\n    };\n    target[head] = leaf;\n    return;\n  }\n\n  const branch = ((target[head] as Record<string, unknown> | undefined) || {}) as Record<\n    string,\n    unknown\n  >;\n  target[head] = branch;\n  setRouteOperation(branch, tail, operation);\n}\n\nfunction fromRoutes<TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[]>(\n  routes: TRoutes,\n): RoutesToAPI<TRoutes> {\n  const definition: Record<string, unknown> = {};\n\n  for (const route of routes) {\n    if (!isOperation(route.__operation)) {\n      continue;\n    }\n\n    setRouteOperation(definition, getRouteClientSegments(route.path), {\n      ...route.__operation,\n      path: route.path,\n      __pathless: false,\n    });\n  }\n\n  return definition as RoutesToAPI<TRoutes>;\n}\n\nexport const api = {\n  get,\n  route,\n  fromRoutes,\n  query<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"QUERY\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"QUERY\">(\"QUERY\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  post<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"POST\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"POST\">(\"POST\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  put<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PUT\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"PUT\">(\"PUT\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  patch<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PATCH\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"PATCH\">(\"PATCH\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  delete<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"DELETE\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"DELETE\">(\"DELETE\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  options<TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"OPTIONS\"> {\n    return operation<never, TQuery, TResponse, TServer, \"OPTIONS\">(\n      \"OPTIONS\",\n      pathOrOptions,\n      maybeOptions,\n    );\n  },\n  head<TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"HEAD\"> {\n    return operation<never, TQuery, TResponse, TServer, \"HEAD\">(\n      \"HEAD\",\n      pathOrOptions,\n      maybeOptions,\n    );\n  },\n  form: {\n    query<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"QUERY\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"QUERY\">(\"QUERY\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    post<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"POST\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"POST\">(\"POST\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    put<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PUT\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"PUT\">(\"PUT\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    patch<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PATCH\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"PATCH\">(\"PATCH\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    delete<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"DELETE\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"DELETE\">(\"DELETE\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n  },\n};\n\nexport const endpoint = api;\n","/**\n * Decode a percent-encoded path segment, falling back to the raw value.\n *\n * Request paths are not guaranteed to be validly percent-encoded, so\n * `decodeURIComponent` can throw on input that is still a legal URL: a\n * latin-1 escape such as `caf%E9` from an old link, or a truncated `%ZZ`\n * from a crawler. A malformed segment simply will not match a known route,\n * which is a 404, so it must not throw out of route matching.\n */\nexport function decodeRouteSegment(segment: string): string {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n","type RequestContextCarrier = object;\n\nexport interface SetRequestContextOptions {\n  exposeToPage?: boolean;\n}\n\nexport interface RequestContextSnapshotOptions {\n  exposedOnly?: boolean;\n}\n\ninterface RequestContextBucket {\n  privateData: Map<string, any>;\n  exposedData: Map<string, any>;\n}\n\nconst REQUEST_CONTEXT_STORE_KEY = Symbol.for(\"farm.requestContextStore\");\n\ntype GlobalWithRequestContextStore = typeof globalThis & {\n  [REQUEST_CONTEXT_STORE_KEY]?: WeakMap<RequestContextCarrier, RequestContextBucket>;\n};\n\nfunction getRequestContextStore() {\n  const globalState = globalThis as GlobalWithRequestContextStore;\n  if (!globalState[REQUEST_CONTEXT_STORE_KEY]) {\n    globalState[REQUEST_CONTEXT_STORE_KEY] = new WeakMap<\n      RequestContextCarrier,\n      RequestContextBucket\n    >();\n  }\n\n  return globalState[REQUEST_CONTEXT_STORE_KEY]!;\n}\n\nfunction getBucket(target: RequestContextCarrier): RequestContextBucket {\n  const requestContextStore = getRequestContextStore();\n  let bucket = requestContextStore.get(target);\n  if (!bucket) {\n    bucket = {\n      privateData: new Map<string, any>(),\n      exposedData: new Map<string, any>(),\n    };\n    requestContextStore.set(target, bucket);\n  }\n  return bucket;\n}\n\nexport function setRequestContext(\n  target: RequestContextCarrier,\n  key: string,\n  value: any,\n  options: SetRequestContextOptions = {},\n): void {\n  const bucket = getBucket(target);\n  bucket.privateData.set(key, value);\n  if (options.exposeToPage) {\n    bucket.exposedData.set(key, value);\n  }\n}\n\nexport function getRequestContext<T = any>(\n  target: RequestContextCarrier,\n  key: string,\n): T | undefined {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  return bucket?.privateData.get(key) as T | undefined;\n}\n\nexport function hasRequestContext(target: RequestContextCarrier, key: string): boolean {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  return bucket?.privateData.has(key) ?? false;\n}\n\nexport function deleteRequestContext(target: RequestContextCarrier, key: string): boolean {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  if (!bucket) return false;\n  const removedPrivate = bucket.privateData.delete(key);\n  bucket.exposedData.delete(key);\n  return removedPrivate;\n}\n\nexport function clearRequestContext(target: RequestContextCarrier): void {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  if (!bucket) return;\n  bucket.privateData.clear();\n  bucket.exposedData.clear();\n}\n\nexport function getRequestContextSnapshot(\n  target: RequestContextCarrier,\n  options: RequestContextSnapshotOptions = {},\n): Map<string, any> {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  if (!bucket) return new Map<string, any>();\n  if (options.exposedOnly) {\n    return new Map(bucket.exposedData);\n  }\n  return new Map(bucket.privateData);\n}\n","import { assertBrowserStableRoutePath } from \"./routing/specificity\";\n\ninterface FarmNodeAbortRequest {\n  aborted?: boolean;\n  once(event: \"aborted\", listener: () => void): unknown;\n  off(event: \"aborted\", listener: () => void): unknown;\n}\n\ninterface FarmNodeAbortResponse {\n  writableEnded: boolean;\n  once(event: \"close\" | \"finish\", listener: () => void): unknown;\n  off(event: \"close\" | \"finish\", listener: () => void): unknown;\n}\n\n/** Share disconnect semantics between development and production Node requests. */\nexport function createFarmNodeRequestAbortSignal(\n  req: FarmNodeAbortRequest,\n  res: FarmNodeAbortResponse,\n): AbortSignal {\n  const controller = new AbortController();\n  let disposed = false;\n  const dispose = () => {\n    if (disposed) return;\n    disposed = true;\n    req.off(\"aborted\", abort);\n    res.off(\"close\", abortOnEarlyClose);\n    res.off(\"finish\", dispose);\n    controller.signal.removeEventListener(\"abort\", dispose);\n  };\n  const abort = () => controller.abort();\n  const abortOnEarlyClose = () => {\n    if (!res.writableEnded) abort();\n    dispose();\n  };\n\n  if (req.aborted) {\n    controller.abort();\n    return controller.signal;\n  }\n\n  req.once(\"aborted\", abort);\n  res.once(\"close\", abortOnEarlyClose);\n  res.once(\"finish\", dispose);\n  controller.signal.addEventListener(\"abort\", dispose, { once: true });\n  return controller.signal;\n}\n\nexport const DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT = 10_000_000;\nexport const DEFAULT_FARM_SERVER_HEADERS_TIMEOUT = 60_000;\nexport const DEFAULT_FARM_SERVER_REQUEST_TIMEOUT = 300_000;\nexport const DEFAULT_FARM_SERVER_KEEP_ALIVE_TIMEOUT = 5_000;\nexport const DEFAULT_FARM_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT = 30_000;\nconst MAX_FARM_SERVER_TIMEOUT = 2_147_483_647;\n\nexport type FarmServerDuration = number | `${number}${\"ms\" | \"s\" | \"m\" | \"h\"}`;\n\nexport interface FarmServerHealthConfig {\n  /** Liveness endpoint. It remains healthy while a production process drains. */\n  livenessPath?: string;\n  /** Readiness endpoint. It returns 503 until startup completes and while draining. */\n  readinessPath?: string;\n}\n\nexport interface ResolvedFarmServerHealthConfig {\n  enabled: boolean;\n  livenessPath: string;\n  readinessPath: string;\n}\n\nexport interface FarmServerConfig {\n  /** Maximum request body size for API routes, integrations, workflows, and uploads. */\n  bodySizeLimit?: number | string;\n  /** Trust proxy-provided client address and request authority headers. Enable only behind a trusted proxy. */\n  trustProxy?: boolean;\n  /** Maximum time for a Node client to send complete request headers. */\n  headersTimeout?: FarmServerDuration;\n  /** Maximum time for a Node client to send the complete request. */\n  requestTimeout?: FarmServerDuration;\n  /** How long an idle Node keep-alive connection remains open after a response. */\n  keepAliveTimeout?: FarmServerDuration;\n  /** Maximum time the Node adapter drains traffic before forcing shutdown. */\n  gracefulShutdownTimeout?: FarmServerDuration;\n  /** Production liveness and readiness endpoints. Set to false to disable them. */\n  health?: false | FarmServerHealthConfig;\n}\n\nexport interface ResolvedFarmServerConfig {\n  bodySizeLimit: number;\n  trustProxy: boolean;\n  headersTimeout: number;\n  requestTimeout: number;\n  keepAliveTimeout: number;\n  gracefulShutdownTimeout: number;\n  health: ResolvedFarmServerHealthConfig;\n}\n\nexport type FarmRequestBodyErrorCode = \"BODY_TOO_LARGE\" | \"INVALID_CONTENT_LENGTH\";\n\n/** Apply the weak entity-tag comparison required by If-None-Match. */\nexport function matchesFarmIfNoneMatch(\n  value: string | readonly string[] | null | undefined,\n  etag: string,\n): boolean {\n  const expected = parseEntityTag(trimOptionalWhitespace(etag));\n  if (!expected) return false;\n\n  const values = Array.isArray(value) ? value : [value];\n  const combined = values\n    .filter((header): header is string => typeof header === \"string\")\n    .join(\",\");\n  const fieldValue = trimOptionalWhitespace(combined);\n  if (!fieldValue) return false;\n  if (fieldValue === \"*\") return true;\n\n  let matched = false;\n  let hasEntityTag = false;\n  for (const candidate of splitEntityTags(fieldValue)) {\n    const token = trimOptionalWhitespace(candidate);\n    if (!token) continue;\n\n    const parsed = parseEntityTag(token);\n    if (!parsed) return false;\n    hasEntityTag = true;\n    if (parsed === expected) matched = true;\n  }\n\n  return hasEntityTag && matched;\n}\n\nfunction trimOptionalWhitespace(value: string): string {\n  return value.replace(/^[\\t ]+|[\\t ]+$/g, \"\");\n}\n\nfunction parseEntityTag(value: string): string | null {\n  const opaqueTag = value.startsWith(\"W/\") ? value.slice(2) : value;\n  if (opaqueTag.length < 2 || opaqueTag[0] !== '\"' || opaqueTag.at(-1) !== '\"') return null;\n\n  for (let index = 1; index < opaqueTag.length - 1; index++) {\n    const code = opaqueTag.charCodeAt(index);\n    if (code === 0x21 || (code >= 0x23 && code <= 0x7e) || code >= 0x80) continue;\n    return null;\n  }\n\n  return opaqueTag;\n}\n\nfunction splitEntityTags(value: string): string[] {\n  const tags: string[] = [];\n  let start = 0;\n  let quoted = false;\n\n  for (let index = 0; index < value.length; index++) {\n    const character = value[index];\n    if (character === '\"') {\n      quoted = !quoted;\n    } else if (character === \",\" && !quoted) {\n      tags.push(value.slice(start, index));\n      start = index + 1;\n    }\n  }\n\n  tags.push(value.slice(start));\n  return tags;\n}\n\nexport class FarmRequestBodyError extends Error {\n  readonly code: FarmRequestBodyErrorCode;\n  readonly status: number;\n\n  constructor(code: FarmRequestBodyErrorCode, status: number, message: string) {\n    super(message);\n    this.name = \"FarmRequestBodyError\";\n    this.code = code;\n    this.status = status;\n  }\n}\n\nexport function resolveFarmServerConfig(\n  config: FarmServerConfig | ResolvedFarmServerConfig | undefined,\n): ResolvedFarmServerConfig {\n  const headersTimeout = parseFarmServerDuration(\n    config?.headersTimeout ?? DEFAULT_FARM_SERVER_HEADERS_TIMEOUT,\n    \"server.headersTimeout\",\n  );\n  const requestTimeout = parseFarmServerDuration(\n    config?.requestTimeout ?? DEFAULT_FARM_SERVER_REQUEST_TIMEOUT,\n    \"server.requestTimeout\",\n  );\n  if (headersTimeout > requestTimeout) {\n    throw new TypeError(\"server.headersTimeout must not exceed server.requestTimeout\");\n  }\n\n  return Object.freeze({\n    bodySizeLimit: parseBodySizeLimit(\n      config?.bodySizeLimit ?? DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT,\n      \"server.bodySizeLimit\",\n    ),\n    trustProxy: config?.trustProxy === true,\n    headersTimeout,\n    requestTimeout,\n    keepAliveTimeout: parseFarmServerDuration(\n      config?.keepAliveTimeout ?? DEFAULT_FARM_SERVER_KEEP_ALIVE_TIMEOUT,\n      \"server.keepAliveTimeout\",\n    ),\n    gracefulShutdownTimeout: parseFarmServerDuration(\n      config?.gracefulShutdownTimeout ?? DEFAULT_FARM_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT,\n      \"server.gracefulShutdownTimeout\",\n    ),\n    health: resolveFarmServerHealthConfig(config?.health),\n  });\n}\n\nexport function parseFarmServerDuration(\n  value: FarmServerDuration,\n  optionName = \"duration\",\n): number {\n  if (typeof value === \"number\") {\n    if (!Number.isSafeInteger(value) || value <= 0) {\n      throw new TypeError(`${optionName} must be a positive safe integer`);\n    }\n    if (value > MAX_FARM_SERVER_TIMEOUT) {\n      throw new TypeError(`${optionName} must not exceed ${MAX_FARM_SERVER_TIMEOUT} milliseconds`);\n    }\n    return value;\n  }\n\n  const match = value\n    .trim()\n    .toLowerCase()\n    .match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)$/);\n  if (!match) {\n    throw new TypeError(`${optionName} must be milliseconds or a duration such as \"30s\" or \"2m\"`);\n  }\n\n  const amount = Number(match[1]);\n  const unit = match[2];\n  const multiplier = unit === \"ms\" ? 1 : unit === \"s\" ? 1_000 : unit === \"m\" ? 60_000 : 3_600_000;\n  const milliseconds = Math.floor(amount * multiplier);\n  if (!Number.isSafeInteger(milliseconds) || milliseconds <= 0) {\n    throw new TypeError(`${optionName} must resolve to a positive safe integer`);\n  }\n  if (milliseconds > MAX_FARM_SERVER_TIMEOUT) {\n    throw new TypeError(`${optionName} must not exceed ${MAX_FARM_SERVER_TIMEOUT} milliseconds`);\n  }\n  return milliseconds;\n}\n\nfunction resolveFarmServerHealthConfig(\n  config: false | FarmServerHealthConfig | ResolvedFarmServerHealthConfig | undefined,\n): ResolvedFarmServerHealthConfig {\n  if (config === false || (config && \"enabled\" in config && config.enabled === false)) {\n    return Object.freeze({\n      enabled: false,\n      livenessPath: \"/_farm/health/live\",\n      readinessPath: \"/_farm/health/ready\",\n    });\n  }\n\n  const livenessPath = normalizeHealthPath(\n    config?.livenessPath ?? \"/_farm/health/live\",\n    \"server.health.livenessPath\",\n  );\n  const readinessPath = normalizeHealthPath(\n    config?.readinessPath ?? \"/_farm/health/ready\",\n    \"server.health.readinessPath\",\n  );\n  if (livenessPath === readinessPath) {\n    throw new TypeError(\"server.health livenessPath and readinessPath must be different\");\n  }\n\n  return Object.freeze({ enabled: true, livenessPath, readinessPath });\n}\n\nfunction normalizeHealthPath(value: string, optionName: string): string {\n  const path = value.trim();\n  if (!path.startsWith(\"/\") || path.includes(\"?\") || path.includes(\"#\") || path.includes(\"*\")) {\n    throw new TypeError(`${optionName} must be an absolute pathname without a query or wildcard`);\n  }\n  const normalized = path.length > 1 ? path.replace(/\\/+$/, \"\") || \"/\" : path;\n  assertBrowserStableRoutePath(normalized);\n  return normalized;\n}\n\nexport function parseBodySizeLimit(value: number | string, optionName = \"bodySizeLimit\"): number {\n  if (typeof value === \"number\") {\n    if (!Number.isSafeInteger(value) || value <= 0) {\n      throw new TypeError(`${optionName} must be a positive safe integer`);\n    }\n    return value;\n  }\n\n  const match = value\n    .trim()\n    .toLowerCase()\n    .match(/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb|kib|mib|gib)?$/);\n  if (!match) {\n    throw new TypeError(`${optionName} must be bytes or a size string such as \"500kb\" or \"10mb\"`);\n  }\n\n  const amount = Number(match[1]);\n  const unit = match[2] ?? \"b\";\n  const multiplier: Record<string, number> = {\n    b: 1,\n    kb: 1_000,\n    mb: 1_000_000,\n    gb: 1_000_000_000,\n    kib: 1_024,\n    mib: 1_048_576,\n    gib: 1_073_741_824,\n  };\n  const bytes = Math.floor(amount * multiplier[unit]);\n\n  if (!Number.isSafeInteger(bytes) || bytes <= 0) {\n    throw new TypeError(`${optionName} must resolve to a positive safe integer`);\n  }\n\n  return bytes;\n}\n\nexport async function bufferFarmRequestBody(request: Request, limit: number): Promise<Request> {\n  if (request.method === \"GET\" || request.method === \"HEAD\" || request.body === null) {\n    return request;\n  }\n\n  const bytes = await readFarmRequestBody(request, limit);\n  const body = new Uint8Array(bytes.byteLength);\n  body.set(bytes);\n  return new Request(request, {\n    // oxlint-disable-next-line unicorn/no-invalid-fetch-options -- GET and HEAD return above.\n    body: body.buffer,\n  });\n}\n\nexport async function readFarmRequestBody(request: Request, limit: number): Promise<Uint8Array> {\n  try {\n    validateContentLength(request.headers.get(\"content-length\"), limit);\n  } catch (error) {\n    // A cloned Request is a tee branch: its cancellation may wait for the\n    // untouched branch. Rejection must not wait for producer-owned cleanup.\n    void request.body?.cancel(error).catch(() => {});\n    throw error;\n  }\n  throwIfAborted(request.signal);\n  if (!request.body) return new Uint8Array();\n\n  const reader = request.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let total = 0;\n  const cancelBodyRead = () => {\n    void reader.cancel(request.signal.reason).catch(() => {});\n  };\n  request.signal.addEventListener(\"abort\", cancelBodyRead, { once: true });\n\n  try {\n    while (true) {\n      throwIfAborted(request.signal);\n      const { done, value } = await reader.read();\n      // Cancellation resolves a pending read as EOF, not necessarily an error.\n      throwIfAborted(request.signal);\n      if (done) break;\n      if (!value) continue;\n\n      total += value.byteLength;\n      if (total > limit) {\n        const error = new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\");\n        void reader.cancel(error).catch(() => {});\n        throw error;\n      }\n      chunks.push(value);\n    }\n  } catch (error) {\n    if (request.signal.aborted) throwIfAborted(request.signal);\n    throw error;\n  } finally {\n    request.signal.removeEventListener(\"abort\", cancelBodyRead);\n    reader.releaseLock();\n  }\n\n  const body = new Uint8Array(total);\n  let offset = 0;\n  for (const chunk of chunks) {\n    body.set(chunk, offset);\n    offset += chunk.byteLength;\n  }\n  return body;\n}\n\nexport async function readNodeRequestBody(\n  request: {\n    headers: Record<string, string | string[] | undefined>;\n    on(event: \"data\", listener: (chunk: unknown) => void): unknown;\n    on(event: \"end\", listener: () => void): unknown;\n    on(event: \"error\", listener: (error: Error) => void): unknown;\n    removeListener?(event: string, listener: (...args: any[]) => void): unknown;\n    resume?(): unknown;\n  },\n  limit: number,\n): Promise<Buffer> {\n  const rawContentLength = request.headers[\"content-length\"];\n  const contentLength = Array.isArray(rawContentLength) ? rawContentLength[0] : rawContentLength;\n  try {\n    validateContentLength(contentLength, limit);\n  } catch (error) {\n    request.resume?.();\n    throw error;\n  }\n\n  return await new Promise<Buffer>((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    let total = 0;\n    let settled = false;\n\n    const cleanup = () => {\n      request.removeListener?.(\"data\", onData);\n      request.removeListener?.(\"end\", onEnd);\n      request.removeListener?.(\"error\", onError);\n    };\n    const rejectOnce = (error: Error) => {\n      if (settled) return;\n      settled = true;\n      cleanup();\n      request.resume?.();\n      reject(error);\n    };\n    const onData = (chunk: unknown) => {\n      const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as any);\n      total += bytes.byteLength;\n      if (total > limit) {\n        rejectOnce(new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\"));\n        return;\n      }\n      chunks.push(bytes);\n    };\n    const onEnd = () => {\n      if (settled) return;\n      settled = true;\n      cleanup();\n      resolve(Buffer.concat(chunks, total));\n    };\n    const onError = (error: Error) => rejectOnce(error);\n\n    request.on(\"data\", onData);\n    request.on(\"end\", onEnd);\n    request.on(\"error\", onError);\n  });\n}\n\nexport function createFarmRequestBodyErrorResponse(error: unknown): Response | null {\n  if (!(error instanceof FarmRequestBodyError)) return null;\n\n  return new Response(error.status === 413 ? \"Payload Too Large\" : \"Bad Request\", {\n    status: error.status,\n    headers: {\n      \"cache-control\": \"no-store\",\n      \"content-type\": \"text/plain; charset=utf-8\",\n      \"x-content-type-options\": \"nosniff\",\n    },\n  });\n}\n\nfunction validateContentLength(value: string | null | undefined, limit: number): void {\n  const contentLength = value?.trim();\n  if (!contentLength) return;\n  if (!/^\\d+$/.test(contentLength)) {\n    throw new FarmRequestBodyError(\"INVALID_CONTENT_LENGTH\", 400, \"Invalid content-length header\");\n  }\n  if (Number(contentLength) > limit) {\n    throw new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\");\n  }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n  if (!signal.aborted) return;\n  if (signal.reason !== undefined) throw signal.reason;\n  throw new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n","import { validateConfigRouteSource } from \"./plugins/route-pattern\";\nimport { defineSchema } from \"./schema\";\nimport type {\n  FarmSchema,\n  FarmSchemaConstraint,\n  FarmSchemaField,\n  FarmSchemaFieldType,\n  FarmSchemaModel,\n  FarmSchemaModelExtension,\n  FarmSchemaModelOverride,\n  FarmSchemaReference,\n} from \"./schema\";\n\n// Keep the schema types available from the integrations entrypoint as well.\n// Integration declarations reference these types, and exporting them here\n// keeps those declarations nameable for consumers that import integration\n// helpers directly.\nexport type {\n  FarmSchema,\n  FarmSchemaConstraint,\n  FarmSchemaField,\n  FarmSchemaFieldType,\n  FarmSchemaModel,\n  FarmSchemaModelExtension,\n  FarmSchemaModelOverride,\n  FarmSchemaReference,\n} from \"./schema\";\n\n// Origin validation for integration auth routes is part of the integration\n// contract, so it is re-exported here alongside defineIntegration rather than\n// only from the package root.\nexport {\n  describeIntegrationOriginRejection,\n  resolveIntegrationAllowedOrigins,\n  validateIntegrationRequestOrigin,\n  type IntegrationOriginPolicy,\n  type IntegrationOriginRejection,\n  type IntegrationOriginResult,\n} from \"./integration-request-security\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { api as integrationApi, defineIntegrationAPIOperation } from \"./integration-api\";\nimport type {\n  FarmIntegrationAPI,\n  FarmIntegrationAPIBodyFormat,\n  FarmIntegrationAPIMethod,\n  FarmIntegrationAPIOperation,\n  FarmIntegrationAPIResponseFormat,\n  FarmIntegrationRouteOperationCarrier,\n  InferIntegrationAPIFromRoutes,\n} from \"./integration-api\";\nimport type { InferFarmIntegrationOrmClient } from \"./integration-orm\";\nimport { setFarmPluginIntegrationContext } from \"./plugin-integration-context\";\nimport { decodeRouteSegment } from \"./utils/decode\";\nimport {\n  assertTerminalCatchAll,\n  assertUniqueRouteParameters,\n  compareRouteSpecificity,\n  getRoutePatternSpecificity,\n} from \"./routing/specificity\";\nimport type {\n  FarmPlugin,\n  FarmPluginContext,\n  FarmPluginIntegrationContext,\n  FarmRequestStore,\n} from \"./plugin\";\nimport {\n  clearRequestContext,\n  deleteRequestContext,\n  getRequestContext,\n  getRequestContextSnapshot,\n  hasRequestContext,\n  setRequestContext,\n} from \"./request-context\";\nimport { applyWebResponseHeaders, sendWebResponse } from \"./server/response\";\nimport type { FarmRequest } from \"./types\";\nimport {\n  bufferFarmRequestBody,\n  createFarmRequestBodyErrorResponse,\n  readNodeRequestBody,\n  resolveFarmServerConfig,\n} from \"./server-http\";\n\nexport { api, defineIntegrationAPI, defineIntegrationAPIOperation } from \"./integration-api\";\nexport type {\n  FarmIntegrationAPI,\n  FarmIntegrationAPIBodyFormat,\n  FarmIntegrationAPIMethod,\n  FarmIntegrationAPIOperation,\n  FarmIntegrationAPIResponseFormat,\n} from \"./integration-api\";\n\nexport type FarmIntegrationCategory = \"auth\" | \"payment\" | \"monitoring\" | \"logging\" | (string & {});\n\n/** @deprecated Use FarmIntegrationCategory instead. */\nexport type FarmIntegrationSlot = FarmIntegrationCategory;\n\nexport type FarmIntegrationRouteParamValue = string | string[];\nexport type FarmIntegrationRouteParams = Record<string, FarmIntegrationRouteParamValue>;\nexport type FarmIntegrationRouteMethod =\n  | FarmIntegrationAPIMethod\n  | Lowercase<FarmIntegrationAPIMethod>\n  | \"ALL\"\n  | \"all\";\nexport type FarmIntegrationRouteInputSource = \"body\" | \"query\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type FarmIntegrationValidationPathSegment =\n  | PropertyKey\n  | {\n      readonly key: PropertyKey;\n    };\n\nexport interface FarmIntegrationRouteInput<TBody = unknown, TQuery = unknown> {\n  body?: TBody;\n  query?: TQuery;\n}\n\nexport interface FarmIntegrationValidationIssue {\n  source: FarmIntegrationRouteInputSource;\n  path?: readonly (string | number)[];\n  code?: string;\n  message: string;\n}\n\nexport interface FarmIntegrationValidationErrorLike {\n  issues?: readonly {\n    path?: readonly FarmIntegrationValidationPathSegment[];\n    code?: string;\n    message?: string;\n  }[];\n  message?: string;\n}\n\nexport type FarmIntegrationValidationResult<TValue> =\n  | {\n      success: true;\n      data: TValue;\n    }\n  | {\n      success: false;\n      error: FarmIntegrationValidationErrorLike;\n    };\n\nexport type FarmIntegrationStandardValidationResult<TValue> =\n  | {\n      value: TValue;\n    }\n  | {\n      issues: readonly {\n        path?: readonly FarmIntegrationValidationPathSegment[];\n        code?: string;\n        message: string;\n      }[];\n    };\n\nexport interface FarmIntegrationInputSchema<TValue = unknown> {\n  _output?: TValue;\n  parse?(value: unknown): MaybePromise<TValue>;\n  safeParse?(value: unknown): MaybePromise<FarmIntegrationValidationResult<TValue>>;\n  safeParseAsync?(value: unknown): Promise<FarmIntegrationValidationResult<TValue>>;\n  \"~standard\"?: {\n    validate(value: unknown): MaybePromise<FarmIntegrationStandardValidationResult<TValue>>;\n    types?: {\n      output: TValue;\n    };\n  };\n}\n\nexport interface FarmIntegrationRouteInputSchemas<TBody = unknown, TQuery = unknown> {\n  body?: FarmIntegrationInputSchema<TBody>;\n  query?: FarmIntegrationInputSchema<TQuery>;\n}\n\n/** @deprecated Use `FarmRequestStore` and access it through `ctx.req`. */\nexport type FarmIntegrationRequestContextStore = FarmRequestStore;\n\nexport const FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY = \"farm.integration.internalDispatch\";\n\n/**\n * Request-context key under which an integration middleware can hand\n * `Set-Cookie` values to the runtime when it returns `void` (i.e. lets the\n * request continue to the downstream route/page handler). The runtime reads\n * this key back after a `void` middleware return and forwards the cookies onto\n * the response it ultimately sends, so a server-side session refresh (or any\n * other cookie rotation) reaches the browser instead of being dropped.\n */\nexport const FARM_INTEGRATION_SET_COOKIES_KEY = \"farm:integration:set-cookies\";\n\n/**\n * Forward `Set-Cookie` values from an integration middleware that returns\n * `void` (the authenticated/passthrough branch) to the runtime, so they are\n * merged onto the response the runtime sends for the matched route. This is\n * the passthrough counterpart to appending `Set-Cookie` to a `Response` the\n * middleware returns directly (e.g. a failure redirect): both paths can rotate\n * auth cookies, and both must be able to reach the browser.\n */\nexport function forwardIntegrationSetCookies(\n  context: Pick<FarmIntegrationHandlerContext, \"req\">,\n  cookies: string[],\n): void {\n  if (cookies.length === 0) return;\n  const existing = context.req.get<string[]>(FARM_INTEGRATION_SET_COOKIES_KEY) ?? [];\n  context.req.set(FARM_INTEGRATION_SET_COOKIES_KEY, [...existing, ...cookies]);\n}\n\n/**\n * Read and clear the forwarded `Set-Cookie` values an integration middleware\n * stashed on the request context. Reading-and-clearing guarantees each batch\n * is applied at most once even when several middleware run for one request.\n */\nfunction takeForwardedIntegrationSetCookies(\n  context: Pick<FarmIntegrationHandlerContext, \"req\">,\n): string[] {\n  const cookies = context.req.get<string[]>(FARM_INTEGRATION_SET_COOKIES_KEY);\n  if (cookies && cookies.length > 0) {\n    context.req.delete(FARM_INTEGRATION_SET_COOKIES_KEY);\n    return cookies;\n  }\n  if (cookies) {\n    context.req.delete(FARM_INTEGRATION_SET_COOKIES_KEY);\n  }\n  return [];\n}\n\n/**\n * Return a copy of `response` carrying the forwarded `Set-Cookie` values, or\n * `response` unchanged when there is nothing to forward. Existing `Set-Cookie`\n * headers on the response are preserved (appended to, not replaced).\n */\nfunction appendIntegrationForwardedCookies(response: Response, cookies: string[]): Response {\n  if (cookies.length === 0) return response;\n  const headers = new Headers(response.headers);\n  for (const cookie of cookies) {\n    headers.append(\"set-cookie\", cookie);\n  }\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nexport type FarmIntegrationRouteDb<TSchema extends FarmIntegrationSchema | undefined> =\n  InferFarmIntegrationOrmClient<TSchema>;\n\nexport interface FarmIntegrationRouteStorageArgs<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  getClient(): Promise<unknown | undefined>;\n  getOrm(): Promise<FarmIntegrationRouteDb<TSchema>>;\n}\n\nexport interface FarmIntegrationRouteArgs<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  db: FarmIntegrationRouteDb<TSchema>;\n  getDb(): Promise<FarmIntegrationRouteDb<TSchema>>;\n  storage: FarmIntegrationRouteStorageArgs<TSchema>;\n}\n\nexport interface FarmIntegrationConfigContext<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  key: string;\n  integration: FarmIntegration<TSchema, any>;\n  appConfig: FarmPluginContext[\"config\"];\n  /** Alias for appConfig. */\n  config: FarmPluginContext[\"config\"];\n  args: FarmIntegrationRouteArgs<TSchema>;\n  env: Record<string, string | undefined>;\n  isDev: boolean;\n  isProd: boolean;\n}\n\nexport interface FarmIntegrationConfigDefinition<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  schema?: FarmIntegrationInputSchema<TConfig>;\n  env?: Record<string, string | readonly string[]>;\n  defaults?:\n    | Partial<TConfig>\n    | ((context: FarmIntegrationConfigContext<TSchema>) => MaybePromise<Partial<TConfig>>);\n  input?:\n    | Partial<TConfig>\n    | ((context: FarmIntegrationConfigContext<TSchema>) => MaybePromise<Partial<TConfig>>);\n  resolve?(\n    context: FarmIntegrationConfigContext<TSchema>,\n  ): MaybePromise<TConfig | Partial<TConfig> | undefined>;\n}\n\nexport type FarmIntegrationConfigInput<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = FarmIntegrationInputSchema<TConfig> | FarmIntegrationConfigDefinition<TConfig, TSchema>;\n\nexport type FarmIntegrationLifecycleLogLevel = \"info\" | \"warn\" | \"error\";\n\nexport interface FarmIntegrationLifecycleLogger {\n  info(message: string, meta?: Record<string, unknown>): void;\n  warn(message: string, meta?: Record<string, unknown>): void;\n  error(message: string, meta?: Record<string, unknown>): void;\n}\n\nexport interface FarmIntegrationLifecycleContext<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationConfigContext<TSchema> {\n  integration: FarmIntegration<TSchema, TConfig>;\n  integrationConfig: TConfig;\n  log: FarmIntegrationLifecycleLogger;\n  reason?: string;\n  cleanup(callback?: () => MaybePromise<void>): Promise<void>;\n}\n\nexport type FarmIntegrationLifecycleHook<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (context: FarmIntegrationLifecycleContext<TConfig, TSchema>) => MaybePromise<void>;\n\n/**\n * Small per-call integration metadata. Values received over HTTP are\n * client-controlled and should be validated before authorization decisions.\n */\nexport type FarmIntegrationData = Record<string, unknown>;\n\nexport interface FarmIntegrationHandlerContext<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  request: Request;\n  requestId: string;\n  url: URL;\n  pathname: string;\n  method: string;\n  params: FarmIntegrationRouteParams;\n  input: FarmIntegrationRouteInput<TBody, TQuery>;\n  args: FarmIntegrationRouteArgs<TSchema>;\n  data: FarmIntegrationData;\n  integration: {\n    category: FarmIntegrationCategory;\n    /** @deprecated Use category instead. */\n    slot: FarmIntegrationCategory;\n    type: string;\n    instance: unknown;\n  };\n  route: {\n    kind: \"route\" | \"middleware\";\n    path: string;\n    methods: readonly string[];\n  };\n  req: FarmRequestStore;\n  /** @deprecated Use `req` instead. */\n  requestContext: FarmRequestStore;\n  config: FarmPluginContext[\"config\"];\n  isDev: boolean;\n  isProd: boolean;\n}\n\nexport interface FarmIntegrationRouteHookContext<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationHandlerContext<TBody, TQuery, TSchema> {\n  response?: Response;\n}\n\nexport type FarmIntegrationRouteHook<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = {\n  bivarianceHack(\n    request: Request,\n    context: FarmIntegrationRouteHookContext<TBody, TQuery, TSchema>,\n  ): Promise<Response | void> | Response | void;\n}[\"bivarianceHack\"];\n\nexport interface FarmIntegrationRoute<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  path: string;\n  method?: FarmIntegrationRouteMethod;\n  methods?: readonly FarmIntegrationRouteMethod[];\n  middleware?: readonly FarmIntegrationRouteMiddleware<TSchema>[];\n  before?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  after?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  rawBody?: boolean;\n  bodyFormat?: FarmIntegrationAPIBodyFormat;\n  body?: FarmIntegrationInputSchema<TBody>;\n  query?: FarmIntegrationInputSchema<TQuery>;\n  input?: FarmIntegrationRouteInputSchemas<TBody, TQuery>;\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<TBody, TQuery, TSchema>,\n  ): Promise<Response> | Response;\n}\n\nexport interface FarmTypedIntegrationRoute<\n  TPath extends string = string,\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationRoute<TBody, TQuery, TSchema> {\n  path: TPath;\n  method: TMethod;\n  __operation: FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>;\n}\n\nexport interface FarmIntegrationRouteMiddleware<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<unknown, unknown, TSchema>,\n  ): Promise<Response | void> | Response | void;\n}\n\nexport interface FarmIntegrationMiddleware<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  matcher?: string | string[];\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<unknown, unknown, TSchema>,\n  ): Promise<Response | void> | Response | void;\n}\n\nexport interface FarmIntegrationProviderProps {\n  children: ReactNode;\n}\n\nexport interface FarmIntegrationProviderComponentReference {\n  /** Client-safe module specifier using `@/`, a path relative to the app root, or a package. */\n  module: string;\n  /** Named export to use. Defaults to the module's default export. */\n  export?: string;\n}\n\nexport interface FarmIntegrationProvider {\n  name: string;\n  type: string;\n  props?: Record<string, unknown>;\n  /**\n   * The provider can be instantiated independently around each isolated\n   * client root without relying on context or state owned by the route root.\n   * Providers are treated as route-wide unless they explicitly opt in.\n   */\n  supportsIsolatedHydration?: boolean;\n  component?:\n    | ComponentType<FarmIntegrationProviderProps>\n    | FarmIntegrationProviderComponentReference;\n}\n\nexport interface FarmIntegrationDocumentNavigation {\n  matcher: string | readonly string[];\n}\n\n// The data schema is renderer- and feature-neutral: it now lives in ./schema\n// so applications can declare one without reaching into the integration API.\n// These aliases keep every shipped `*IntegrationSchema*` name working.\n\n/** @deprecated Use `FarmSchemaFieldType`. */\nexport type FarmIntegrationSchemaFieldType = FarmSchemaFieldType;\n\n/** @deprecated Use `FarmSchemaReference`. */\nexport type FarmIntegrationSchemaReference = FarmSchemaReference;\n\n/** @deprecated Use `FarmSchemaField`. */\nexport type FarmIntegrationSchemaField = FarmSchemaField;\n\n/** @deprecated Use `FarmSchemaConstraint`. */\nexport type FarmIntegrationSchemaConstraint = FarmSchemaConstraint;\n\n/** @deprecated Use `FarmSchemaModel`. */\nexport type FarmIntegrationSchemaModel = FarmSchemaModel;\n\n/** @deprecated Use `FarmSchemaModelExtension`. */\nexport type FarmIntegrationSchemaModelExtension = FarmSchemaModelExtension;\n\n/** @deprecated Use `FarmSchemaModelOverride`. */\nexport type FarmIntegrationSchemaModelOverride = FarmSchemaModelOverride;\n\n/** @deprecated Use `FarmSchema`. */\nexport type FarmIntegrationSchema = FarmSchema;\n\n/** @deprecated Use `defineSchema`. This is an exact alias, not a wrapper. */\nexport const defineIntegrationSchema = defineSchema;\n\nexport type FarmIntegrationLogPhase =\n  | \"registered\"\n  | \"validate\"\n  | \"setup\"\n  | \"ready\"\n  | \"dispose\"\n  | \"request:start\"\n  | \"request:end\"\n  | \"request:error\";\n\nexport interface FarmIntegrationLogEvent {\n  category: FarmIntegrationCategory;\n  /** @deprecated Use category instead. */\n  slot: FarmIntegrationCategory;\n  type: string;\n  phase: FarmIntegrationLogPhase;\n  route?: {\n    kind: \"route\" | \"middleware\";\n    path: string;\n    methods: readonly string[];\n  };\n  requestId?: string;\n  request?: Request;\n  response?: Response;\n  error?: unknown;\n  durationMs?: number;\n  level?: FarmIntegrationLifecycleLogLevel;\n  message?: string;\n  meta?: Record<string, unknown>;\n  context: Map<string, unknown>;\n}\n\nexport type FarmIntegrationLogger = (event: FarmIntegrationLogEvent) => void | Promise<void>;\n\nexport interface FarmIntegrationPluginOwner {\n  key: string;\n  category: FarmIntegrationCategory;\n  type: string;\n  source: \"lifecycle\" | \"contribution\";\n  serverRuntime: boolean;\n}\n\n/** A normal plugin or an integration-bound plugin compatible with the shared instance. */\nexport type FarmIntegrationContributedPlugin<TInstance = unknown> =\n  | FarmPlugin<any, any, any, any, unknown, false>\n  | FarmPlugin<any, any, any, any, TInstance, true>;\n\nexport interface FarmIntegration<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n  TConfig = unknown,\n  TInstance = unknown,\n> {\n  readonly kind: \"farm-integration\";\n  category: FarmIntegrationCategory;\n  /** @deprecated Use category instead. */\n  slot?: FarmIntegrationCategory;\n  type: string;\n  instance: TInstance;\n  /** Set to false when a platform adapter owns this integration's production routes. */\n  serverRuntime?: boolean;\n  api?: FarmIntegrationAPI;\n  schema?: TSchema;\n  config?: FarmIntegrationConfigInput<TConfig, TSchema>;\n  validate?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  setup?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  ready?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  dispose?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  log?: FarmIntegrationLogger;\n  routes?: readonly FarmIntegrationRoute<any, any, TSchema>[];\n  endpoints?: FarmIntegrationEndpoints<TSchema>;\n  middleware?: readonly FarmIntegrationMiddleware<TSchema>[];\n  providers?: readonly FarmIntegrationProvider[];\n  documentNavigations?: readonly FarmIntegrationDocumentNavigation[];\n  /** Additional Farm plugins owned and configured by this integration. */\n  plugins?: readonly FarmIntegrationContributedPlugin<NoInfer<TInstance>>[];\n}\n\nexport type FarmIntegrationsUserConfig = Record<string, FarmIntegration<any, any, any> | undefined>;\n\nconst FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME = Symbol.for(\n  \"@farm.js/core/integration-plugin-server-runtime\",\n);\nconst FARM_INTEGRATION_PLUGIN_OWNER = Symbol.for(\"@farm.js/core/integration-plugin-owner\");\n\n/** @internal Identifies plugins owned by platform-managed integrations. */\nexport function getFarmIntegrationPluginServerRuntime(plugin: FarmPlugin): boolean | undefined {\n  const value = (plugin as FarmPlugin & Record<symbol, unknown>)[\n    FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME\n  ];\n  return typeof value === \"boolean\" ? value : undefined;\n}\n\n/** Returns the integration that contributed a normalized plugin, when applicable. */\nexport function getFarmIntegrationPluginOwner(\n  plugin: FarmPlugin,\n): Readonly<FarmIntegrationPluginOwner> | undefined {\n  const value = (plugin as FarmPlugin & Record<symbol, unknown>)[FARM_INTEGRATION_PLUGIN_OWNER];\n  return value && typeof value === \"object\"\n    ? (value as Readonly<FarmIntegrationPluginOwner>)\n    : undefined;\n}\n\ntype IntegrationRouteBuilderOptions<\n  TBody,\n  TQuery,\n  TServer extends boolean,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = {\n  middleware?: readonly FarmIntegrationRouteMiddleware<TSchema>[];\n  before?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  after?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  rawBody?: boolean;\n  headers?: Record<string, string>;\n  credentials?: RequestCredentials;\n  bodyFormat?: FarmIntegrationAPIBodyFormat;\n  responseFormat?: FarmIntegrationAPIResponseFormat;\n  isServer?: TServer;\n  body?: FarmIntegrationInputSchema<TBody>;\n  query?: FarmIntegrationInputSchema<TQuery>;\n  input?: FarmIntegrationRouteInputSchemas<TBody, TQuery>;\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<TBody, TQuery, TSchema>,\n  ): Promise<Response> | Response;\n};\n\nfunction defineTypedIntegrationRoute<\n  TPath extends string,\n  TBody,\n  TQuery,\n  TResponse,\n  TServer extends boolean,\n  TMethod extends FarmIntegrationAPIMethod,\n  TSchema extends FarmIntegrationSchema | undefined,\n>(\n  method: TMethod,\n  path: TPath,\n  input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, TMethod, TSchema> {\n  return {\n    path,\n    method,\n    middleware: input.middleware,\n    before: input.before,\n    after: input.after,\n    rawBody: input.rawBody,\n    bodyFormat: input.bodyFormat,\n    input: normalizeIntegrationRouteInputSchemas(input),\n    handler: input.handler,\n    __operation: defineIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>({\n      path,\n      method,\n      bodyFormat: input.bodyFormat,\n      responseFormat: input.responseFormat,\n      headers: input.headers,\n      credentials: input.credentials,\n      isServer: input.isServer,\n    }),\n  };\n}\n\nexport interface FarmIntegrationRouteFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  get<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    path: TPath,\n    input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n  ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"GET\", TSchema>;\n  post<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"POST\", TSchema>;\n  query<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"QUERY\", TSchema>;\n  put<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PUT\", TSchema>;\n  patch<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PATCH\", TSchema>;\n  delete<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"DELETE\", TSchema>;\n  options<\n    TPath extends string,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n  ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"OPTIONS\", TSchema>;\n  head<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    path: TPath,\n    input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n  ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"HEAD\", TSchema>;\n}\n\nexport interface FarmIntegrationRoutesFactoryContext<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  route: FarmIntegrationRouteFactory<TSchema>;\n  integrationRoute: FarmIntegrationRouteFactory<TSchema>;\n}\n\nexport type FarmIntegrationRoutesFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (\n  context: FarmIntegrationRoutesFactoryContext<TSchema>,\n) => readonly FarmIntegrationRoute<any, any, TSchema>[];\n\nexport type FarmIntegrationEndpointValue<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> =\n  | FarmIntegrationRoute<any, any, TSchema>\n  | readonly FarmIntegrationEndpointValue<TSchema>[]\n  | {\n      readonly [key: string]: FarmIntegrationEndpointValue<TSchema> | undefined;\n    };\n\nexport type FarmIntegrationEndpoints<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = {\n  readonly [key: string]: FarmIntegrationEndpointValue<TSchema> | undefined;\n};\n\nexport interface FarmIntegrationEndpointsFactoryContext<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationRoutesFactoryContext<TSchema> {\n  endpoint: FarmIntegrationRouteFactory<TSchema>;\n}\n\nexport type FarmIntegrationEndpointsFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (context: FarmIntegrationEndpointsFactoryContext<TSchema>) => FarmIntegrationEndpoints<TSchema>;\n\nfunction createIntegrationRouteFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n>(): FarmIntegrationRouteFactory<TSchema> {\n  return {\n    get<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      path: TPath,\n      input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n    ) {\n      return defineTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"GET\", TSchema>(\n        \"GET\",\n        path,\n        input,\n      );\n    },\n    post<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"POST\", TSchema>(\n        \"POST\",\n        path,\n        {\n          bodyFormat: \"json\",\n          ...input,\n        },\n      );\n    },\n    query<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        TBody,\n        TQuery,\n        TResponse,\n        TServer,\n        \"QUERY\",\n        TSchema\n      >(\"QUERY\", path, {\n        bodyFormat: \"json\",\n        ...input,\n      });\n    },\n    put<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PUT\", TSchema>(\n        \"PUT\",\n        path,\n        {\n          bodyFormat: \"json\",\n          ...input,\n        },\n      );\n    },\n    patch<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        TBody,\n        TQuery,\n        TResponse,\n        TServer,\n        \"PATCH\",\n        TSchema\n      >(\"PATCH\", path, {\n        bodyFormat: \"json\",\n        ...input,\n      });\n    },\n    delete<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        TBody,\n        TQuery,\n        TResponse,\n        TServer,\n        \"DELETE\",\n        TSchema\n      >(\"DELETE\", path, {\n        bodyFormat: \"json\",\n        ...input,\n      });\n    },\n    options<\n      TPath extends string,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(\n      path: TPath,\n      input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n    ) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        never,\n        TQuery,\n        TResponse,\n        TServer,\n        \"OPTIONS\",\n        TSchema\n      >(\"OPTIONS\", path, input);\n    },\n    head<\n      TPath extends string,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(\n      path: TPath,\n      input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n    ) {\n      return defineTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"HEAD\", TSchema>(\n        \"HEAD\",\n        path,\n        input,\n      );\n    },\n  };\n}\n\nexport function createIntegrationRoute<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n>(_schema?: TSchema): FarmIntegrationRouteFactory<TSchema> {\n  return createIntegrationRouteFactory<TSchema>();\n}\n\nexport const integrationRoute = createIntegrationRouteFactory<undefined>();\n\ntype RegisteredIntegrationRuntime = {\n  integration: FarmIntegration;\n  config: FarmPluginContext[\"config\"];\n  isDev: boolean;\n  isProd: boolean;\n};\n\nconst INTEGRATION_RUNTIME_REGISTRY_KEY = Symbol.for(\"farm.integrationRuntimeRegistry\");\nconst INTEGRATION_REQUEST_DISPATCHER_KEY = Symbol.for(\"farm.integrationRequestDispatcher\");\n\ntype IntegrationRequestDispatcher = (\n  runtime: RegisteredIntegrationRuntime,\n  request: Request,\n  options?: { currentRequest?: Request },\n) => Promise<Response | null>;\n\ntype GlobalWithIntegrationRuntimeRegistry = typeof globalThis & {\n  [INTEGRATION_RUNTIME_REGISTRY_KEY]?: Map<string, RegisteredIntegrationRuntime>;\n  [INTEGRATION_REQUEST_DISPATCHER_KEY]?: IntegrationRequestDispatcher;\n};\n\nfunction getIntegrationRuntimeRegistry() {\n  const globalState = globalThis as GlobalWithIntegrationRuntimeRegistry;\n  if (!globalState[INTEGRATION_RUNTIME_REGISTRY_KEY]) {\n    globalState[INTEGRATION_RUNTIME_REGISTRY_KEY] = new Map<string, RegisteredIntegrationRuntime>();\n  }\n\n  return globalState[INTEGRATION_RUNTIME_REGISTRY_KEY]!;\n}\n\ntype FarmIntegrationRoutesInput<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = readonly FarmIntegrationRoute<any, any, TSchema>[] | FarmIntegrationRoutesFactory<TSchema>;\n\ntype FarmIntegrationEndpointsInput<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = FarmIntegrationEndpoints<TSchema> | FarmIntegrationEndpointsFactory<TSchema>;\n\ntype FarmIntegrationInput<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n  TConfig = unknown,\n  TInstance = unknown,\n> = Omit<\n  FarmIntegration<TSchema, TConfig, TInstance>,\n  \"kind\" | \"category\" | \"slot\" | \"instance\" | \"config\" | \"routes\" | \"endpoints\" | \"plugins\"\n> & {\n  instance: TInstance;\n  config?: FarmIntegrationConfigInput<TConfig, TSchema>;\n  routes?: FarmIntegrationRoutesInput<TSchema>;\n  endpoints?: FarmIntegrationEndpointsInput<TSchema>;\n  plugins?: readonly FarmIntegrationContributedPlugin<NoInfer<TInstance>>[];\n} & (\n    | {\n        category: FarmIntegrationCategory;\n        slot?: FarmIntegrationCategory;\n      }\n    | {\n        category?: FarmIntegrationCategory;\n        slot: FarmIntegrationCategory;\n      }\n  );\n\ntype FarmIntegrationCategoryInput =\n  | {\n      category: FarmIntegrationCategory;\n      slot?: FarmIntegrationCategory;\n    }\n  | {\n      category?: FarmIntegrationCategory;\n      slot: FarmIntegrationCategory;\n    };\n\ntype FarmIntegrationShapeForInference = FarmIntegrationCategoryInput & {\n  api?: FarmIntegrationAPI;\n  schema?: FarmIntegrationSchema;\n  config?: unknown;\n  routes?: unknown;\n  endpoints?: unknown;\n};\n\ntype ExtractIntegrationSchema<TIntegration> = TIntegration extends {\n  schema: infer TSchema extends FarmIntegrationSchema;\n}\n  ? TSchema\n  : undefined;\n\ntype ResolveIntegrationRoutesInput<TRoutes, TSchema extends FarmIntegrationSchema | undefined> =\n  TRoutes extends FarmIntegrationRoutesFactory<TSchema> ? ReturnType<TRoutes> : TRoutes;\n\ntype ResolveIntegrationEndpointsInput<\n  TEndpoints,\n  TSchema extends FarmIntegrationSchema | undefined,\n> =\n  TEndpoints extends FarmIntegrationEndpointsFactory<TSchema> ? ReturnType<TEndpoints> : TEndpoints;\n\ntype ExtractIntegrationRoutesFromRoutesInput<\n  TRoutes,\n  TSchema extends FarmIntegrationSchema | undefined,\n> =\n  ResolveIntegrationRoutesInput<TRoutes, TSchema> extends readonly (infer TRoute)[]\n    ? TRoute\n    : never;\n\ntype ExtractIntegrationRoutesFromEndpointValue<TValue> =\n  TValue extends FarmIntegrationRouteOperationCarrier<string, any>\n    ? TValue\n    : TValue extends readonly (infer TItem)[]\n      ? ExtractIntegrationRoutesFromEndpointValue<TItem>\n      : TValue extends object\n        ? ExtractIntegrationRoutesFromEndpointValue<TValue[keyof TValue]>\n        : never;\n\ntype ExtractIntegrationRoutesFromEndpointsInput<\n  TEndpoints,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = ExtractIntegrationRoutesFromEndpointValue<\n  ResolveIntegrationEndpointsInput<TEndpoints, TSchema>\n>;\n\ntype ExtractIntegrationRouteUnion<TIntegration, TSchema extends FarmIntegrationSchema | undefined> =\n  | (TIntegration extends { routes: infer TRoutes }\n      ? ExtractIntegrationRoutesFromRoutesInput<TRoutes, TSchema>\n      : never)\n  | (TIntegration extends { endpoints: infer TEndpoints }\n      ? ExtractIntegrationRoutesFromEndpointsInput<TEndpoints, TSchema>\n      : never);\n\ntype ExtractDefinedIntegrationRoutes<\n  TIntegration,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = [ExtractIntegrationRouteUnion<TIntegration, TSchema>] extends [never]\n  ? undefined\n  : readonly ExtractIntegrationRouteUnion<TIntegration, TSchema>[];\n\ntype ExtractDefinedIntegrationEndpoints<\n  TIntegration,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = TIntegration extends { endpoints: infer TEndpoints }\n  ? ResolveIntegrationEndpointsInput<TEndpoints, TSchema>\n  : undefined;\n\ntype ExtractIntegrationAPIRoutes<\n  TIntegration,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = Extract<\n  ExtractIntegrationRouteUnion<TIntegration, TSchema>,\n  FarmIntegrationRouteOperationCarrier<string, any>\n>;\n\ntype ExtractIntegrationCategory<TIntegration extends FarmIntegrationCategoryInput> =\n  TIntegration extends {\n    category: infer TCategory extends FarmIntegrationCategory;\n  }\n    ? TCategory\n    : TIntegration extends { slot: infer TSlot extends FarmIntegrationCategory }\n      ? TSlot\n      : FarmIntegrationCategory;\n\ntype ExtractDerivedIntegrationAPI<\n  TIntegration extends FarmIntegrationShapeForInference,\n  TSchema extends FarmIntegrationSchema | undefined = ExtractIntegrationSchema<TIntegration>,\n> = TIntegration extends { api: infer TAPI extends FarmIntegrationAPI }\n  ? TAPI\n  : [ExtractIntegrationAPIRoutes<TIntegration, TSchema>] extends [never]\n    ? FarmIntegrationAPI | undefined\n    : InferIntegrationAPIFromRoutes<readonly ExtractIntegrationAPIRoutes<TIntegration, TSchema>[]>;\n\nexport type DefinedIntegration<\n  TIntegration extends FarmIntegrationShapeForInference,\n  TSchema extends FarmIntegrationSchema | undefined = ExtractIntegrationSchema<TIntegration>,\n> = Omit<TIntegration, \"kind\" | \"category\" | \"slot\" | \"api\" | \"routes\" | \"endpoints\"> & {\n  readonly kind: \"farm-integration\";\n  category: ExtractIntegrationCategory<TIntegration>;\n  slot: ExtractIntegrationCategory<TIntegration>;\n  routes: ExtractDefinedIntegrationRoutes<TIntegration, TSchema>;\n  endpoints: ExtractDefinedIntegrationEndpoints<TIntegration, TSchema>;\n  api: ExtractDerivedIntegrationAPI<TIntegration, TSchema>;\n};\n\nfunction isIntegrationEndpointRoute(value: unknown): value is FarmIntegrationRoute {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as { path?: unknown }).path === \"string\" &&\n    typeof (value as { handler?: unknown }).handler === \"function\"\n  );\n}\n\nfunction flattenIntegrationEndpoints(\n  endpoints: FarmIntegrationEndpointValue | FarmIntegrationEndpoints | undefined,\n): FarmIntegrationRoute[] {\n  if (!endpoints) {\n    return [];\n  }\n\n  if (Array.isArray(endpoints)) {\n    return endpoints.flatMap((endpoint) => flattenIntegrationEndpoints(endpoint));\n  }\n\n  if (isIntegrationEndpointRoute(endpoints)) {\n    return [endpoints];\n  }\n\n  if (typeof endpoints === \"object\") {\n    return Object.values(endpoints).flatMap((endpoint) => flattenIntegrationEndpoints(endpoint));\n  }\n\n  return [];\n}\n\nexport function defineIntegration<\n  const TSchema extends FarmIntegrationSchema | undefined,\n  const TConfig,\n  TIntegration extends FarmIntegrationInput<TSchema, TConfig, any>,\n>(\n  integration: TIntegration &\n    FarmIntegrationInput<TSchema, TConfig, NoInfer<TIntegration[\"instance\"]>>,\n): DefinedIntegration<TIntegration, TSchema>;\nexport function defineIntegration<\n  const TSchema extends FarmIntegrationSchema | undefined,\n  const TConfig,\n  TIntegration extends FarmIntegrationInput<TSchema, TConfig, any>,\n>(\n  integration: TIntegration &\n    FarmIntegrationInput<TSchema, TConfig, NoInfer<TIntegration[\"instance\"]>>,\n): DefinedIntegration<TIntegration, TSchema> {\n  const category = integration.category ?? integration.slot;\n\n  if (!category) {\n    throw new Error(\"Integration category is required.\");\n  }\n\n  if (integration.category && integration.slot && integration.category !== integration.slot) {\n    throw new Error(\"Integration category and slot must match when both are provided.\");\n  }\n\n  const routeFactory = createIntegrationRoute(integration.schema);\n  const routes =\n    typeof integration.routes === \"function\"\n      ? integration.routes({\n          route: routeFactory,\n          integrationRoute: routeFactory,\n        })\n      : integration.routes;\n  const endpoints =\n    typeof integration.endpoints === \"function\"\n      ? integration.endpoints({\n          endpoint: routeFactory,\n          route: routeFactory,\n          integrationRoute: routeFactory,\n        })\n      : integration.endpoints;\n  const endpointRoutes = flattenIntegrationEndpoints(endpoints);\n  const allRoutes =\n    routes?.length || endpointRoutes.length\n      ? ([...(routes || []), ...endpointRoutes] as readonly FarmIntegrationRoute[])\n      : undefined;\n\n  for (const route of allRoutes || []) {\n    assertUniqueRouteParameters(route.path, \"api\");\n    validateConfigRouteSource(route.path, `Integration route \"${route.path}\"`);\n    assertTerminalCatchAll(route.path, \"api\");\n  }\n\n  const derivedApi =\n    integration.api ||\n    (allRoutes?.length\n      ? integrationApi.fromRoutes(\n          allRoutes as unknown as ReadonlyArray<{\n            path: string;\n            __operation: FarmIntegrationAPIOperation<any, any, any, any, any>;\n          }>,\n        )\n      : undefined);\n\n  return {\n    kind: \"farm-integration\",\n    ...integration,\n    endpoints,\n    routes: allRoutes,\n    api: derivedApi,\n    category,\n    slot: category,\n  } as unknown as DefinedIntegration<TIntegration, TSchema>;\n}\n\nexport function isFarmIntegration(value: unknown): value is FarmIntegration {\n  return (\n    !!value && typeof value === \"object\" && (value as FarmIntegration).kind === \"farm-integration\"\n  );\n}\n\nexport function resolveIntegrationPlugins(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): FarmPlugin[] {\n  if (!integrations) {\n    return [];\n  }\n\n  const plugins: FarmPlugin[] = [];\n  for (const [key, integration] of Object.entries(integrations)) {\n    if (!integration || !isFarmIntegration(integration)) {\n      continue;\n    }\n\n    const owner = createIntegrationPluginOwner(key, integration, \"lifecycle\");\n    plugins.push(withIntegrationPluginOwner(createIntegrationPlugin(key, integration), owner));\n    plugins.push(...resolveIntegrationPluginContributions(key, integration));\n  }\n\n  return plugins;\n}\n\nfunction resolveIntegrationPluginContributions(\n  key: string,\n  integration: FarmIntegration<any, any>,\n): FarmPlugin[] {\n  const contributions = integration.plugins;\n  if (!contributions) return [];\n  if (!Array.isArray(contributions)) {\n    throw new TypeError(`Integration \"${key}\" plugins must be an array`);\n  }\n\n  const names = new Set<string>();\n  return contributions.map((plugin, index) => {\n    if (!plugin || typeof plugin !== \"object\" || typeof plugin.name !== \"string\") {\n      throw new TypeError(`Integration \"${key}\" plugin at index ${index} is invalid`);\n    }\n    const name = plugin.name.trim();\n    if (!name) {\n      throw new TypeError(`Integration \"${key}\" plugin at index ${index} requires a name`);\n    }\n    if (names.has(name)) {\n      throw new Error(`Integration \"${key}\" contributes duplicate plugin name \"${name}\"`);\n    }\n    names.add(name);\n\n    return withIntegrationPluginOwner(\n      plugin,\n      createIntegrationPluginOwner(key, integration, \"contribution\"),\n      createIntegrationPluginContext(key, integration),\n    );\n  });\n}\n\nfunction createIntegrationPluginOwner(\n  key: string,\n  integration: FarmIntegration<any, any>,\n  source: FarmIntegrationPluginOwner[\"source\"],\n): Readonly<FarmIntegrationPluginOwner> {\n  return Object.freeze({\n    key,\n    category: integration.category,\n    type: integration.type,\n    source,\n    serverRuntime: integration.serverRuntime !== false,\n  });\n}\n\nfunction createIntegrationPluginContext(\n  key: string,\n  integration: FarmIntegration<any, any>,\n): Readonly<FarmPluginIntegrationContext> {\n  return Object.freeze({\n    key,\n    category: integration.category,\n    type: integration.type,\n    instance: integration.instance,\n    serverRuntime: integration.serverRuntime !== false,\n  });\n}\n\nfunction withIntegrationPluginOwner(\n  plugin: FarmPlugin<any, any, any, any, any, boolean>,\n  owner: Readonly<FarmIntegrationPluginOwner>,\n  integration?: Readonly<FarmPluginIntegrationContext>,\n): FarmPlugin {\n  const descriptors = Object.getOwnPropertyDescriptors(plugin);\n  Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_OWNER);\n  Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME);\n  const ownedPlugin = Object.create(Object.getPrototypeOf(plugin), descriptors) as FarmPlugin;\n  Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_OWNER, { value: owner });\n  Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME, {\n    value: owner.serverRuntime,\n  });\n  if (integration) {\n    setFarmPluginIntegrationContext(ownedPlugin, integration);\n  }\n  return ownedPlugin;\n}\n\nexport function getIntegrationProviders(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): FarmIntegrationProvider[] {\n  if (!integrations) {\n    return [];\n  }\n\n  const providers: FarmIntegrationProvider[] = [];\n  for (const integration of Object.values(integrations)) {\n    if (!integration || !isFarmIntegration(integration) || !integration.providers?.length) {\n      continue;\n    }\n\n    for (const provider of integration.providers) {\n      providers.push({\n        name: provider.name,\n        type: provider.type,\n        props: provider.props,\n        supportsIsolatedHydration: provider.supportsIsolatedHydration,\n        component: provider.component,\n      });\n    }\n  }\n\n  return providers;\n}\n\nexport function isFarmIntegrationProviderComponentReference(\n  value: FarmIntegrationProvider[\"component\"],\n): value is FarmIntegrationProviderComponentReference {\n  return Boolean(\n    value &&\n    typeof value === \"object\" &&\n    \"module\" in value &&\n    typeof value.module === \"string\" &&\n    value.module.length > 0,\n  );\n}\n\nexport function getIntegrationDocumentNavigationMatchers(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): string[] {\n  if (!integrations) {\n    return [];\n  }\n\n  const matchers: string[] = [];\n  for (const integration of Object.values(integrations)) {\n    if (\n      !integration ||\n      !isFarmIntegration(integration) ||\n      !integration.documentNavigations?.length\n    ) {\n      continue;\n    }\n\n    for (const navigation of integration.documentNavigations) {\n      const items = Array.isArray(navigation.matcher) ? navigation.matcher : [navigation.matcher];\n\n      for (const item of items) {\n        matchers.push(item);\n      }\n    }\n  }\n\n  return matchers;\n}\n\nexport function getIntegrationSchemas(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): Record<string, FarmIntegrationSchema> {\n  if (!integrations) {\n    return {};\n  }\n\n  const schemaEntries = Object.entries(integrations)\n    .map(([key, integration]) => {\n      const schema = integration && isFarmIntegration(integration) ? integration.schema : undefined;\n      return schema ? ([key, schema] as const) : null;\n    })\n    .filter((value): value is readonly [string, FarmIntegrationSchema] => value !== null);\n\n  return Object.fromEntries(schemaEntries);\n}\n\nexport function getRegisteredIntegrationRuntime(\n  key: string,\n): RegisteredIntegrationRuntime | undefined {\n  return getIntegrationRuntimeRegistry().get(key);\n}\n\nexport function getRegisteredIntegrations(): Record<string, FarmIntegration> {\n  return Object.fromEntries(\n    Array.from(getIntegrationRuntimeRegistry().entries()).map(([key, runtime]) => [\n      key,\n      runtime.integration,\n    ]),\n  );\n}\n\nexport function getRegisteredIntegrationSchemas(): Record<string, FarmIntegrationSchema> {\n  return getIntegrationSchemas(getRegisteredIntegrations());\n}\n\nexport function matchIntegrationRoute(\n  integrations: FarmIntegrationsUserConfig | undefined,\n  input: {\n    pathname: string;\n    method?: string;\n  },\n): {\n  key: string;\n  integration: FarmIntegration;\n  route: {\n    path: string;\n    methods: readonly string[];\n  };\n  params: FarmIntegrationRouteParams;\n} | null {\n  if (!integrations) {\n    return null;\n  }\n\n  for (const [key, integration] of Object.entries(integrations)) {\n    if (!integration || !isFarmIntegration(integration)) {\n      continue;\n    }\n\n    const routes = normalizeIntegrationRoutes(integration.routes || []);\n\n    for (const route of routes) {\n      if (!matchesMethod(route.methods, input.method)) {\n        continue;\n      }\n\n      const params = extractPathParams(route.path, input.pathname);\n      if (!params) {\n        continue;\n      }\n\n      return {\n        key,\n        integration,\n        route: {\n          path: route.path,\n          methods: route.methods,\n        },\n        params,\n      };\n    }\n  }\n\n  return null;\n}\n\nexport function matchRegisteredIntegrationRoute(input: { pathname: string; method?: string }): {\n  key: string;\n  integration: FarmIntegration;\n  route: {\n    path: string;\n    methods: readonly string[];\n  };\n  params: FarmIntegrationRouteParams;\n} | null {\n  return matchIntegrationRoute(getRegisteredIntegrations(), input);\n}\n\nfunction createClientSafeIntegrationAPI(\n  api: FarmIntegrationAPI | undefined,\n): FarmIntegrationAPI | undefined {\n  if (!api) {\n    return undefined;\n  }\n\n  const entries = Object.entries(api as Record<string, unknown>).map(([key, value]) => {\n    if (\n      value &&\n      typeof value === \"object\" &&\n      (value as FarmIntegrationAPIOperation<any, any, any, any, any>).kind ===\n        \"farm-integration-api-operation\"\n    ) {\n      const operation = value as FarmIntegrationAPIOperation<any, any, any, any, any>;\n      return [\n        key,\n        defineIntegrationAPIOperation({\n          path: operation.path,\n          method: operation.method,\n          bodyFormat: operation.bodyFormat,\n          responseFormat: operation.responseFormat,\n          credentials: operation.credentials,\n          isServer: operation.isServer,\n        }),\n      ];\n    }\n\n    if (value && typeof value === \"object\") {\n      return [key, createClientSafeIntegrationAPI(value as FarmIntegrationAPI)];\n    }\n\n    return [key, value];\n  });\n\n  return Object.fromEntries(entries) as FarmIntegrationAPI;\n}\n\nexport function getRegisteredIntegrationAPIManifest(): Record<string, FarmIntegrationAPI> {\n  const manifestEntries = Object.entries(getRegisteredIntegrations())\n    .map(([key, integration]) => {\n      const api = createClientSafeIntegrationAPI(integration.api);\n      return api ? ([key, api] as const) : null;\n    })\n    .filter((value): value is readonly [string, FarmIntegrationAPI] => value !== null);\n\n  return Object.fromEntries(manifestEntries);\n}\n\ntype IntegrationLifecycleCleanup = () => MaybePromise<void>;\n\nfunction getIntegrationRuntimeEnv(): Record<string, string | undefined> {\n  return typeof process !== \"undefined\" ? process.env : {};\n}\n\nfunction isIntegrationConfigDefinition(\n  value: unknown,\n): value is FarmIntegrationConfigDefinition<unknown> {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (\"schema\" in value ||\n      \"env\" in value ||\n      \"defaults\" in value ||\n      \"input\" in value ||\n      \"resolve\" in value)\n  );\n}\n\nfunction mergeIntegrationConfigValue(current: unknown, next: unknown): unknown {\n  if (next === undefined) {\n    return current;\n  }\n\n  if (isPlainIntegrationConfigObject(current) && isPlainIntegrationConfigObject(next)) {\n    return {\n      ...current,\n      ...next,\n    };\n  }\n\n  return next;\n}\n\nfunction isPlainIntegrationConfigObject(value: unknown): value is Record<string, unknown> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nasync function resolveIntegrationConfigPart<TValue>(\n  value: TValue | ((context: FarmIntegrationConfigContext) => MaybePromise<TValue>) | undefined,\n  context: FarmIntegrationConfigContext,\n): Promise<TValue | undefined> {\n  if (typeof value === \"function\") {\n    return (value as (context: FarmIntegrationConfigContext) => MaybePromise<TValue>)(context);\n  }\n\n  return value;\n}\n\nfunction resolveIntegrationEnvConfig(\n  env: Record<string, string | readonly string[]> | undefined,\n): Record<string, string> | undefined {\n  if (!env) {\n    return undefined;\n  }\n\n  const runtimeEnv = getIntegrationRuntimeEnv();\n  const config: Record<string, string> = {};\n\n  for (const [key, names] of Object.entries(env)) {\n    const envNames = Array.isArray(names) ? names : [names];\n    const value = envNames.map((name) => runtimeEnv[name]).find((entry) => entry !== undefined);\n    if (value !== undefined) {\n      config[key] = value;\n    }\n  }\n\n  return config;\n}\n\nasync function parseIntegrationConfigSchema<TConfig>(\n  integration: FarmIntegration<any, any>,\n  schema: FarmIntegrationInputSchema<TConfig>,\n  value: unknown,\n): Promise<TConfig> {\n  const parser = schema.safeParseAsync || schema.safeParse;\n  if (parser) {\n    const result = await parser.call(schema, value);\n    if (result.success) {\n      return result.data;\n    }\n\n    throw createIntegrationConfigValidationError(integration, result.error);\n  }\n\n  if (schema[\"~standard\"]?.validate) {\n    const result = await schema[\"~standard\"].validate(value);\n    if (\"value\" in result) {\n      return result.value;\n    }\n\n    throw createIntegrationConfigValidationError(integration, {\n      issues: result.issues,\n    });\n  }\n\n  if (schema.parse) {\n    try {\n      return await schema.parse(value);\n    } catch (error) {\n      throw createIntegrationConfigValidationError(\n        integration,\n        normalizeIntegrationValidationError(error),\n      );\n    }\n  }\n\n  throw new Error(\n    `Integration \"${integration.type}\" config schema must expose safeParse, safeParseAsync, parse, or ~standard.validate.`,\n  );\n}\n\nfunction createIntegrationConfigValidationError(\n  integration: FarmIntegration<any, any>,\n  error: FarmIntegrationValidationErrorLike,\n) {\n  const issues =\n    Array.isArray(error.issues) && error.issues.length > 0\n      ? error.issues\n          .map((issue) => {\n            const normalizedPath = normalizeIntegrationValidationPath(issue.path);\n            const path = normalizedPath.length ? `${normalizedPath.join(\".\")}: ` : \"\";\n            return `${path}${issue.message || \"Invalid config\"}`;\n          })\n          .join(\"; \")\n      : error.message || \"Invalid config\";\n\n  return new Error(`Integration \"${integration.type}\" config validation failed: ${issues}`);\n}\n\nasync function resolveIntegrationConfig<TConfig>(\n  integration: FarmIntegration<any, TConfig>,\n  context: FarmIntegrationConfigContext,\n): Promise<TConfig> {\n  const config = integration.config;\n  if (!config) {\n    return undefined as TConfig;\n  }\n\n  if (!isIntegrationConfigDefinition(config)) {\n    return parseIntegrationConfigSchema(integration, config, {});\n  }\n\n  let value: unknown = {};\n  value = mergeIntegrationConfigValue(\n    value,\n    await resolveIntegrationConfigPart(config.defaults, context),\n  );\n  value = mergeIntegrationConfigValue(value, resolveIntegrationEnvConfig(config.env));\n  value = mergeIntegrationConfigValue(\n    value,\n    await resolveIntegrationConfigPart(config.input, context),\n  );\n  value = mergeIntegrationConfigValue(value, await config.resolve?.(context));\n\n  return config.schema\n    ? parseIntegrationConfigSchema(integration, config.schema, value)\n    : (value as TConfig);\n}\n\nfunction createIntegrationLifecycleLogger(\n  integration: FarmIntegration<any, any>,\n  phase: FarmIntegrationLogPhase,\n): FarmIntegrationLifecycleLogger {\n  const write = (\n    level: FarmIntegrationLifecycleLogLevel,\n    message: string,\n    meta?: Record<string, unknown>,\n  ) => {\n    if (!integration.log) {\n      return;\n    }\n\n    void Promise.resolve(\n      integration.log({\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase,\n        level,\n        message,\n        meta,\n        context: new Map(),\n      }),\n    ).catch(() => {});\n  };\n\n  return {\n    info(message, meta) {\n      write(\"info\", message, meta);\n    },\n    warn(message, meta) {\n      write(\"warn\", message, meta);\n    },\n    error(message, meta) {\n      write(\"error\", message, meta);\n    },\n  };\n}\n\nasync function emitIntegrationLog(\n  integration: FarmIntegration,\n  event: FarmIntegrationLogEvent,\n): Promise<void> {\n  try {\n    await integration.log?.(event);\n  } catch {\n    // Integration logging is optional observability. A failed sink must not\n    // block lifecycle startup, request handlers, responses, or cleanup.\n  }\n}\n\nconst INTEGRATION_DATA_HEADER = \"x-farm-integration-data\";\nconst INTEGRATION_DATA_HEADER_MAX_LENGTH = 16 * 1024;\nconst BLOCKED_INTEGRATION_DATA_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nfunction isFarmIntegrationData(value: unknown): value is FarmIntegrationData {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPlainIntegrationDataObject(value: unknown): value is Record<string, unknown> {\n  if (!isFarmIntegrationData(value)) {\n    return false;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction sanitizeIntegrationDataValue(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map((item) => sanitizeIntegrationDataValue(item));\n  }\n\n  if (!isPlainIntegrationDataObject(value)) {\n    return value;\n  }\n\n  const sanitized: Record<string, unknown> = {};\n  for (const [key, item] of Object.entries(value)) {\n    if (BLOCKED_INTEGRATION_DATA_KEYS.has(key)) {\n      continue;\n    }\n\n    sanitized[key] = sanitizeIntegrationDataValue(item);\n  }\n\n  return sanitized;\n}\n\nfunction normalizeIntegrationData(value: FarmIntegrationData | undefined): FarmIntegrationData {\n  if (!isFarmIntegrationData(value)) {\n    return {};\n  }\n\n  const sanitized = sanitizeIntegrationDataValue(value);\n  return isFarmIntegrationData(sanitized) ? sanitized : {};\n}\n\nfunction getIntegrationDataHeaderByteLength(value: string): number {\n  return new TextEncoder().encode(value).byteLength;\n}\n\nfunction parseIntegrationDataHeader(request: Request): FarmIntegrationData {\n  const raw = request.headers.get(INTEGRATION_DATA_HEADER);\n  if (!raw) {\n    return {};\n  }\n\n  if (getIntegrationDataHeaderByteLength(raw) > INTEGRATION_DATA_HEADER_MAX_LENGTH) {\n    return {};\n  }\n\n  try {\n    const value = JSON.parse(raw);\n    return normalizeIntegrationData(value);\n  } catch {\n    return {};\n  }\n}\n\nfunction resolveIntegrationData(request: Request, data?: FarmIntegrationData): FarmIntegrationData {\n  return {\n    ...parseIntegrationDataHeader(request),\n    ...normalizeIntegrationData(data),\n  };\n}\n\nfunction createIntegrationPlugin(integrationKey: string, integration: FarmIntegration): FarmPlugin {\n  const routes = normalizeIntegrationRoutes(integration.routes || []);\n  const middleware = [...(integration.middleware || [])];\n  const cleanupCallbacks: IntegrationLifecycleCleanup[] = [];\n  let integrationConfigPromise: Promise<unknown> | undefined;\n\n  const runCleanup = async () => {\n    const callbacks = cleanupCallbacks.splice(0).reverse();\n    for (const callback of callbacks) {\n      await callback();\n    }\n  };\n\n  const createLifecycleContext = async (\n    context: FarmPluginContext,\n    phase: FarmIntegrationLogPhase,\n    options: { reason?: string } = {},\n  ): Promise<FarmIntegrationLifecycleContext> => {\n    const args = createIntegrationRouteArgs({\n      integration,\n      config: context.config,\n    });\n    const configContext: FarmIntegrationConfigContext = {\n      key: integrationKey,\n      integration,\n      appConfig: context.config,\n      config: context.config,\n      args,\n      env: getIntegrationRuntimeEnv(),\n      isDev: context.isDev,\n      isProd: context.isProd,\n    };\n    integrationConfigPromise ??= resolveIntegrationConfig(integration, configContext);\n\n    return {\n      ...configContext,\n      integrationConfig: await integrationConfigPromise,\n      log: createIntegrationLifecycleLogger(integration, phase),\n      reason: options.reason,\n      async cleanup(callback) {\n        if (callback) {\n          cleanupCallbacks.push(callback);\n          return;\n        }\n\n        await runCleanup();\n      },\n    };\n  };\n\n  const plugin: FarmPlugin = {\n    name: `farm:integration:${integration.category}:${integration.type}`,\n    enforce: \"pre\",\n\n    async init(context) {\n      getIntegrationRuntimeRegistry().set(integrationKey, {\n        integration,\n        config: context.config,\n        isDev: context.isDev,\n        isProd: context.isProd,\n      });\n\n      await createLifecycleContext(context, \"validate\");\n\n      if (integration.validate) {\n        await integration.validate(await createLifecycleContext(context, \"validate\"));\n      }\n\n      if (integration.setup) {\n        await integration.setup(await createLifecycleContext(context, \"setup\"));\n      }\n\n      if (!integration.log) {\n        return;\n      }\n\n      for (const route of routes) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"registered\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          context: new Map(),\n        });\n      }\n\n      for (const entry of middleware) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"registered\",\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          context: new Map(),\n        });\n      }\n    },\n\n    async ready(context) {\n      if (integration.ready) {\n        await integration.ready(await createLifecycleContext(context, \"ready\"));\n      }\n    },\n\n    async shutdown(payload, context) {\n      try {\n        if (integration.dispose) {\n          await integration.dispose(\n            await createLifecycleContext(context, \"dispose\", {\n              reason: payload.reason,\n            }),\n          );\n        }\n      } finally {\n        await runCleanup();\n      }\n    },\n\n    async beforeRequest(req, res, context) {\n      const fullUrl = `http://${req.headers.host || \"localhost\"}${req.url || \"/\"}`;\n      const url = new URL(fullUrl);\n      const pathname = url.pathname;\n      const requestId = getRequestId(req);\n      let bodyLoaded = false;\n      let requestBody: Buffer | undefined;\n\n      const getRequestBody = async () => {\n        if (!bodyLoaded) {\n          bodyLoaded = true;\n          if (req.method && req.method !== \"GET\" && req.method !== \"HEAD\") {\n            requestBody = await readNodeRequestBody(\n              req,\n              resolveFarmServerConfig(context.config.server).bodySizeLimit,\n            );\n          }\n        }\n\n        return requestBody;\n      };\n\n      const createHandlerRequest = async (): Promise<Request | null> => {\n        try {\n          return createWebRequest(req, fullUrl, await getRequestBody());\n        } catch (error) {\n          const response = createFarmRequestBodyErrorResponse(error);\n          if (!response) throw error;\n          await sendWebResponse(res, response);\n          return null;\n        }\n      };\n\n      for (const entry of middleware) {\n        const params = resolveMatcherParams(entry.matcher, pathname);\n        if (!params) {\n          continue;\n        }\n\n        const request = await createHandlerRequest();\n        if (!request) return;\n        const handlerContext = createIntegrationHandlerContext({\n          integration,\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          request,\n          rawRequest: req,\n          params,\n          pathname,\n          requestId,\n          pluginContext: context,\n        });\n        const startedAt = Date.now();\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:start\",\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          request,\n          requestId,\n          context: handlerContext.req.snapshot(),\n        });\n\n        try {\n          const response = await entry.handler(request, handlerContext);\n\n          // A middleware that returns `void` lets the request continue to the\n          // downstream route/page handler, so its rotated `Set-Cookie` values\n          // cannot ride on its own response. It hands them to the runtime via\n          // forwardIntegrationSetCookies; merge them onto the Node response now\n          // (appending, so a later short-circuit Response or the page renderer\n          // can add its own Set-Cookie without dropping these). Read-and-clear\n          // so multiple middleware for one request each forward at most once.\n          const forwardedCookies = takeForwardedIntegrationSetCookies(handlerContext);\n          if (forwardedCookies.length > 0) {\n            const setCookieHeaders = new Headers();\n            for (const cookie of forwardedCookies) {\n              setCookieHeaders.append(\"set-cookie\", cookie);\n            }\n            applyWebResponseHeaders(res, setCookieHeaders, { appendSetCookie: true });\n          }\n\n          if (response) {\n            await sendWebResponse(res, response);\n            await emitIntegrationLog(integration, {\n              category: integration.category,\n              slot: integration.category,\n              type: integration.type,\n              phase: \"request:end\",\n              route: {\n                kind: \"middleware\",\n                path: normalizeMatcher(entry.matcher),\n                methods: [\"ALL\"],\n              },\n              request,\n              response,\n              requestId,\n              durationMs: Date.now() - startedAt,\n              context: handlerContext.req.snapshot(),\n            });\n            return;\n          }\n\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:end\",\n            route: {\n              kind: \"middleware\",\n              path: normalizeMatcher(entry.matcher),\n              methods: [\"ALL\"],\n            },\n            request,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            context: handlerContext.req.snapshot(),\n          });\n        } catch (error) {\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:error\",\n            route: {\n              kind: \"middleware\",\n              path: normalizeMatcher(entry.matcher),\n              methods: [\"ALL\"],\n            },\n            request,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            error,\n            context: handlerContext.req.snapshot(),\n          });\n          throw error;\n        }\n      }\n\n      for (const route of routes) {\n        const params = matchesMethod(route.methods, req.method)\n          ? extractPathParams(route.path, pathname)\n          : null;\n        if (!params) {\n          continue;\n        }\n\n        const request = await createHandlerRequest();\n        if (!request) return;\n        const handlerContext = createIntegrationHandlerContext({\n          integration,\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          rawRequest: req,\n          params,\n          pathname,\n          requestId,\n          pluginContext: context,\n        });\n        const startedAt = Date.now();\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:start\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          requestId,\n          context: handlerContext.req.snapshot(),\n        });\n\n        try {\n          const validation = await validateIntegrationRouteInput(route, request, url);\n          if (!validation.success) {\n            await sendWebResponse(res, validation.response);\n            await emitIntegrationLog(integration, {\n              category: integration.category,\n              slot: integration.category,\n              type: integration.type,\n              phase: \"request:end\",\n              route: {\n                kind: \"route\",\n                path: route.path,\n                methods: route.methods,\n              },\n              request,\n              response: validation.response,\n              requestId,\n              durationMs: Date.now() - startedAt,\n              context: handlerContext.req.snapshot(),\n            });\n            return;\n          }\n          handlerContext.input = validation.input;\n\n          for (const middlewareEntry of route.middleware || []) {\n            const middlewareResponse = await middlewareEntry.handler(request, handlerContext);\n            if (middlewareResponse) {\n              await sendWebResponse(res, middlewareResponse);\n              await emitIntegrationLog(integration, {\n                category: integration.category,\n                slot: integration.category,\n                type: integration.type,\n                phase: \"request:end\",\n                route: {\n                  kind: \"route\",\n                  path: route.path,\n                  methods: route.methods,\n                },\n                request,\n                response: middlewareResponse,\n                requestId,\n                durationMs: Date.now() - startedAt,\n                context: handlerContext.req.snapshot(),\n              });\n              return;\n            }\n          }\n\n          const beforeResponse = await runIntegrationRouteBeforeHooks(\n            route,\n            request,\n            handlerContext,\n          );\n          if (beforeResponse) {\n            const response = await runIntegrationRouteAfterHooks(\n              route,\n              request,\n              handlerContext,\n              beforeResponse,\n            );\n            await sendWebResponse(res, response);\n            await emitIntegrationLog(integration, {\n              category: integration.category,\n              slot: integration.category,\n              type: integration.type,\n              phase: \"request:end\",\n              route: {\n                kind: \"route\",\n                path: route.path,\n                methods: route.methods,\n              },\n              request,\n              response,\n              requestId,\n              durationMs: Date.now() - startedAt,\n              context: handlerContext.req.snapshot(),\n            });\n            return;\n          }\n\n          const handlerResponse = await route.handler(request, handlerContext);\n          const response = await runIntegrationRouteAfterHooks(\n            route,\n            request,\n            handlerContext,\n            handlerResponse,\n          );\n          await sendWebResponse(res, response);\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:end\",\n            route: {\n              kind: \"route\",\n              path: route.path,\n              methods: route.methods,\n            },\n            request,\n            response,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            context: handlerContext.req.snapshot(),\n          });\n          return;\n        } catch (error) {\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:error\",\n            route: {\n              kind: \"route\",\n              path: route.path,\n              methods: route.methods,\n            },\n            request,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            error,\n            context: handlerContext.req.snapshot(),\n          });\n          throw error;\n        }\n      }\n    },\n  };\n\n  Object.defineProperty(plugin, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME, {\n    value: integration.serverRuntime !== false,\n  });\n\n  return plugin;\n}\n\nfunction createIntegrationHandlerContext(input: {\n  integration: FarmIntegration;\n  route: FarmIntegrationHandlerContext[\"route\"];\n  request: Request;\n  rawRequest: FarmRequest;\n  params: FarmIntegrationRouteParams;\n  pathname: string;\n  requestId: string;\n  pluginContext: FarmPluginContext;\n}): FarmIntegrationHandlerContext {\n  const req = createIntegrationRequestContextStore(\n    input.rawRequest,\n    input.request,\n    input.pluginContext,\n  );\n\n  return {\n    request: input.request,\n    requestId: input.requestId,\n    url: new URL(input.request.url),\n    pathname: input.pathname,\n    method: input.request.method,\n    params: input.params,\n    input: {},\n    args: createIntegrationRouteArgs({\n      integration: input.integration,\n      config: input.pluginContext.config,\n    }),\n    data: resolveIntegrationData(input.request),\n    integration: {\n      category: input.integration.category,\n      slot: input.integration.category,\n      type: input.integration.type,\n      instance: input.integration.instance,\n    },\n    route: input.route,\n    req,\n    requestContext: req,\n    config: input.pluginContext.config,\n    isDev: input.pluginContext.isDev,\n    isProd: input.pluginContext.isProd,\n  };\n}\n\ntype NormalizedIntegrationRoute = Omit<FarmIntegrationRoute, \"method\" | \"methods\"> & {\n  methods: readonly string[];\n  __operation?: FarmIntegrationAPIOperation<any, any, any, any, any>;\n};\n\nfunction normalizeIntegrationRoutes(\n  routes: readonly FarmIntegrationRoute[],\n): NormalizedIntegrationRoute[] {\n  return routes\n    .map((route, index) => {\n      // Raw FarmIntegration objects and direct dispatch also pass through here.\n      assertUniqueRouteParameters(route.path, \"api\");\n      return {\n        index,\n        route: {\n          ...route,\n          methods: normalizeIntegrationRouteMethods(route),\n          input: normalizeIntegrationRouteInputSchemas(route),\n        },\n        specificity: getRoutePatternSpecificity(route.path, \"api\"),\n      };\n    })\n    .sort(\n      (left, right) =>\n        compareRouteSpecificity(left.specificity, right.specificity) || left.index - right.index,\n    )\n    .map(({ route }) => route);\n}\n\nfunction normalizeIntegrationRouteMethods(route: Pick<FarmIntegrationRoute, \"method\" | \"methods\">) {\n  const input =\n    route.methods && route.methods.length > 0\n      ? [...route.methods]\n      : route.method\n        ? [route.method]\n        : [\"ALL\"];\n\n  return input.map((method) => String(method).toUpperCase());\n}\n\nfunction normalizeIntegrationRouteInputSchemas<TBody, TQuery>(\n  route: Pick<FarmIntegrationRoute<TBody, TQuery>, \"body\" | \"query\" | \"input\">,\n): FarmIntegrationRouteInputSchemas<TBody, TQuery> | undefined {\n  const input: FarmIntegrationRouteInputSchemas<TBody, TQuery> = {\n    ...route.input,\n  };\n\n  if (route.body) {\n    input.body = route.body;\n  }\n\n  if (route.query) {\n    input.query = route.query;\n  }\n\n  return input.body || input.query ? input : undefined;\n}\n\ntype IntegrationRouteInputValidationResult =\n  | {\n      success: true;\n      input: FarmIntegrationRouteInput;\n    }\n  | {\n      success: false;\n      response: Response;\n    };\n\nasync function validateIntegrationRouteInput(\n  route: NormalizedIntegrationRoute,\n  request: Request,\n  url: URL,\n): Promise<IntegrationRouteInputValidationResult> {\n  if (request.method.toUpperCase() === \"QUERY\" && !request.headers.has(\"content-type\")) {\n    return {\n      success: false,\n      response: Response.json(\n        {\n          error: \"Invalid QUERY request\",\n          message: \"QUERY requests must include a Content-Type header.\",\n        },\n        { status: 400 },\n      ),\n    };\n  }\n\n  const schemas = route.input;\n  if (!schemas?.body && !schemas?.query) {\n    return {\n      success: true,\n      input: {},\n    };\n  }\n\n  const input: FarmIntegrationRouteInput = {};\n  const issues: FarmIntegrationValidationIssue[] = [];\n\n  if (schemas.query) {\n    const queryResult = await parseIntegrationInputSchema(\n      \"query\",\n      schemas.query,\n      createQueryInput(url.searchParams),\n    );\n    if (queryResult.success) {\n      input.query = queryResult.data;\n    } else {\n      issues.push(...queryResult.issues);\n    }\n  }\n\n  if (schemas.body) {\n    const bodyInput = await readIntegrationValidationBody(\n      request,\n      getIntegrationRouteBodyFormat(route),\n    );\n\n    if (bodyInput.success) {\n      const bodyResult = await parseIntegrationInputSchema(\"body\", schemas.body, bodyInput.data);\n      if (bodyResult.success) {\n        input.body = bodyResult.data;\n      } else {\n        issues.push(...bodyResult.issues);\n      }\n    } else {\n      issues.push(bodyInput.issue);\n    }\n  }\n\n  if (issues.length > 0) {\n    return {\n      success: false,\n      response: createIntegrationValidationResponse(issues),\n    };\n  }\n\n  return {\n    success: true,\n    input,\n  };\n}\n\nasync function parseIntegrationInputSchema<TValue>(\n  source: FarmIntegrationRouteInputSource,\n  schema: FarmIntegrationInputSchema<TValue>,\n  value: unknown,\n): Promise<\n  | {\n      success: true;\n      data: TValue;\n    }\n  | {\n      success: false;\n      issues: FarmIntegrationValidationIssue[];\n    }\n> {\n  const parser = schema.safeParseAsync || schema.safeParse;\n  if (parser) {\n    const result = await parser.call(schema, value);\n    if (result.success) {\n      return {\n        success: true,\n        data: result.data,\n      };\n    }\n\n    return {\n      success: false,\n      issues: normalizeIntegrationValidationIssues(source, result.error),\n    };\n  }\n\n  if (schema[\"~standard\"]?.validate) {\n    const result = await schema[\"~standard\"].validate(value);\n    if (\"value\" in result) {\n      return {\n        success: true,\n        data: result.value,\n      };\n    }\n\n    return {\n      success: false,\n      issues: normalizeIntegrationValidationIssues(source, {\n        issues: result.issues,\n      }),\n    };\n  }\n\n  if (schema.parse) {\n    try {\n      return {\n        success: true,\n        data: await schema.parse(value),\n      };\n    } catch (error) {\n      return {\n        success: false,\n        issues: normalizeIntegrationValidationIssues(\n          source,\n          normalizeIntegrationValidationError(error),\n        ),\n      };\n    }\n  }\n\n  return {\n    success: false,\n    issues: [\n      {\n        source,\n        message:\n          \"Input schema must expose safeParse, safeParseAsync, parse, or ~standard.validate.\",\n      },\n    ],\n  };\n}\n\nfunction createIntegrationValidationResponse(issues: readonly FarmIntegrationValidationIssue[]) {\n  return Response.json(\n    {\n      error: \"Integration route input validation failed\",\n      issues,\n    },\n    {\n      status: 400,\n    },\n  );\n}\n\nfunction normalizeIntegrationValidationIssues(\n  source: FarmIntegrationRouteInputSource,\n  error: FarmIntegrationValidationErrorLike,\n): FarmIntegrationValidationIssue[] {\n  if (Array.isArray(error.issues) && error.issues.length > 0) {\n    return error.issues.map((issue) => ({\n      source,\n      path: normalizeIntegrationValidationPath(issue.path),\n      code: issue.code,\n      message: issue.message || \"Invalid input\",\n    }));\n  }\n\n  return [\n    {\n      source,\n      path: [],\n      message: error.message || \"Invalid input\",\n    },\n  ];\n}\n\nfunction normalizeIntegrationValidationPath(\n  path: readonly FarmIntegrationValidationPathSegment[] | undefined,\n): (string | number)[] {\n  return (path || []).map((segment) => {\n    const key =\n      typeof segment === \"object\" && segment !== null && \"key\" in segment ? segment.key : segment;\n    return typeof key === \"symbol\" ? key.description || key.toString() : key;\n  });\n}\n\nfunction normalizeIntegrationValidationError(error: unknown): FarmIntegrationValidationErrorLike {\n  if (error && typeof error === \"object\") {\n    return error as FarmIntegrationValidationErrorLike;\n  }\n\n  return {\n    message: error instanceof Error ? error.message : String(error || \"Invalid input\"),\n  };\n}\n\nasync function readIntegrationValidationBody(\n  request: Request,\n  format: FarmIntegrationAPIBodyFormat,\n): Promise<\n  | {\n      success: true;\n      data: unknown;\n    }\n  | {\n      success: false;\n      issue: FarmIntegrationValidationIssue;\n    }\n> {\n  if (request.method === \"GET\" || request.method === \"HEAD\" || format === \"none\") {\n    return {\n      success: true,\n      data: undefined,\n    };\n  }\n\n  try {\n    if (format === \"form\") {\n      return {\n        success: true,\n        data: createFormInput(await request.clone().formData()),\n      };\n    }\n\n    const text = await request.clone().text();\n    if (text.trim().length === 0) {\n      return {\n        success: true,\n        data: undefined,\n      };\n    }\n\n    return {\n      success: true,\n      data: JSON.parse(text),\n    };\n  } catch (error) {\n    return {\n      success: false,\n      issue: {\n        source: \"body\",\n        path: [],\n        message:\n          format === \"json\"\n            ? \"Expected a valid JSON request body.\"\n            : error instanceof Error && error.message\n              ? error.message\n              : \"Could not parse request body.\",\n      },\n    };\n  }\n}\n\nfunction getIntegrationRouteBodyFormat(route: NormalizedIntegrationRoute) {\n  return route.bodyFormat || route.__operation?.bodyFormat || \"json\";\n}\n\nfunction createIntegrationRouteArgs(input: {\n  integration: FarmIntegration;\n  config: FarmPluginContext[\"config\"];\n}): FarmIntegrationRouteArgs {\n  let clientPromise: Promise<unknown | undefined> | undefined;\n  let ormPromise: Promise<unknown> | undefined;\n\n  const getClient = () => {\n    clientPromise ??= import(\"./storage\").then(({ resolveStorageRuntimeClient }) =>\n      resolveStorageRuntimeClient(input.config.storage),\n    );\n    return clientPromise;\n  };\n\n  const getOrm = () => {\n    if (!input.integration.schema) {\n      throw new Error(\n        `Integration \"${input.integration.type}\" does not define a schema for ctx.args.db.`,\n      );\n    }\n\n    ormPromise ??= import(\"./integration-orm\").then(({ createIntegrationOrm }) =>\n      createIntegrationOrm({\n        schema: input.integration.schema!,\n        config: input.config,\n      }),\n    );\n    return ormPromise;\n  };\n\n  return {\n    db: createLazyIntegrationOrmClient(getOrm) as never,\n    getDb: getOrm as never,\n    storage: {\n      getClient,\n      getOrm: getOrm as never,\n    },\n  };\n}\n\nfunction createLazyIntegrationOrmClient(resolveOrm: () => Promise<unknown>) {\n  const modelProxyCache = new Map<PropertyKey, unknown>();\n\n  return new Proxy(\n    {},\n    {\n      get(_target, prop) {\n        if (prop === \"then\") {\n          return undefined;\n        }\n\n        if (prop === \"transaction\" || prop === \"batch\") {\n          return async (...args: unknown[]) => {\n            const orm = (await resolveOrm()) as Record<PropertyKey, unknown>;\n            const member = orm[prop];\n            if (typeof member !== \"function\") {\n              throw new Error(`Integration ORM does not expose \"${String(prop)}\".`);\n            }\n            return member.apply(orm, args);\n          };\n        }\n\n        if (prop === \"$driver\") {\n          return undefined;\n        }\n\n        if (!modelProxyCache.has(prop)) {\n          modelProxyCache.set(prop, createLazyIntegrationOrmModel(resolveOrm, prop));\n        }\n\n        return modelProxyCache.get(prop);\n      },\n    },\n  );\n}\n\nfunction createLazyIntegrationOrmModel(resolveOrm: () => Promise<unknown>, modelName: PropertyKey) {\n  return new Proxy(\n    {},\n    {\n      get(_target, prop) {\n        if (prop === \"then\") {\n          return undefined;\n        }\n\n        return async (...args: unknown[]) => {\n          const orm = (await resolveOrm()) as Record<PropertyKey, Record<PropertyKey, unknown>>;\n          const model = orm[modelName];\n          const member = model?.[prop];\n          if (typeof member !== \"function\") {\n            throw new Error(\n              `Integration ORM model \"${String(modelName)}\" does not expose \"${String(prop)}\".`,\n            );\n          }\n          return member.apply(model, args);\n        };\n      },\n    },\n  );\n}\n\nasync function runIntegrationRouteBeforeHooks(\n  route: NormalizedIntegrationRoute,\n  request: Request,\n  context: FarmIntegrationHandlerContext,\n): Promise<Response | undefined> {\n  const hookContext = context as FarmIntegrationRouteHookContext;\n  hookContext.response = undefined;\n\n  for (const hook of route.before || []) {\n    const response = await hook(request, hookContext);\n    if (response) {\n      hookContext.response = response;\n      return response;\n    }\n\n    if (hookContext.response) {\n      return hookContext.response;\n    }\n  }\n\n  return undefined;\n}\n\nasync function runIntegrationRouteAfterHooks(\n  route: NormalizedIntegrationRoute,\n  request: Request,\n  context: FarmIntegrationHandlerContext,\n  response: Response,\n): Promise<Response> {\n  const hookContext = context as FarmIntegrationRouteHookContext;\n  let currentResponse = response;\n\n  for (const hook of route.after || []) {\n    hookContext.response = currentResponse;\n    const nextResponse = await hook(request, hookContext);\n    currentResponse = nextResponse || hookContext.response || currentResponse;\n  }\n\n  hookContext.response = currentResponse;\n  return currentResponse;\n}\n\nfunction createQueryInput(searchParams: URLSearchParams): Record<string, string | string[]> {\n  const input: Record<string, string | string[]> = {};\n  searchParams.forEach((value, key) => {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") return;\n\n    const existing = input[key];\n    if (existing === undefined) {\n      input[key] = value;\n      return;\n    }\n\n    input[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n  });\n  return input;\n}\n\nfunction createFormInput(\n  formData: FormData,\n): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n  const input: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n  formData.forEach((value, key) => {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") return;\n\n    const existing = input[key];\n    if (existing === undefined) {\n      input[key] = value;\n      return;\n    }\n\n    input[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n  });\n  return input;\n}\n\nexport async function dispatchIntegrationRequest(\n  runtime: RegisteredIntegrationRuntime,\n  request: Request,\n  options: {\n    currentRequest?: Request;\n    data?: FarmIntegrationData;\n    internal?: boolean;\n  } = {},\n): Promise<Response | null> {\n  try {\n    request = await bufferFarmRequestBody(\n      request,\n      resolveFarmServerConfig(runtime.config.server).bodySizeLimit,\n    );\n  } catch (error) {\n    const response = createFarmRequestBodyErrorResponse(error);\n    if (response) return response;\n    throw error;\n  }\n\n  const integration = runtime.integration;\n  const url = new URL(request.url);\n  const pathname = url.pathname;\n  const requestId =\n    request.headers.get(\"x-request-id\") ||\n    options.currentRequest?.headers.get(\"x-request-id\") ||\n    String(Date.now());\n  const routes = normalizeIntegrationRoutes(integration.routes || []);\n  const middleware = [...(integration.middleware || [])];\n\n  // Cookies an integration middleware forwards via forwardIntegrationSetCookies\n  // while returning `void` (letting the request continue). They are merged onto\n  // whichever Response this dispatch ultimately returns so a server-side\n  // refresh/rotation reaches the browser instead of being dropped. Top-level\n  // and per-route middleware both contribute here; read-and-clear keeps each\n  // batch applied at most once.\n  const forwardedSetCookies: string[] = [];\n\n  for (const entry of middleware) {\n    const params = resolveMatcherParams(entry.matcher, pathname);\n    if (!params) {\n      continue;\n    }\n\n    const handlerContext = createServerIntegrationHandlerContext({\n      runtime,\n      route: {\n        kind: \"middleware\",\n        path: normalizeMatcher(entry.matcher),\n        methods: [\"ALL\"],\n      },\n      request,\n      params,\n      pathname,\n      requestId,\n      currentRequest: options.currentRequest,\n      data: options.data,\n      internal: options.internal === true,\n    });\n    const startedAt = Date.now();\n\n    await emitIntegrationLog(integration, {\n      category: integration.category,\n      slot: integration.category,\n      type: integration.type,\n      phase: \"request:start\",\n      route: {\n        kind: \"middleware\",\n        path: normalizeMatcher(entry.matcher),\n        methods: [\"ALL\"],\n      },\n      request,\n      requestId,\n      context: handlerContext.req.snapshot(),\n    });\n\n    try {\n      const response = await entry.handler(request, handlerContext);\n      forwardedSetCookies.push(...takeForwardedIntegrationSetCookies(handlerContext));\n      if (response) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:end\",\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          request,\n          response,\n          requestId,\n          durationMs: Date.now() - startedAt,\n          context: handlerContext.req.snapshot(),\n        });\n        return appendIntegrationForwardedCookies(response, forwardedSetCookies);\n      }\n\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:end\",\n        route: {\n          kind: \"middleware\",\n          path: normalizeMatcher(entry.matcher),\n          methods: [\"ALL\"],\n        },\n        request,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        context: handlerContext.req.snapshot(),\n      });\n    } catch (error) {\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:error\",\n        route: {\n          kind: \"middleware\",\n          path: normalizeMatcher(entry.matcher),\n          methods: [\"ALL\"],\n        },\n        request,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        error,\n        context: handlerContext.req.snapshot(),\n      });\n      throw error;\n    }\n  }\n\n  for (const route of routes) {\n    const params = matchesMethod(route.methods, request.method)\n      ? extractPathParams(route.path, pathname)\n      : null;\n    if (!params) {\n      continue;\n    }\n\n    const handlerContext = createServerIntegrationHandlerContext({\n      runtime,\n      route: {\n        kind: \"route\",\n        path: route.path,\n        methods: route.methods,\n      },\n      request,\n      params,\n      pathname,\n      requestId,\n      currentRequest: options.currentRequest,\n      data: options.data,\n      internal: options.internal === true,\n    });\n    const startedAt = Date.now();\n\n    await emitIntegrationLog(integration, {\n      category: integration.category,\n      slot: integration.category,\n      type: integration.type,\n      phase: \"request:start\",\n      route: {\n        kind: \"route\",\n        path: route.path,\n        methods: route.methods,\n      },\n      request,\n      requestId,\n      context: handlerContext.req.snapshot(),\n    });\n\n    try {\n      const validation = await validateIntegrationRouteInput(route, request, url);\n      if (!validation.success) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:end\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          response: validation.response,\n          requestId,\n          durationMs: Date.now() - startedAt,\n          context: handlerContext.req.snapshot(),\n        });\n        return appendIntegrationForwardedCookies(validation.response, forwardedSetCookies);\n      }\n      handlerContext.input = validation.input;\n\n      for (const middlewareEntry of route.middleware || []) {\n        const middlewareResponse = await middlewareEntry.handler(request, handlerContext);\n        forwardedSetCookies.push(...takeForwardedIntegrationSetCookies(handlerContext));\n        if (middlewareResponse) {\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:end\",\n            route: {\n              kind: \"route\",\n              path: route.path,\n              methods: route.methods,\n            },\n            request,\n            response: middlewareResponse,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            context: handlerContext.req.snapshot(),\n          });\n          return appendIntegrationForwardedCookies(middlewareResponse, forwardedSetCookies);\n        }\n      }\n\n      const beforeResponse = await runIntegrationRouteBeforeHooks(route, request, handlerContext);\n      if (beforeResponse) {\n        const response = await runIntegrationRouteAfterHooks(\n          route,\n          request,\n          handlerContext,\n          beforeResponse,\n        );\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:end\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          response,\n          requestId,\n          durationMs: Date.now() - startedAt,\n          context: handlerContext.req.snapshot(),\n        });\n        return appendIntegrationForwardedCookies(response, forwardedSetCookies);\n      }\n\n      const handlerResponse = await route.handler(request, handlerContext);\n      const response = await runIntegrationRouteAfterHooks(\n        route,\n        request,\n        handlerContext,\n        handlerResponse,\n      );\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:end\",\n        route: {\n          kind: \"route\",\n          path: route.path,\n          methods: route.methods,\n        },\n        request,\n        response,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        context: handlerContext.req.snapshot(),\n      });\n      return appendIntegrationForwardedCookies(response, forwardedSetCookies);\n    } catch (error) {\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:error\",\n        route: {\n          kind: \"route\",\n          path: route.path,\n          methods: route.methods,\n        },\n        request,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        error,\n        context: handlerContext.req.snapshot(),\n      });\n      throw error;\n    }\n  }\n\n  return null;\n}\n\n(globalThis as GlobalWithIntegrationRuntimeRegistry)[INTEGRATION_REQUEST_DISPATCHER_KEY] =\n  dispatchIntegrationRequest;\n\nfunction createIntegrationRequestContextStore(\n  rawRequest: FarmRequest,\n  request: Request,\n  pluginContext: FarmPluginContext,\n): FarmIntegrationRequestContextStore {\n  return {\n    get(key) {\n      const requestValue = pluginContext.requestContext.get(request, key);\n      if (requestValue !== undefined) {\n        return requestValue;\n      }\n\n      return pluginContext.requestContext.get(rawRequest, key);\n    },\n    set(key, value, options) {\n      pluginContext.requestContext.set(rawRequest, key, value, options);\n      pluginContext.requestContext.set(request, key, value, options);\n    },\n    has(key) {\n      return (\n        pluginContext.requestContext.has(request, key) ||\n        pluginContext.requestContext.has(rawRequest, key)\n      );\n    },\n    delete(key) {\n      const deletedRequest = pluginContext.requestContext.delete(request, key);\n      const deletedRaw = pluginContext.requestContext.delete(rawRequest, key);\n      return deletedRequest || deletedRaw;\n    },\n    clear() {\n      pluginContext.requestContext.clear(rawRequest);\n      pluginContext.requestContext.clear(request);\n    },\n    snapshot(options) {\n      const merged = pluginContext.requestContext.getAll(rawRequest, options);\n      const requestSnapshot = pluginContext.requestContext.getAll(request, options);\n      for (const [key, value] of requestSnapshot) {\n        merged.set(key, value);\n      }\n      return merged;\n    },\n  };\n}\n\nfunction createServerIntegrationHandlerContext(input: {\n  runtime: RegisteredIntegrationRuntime;\n  route: FarmIntegrationHandlerContext[\"route\"];\n  request: Request;\n  params: FarmIntegrationRouteParams;\n  pathname: string;\n  requestId: string;\n  currentRequest?: Request;\n  data?: FarmIntegrationData;\n  internal?: boolean;\n}): FarmIntegrationHandlerContext {\n  const req = createServerIntegrationRequestContextStore(input.request, input.currentRequest);\n\n  if (input.internal) {\n    req.set(FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY, true);\n  }\n\n  return {\n    request: input.request,\n    requestId: input.requestId,\n    url: new URL(input.request.url),\n    pathname: input.pathname,\n    method: input.request.method,\n    params: input.params,\n    input: {},\n    args: createIntegrationRouteArgs({\n      integration: input.runtime.integration,\n      config: input.runtime.config,\n    }),\n    data: resolveIntegrationData(input.request, input.data),\n    integration: {\n      category: input.runtime.integration.category,\n      slot: input.runtime.integration.category,\n      type: input.runtime.integration.type,\n      instance: input.runtime.integration.instance,\n    },\n    route: input.route,\n    req,\n    requestContext: req,\n    config: input.runtime.config,\n    isDev: input.runtime.isDev,\n    isProd: input.runtime.isProd,\n  };\n}\n\nfunction createServerIntegrationRequestContextStore(\n  request: Request,\n  currentRequest?: Request,\n): FarmIntegrationRequestContextStore {\n  return {\n    get(key) {\n      const requestValue = getRequestContext(request, key);\n      if (requestValue !== undefined) {\n        return requestValue;\n      }\n\n      if (currentRequest) {\n        return getRequestContext(currentRequest, key);\n      }\n\n      return undefined;\n    },\n    set(key, value, options) {\n      setRequestContext(request, key, value, options);\n      if (currentRequest) {\n        setRequestContext(currentRequest, key, value, options);\n      }\n    },\n    has(key) {\n      return (\n        hasRequestContext(request, key) ||\n        (!!currentRequest && hasRequestContext(currentRequest, key))\n      );\n    },\n    delete(key) {\n      const deletedRequest = deleteRequestContext(request, key);\n      const deletedCurrent = currentRequest ? deleteRequestContext(currentRequest, key) : false;\n      return deletedRequest || deletedCurrent;\n    },\n    clear() {\n      clearRequestContext(request);\n      if (currentRequest) {\n        clearRequestContext(currentRequest);\n      }\n    },\n    snapshot(options) {\n      const merged = currentRequest\n        ? getRequestContextSnapshot(currentRequest, options)\n        : new Map<string, unknown>();\n      const requestSnapshot = getRequestContextSnapshot(request, options);\n      for (const [key, value] of requestSnapshot) {\n        merged.set(key, value);\n      }\n      return merged;\n    },\n  };\n}\n\nfunction createWebRequest(req: FarmRequest, fullUrl: string, body?: Buffer): Request {\n  const headers = new Headers();\n  for (const [key, value] of Object.entries(req.headers)) {\n    if (value == null) {\n      continue;\n    }\n\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        headers.append(key, item);\n      }\n      continue;\n    }\n\n    headers.set(key, value);\n  }\n\n  return new Request(fullUrl, {\n    method: req.method,\n    headers,\n    body: body as BodyInit | undefined,\n  });\n}\n\nfunction matchesMethod(methods: readonly string[], method: string | undefined): boolean {\n  if (!method) {\n    return false;\n  }\n\n  const normalizedMethod = method.toUpperCase();\n  return methods.some((item) => {\n    const candidate = item.toUpperCase();\n    return candidate === \"ALL\" || candidate === normalizedMethod;\n  });\n}\n\nfunction matchesMatcher(\n  matcher: string | readonly string[] | undefined,\n  pathname: string,\n): boolean {\n  return resolveMatcherParams(matcher, pathname) !== null;\n}\n\nfunction resolveMatcherParams(\n  matcher: string | readonly string[] | undefined,\n  pathname: string,\n): FarmIntegrationRouteParams | null {\n  if (!matcher) {\n    return {};\n  }\n\n  const list = Array.isArray(matcher) ? matcher : [matcher];\n  for (const item of list) {\n    if (item === \"/(.*)\" || item === \"*\") {\n      return {};\n    }\n    if (item.endsWith(\"(.*)\")) {\n      const prefix = item.slice(0, -4);\n      if (pathname === prefix || pathname.startsWith(`${prefix}/`)) {\n        return {};\n      }\n      continue;\n    }\n    const params = extractPathParams(item, pathname);\n    if (params) {\n      return params;\n    }\n  }\n\n  return null;\n}\n\nfunction matchesPath(pattern: string, pathname: string): boolean {\n  return extractPathParams(pattern, pathname) !== null;\n}\n\nfunction extractPathParams(pattern: string, pathname: string): FarmIntegrationRouteParams | null {\n  const routeSegments = splitPath(pattern);\n  const pathSegments = splitPath(pathname);\n  const params: FarmIntegrationRouteParams = {};\n\n  let routeIndex = 0;\n  let pathIndex = 0;\n\n  while (routeIndex < routeSegments.length && pathIndex < pathSegments.length) {\n    const routeSegment = routeSegments[routeIndex];\n    const pathSegment = pathSegments[pathIndex];\n\n    if (isCatchAllSegment(routeSegment)) {\n      params[getSegmentParamName(routeSegment)] = pathSegments\n        .slice(pathIndex)\n        .map((segment) => decodeRouteSegment(segment));\n      return params;\n    }\n\n    if (isDynamicSegment(routeSegment)) {\n      params[getSegmentParamName(routeSegment)] = decodeRouteSegment(pathSegment);\n      routeIndex += 1;\n      pathIndex += 1;\n      continue;\n    }\n\n    if (routeSegment !== pathSegment) {\n      return null;\n    }\n\n    routeIndex += 1;\n    pathIndex += 1;\n  }\n\n  if (routeIndex === routeSegments.length && pathIndex === pathSegments.length) {\n    return params;\n  }\n\n  if (routeIndex === routeSegments.length - 1 && isCatchAllSegment(routeSegments[routeIndex])) {\n    params[getSegmentParamName(routeSegments[routeIndex])] = [];\n    return params;\n  }\n\n  return null;\n}\n\nfunction splitPath(value: string): string[] {\n  return value.split(\"/\").filter(Boolean);\n}\n\nfunction isDynamicSegment(segment: string): boolean {\n  return segment.startsWith(\"[\") && segment.endsWith(\"]\");\n}\n\nfunction isCatchAllSegment(segment: string): boolean {\n  return segment.startsWith(\"[...\") && segment.endsWith(\"]\");\n}\n\nfunction getSegmentParamName(segment: string): string {\n  if (isCatchAllSegment(segment)) {\n    return segment.slice(4, -1);\n  }\n\n  return segment.slice(1, -1);\n}\n\nfunction getRequestId(req: FarmRequest): string {\n  const headerValue = req.headers[\"x-request-id\"];\n  if (Array.isArray(headerValue)) {\n    return headerValue[0] || String(Date.now());\n  }\n  return headerValue || String(Date.now());\n}\n\nfunction normalizeMatcher(matcher: string | readonly string[] | undefined): string {\n  if (!matcher) {\n    return \"/(.*)\";\n  }\n  return typeof matcher === \"string\" ? matcher : matcher.join(\", \");\n}\n"],"mappings":"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","names":["memoryDriver","module","resolveDriver","base","operation","api","operation","route","route","route","resolveStorageRuntimeClient","createIntegrationOrm","response","createNetServer"]}