{"version":3,"sources":["../src/index.ts"],"names":["AdapterConfigurationError","AdapterError","DbError","options"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module index\n * @package @geenius/adapters/cloudflareKV\n * @description Implements the launch Cloudflare Workers KV provider contract\n * as a key/value DB adapter without importing Workers runtime SDKs.\n */\n\nimport type {\n  DbAdapter,\n  ListOptions,\n  QueryCondition,\n  QueryFilter,\n} from \"@geenius/adapters\";\nimport {\n  AdapterConfigurationError,\n  AdapterError,\n  DbError,\n} from \"@geenius/adapters\";\n\ntype KvRecord = Record<string, unknown> & { id: string };\ntype CloudflareKvUnsupportedOperation = \"join\" | \"transaction\" | \"sql\";\n\n/**\n * Domain key parts addressed by the Cloudflare KV adapter's key builders.\n * Exported so consumers writing custom Workers KV inspection tooling can\n * reuse the same domain vocabulary the adapter validates against.\n */\nexport type CloudflareKvKeyPart = \"collection\" | \"field\" | \"id\" | \"keyPrefix\";\n\n/**\n * Builds the collection-index key the adapter writes under\n * `{keyPrefix}:{collection}:__index`. Each part is URI-encoded so user-provided\n * collection names cannot break the `:` delimiter convention.\n *\n * Use this when reading or invalidating an index entry from outside the\n * adapter — never hand-roll the key string, since the encoding rules may\n * tighten over time.\n *\n * @param keyPrefix Domain prefix configured on `createCloudflareKvDbAdapter`\n * @param collection Logical collection name (URI-encoded into the key)\n */\nexport function buildCloudflareKvCollectionIndexKey(\n  keyPrefix: string,\n  collection: string,\n): string {\n  return `${encodeOperationKeyPart(keyPrefix, \"keyPrefix\")}:${encodeOperationKeyPart(\n    collection,\n    \"collection\",\n  )}:__index`;\n}\n\n/**\n * Builds the `namespace.list({ prefix })` value used to scan every record key\n * for a collection. Produces `{keyPrefix}:{collection}:` (trailing colon\n * intentional — paired with `recordKey()` whose id segment follows).\n *\n * @param keyPrefix Domain prefix configured on `createCloudflareKvDbAdapter`\n * @param collection Logical collection name (URI-encoded into the prefix)\n */\nexport function buildCloudflareKvCollectionRecordPrefix(\n  keyPrefix: string,\n  collection: string,\n): string {\n  return `${encodeOperationKeyPart(keyPrefix, \"keyPrefix\")}:${encodeOperationKeyPart(\n    collection,\n    \"collection\",\n  )}:`;\n}\n\n/**\n * Builds the fully-qualified record key written for a single document:\n * `{keyPrefix}:{collection}:{id}`. Each segment is URI-encoded.\n *\n * @param keyPrefix Domain prefix configured on `createCloudflareKvDbAdapter`\n * @param collection Logical collection name\n * @param id Record id\n */\nexport function buildCloudflareKvRecordKey(\n  keyPrefix: string,\n  collection: string,\n  id: string,\n): string {\n  return `${encodeOperationKeyPart(keyPrefix, \"keyPrefix\")}:${encodeOperationKeyPart(\n    collection,\n    \"collection\",\n  )}:${encodeOperationKeyPart(id, \"id\")}`;\n}\n\n/**\n * Key/value DB adapter surface implemented by the Cloudflare Workers KV\n * contract package.\n */\nexport interface CloudflareKvDbAdapter {\n  count(collection: string, filter?: QueryFilter): Promise<number>;\n  create<T extends Record<string, unknown>>(\n    collection: string,\n    data: Omit<T, \"id\">,\n  ): Promise<T & { id: string }>;\n  delete(collection: string, id: string): Promise<boolean>;\n  get<T>(collection: string, id: string): Promise<T | null>;\n  join(): Promise<never>;\n  list<T>(collection: string, options?: ListOptions): Promise<T[]>;\n  query<T>(collection: string, filter: QueryFilter): Promise<T[]>;\n  sql(): Promise<never>;\n  transaction(): Promise<never>;\n  update<T extends Record<string, unknown>>(\n    collection: string,\n    id: string,\n    data: Partial<T>,\n  ): Promise<T | null>;\n}\n\n/** Options forwarded to Workers KV writes when record or index TTL is enabled. */\nexport interface CloudflareKvPutOptions {\n  expirationTtl?: number;\n}\n\n/** Options forwarded to Workers KV prefix listing. */\nexport interface CloudflareKvListOptions {\n  cursor?: string;\n  limit?: number;\n  prefix?: string;\n}\n\n/** Key metadata returned by Workers KV prefix listing. */\nexport interface CloudflareKvListKey {\n  name: string;\n}\n\n/** Result returned by Workers KV prefix listing. */\nexport interface CloudflareKvListResult {\n  cursor?: string;\n  keys: CloudflareKvListKey[];\n  list_complete: boolean;\n}\n\n/** Minimal Workers KV namespace contract consumed by the adapter factory. */\nexport interface CloudflareKvNamespace {\n  get(key: string): Promise<string | null>;\n  put(\n    key: string,\n    value: string,\n    options?: CloudflareKvPutOptions,\n  ): Promise<void>;\n  delete(key: string): Promise<void>;\n  list?(options?: CloudflareKvListOptions): Promise<CloudflareKvListResult>;\n}\n\n/** Configuration accepted by {@link createCloudflareKvDbAdapter}. */\nexport interface CloudflareKvDbAdapterOptions {\n  namespace: CloudflareKvNamespace;\n  /**\n   * TTL applied to record payloads. Collection indexes persist by default so\n   * record refreshes cannot make live rows unreachable from list/query/count.\n   */\n  defaultTtlSeconds?: number;\n  idFactory?: () => string;\n  /**\n   * Optional TTL for collection indexes when the whole collection should expire.\n   * Requires record TTL and must be greater than or equal to record TTL so\n   * collection indexes cannot expire before live records.\n   */\n  indexTtlSeconds?: number;\n  keyPrefix?: string;\n  /**\n   * Maximum record payloads that filtered query/count scans may read. KV is a\n   * key/value backend, so larger filtered scans should move to Convex/Neon.\n   */\n  maxScanRecords?: number;\n}\n\n/**\n * Binding wrapper accepted by {@link withCloudflareKvDb} when downstream code\n * already constructed a DB adapter and wants Cloudflare KV contract validation.\n */\nexport interface CloudflareKvDbAdapterBinding {\n  adapter: DbAdapter;\n}\n\n/**\n * Accepted input for binding an existing DB adapter or constructing a new\n * Cloudflare KV-backed adapter.\n */\nexport type CloudflareKvDbAdapterInput =\n  | DbAdapter\n  | CloudflareKvDbAdapterBinding\n  | CloudflareKvDbAdapterOptions;\n\n/** Error thrown when Cloudflare KV adapter configuration is invalid. */\nexport class CloudflareKvBindingError extends AdapterConfigurationError {\n  readonly cloudflareCode = \"INVALID_CLOUDFLARE_KV_ADAPTER\";\n\n  /**\n   * Creates a typed Cloudflare KV binding error.\n   *\n   * @param message Human-readable validation failure.\n   * @param cause Optional original error that triggered the failure.\n   */\n  constructor(message: string, cause?: unknown) {\n    super(message, \"INVALID_CONFIG\", cause);\n    this.name = \"CloudflareKvBindingError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/** Error thrown when callers request relational operations unsupported by KV. */\nexport class AdapterUnsupportedError extends AdapterError {\n  readonly name = \"AdapterUnsupportedError\";\n\n  /**\n   * Creates an unsupported-operation adapter error for the DB domain.\n   *\n   * @param message Human-readable unsupported-operation message.\n   * @param cause Optional original error that triggered the failure.\n   */\n  constructor(message: string, cause?: unknown) {\n    super(message, \"db\", \"ADAPTER_UNSUPPORTED\", cause);\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\nconst adapterMethods = [\n  \"create\",\n  \"get\",\n  \"update\",\n  \"delete\",\n  \"list\",\n  \"query\",\n  \"count\",\n] as const;\nconst CLOUDFLARE_KV_MAX_VALUE_BYTES = 25 * 1024 * 1024;\nconst CLOUDFLARE_KV_MAX_KEY_BYTES = 512;\nconst DEFAULT_CLOUDFLARE_KV_MAX_SCAN_RECORDS = 1000;\nconst MIN_CLOUDFLARE_KV_TTL_SECONDS = 60;\nconst queryOperators = new Set<QueryCondition[\"operator\"]>([\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"in\",\n  \"contains\",\n]);\n\nfunction defaultIdFactory(): string {\n  return (\n    globalThis.crypto?.randomUUID?.() ??\n    `kv_${Date.now()}_${Math.random().toString(36).slice(2)}`\n  );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction parseKvJson(raw: string, context: string): unknown {\n  try {\n    return JSON.parse(raw) as unknown;\n  } catch (error) {\n    throw new DbError(\n      `Invalid Cloudflare KV JSON payload for ${context}`,\n      \"QUERY_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction stringifyKvJson(value: unknown, context: string): string {\n  try {\n    const payload = JSON.stringify(value);\n    if (payload === undefined) {\n      throw new TypeError(\"JSON.stringify returned undefined\");\n    }\n    return payload;\n  } catch (error) {\n    throw new DbError(\n      `Invalid Cloudflare KV JSON payload for ${context}`,\n      \"QUERY_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction assertKvValueSize(value: string, context: string): void {\n  const byteLength = new TextEncoder().encode(value).byteLength;\n\n  if (byteLength > CLOUDFLARE_KV_MAX_VALUE_BYTES) {\n    throw new DbError(\n      `Cloudflare KV value for ${context} exceeds the 25 MiB value limit`,\n      \"QUERY_ERROR\",\n    );\n  }\n}\n\nfunction assertKvKeySize(key: string, context: string): void {\n  const byteLength = new TextEncoder().encode(key).byteLength;\n\n  if (byteLength > CLOUDFLARE_KV_MAX_KEY_BYTES) {\n    throw new DbError(\n      `Cloudflare KV key for ${context} exceeds the 512 byte key limit`,\n      \"QUERY_ERROR\",\n    );\n  }\n}\n\nfunction invalidJsonPayload(\n  context: string,\n  path: string,\n  detail: string,\n): never {\n  throw new DbError(\n    `Cloudflare KV ${context} payload must be a JSON-serializable record (${path}: ${detail})`,\n    \"QUERY_ERROR\",\n  );\n}\n\nfunction assertJsonValue(\n  value: unknown,\n  context: string,\n  path: string,\n  seen: WeakSet<object>,\n): void {\n  if (value === null) {\n    return;\n  }\n\n  switch (typeof value) {\n    case \"string\":\n    case \"boolean\":\n      return;\n    case \"number\":\n      if (!Number.isFinite(value)) {\n        invalidJsonPayload(context, path, \"expected a finite number\");\n      }\n      return;\n    case \"object\":\n      break;\n    default:\n      invalidJsonPayload(context, path, \"expected a JSON value\");\n  }\n\n  if (seen.has(value)) {\n    invalidJsonPayload(context, path, \"cyclic reference\");\n  }\n  seen.add(value);\n\n  if (Array.isArray(value)) {\n    for (let index = 0; index < value.length; index += 1) {\n      if (!(index in value)) {\n        invalidJsonPayload(context, `${path}[${index}]`, \"sparse array slot\");\n      }\n      assertJsonValue(value[index], context, `${path}[${index}]`, seen);\n    }\n    seen.delete(value);\n    return;\n  }\n\n  if (!isPlainRecord(value)) {\n    invalidJsonPayload(context, path, \"expected a plain object\");\n  }\n\n  const symbolKeys = Object.getOwnPropertySymbols(value);\n  if (symbolKeys.length > 0) {\n    invalidJsonPayload(\n      context,\n      `${path}[${String(symbolKeys[0])}]`,\n      \"symbol-keyed fields are not JSON-serializable\",\n    );\n  }\n\n  for (const [key, child] of Object.entries(value)) {\n    assertJsonValue(child, context, `${path}.${key}`, seen);\n  }\n\n  seen.delete(value);\n}\n\nfunction assertJsonRecordPayload(\n  value: unknown,\n  context: string,\n): asserts value is Record<string, unknown> {\n  if (!isPlainRecord(value)) {\n    throw new DbError(\n      `Cloudflare KV ${context} payload must be a plain JSON record`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  try {\n    assertJsonValue(value, context, \"$\", new WeakSet<object>());\n  } catch (error) {\n    if (error instanceof DbError) {\n      throw error;\n    }\n    throw new DbError(\n      `Invalid Cloudflare KV JSON payload for ${context}`,\n      \"QUERY_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction assertTtl(\n  value: number | undefined,\n  optionName: string,\n): number | undefined {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  if (!Number.isInteger(value) || value < MIN_CLOUDFLARE_KV_TTL_SECONDS) {\n    throw new CloudflareKvBindingError(\n      `${optionName} must be an integer number of seconds greater than or equal to ${MIN_CLOUDFLARE_KV_TTL_SECONDS}`,\n    );\n  }\n\n  return value;\n}\n\nfunction assertBindingKeyPart(\n  value: string,\n  part: CloudflareKvKeyPart,\n): string {\n  if (typeof value !== \"string\" || value.trim().length === 0) {\n    throw new CloudflareKvBindingError(\n      `Cloudflare KV ${part} must be a non-empty string`,\n    );\n  }\n\n  return value;\n}\n\n// Reserved record id literals collide with the collection-index sentinel key\n// suffix `:__index`. Allowing them as record ids would cause `create()` to\n// write a record at the same KV key the adapter uses for its collection index,\n// silently overwriting the index on the next write. Reject before any KV op.\nconst RESERVED_RECORD_ID_VALUES = new Set<string>([\"__index\"]);\n\nfunction assertOperationKeyPart(\n  value: string,\n  part: CloudflareKvKeyPart,\n): string {\n  if (typeof value !== \"string\" || value.trim().length === 0) {\n    throw new DbError(\n      `Cloudflare KV ${part} must be a non-empty string`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  if (part === \"id\" && RESERVED_RECORD_ID_VALUES.has(value)) {\n    throw new DbError(\n      `Cloudflare KV id \"${value}\" is reserved for the collection index`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return value;\n}\n\nfunction encodeBindingKeyPart(\n  value: string,\n  part: CloudflareKvKeyPart,\n): string {\n  return encodeURIComponent(assertBindingKeyPart(value, part));\n}\n\nfunction encodeOperationKeyPart(\n  value: string,\n  part: CloudflareKvKeyPart,\n): string {\n  return encodeURIComponent(assertOperationKeyPart(value, part));\n}\n\nfunction assertOperationNonNegativeInteger(\n  value: number | undefined,\n  optionName: string,\n): void {\n  if (value === undefined) {\n    return;\n  }\n\n  if (!Number.isInteger(value) || value < 0) {\n    throw new DbError(\n      `${optionName} must be a non-negative integer`,\n      \"QUERY_ERROR\",\n    );\n  }\n}\n\nfunction assertListOptions(options: ListOptions | undefined): void {\n  if (!options) {\n    return;\n  }\n\n  assertOperationNonNegativeInteger(options.limit, \"list limit\");\n  assertOperationNonNegativeInteger(options.offset, \"list offset\");\n\n  if (options.orderBy !== undefined) {\n    assertOperationKeyPart(options.orderBy, \"field\");\n  }\n\n  if (\n    options.order !== undefined &&\n    options.order !== \"asc\" &&\n    options.order !== \"desc\"\n  ) {\n    throw new DbError(\n      'list order must be either \"asc\" or \"desc\"',\n      \"QUERY_ERROR\",\n    );\n  }\n}\n\nfunction assertListResult(\n  value: unknown,\n  collection: string,\n): CloudflareKvListResult {\n  if (\n    !isRecord(value) ||\n    !Array.isArray(value.keys) ||\n    typeof value.list_complete !== \"boolean\" ||\n    (value.cursor !== undefined && typeof value.cursor !== \"string\")\n  ) {\n    throw new DbError(\n      `Invalid Cloudflare KV list page for ${collection}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  if (\n    !value.keys.every((key) => isRecord(key) && typeof key.name === \"string\")\n  ) {\n    throw new DbError(\n      `Invalid Cloudflare KV list key for ${collection}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return value as unknown as CloudflareKvListResult;\n}\n\nfunction isComparableQueryValue(value: unknown): value is number | string {\n  return typeof value === \"number\" || typeof value === \"string\";\n}\n\nfunction assertQueryConditionOperand(\n  condition: QueryCondition,\n  methodName: string,\n  index: number,\n): void {\n  switch (condition.operator) {\n    case \"eq\":\n    case \"neq\":\n      return;\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n      if (!isComparableQueryValue(condition.value)) {\n        throw new DbError(\n          `${methodName} filter condition ${index} requires a string or number value`,\n          \"QUERY_ERROR\",\n        );\n      }\n      return;\n    case \"in\":\n      if (!Array.isArray(condition.value)) {\n        throw new DbError(\n          `${methodName} filter condition ${index} requires an array value`,\n          \"QUERY_ERROR\",\n        );\n      }\n      return;\n    case \"contains\":\n      if (typeof condition.value !== \"string\") {\n        throw new DbError(\n          `${methodName} filter condition ${index} requires a string value`,\n          \"QUERY_ERROR\",\n        );\n      }\n      return;\n  }\n}\n\nfunction assertQueryFilter(\n  filter: QueryFilter,\n  methodName: string,\n): QueryFilter {\n  if (!Array.isArray(filter)) {\n    throw new DbError(\n      `${methodName} filter must be an array of query conditions`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  for (const [index, condition] of filter.entries()) {\n    if (\n      !isRecord(condition) ||\n      typeof condition.field !== \"string\" ||\n      condition.field.trim().length === 0 ||\n      !queryOperators.has(condition.operator as QueryCondition[\"operator\"])\n    ) {\n      throw new DbError(\n        `${methodName} filter condition ${index} is invalid`,\n        \"QUERY_ERROR\",\n      );\n    }\n    assertQueryConditionOperand(condition as QueryCondition, methodName, index);\n  }\n\n  return filter;\n}\n\nfunction putOptionsForTtl(\n  ttlSeconds: number | undefined,\n): CloudflareKvPutOptions | undefined {\n  return ttlSeconds === undefined ? undefined : { expirationTtl: ttlSeconds };\n}\n\nfunction assertIndexTtlConsistency(\n  defaultTtlSeconds: number | undefined,\n  indexTtlSeconds: number | undefined,\n): void {\n  if (indexTtlSeconds === undefined) {\n    return;\n  }\n\n  if (defaultTtlSeconds === undefined) {\n    throw new CloudflareKvBindingError(\n      \"indexTtlSeconds requires defaultTtlSeconds so collection indexes cannot expire before records\",\n    );\n  }\n\n  if (indexTtlSeconds < defaultTtlSeconds) {\n    throw new CloudflareKvBindingError(\n      \"indexTtlSeconds must be greater than or equal to defaultTtlSeconds\",\n    );\n  }\n}\n\nfunction assertMaxScanRecords(value: number | undefined): number {\n  const maxScanRecords = value ?? DEFAULT_CLOUDFLARE_KV_MAX_SCAN_RECORDS;\n\n  if (!Number.isInteger(maxScanRecords) || maxScanRecords < 0) {\n    throw new CloudflareKvBindingError(\n      \"maxScanRecords must be a non-negative integer\",\n    );\n  }\n\n  return maxScanRecords;\n}\n\nfunction unsupportedRelationalOperation(\n  operation: CloudflareKvUnsupportedOperation,\n): never {\n  throw new AdapterUnsupportedError(\n    `Cloudflare KV does not support relational ${operation} operations`,\n  );\n}\n\nfunction assertDbAdapter(value: unknown): asserts value is DbAdapter {\n  if (!isRecord(value)) {\n    throw new CloudflareKvBindingError(\n      \"Expected a DbAdapter object for Cloudflare KV binding\",\n    );\n  }\n\n  const missing = adapterMethods.filter(\n    (method) => typeof value[method] !== \"function\",\n  );\n  if (missing.length > 0) {\n    throw new CloudflareKvBindingError(\n      `Cloudflare KV DbAdapter is missing methods: ${missing.join(\", \")}`,\n    );\n  }\n}\n\nfunction assertNamespace(\n  value: unknown,\n): asserts value is CloudflareKvNamespace {\n  if (\n    !isRecord(value) ||\n    typeof value.get !== \"function\" ||\n    typeof value.put !== \"function\" ||\n    typeof value.delete !== \"function\"\n  ) {\n    throw new CloudflareKvBindingError(\n      \"Cloudflare KV options must include a namespace with get, put, and delete\",\n    );\n  }\n  if (value.list !== undefined && typeof value.list !== \"function\") {\n    throw new CloudflareKvBindingError(\n      \"Cloudflare KV namespace.list must be a function when provided\",\n    );\n  }\n}\n\nfunction assertAdapterOptions(\n  value: unknown,\n): asserts value is CloudflareKvDbAdapterOptions {\n  if (!isRecord(value)) {\n    throw new CloudflareKvBindingError(\n      \"Cloudflare KV options must include a namespace with get, put, and delete\",\n    );\n  }\n}\n\nfunction assertIdFactory(value: unknown): () => string {\n  if (value === undefined) {\n    return defaultIdFactory;\n  }\n\n  if (typeof value !== \"function\") {\n    throw new CloudflareKvBindingError(\n      \"Cloudflare KV idFactory must be a function\",\n    );\n  }\n\n  return () => {\n    try {\n      return value() as string;\n    } catch (error) {\n      throw new DbError(\n        \"Cloudflare KV idFactory failed to generate an id\",\n        \"QUERY_ERROR\",\n        error,\n      );\n    }\n  };\n}\n\nfunction isCloudflareKvDbAdapterOptions(\n  value: unknown,\n): value is CloudflareKvDbAdapterOptions {\n  return isRecord(value) && \"namespace\" in value;\n}\n\nfunction compareValues(\n  left: unknown,\n  right: unknown,\n  operator: Extract<QueryCondition[\"operator\"], \"gt\" | \"gte\" | \"lt\" | \"lte\">,\n): boolean {\n  if (typeof left === \"number\" && typeof right === \"number\") {\n    if (operator === \"gt\") return left > right;\n    if (operator === \"gte\") return left >= right;\n    if (operator === \"lt\") return left < right;\n    return left <= right;\n  }\n\n  if (typeof left === \"string\" && typeof right === \"string\") {\n    if (operator === \"gt\") return left > right;\n    if (operator === \"gte\") return left >= right;\n    if (operator === \"lt\") return left < right;\n    return left <= right;\n  }\n\n  return false;\n}\n\nfunction matchesCondition(item: KvRecord, condition: QueryCondition): boolean {\n  const value = item[condition.field];\n\n  switch (condition.operator) {\n    case \"eq\":\n      return value === condition.value;\n    case \"neq\":\n      return value !== condition.value;\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n      return compareValues(value, condition.value, condition.operator);\n    case \"in\":\n      return Array.isArray(condition.value) && condition.value.includes(value);\n    case \"contains\":\n      return (\n        typeof value === \"string\" &&\n        typeof condition.value === \"string\" &&\n        value.includes(condition.value)\n      );\n    default:\n      return false;\n  }\n}\n\nfunction matchesFilter(item: KvRecord, filter: QueryFilter): boolean {\n  return filter.every((condition: QueryCondition) =>\n    matchesCondition(item, condition),\n  );\n}\n\nfunction sortRecords(records: KvRecord[], options?: ListOptions): KvRecord[] {\n  if (!options?.orderBy) {\n    return records;\n  }\n\n  const direction = options.order === \"desc\" ? -1 : 1;\n  return [...records].sort((left, right) => {\n    const leftValue = left[options.orderBy as string];\n    const rightValue = right[options.orderBy as string];\n    if (typeof leftValue === \"number\" && typeof rightValue === \"number\") {\n      return leftValue < rightValue\n        ? -direction\n        : leftValue > rightValue\n          ? direction\n          : 0;\n    }\n    if (typeof leftValue === \"string\" && typeof rightValue === \"string\") {\n      return leftValue < rightValue\n        ? -direction\n        : leftValue > rightValue\n          ? direction\n          : 0;\n    }\n    return 0;\n  });\n}\n\nfunction pageRecords(records: KvRecord[], options?: ListOptions): KvRecord[] {\n  const offset = options?.offset ?? 0;\n  const limit = options?.limit;\n  return typeof limit === \"number\"\n    ? records.slice(offset, offset + limit)\n    : records.slice(offset);\n}\n\n/**\n * Creates a Cloudflare Workers KV-backed DB adapter for key/value workloads.\n *\n * Workers KV is eventually consistent. Direct `get()` reads target record keys,\n * while `list()`, `query()`, and `count()` prefer Workers KV prefix listing\n * when the namespace exposes it and fall back to the collection index key for\n * minimal test namespaces. Use Convex or Neon for transactional or query-heavy\n * workloads.\n *\n * @param options KV namespace, key prefix, TTL, and id factory configuration.\n * @returns A DB adapter implementing CRUD, list, query, and count with KV storage.\n */\nexport function createCloudflareKvDbAdapter(\n  options: CloudflareKvDbAdapterOptions,\n): CloudflareKvDbAdapter {\n  assertAdapterOptions(options);\n  assertNamespace(options.namespace);\n\n  const namespace = options.namespace;\n  const keyPrefix = encodeBindingKeyPart(\n    options.keyPrefix ?? \"geenius:adapters\",\n    \"keyPrefix\",\n  );\n  const idFactory = assertIdFactory(options.idFactory);\n  const defaultTtlSeconds = assertTtl(\n    options.defaultTtlSeconds,\n    \"defaultTtlSeconds\",\n  );\n  const indexTtlSeconds = assertTtl(options.indexTtlSeconds, \"indexTtlSeconds\");\n  assertIndexTtlConsistency(defaultTtlSeconds, indexTtlSeconds);\n  const maxScanRecords = assertMaxScanRecords(options.maxScanRecords);\n  const recordPutOptions = putOptionsForTtl(defaultTtlSeconds);\n  const indexPutOptions = putOptionsForTtl(indexTtlSeconds);\n  const indexMutationLocks = new Map<string, Promise<void>>();\n  const collectionKey = (collection: string): string =>\n    `${keyPrefix}:${encodeOperationKeyPart(collection, \"collection\")}:__index`;\n  const collectionRecordPrefix = (collection: string): string =>\n    `${keyPrefix}:${encodeOperationKeyPart(collection, \"collection\")}:`;\n  const recordKey = (collection: string, id: string): string =>\n    `${keyPrefix}:${encodeOperationKeyPart(\n      collection,\n      \"collection\",\n    )}:${encodeOperationKeyPart(id, \"id\")}`;\n\n  const kvGet = async (\n    key: string,\n    context: string,\n  ): Promise<string | null> => {\n    assertKvKeySize(key, context);\n\n    try {\n      return await namespace.get(key);\n    } catch (error) {\n      throw new DbError(\n        `Cloudflare KV read failed for ${context}`,\n        \"CONNECTION_ERROR\",\n        error,\n      );\n    }\n  };\n\n  const kvPut = async (\n    key: string,\n    value: string,\n    context: string,\n    putOptions?: CloudflareKvPutOptions,\n  ): Promise<void> => {\n    assertKvKeySize(key, context);\n    assertKvValueSize(value, context);\n\n    try {\n      await namespace.put(key, value, putOptions);\n    } catch (error) {\n      throw new DbError(\n        `Cloudflare KV write failed for ${context}`,\n        \"CONNECTION_ERROR\",\n        error,\n      );\n    }\n  };\n\n  const kvDelete = async (key: string, context: string): Promise<void> => {\n    assertKvKeySize(key, context);\n\n    try {\n      await namespace.delete(key);\n    } catch (error) {\n      throw new DbError(\n        `Cloudflare KV delete failed for ${context}`,\n        \"CONNECTION_ERROR\",\n        error,\n      );\n    }\n  };\n\n  const readIndex = async (collection: string): Promise<string[]> => {\n    const raw = await kvGet(collectionKey(collection), `${collection} index`);\n    if (!raw) {\n      return [] as string[];\n    }\n    const parsed = parseKvJson(raw, `${collection} index`);\n    if (\n      !Array.isArray(parsed) ||\n      !parsed.every((id) => typeof id === \"string\")\n    ) {\n      throw new DbError(\n        `Invalid Cloudflare KV index for ${collection}`,\n        \"QUERY_ERROR\",\n      );\n    }\n    return parsed;\n  };\n\n  const readListedRecordIds = async (\n    collection: string,\n  ): Promise<string[] | null> => {\n    if (!namespace.list) {\n      return null;\n    }\n\n    const prefix = collectionRecordPrefix(collection);\n    const indexKey = collectionKey(collection);\n    assertKvKeySize(prefix, `${collection} records prefix`);\n    assertKvKeySize(indexKey, `${collection} index`);\n    const ids = new Set<string>();\n    const seenCursors = new Set<string>();\n    let cursor: string | undefined;\n\n    try {\n      do {\n        const page = assertListResult(\n          await namespace.list({ cursor, prefix }),\n          collection,\n        );\n\n        for (const key of page.keys) {\n          if (typeof key.name !== \"string\" || !key.name.startsWith(prefix)) {\n            throw new DbError(\n              `Invalid Cloudflare KV list key for ${collection}`,\n              \"QUERY_ERROR\",\n            );\n          }\n          if (key.name === indexKey) {\n            continue;\n          }\n\n          try {\n            ids.add(decodeURIComponent(key.name.slice(prefix.length)));\n          } catch (error) {\n            throw new DbError(\n              `Invalid Cloudflare KV encoded record key for ${collection}`,\n              \"QUERY_ERROR\",\n              error,\n            );\n          }\n        }\n\n        if (page.list_complete) {\n          cursor = undefined;\n        } else {\n          const nextCursor = page.cursor;\n          if (!nextCursor) {\n            throw new DbError(\n              `Cloudflare KV list page for ${collection} is incomplete without a cursor`,\n              \"QUERY_ERROR\",\n            );\n          }\n          if (seenCursors.has(nextCursor)) {\n            throw new DbError(\n              `Cloudflare KV list cursor repeated for ${collection}`,\n              \"QUERY_ERROR\",\n            );\n          }\n          seenCursors.add(nextCursor);\n          cursor = nextCursor;\n        }\n      } while (cursor);\n    } catch (error) {\n      if (error instanceof DbError) {\n        throw error;\n      }\n      throw new DbError(\n        `Cloudflare KV list failed for ${collection} records`,\n        \"CONNECTION_ERROR\",\n        error,\n      );\n    }\n\n    return [...ids];\n  };\n\n  const readRecordIds = async (collection: string): Promise<string[]> =>\n    (await readListedRecordIds(collection)) ?? readIndex(collection);\n\n  const readUniqueRecordIds = async (\n    collection: string,\n  ): Promise<{ ids: string[]; repaired: boolean }> => {\n    const ids = await readRecordIds(collection);\n    const uniqueIds = [...new Set(ids)];\n    return { ids: uniqueIds, repaired: uniqueIds.length !== ids.length };\n  };\n\n  const withCollectionIndexMutation = async <T>(\n    collection: string,\n    operation: () => Promise<T>,\n  ): Promise<T> => {\n    const previous = indexMutationLocks.get(collection) ?? Promise.resolve();\n    let releaseCurrent!: () => void;\n    const current = new Promise<void>((resolve) => {\n      releaseCurrent = resolve;\n    });\n    const next = previous.catch(() => undefined).then(() => current);\n    indexMutationLocks.set(collection, next);\n\n    await previous.catch(() => undefined);\n    try {\n      return await operation();\n    } finally {\n      releaseCurrent();\n      if (indexMutationLocks.get(collection) === next) {\n        indexMutationLocks.delete(collection);\n      }\n    }\n  };\n\n  const writeIndexUnlocked = async (\n    collection: string,\n    ids: string[],\n  ): Promise<void> => {\n    await kvPut(\n      collectionKey(collection),\n      stringifyKvJson([...new Set(ids)], `${collection} index`),\n      `${collection} index`,\n      indexPutOptions,\n    );\n  };\n\n  const writeIndex = async (collection: string, ids: string[]): Promise<void> =>\n    withCollectionIndexMutation(collection, () =>\n      writeIndexUnlocked(collection, ids),\n    );\n\n  const readRecord = async (\n    collection: string,\n    id: string,\n  ): Promise<KvRecord | null> => {\n    const raw = await kvGet(\n      recordKey(collection, id),\n      `${collection}:${id} record`,\n    );\n    if (!raw) {\n      return null;\n    }\n    const parsed = parseKvJson(raw, `${collection}:${id} record`);\n    if (!isRecord(parsed) || typeof parsed.id !== \"string\") {\n      throw new DbError(\n        `Invalid Cloudflare KV record for ${collection}:${id}`,\n        \"QUERY_ERROR\",\n      );\n    }\n    if (parsed.id !== id) {\n      throw new DbError(\n        `Cloudflare KV record identity mismatch for ${collection}:${id}`,\n        \"QUERY_ERROR\",\n      );\n    }\n    return parsed as KvRecord;\n  };\n\n  const writeRecord = async (\n    collection: string,\n    id: string,\n    record: KvRecord,\n  ): Promise<void> => {\n    await kvPut(\n      recordKey(collection, id),\n      stringifyKvJson(record, `${collection}:${id} record`),\n      `${collection}:${id} record`,\n      recordPutOptions,\n    );\n  };\n\n  const readRecords = async (\n    collection: string,\n    options?: ListOptions,\n    scan?: { maxRecords: number; operation: \"count\" | \"query\" },\n  ): Promise<KvRecord[]> => {\n    const { ids: uniqueIds, repaired: indexWasDeduped } =\n      await readUniqueRecordIds(collection);\n\n    if (scan && uniqueIds.length > scan.maxRecords) {\n      throw new AdapterUnsupportedError(\n        `Cloudflare KV ${scan.operation} scan would read ${uniqueIds.length} records, exceeding maxScanRecords ${scan.maxRecords}`,\n      );\n    }\n\n    // For ordered listings we still need the full live set to sort across, so\n    // skip the streaming pagination and let downstream sortRecords/pageRecords\n    // operate on the live records collected here.\n    const usesOrdering = Boolean(options?.orderBy);\n    const offset = options?.offset ?? 0;\n    const limit = options?.limit;\n\n    // Short-circuit zero-limit unordered lists before reading any record\n    // payloads — there is no live page to fill and the existing test suite\n    // (and KV cost model) expects this to avoid record reads entirely.\n    if (!usesOrdering && limit === 0) {\n      return [];\n    }\n\n    const records: KvRecord[] = [];\n    const liveIds: string[] = [];\n    let scannedAll = true;\n    let liveSeen = 0;\n\n    for (const id of uniqueIds) {\n      const record = await readRecord(collection, id);\n      const isLive = record !== null;\n      if (isLive) {\n        liveIds.push(id);\n        if (\n          usesOrdering ||\n          (liveSeen >= offset &&\n            (limit === undefined || records.length < limit))\n        ) {\n          records.push(record as KvRecord);\n        }\n        liveSeen += 1;\n      }\n\n      // Once we have collected enough live records for an unordered limited\n      // page we can stop scanning the rest of the index. We still need to\n      // continue past stale ids before we have the live page filled so that\n      // limit:1 lists do not return [] when the first index entry is stale.\n      if (\n        !usesOrdering &&\n        limit !== undefined &&\n        records.length >= limit &&\n        liveSeen >= offset + limit\n      ) {\n        scannedAll = false;\n        break;\n      }\n    }\n\n    // Repair the index whenever we touched every id (so we observed every\n    // stale entry) and the live set differs from the stored index, or the\n    // index needed deduping in the first place.\n    if (\n      scannedAll &&\n      (liveIds.length !== uniqueIds.length || indexWasDeduped)\n    ) {\n      await writeIndex(collection, liveIds);\n    } else if (indexWasDeduped) {\n      await writeIndex(collection, uniqueIds);\n    }\n\n    return records;\n  };\n\n  const countIndexedRecords = async (collection: string): Promise<number> => {\n    const { ids, repaired } = await readUniqueRecordIds(collection);\n    if (repaired) {\n      await writeIndex(collection, ids);\n    }\n    return ids.length;\n  };\n\n  return {\n    async create<T extends Record<string, unknown>>(\n      collection: string,\n      data: Omit<T, \"id\">,\n    ) {\n      const id = assertOperationKeyPart(idFactory(), \"id\");\n      assertJsonRecordPayload(data, `${collection} create`);\n\n      return withCollectionIndexMutation(collection, async () => {\n        if (await readRecord(collection, id)) {\n          throw new DbError(\n            `Cloudflare KV record already exists for ${collection}:${id}`,\n            \"CONSTRAINT_VIOLATION\",\n          );\n        }\n\n        const record = { ...data, id } as KvRecord;\n        const ids = await readIndex(collection);\n        await writeRecord(collection, id, record);\n        try {\n          await writeIndexUnlocked(collection, [...ids, id]);\n        } catch (error) {\n          try {\n            await kvDelete(\n              recordKey(collection, id),\n              `${collection}:${id} rollback record`,\n            );\n          } catch (rollbackError) {\n            throw new DbError(\n              `Cloudflare KV create failed for ${collection}:${id}; rollback delete also failed and may leave an orphaned record`,\n              \"CONNECTION_ERROR\",\n              { indexWriteError: error, rollbackError },\n            );\n          }\n          throw error;\n        }\n        return record as T & { id: string };\n      });\n    },\n    async get<T>(collection: string, id: string) {\n      return (await readRecord(collection, id)) as T | null;\n    },\n    async update<T extends Record<string, unknown>>(\n      collection: string,\n      id: string,\n      data: Partial<T>,\n    ) {\n      assertJsonRecordPayload(data, `${collection}:${id} update`);\n      return withCollectionIndexMutation(collection, async () => {\n        const current = await readRecord(collection, id);\n        if (!current) {\n          return null;\n        }\n        const next = { ...current, ...data, id } as KvRecord;\n        const ids = await readIndex(collection);\n        if (!ids.includes(id)) {\n          await writeIndexUnlocked(collection, [...ids, id]);\n        }\n        await writeRecord(collection, id, next);\n        return next as T;\n      });\n    },\n    async delete(collection: string, id: string) {\n      return withCollectionIndexMutation(collection, async () => {\n        const current = await readRecord(collection, id);\n        if (!current) {\n          return false;\n        }\n        // Mutate the index first, then delete the record. If the record delete\n        // fails the caller sees a failure but the index has been updated to no\n        // longer reference the (still-present) record — attempt to roll the\n        // index back so the collection is not corrupted. The reverse order\n        // (record first, then index) leaves the index pointing at a missing\n        // record when the index write fails, which is far worse for\n        // count()/list() consumers that scan the index.\n        const previousIds = await readIndex(collection);\n        const nextIds = previousIds.filter((candidate) => candidate !== id);\n        await writeIndexUnlocked(collection, nextIds);\n        try {\n          await kvDelete(\n            recordKey(collection, id),\n            `${collection}:${id} record`,\n          );\n        } catch (error) {\n          // Best-effort rollback: restore the prior index so callers can retry\n          // the delete without losing track of the still-present record.\n          try {\n            await writeIndexUnlocked(collection, previousIds);\n          } catch {\n            // Swallow rollback errors — surface the original delete failure.\n          }\n          throw error;\n        }\n        return true;\n      });\n    },\n    async list<T>(collection: string, options?: ListOptions) {\n      assertListOptions(options);\n      const records = await readRecords(collection, options);\n      if (!options?.orderBy) {\n        return records as T[];\n      }\n      return pageRecords(sortRecords(records, options), options) as T[];\n    },\n    async query<T>(collection: string, filter: QueryFilter) {\n      const checkedFilter = assertQueryFilter(filter, \"query\");\n      return (\n        await readRecords(collection, undefined, {\n          maxRecords: maxScanRecords,\n          operation: \"query\",\n        })\n      ).filter((record) => matchesFilter(record, checkedFilter)) as T[];\n    },\n    async count(collection: string, filter?: QueryFilter) {\n      const checkedFilter = filter\n        ? assertQueryFilter(filter, \"count\")\n        : undefined;\n      if (!checkedFilter || checkedFilter.length === 0) {\n        // Unfiltered count: read ids only (namespace.list when available, or\n        // the collection index fallback) and skip record payload fetches.\n        // `namespace.list` reflects post-TTL state, so this stays accurate when\n        // the runtime supports listing. When only the fallback index is\n        // available and records have TTL, scan live records so expired payloads\n        // are pruned instead of counted forever.\n        if (defaultTtlSeconds !== undefined && !namespace.list) {\n          return (\n            await readRecords(collection, undefined, {\n              maxRecords: maxScanRecords,\n              operation: \"count\",\n            })\n          ).length;\n        }\n        return countIndexedRecords(collection);\n      }\n      const records = await readRecords(collection, undefined, {\n        maxRecords: maxScanRecords,\n        operation: \"count\",\n      });\n      return records.filter((record) => matchesFilter(record, checkedFilter))\n        .length;\n    },\n    async join() {\n      return unsupportedRelationalOperation(\"join\");\n    },\n    async sql() {\n      return unsupportedRelationalOperation(\"sql\");\n    },\n    async transaction() {\n      return unsupportedRelationalOperation(\"transaction\");\n    },\n  };\n}\n\n/**\n * Normalizes Cloudflare KV adapter input into a shared DB adapter instance.\n *\n * @param config Existing DB adapter, adapter binding, or KV adapter options.\n * @returns A DB adapter suitable for the shared adapters contract.\n */\nexport function withCloudflareKvDb(\n  config: CloudflareKvDbAdapterInput,\n): DbAdapter {\n  const adapter =\n    isRecord(config) && \"adapter\" in config ? config.adapter : config;\n  if (isCloudflareKvDbAdapterOptions(adapter)) {\n    return createCloudflareKvDbAdapter(adapter);\n  }\n\n  assertDbAdapter(adapter);\n  return adapter;\n}\n\n/** @doc SDK-free domain contract interfaces exposed consistently across launch DB backend subpaths. */\nexport type {\n  AuthProviderAdapter,\n  CacheAdapter,\n  DeployAdapter,\n  EventsAdapter,\n  PaymentsProviderAdapter,\n  QueueAdapter,\n  StorageAdapter,\n} from \"@geenius/adapters\";\n/** @doc SDK-free domain Zod schemas and error classes exposed by this backend contract subpath. */\nexport {\n  AuthContractError,\n  AuthIdentitySchema,\n  AuthSessionContractSchema,\n  CacheContractError,\n  CacheEntrySchema,\n  DeployContractError,\n  DeploymentResultSchema,\n  DeploymentTargetSchema,\n  EventEnvelopeSchema,\n  EventsContractError,\n  PaymentCheckoutInputSchema,\n  PaymentPlanContractSchema,\n  PaymentSubscriptionContractSchema,\n  PaymentsContractError,\n  QueueContractError,\n  QueueJobSchema,\n  StorageContractError,\n  StorageObjectSchema,\n} from \"@geenius/adapters\";\n"]}