{"version":3,"sources":["../src/errors.ts","../src/contracts.ts","../src/retry.ts","../src/constants.ts","../src/config.ts","../src/resolve.ts","../src/browser-storage.ts","../src/runtime-warning.ts","../src/admin/browser-storage-adapter.ts","../src/ai/localStorage.ts","../src/auth/browser-storage-adapter.ts","../src/db/localStorage.ts","../src/logger/console.ts","../src/logger/memory.ts","../src/payments/browser-storage-adapter.ts","../src/storage/browser-storage-adapter.ts","../src/tier-gate.ts"],"names":["ErrorCode","GeeniusError","z","provider","isRecord","getUsers","role","team","options","USERS_KEY","SESSION_KEY","applyListOptions","item","LOG_LEVEL_PRIORITY"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module errors\n * @description Defines the typed error hierarchy and helpers shared across the\n * adapters package. Each error preserves domain-aware error codes so consumers\n * can discriminate failures without relying on string parsing while still\n * aligning with the shared `@geenius/errors` base contract.\n */\n\nimport { ErrorCode, GeeniusError } from \"@geenius/errors\";\n\n// ─── Error Codes ────────────────────────────────────────────────────────────\n\n/**\n * Error codes specific to database operations.\n * Used to categorize and handle different types of database failures.\n */\nexport type DbErrorCode =\n  | \"NOT_FOUND\"\n  | \"CONSTRAINT_VIOLATION\"\n  | \"QUERY_ERROR\"\n  | \"CONNECTION_ERROR\"\n  | \"COLLECTION_NOT_CONFIGURED\";\n\n/**\n * Error codes specific to authentication operations.\n * Covers credential validation, session management, and OAuth failures.\n */\nexport type AuthErrorCode =\n  | \"INVALID_CREDENTIALS\"\n  | \"USER_EXISTS\"\n  | \"SESSION_EXPIRED\"\n  | \"UNAUTHORIZED\"\n  | \"OAUTH_ERROR\"\n  | \"SERVICE_ERROR\";\n\n/**\n * Error codes specific to AI/LLM operations.\n * Includes model-level errors, API limits, and token constraints.\n */\nexport type AiErrorCode =\n  | \"MODEL_ERROR\"\n  | \"RATE_LIMIT\"\n  | \"CONTEXT_LENGTH\"\n  | \"SERVICE_ERROR\"\n  | \"EMBEDDING_ERROR\"\n  | \"INVALID_INPUT\";\n\n/**\n * Error codes specific to file storage operations.\n * Covers file lifecycle errors and quota management.\n */\nexport type StorageErrorCode =\n  | \"NOT_FOUND\"\n  | \"UPLOAD_FAILED\"\n  | \"DOWNLOAD_FAILED\"\n  | \"PAYLOAD_TOO_LARGE\"\n  | \"QUOTA_EXCEEDED\"\n  | \"INVALID_KEY\"\n  | \"SERVICE_ERROR\";\n\n/**\n * Error codes specific to payment/billing operations.\n * Covers subscription and checkout workflow errors.\n */\nexport type PaymentsErrorCode =\n  | \"INVALID_PLAN\"\n  | \"CHECKOUT_FAILED\"\n  | \"SUBSCRIPTION_NOT_FOUND\"\n  | \"CANCEL_FAILED\"\n  | \"SERVICE_ERROR\"\n  | \"NOT_AVAILABLE\";\n\n/**\n * Error codes specific to admin panel operations.\n * Covers admin-level data and configuration errors.\n */\nexport type AdminErrorCode =\n  | \"USER_NOT_FOUND\"\n  | \"OPERATION_FAILED\"\n  | \"SERVICE_ERROR\";\n\n/**\n * Error codes for adapter configuration and runtime invariants.\n * These cover setup-time failures that happen before a domain-specific adapter\n * can be invoked safely.\n */\nexport type AdapterInfrastructureErrorCode =\n  | \"INVALID_CONFIG\"\n  | \"MISSING_CONFIG\"\n  | \"MISSING_RESOLVER\"\n  | \"ADAPTER_NOT_CONFIGURED\"\n  | \"MISSING_CONTEXT\"\n  | \"INVARIANT_VIOLATION\";\n\n/**\n * Union of all adapter-specific error codes, including the shared Geenius\n * error codes that this package reuses from `@geenius/errors`.\n */\nexport type AdapterErrorCode =\n  | ErrorCode\n  | DbErrorCode\n  | AuthErrorCode\n  | AiErrorCode\n  | StorageErrorCode\n  | PaymentsErrorCode\n  | AdminErrorCode\n  | AdapterInfrastructureErrorCode\n  | (string & {});\n\n/**\n * Maps adapter-level error codes onto stable HTTP-like status codes so the\n * shared `GeeniusError` base always carries a concrete status value.\n *\n * @param code Adapter-specific error code to classify.\n * @returns A numeric status code aligned with the failure category.\n */\nfunction getStatusCodeForAdapterError(code: AdapterErrorCode): number {\n  switch (code) {\n    case \"NOT_FOUND\":\n    case \"USER_NOT_FOUND\":\n    case \"SUBSCRIPTION_NOT_FOUND\":\n    case \"COLLECTION_NOT_CONFIGURED\":\n      return 404;\n    case \"INVALID_CREDENTIALS\":\n    case \"UNAUTHORIZED\":\n    case \"SESSION_EXPIRED\":\n      return 401;\n    case \"USER_EXISTS\":\n    case \"CONSTRAINT_VIOLATION\":\n      return 409;\n    case \"RATE_LIMIT\":\n      return 429;\n    case \"PAYLOAD_TOO_LARGE\":\n      return 413;\n    case \"INVALID_INPUT\":\n    case \"INVALID_KEY\":\n    case \"INVALID_PLAN\":\n    case \"CONTRACT_ERROR\":\n      return 400;\n    default:\n      return 500;\n  }\n}\n\nfunction toBaseErrorCode(code: AdapterErrorCode): ErrorCode {\n  switch (code) {\n    case \"NOT_FOUND\":\n    case \"USER_NOT_FOUND\":\n    case \"SUBSCRIPTION_NOT_FOUND\":\n    case \"COLLECTION_NOT_CONFIGURED\":\n      return ErrorCode.NOT_FOUND;\n    case \"INVALID_CREDENTIALS\":\n    case \"SESSION_EXPIRED\":\n    case \"UNAUTHORIZED\":\n      return ErrorCode.UNAUTHORIZED;\n    case \"USER_EXISTS\":\n    case \"CONSTRAINT_VIOLATION\":\n      return ErrorCode.CONFLICT;\n    case \"INVALID_CONFIG\":\n      return ErrorCode.INVALID_CONFIG;\n    case \"MISSING_CONFIG\":\n      return ErrorCode.MISSING_CONFIG;\n    case \"CONNECTION_ERROR\":\n      return ErrorCode.NETWORK_ERROR;\n    case \"QUERY_ERROR\":\n      return ErrorCode.DATABASE_ERROR;\n    case \"INVALID_INPUT\":\n    case \"INVALID_KEY\":\n    case \"INVALID_PLAN\":\n    case \"PAYLOAD_TOO_LARGE\":\n    case \"CONTRACT_ERROR\":\n      return ErrorCode.VALIDATION;\n    default:\n      return ErrorCode.INTERNAL;\n  }\n}\n\n// ─── Base Error ─────────────────────────────────────────────────────────────\n\n/**\n * Base error class for all adapter-related errors.\n * Provides structured error information for better error handling and logging.\n *\n * @example\n * try {\n *   await adapter.query(/* ... *\\/);\n * } catch (error) {\n *   if (error instanceof AdapterError) {\n *     logger.error(`${error.domain}: ${error.code} - ${error.message}`);\n *     if (isRetryable(error)) {\n *       // Implement retry logic\n *     }\n *   }\n * }\n */\nexport class AdapterError extends GeeniusError {\n  readonly adapterCode: AdapterErrorCode;\n  readonly domain: string;\n\n  /**\n   * Creates a new AdapterError instance.\n   *\n   * @param message - Human-readable error message\n   * @param domain - The adapter domain where the error occurred (db, auth, etc.)\n   * @param code - Machine-readable error code for programmatic handling\n   * @param cause - Optional underlying error that caused this error\n   */\n  constructor(\n    message: string,\n    domain: string,\n    code: AdapterErrorCode,\n    public readonly cause?: unknown,\n  ) {\n    super({\n      message,\n      code: toBaseErrorCode(code),\n      cause,\n      statusCode: getStatusCodeForAdapterError(code),\n      context: {\n        domain,\n      },\n    });\n    Object.defineProperty(this, \"code\", {\n      value: code,\n      enumerable: true,\n      configurable: true,\n    });\n    this.adapterCode = code;\n    this.name = \"AdapterError\";\n    this.domain = domain;\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n// ─── Domain Errors ──────────────────────────────────────────────────────────\n\n/**\n * Error thrown by database adapter operations.\n * Specializes AdapterError with database-specific error codes.\n */\nexport class DbError extends AdapterError {\n  /**\n   * @param message - Description of what went wrong\n   * @param code - Database-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(message: string, code: DbErrorCode, cause?: unknown) {\n    super(message, \"db\", code, cause);\n    this.name = \"DbError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown by authentication adapter operations.\n * Specializes AdapterError with auth-specific error codes.\n */\nexport class AuthError extends AdapterError {\n  /**\n   * @param message - Description of what went wrong (e.g., credentials invalid)\n   * @param code - Auth-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(message: string, code: AuthErrorCode, cause?: unknown) {\n    super(message, \"auth\", code, cause);\n    this.name = \"AuthError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown by AI/LLM adapter operations.\n * Specializes AdapterError with AI-specific error codes.\n */\nexport class AiError extends AdapterError {\n  /**\n   * @param message - Description of what went wrong (e.g., rate limited)\n   * @param code - AI-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(message: string, code: AiErrorCode, cause?: unknown) {\n    super(message, \"ai\", code, cause);\n    this.name = \"AiError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown by file storage adapter operations.\n * Specializes AdapterError with storage-specific error codes.\n */\nexport class StorageError extends AdapterError {\n  /**\n   * @param message - Description of what went wrong (e.g., upload failed)\n   * @param code - Storage-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(message: string, code: StorageErrorCode, cause?: unknown) {\n    super(message, \"storage\", code, cause);\n    this.name = \"StorageError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown by payment adapter operations.\n * Specializes AdapterError with payment-specific error codes.\n */\nexport class PaymentsError extends AdapterError {\n  /**\n   * @param message - Description of what went wrong (e.g., checkout failed)\n   * @param code - Payment-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(message: string, code: PaymentsErrorCode, cause?: unknown) {\n    super(message, \"payments\", code, cause);\n    this.name = \"PaymentsError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown by admin adapter operations.\n * Specializes AdapterError with admin-specific error codes.\n */\nexport class AdminError extends AdapterError {\n  /**\n   * @param message - Description of what went wrong\n   * @param code - Admin-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(message: string, code: AdminErrorCode, cause?: unknown) {\n    super(message, \"admin\", code, cause);\n    this.name = \"AdminError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown when adapter configuration is invalid or unavailable.\n * Covers malformed config payloads and missing initialization.\n */\nexport class AdapterConfigurationError extends AdapterError {\n  /**\n   * @param message - Description of the configuration failure\n   * @param code - Configuration-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(\n    message: string,\n    code: Extract<\n      AdapterInfrastructureErrorCode,\n      \"INVALID_CONFIG\" | \"MISSING_CONFIG\"\n    >,\n    cause?: unknown,\n  ) {\n    super(message, \"config\", code, cause);\n    this.name = \"AdapterConfigurationError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown when resolving an adapter through the registry fails.\n * Covers missing registrations and domains with no configured provider.\n */\nexport class AdapterResolutionError extends AdapterError {\n  /**\n   * @param message - Description of the resolution failure\n   * @param code - Resolution-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(\n    message: string,\n    code: Extract<\n      AdapterInfrastructureErrorCode,\n      \"MISSING_CONFIG\" | \"MISSING_RESOLVER\"\n    >,\n    cause?: unknown,\n  ) {\n    super(message, \"resolution\", code, cause);\n    this.name = \"AdapterResolutionError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown when a UI adapter context is missing a provider or domain.\n * Used by React hooks and Solid primitives to fail fast with a typed error.\n */\nexport class AdapterContextError extends AdapterError {\n  /**\n   * @param message - Description of the missing context or adapter\n   * @param code - Context-specific error code for routing and handling\n   * @param cause - The underlying error when provided\n   */\n  constructor(\n    message: string,\n    code: Extract<\n      AdapterInfrastructureErrorCode,\n      \"ADAPTER_NOT_CONFIGURED\" | \"MISSING_CONTEXT\"\n    >,\n    cause?: unknown,\n  ) {\n    super(message, \"context\", code, cause);\n    this.name = \"AdapterContextError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error thrown when the package encounters an unexpected runtime invariant.\n * Used for bootstrap and environment assumptions that cannot be recovered from.\n */\nexport class AdapterInvariantError extends AdapterError {\n  /**\n   * @param message - Description of the failed invariant\n   * @param cause - The underlying error when provided\n   */\n  constructor(message: string, cause?: unknown) {\n    super(message, \"runtime\", \"INVARIANT_VIOLATION\", cause);\n    this.name = \"AdapterInvariantError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Type guard to check if an error is an AdapterError.\n * Useful for error handling that needs to distinguish adapter errors from other error types.\n *\n * @param error - The error to check\n * @returns True if the error is an instance of AdapterError\n *\n * @example\n * catch (error) {\n *   if (isAdapterError(error)) {\n *     // Handle adapter-specific error\n *     logger.info(`Adapter error: ${error.code}`);\n *   }\n * }\n */\nexport function isAdapterError(error: unknown): error is AdapterError {\n  return error instanceof AdapterError;\n}\n\n/**\n * Determines if an error is retryable based on its error code.\n * Some transient errors (rate limits, connection issues, service errors) should be retried,\n * while others (validation errors, not found) should not.\n *\n * @param error - The error to check\n * @returns True if the error is retryable, false otherwise\n *\n * @example\n * const maxRetries = 3;\n * for (let i = 0; i < maxRetries; i++) {\n *   try {\n *     return await adapter.operation();\n *   } catch (error) {\n *     if (isRetryable(error) && i < maxRetries - 1) {\n *       await delay(Math.pow(2, i) * 1000); // exponential backoff\n *       continue;\n *     }\n *     throw error;\n *   }\n * }\n */\nexport function isRetryable(error: unknown): boolean {\n  if (!isAdapterError(error)) return false;\n  // These error codes represent transient failures that typically resolve with retry\n  const retryableCodes = new Set([\n    \"RATE_LIMIT\",\n    \"CONNECTION_ERROR\",\n    \"SERVICE_ERROR\",\n  ]);\n  return retryableCodes.has(error.code);\n}\n","/**\n * @module contracts\n * @description SDK-free adapter contracts for infrastructure domains. Concrete\n * provider code lives outside this package except for the memory dev/test\n * adapters.\n */\n\nimport { z } from \"zod\";\n\nimport { AdapterError } from \"./errors\";\n\nconst STORAGE_MAX_LIST_LIMIT = 1000;\nconst STORAGE_MAX_TTL_SECONDS = 60 * 60 * 24 * 365;\nconst STORAGE_MAX_OBJECT_BODY_BYTES = 2 * 1024 * 1024;\nconst CACHE_MAX_TTL_SECONDS = 60 * 60 * 24 * 365;\n\nconst getStringByteLength = (value: string): number =>\n  new TextEncoder().encode(value).byteLength;\n\n/**\n * JSON-compatible value accepted by SDK-free adapter contracts. Use this for\n * payloads that must round-trip through local/dev adapters and provider\n * contracts without preserving class instances or cyclic references.\n *\n * @example\n * ```ts\n * const payload: AdapterJsonValue = { feature: \"cache\", enabled: true };\n * ```\n */\nexport type AdapterJsonValue =\n  | string\n  | number\n  | boolean\n  | null\n  | AdapterJsonValue[]\n  | { [key: string]: AdapterJsonValue };\n\nfunction isPlainJsonRecord(value: object): value is Record<string, unknown> {\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction isAdapterJsonValue(\n  value: unknown,\n  stack = new WeakSet<object>(),\n): value is AdapterJsonValue {\n  if (\n    value === null ||\n    typeof value === \"string\" ||\n    typeof value === \"boolean\"\n  ) {\n    return true;\n  }\n\n  if (typeof value === \"number\") {\n    return Number.isFinite(value);\n  }\n\n  if (typeof value !== \"object\") {\n    return false;\n  }\n\n  if (stack.has(value)) {\n    return false;\n  }\n\n  stack.add(value);\n\n  if (Array.isArray(value)) {\n    for (let index = 0; index < value.length; index += 1) {\n      if (!(index in value) || !isAdapterJsonValue(value[index], stack)) {\n        stack.delete(value);\n        return false;\n      }\n    }\n    stack.delete(value);\n    return true;\n  }\n\n  if (!isPlainJsonRecord(value) || Object.getOwnPropertySymbols(value).length) {\n    stack.delete(value);\n    return false;\n  }\n\n  const descriptors = Object.getOwnPropertyDescriptors(value);\n  for (const descriptor of Object.values(descriptors)) {\n    if (\n      !descriptor.enumerable ||\n      !(\"value\" in descriptor) ||\n      !isAdapterJsonValue(descriptor.value, stack)\n    ) {\n      stack.delete(value);\n      return false;\n    }\n  }\n\n  stack.delete(value);\n  return true;\n}\n\n/**\n * Runtime validator for JSON-compatible values passed through adapter\n * boundaries. Use this before writing cache values, queue payloads, or event\n * envelopes supplied by application code.\n *\n * @example\n * ```ts\n * const payload = AdapterJsonValueSchema.parse({ retry: 2 });\n * ```\n */\nexport const AdapterJsonValueSchema: z.ZodType<AdapterJsonValue> =\n  z.custom<AdapterJsonValue>((value) => isAdapterJsonValue(value), {\n    message:\n      \"Expected a JSON-compatible primitive, array, or plain object without cycles\",\n  });\n\nconst IsoDateTimeStringSchema = z.string().datetime({ offset: true });\nconst ISO_4217_CURRENCY_CODE = /^[A-Z]{3}$/;\n\n/**\n * Launch backend ids supported by the adapter contract matrix. Use this tuple\n * when building parity tests or provider pickers that must stay aligned with\n * the handwritten adapter package shape.\n *\n * @example\n * ```ts\n * const launchBackends = [...ADAPTER_CONTRACT_BACKENDS];\n * ```\n */\nexport const ADAPTER_CONTRACT_BACKENDS = [\n  \"convex\",\n  \"neon\",\n  \"cloudflareKV\",\n  \"memory\",\n] as const;\n\n/**\n * Infrastructure domains owned by the contract-only adapter surface. Use this\n * tuple when registering SDK-free domain contracts rather than concrete\n * production providers.\n *\n * @example\n * ```ts\n * const supportsDeploy = ADAPTER_CONTRACT_DOMAINS.includes(\"deploy\");\n * ```\n */\nexport const ADAPTER_CONTRACT_DOMAINS = [\n  \"storage\",\n  \"cache\",\n  \"queue\",\n  \"events\",\n  \"auth\",\n  \"payments\",\n  \"deploy\",\n] as const;\n\n/**\n * Backend id for a launch adapter contract package.\n *\n * @example\n * ```ts\n * const backend: AdapterContractBackend = \"memory\";\n * ```\n */\nexport type AdapterContractBackend = (typeof ADAPTER_CONTRACT_BACKENDS)[number];\n\n/**\n * Domain id for the contract-only adapter surface.\n *\n * @example\n * ```ts\n * const domain: AdapterContractDomain = \"queue\";\n * ```\n */\nexport type AdapterContractDomain = (typeof ADAPTER_CONTRACT_DOMAINS)[number];\n\n/**\n * Runtime validator for launch backend ids accepted by contract manifests.\n *\n * @example\n * ```ts\n * const backend = AdapterContractBackendSchema.parse(\"cloudflareKV\");\n * ```\n */\nexport const AdapterContractBackendSchema = z.enum(ADAPTER_CONTRACT_BACKENDS);\n\n/**\n * Runtime validator for contract domain ids accepted by contract manifests.\n *\n * @example\n * ```ts\n * const domain = AdapterContractDomainSchema.parse(\"events\");\n * ```\n */\nexport const AdapterContractDomainSchema = z.enum(ADAPTER_CONTRACT_DOMAINS);\n\n/**\n * Runtime validator for string metadata maps used by several domains. Use this\n * for provider-neutral metadata that must remain small and serializable.\n *\n * @example\n * ```ts\n * const metadata = AdapterMetadataSchema.parse({ region: \"eu\" });\n * ```\n */\nexport const AdapterMetadataSchema = z.record(z.string(), z.string());\n\n/**\n * Runtime validator for file-storage metadata scalar values.\n *\n * @example\n * ```ts\n * const value = FileStorageMetadataValueSchema.parse(\"invoice\");\n * ```\n */\nexport const FileStorageMetadataValueSchema = z.union([\n  z.string(),\n  z.number(),\n  z.boolean(),\n  z.null(),\n]);\n\n/**\n * Runtime validator for caller-controlled file metadata maps. Use this before\n * handing upload metadata to local/dev file storage adapters.\n *\n * @example\n * ```ts\n * const metadata = FileStorageMetadataSchema.parse({ public: true });\n * ```\n */\nexport const FileStorageMetadataSchema = z.record(\n  z.string(),\n  FileStorageMetadataValueSchema,\n);\n\n/**\n * Common health status returned by adapter implementations. Use this schema to\n * normalize provider health checks before surfacing them in review UI or logs.\n *\n * @example\n * ```ts\n * const health = AdapterHealthSchema.parse({ ok: true, checkedAt: new Date().toISOString() });\n * ```\n */\nexport const AdapterHealthSchema = z.object({\n  ok: z.boolean(),\n  checkedAt: IsoDateTimeStringSchema,\n  latencyMs: z.number().nonnegative().optional(),\n  message: z.string().optional(),\n});\n\n/**\n * Common health status type returned by adapter implementations.\n *\n * @example\n * ```ts\n * const health: AdapterHealth = { ok: true, checkedAt: new Date().toISOString() };\n * ```\n */\nexport type AdapterHealth = z.infer<typeof AdapterHealthSchema>;\n\n/**\n * Shared page options for list operations. Use this schema for cursor, prefix,\n * or bounded limit arguments accepted by contract-only list methods.\n *\n * @example\n * ```ts\n * const options = AdapterListOptionsSchema.parse({ limit: 25, prefix: \"prod/\" });\n * ```\n */\nexport const AdapterListOptionsSchema = z.object({\n  limit: z.number().int().positive().max(STORAGE_MAX_LIST_LIMIT).optional(),\n  cursor: z.string().min(1).optional(),\n  prefix: z.string().min(1).optional(),\n});\n\n/**\n * Shared page options type for list operations.\n *\n * @example\n * ```ts\n * const options: AdapterListOptions = { limit: 50 };\n * ```\n */\nexport type AdapterListOptions = z.infer<typeof AdapterListOptionsSchema>;\n\n/**\n * Declarative metadata for a domain/backend contract cell. Use this schema for\n * manifest files and conformance fixtures that describe adapter capabilities.\n *\n * @example\n * ```ts\n * const manifest = AdapterContractManifestSchema.parse({\n *   domain: \"cache\",\n *   backend: \"memory\",\n *   provider: \"local\",\n * });\n * ```\n */\nexport const AdapterContractManifestSchema = z.object({\n  domain: AdapterContractDomainSchema,\n  backend: AdapterContractBackendSchema,\n  provider: z.string(),\n  capabilities: z.array(z.string()).default([]),\n});\n\n/**\n * Declarative metadata for a domain/backend contract cell.\n *\n * @example\n * ```ts\n * const manifest: AdapterContractManifest = {\n *   domain: \"deploy\",\n *   backend: \"memory\",\n *   provider: \"local\",\n *   capabilities: [],\n * };\n * ```\n */\nexport type AdapterContractManifest = z.infer<\n  typeof AdapterContractManifestSchema\n>;\n\n/**\n * Error raised by SDK-free contract validation helpers. Use this when a\n * contract-layer guard rejects input before any concrete provider SDK runs.\n *\n * @example\n * ```ts\n * throw new AdapterContractError(\"contract\", \"Invalid adapter payload\");\n * ```\n */\nexport class AdapterContractError extends AdapterError {\n  /**\n   * Creates a contract-layer error without coupling to a concrete provider SDK.\n   *\n   * @param domain - Contract domain that rejected the payload.\n   * @param message - Human-readable validation failure.\n   * @param cause - Optional underlying parser or provider error.\n   * @returns A typed adapter contract error.\n   * @example\n   * ```ts\n   * const error = new AdapterContractError(\"storage\", \"Invalid key\");\n   * ```\n   */\n  constructor(\n    domain: AdapterContractDomain | \"contract\",\n    message: string,\n    cause?: unknown,\n  ) {\n    super(message, domain, \"CONTRACT_ERROR\", cause);\n    this.name = \"AdapterContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error raised by storage contract implementations when object/blob input or\n * output violates the SDK-free storage contract.\n *\n * @example\n * ```ts\n * throw new StorageContractError(\"Storage object key is required\");\n * ```\n */\nexport class StorageContractError extends AdapterContractError {\n  /**\n   * Creates a storage-specific contract error.\n   *\n   * @param message - Human-readable storage contract failure.\n   * @param cause - Optional parser or provider error that triggered the failure.\n   * @returns A typed storage contract error.\n   * @example\n   * ```ts\n   * const error = new StorageContractError(\"Invalid metadata\");\n   * ```\n   */\n  constructor(message: string, cause?: unknown) {\n    super(\"storage\", message, cause);\n    this.name = \"StorageContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error raised by cache contract implementations when cache keys or values do\n * not satisfy the JSON-compatible cache boundary.\n *\n * @example\n * ```ts\n * throw new CacheContractError(\"Cache value is not JSON-compatible\");\n * ```\n */\nexport class CacheContractError extends AdapterContractError {\n  /**\n   * Creates a cache-specific contract error.\n   *\n   * @param message - Human-readable cache contract failure.\n   * @param cause - Optional parser or provider error that triggered the failure.\n   * @returns A typed cache contract error.\n   * @example\n   * ```ts\n   * const error = new CacheContractError(\"Invalid TTL\");\n   * ```\n   */\n  constructor(message: string, cause?: unknown) {\n    super(\"cache\", message, cause);\n    this.name = \"CacheContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error raised by queue contract implementations when job payloads or state\n * transitions violate the queue contract.\n *\n * @example\n * ```ts\n * throw new QueueContractError(\"Job id is required\");\n * ```\n */\nexport class QueueContractError extends AdapterContractError {\n  /**\n   * Creates a queue-specific contract error.\n   *\n   * @param message - Human-readable queue contract failure.\n   * @param cause - Optional parser or provider error that triggered the failure.\n   * @returns A typed queue contract error.\n   * @example\n   * ```ts\n   * const error = new QueueContractError(\"Invalid scheduled run time\");\n   * ```\n   */\n  constructor(message: string, cause?: unknown) {\n    super(\"queue\", message, cause);\n    this.name = \"QueueContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error raised by events contract implementations when pub/sub or webhook\n * payloads violate the event boundary.\n *\n * @example\n * ```ts\n * throw new EventsContractError(\"Webhook URL is invalid\");\n * ```\n */\nexport class EventsContractError extends AdapterContractError {\n  /**\n   * Creates an events-specific contract error.\n   *\n   * @param message - Human-readable events contract failure.\n   * @param cause - Optional parser or provider error that triggered the failure.\n   * @returns A typed events contract error.\n   * @example\n   * ```ts\n   * const error = new EventsContractError(\"Invalid topic\");\n   * ```\n   */\n  constructor(message: string, cause?: unknown) {\n    super(\"events\", message, cause);\n    this.name = \"EventsContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error raised by auth contract implementations when identity or session\n * records violate the contract-only auth boundary.\n *\n * @example\n * ```ts\n * throw new AuthContractError(\"Session token is required\");\n * ```\n */\nexport class AuthContractError extends AdapterContractError {\n  /**\n   * Creates an auth-specific contract error.\n   *\n   * @param message - Human-readable auth contract failure.\n   * @param cause - Optional parser or provider error that triggered the failure.\n   * @returns A typed auth contract error.\n   * @example\n   * ```ts\n   * const error = new AuthContractError(\"Invalid identity\");\n   * ```\n   */\n  constructor(message: string, cause?: unknown) {\n    super(\"auth\", message, cause);\n    this.name = \"AuthContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error raised by payments contract implementations when plan, checkout, or\n * subscription records violate the provider-neutral payments contract.\n *\n * @example\n * ```ts\n * throw new PaymentsContractError(\"Plan currency must be ISO 4217\");\n * ```\n */\nexport class PaymentsContractError extends AdapterContractError {\n  /**\n   * Creates a payments-specific contract error.\n   *\n   * @param message - Human-readable payments contract failure.\n   * @param cause - Optional parser or provider error that triggered the failure.\n   * @returns A typed payments contract error.\n   * @example\n   * ```ts\n   * const error = new PaymentsContractError(\"Invalid checkout session\");\n   * ```\n   */\n  constructor(message: string, cause?: unknown) {\n    super(\"payments\", message, cause);\n    this.name = \"PaymentsContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Error raised by deployment contract implementations when deployment targets\n * or results violate the SDK-free deploy boundary.\n *\n * @example\n * ```ts\n * throw new DeployContractError(\"Deployment target provider is invalid\");\n * ```\n */\nexport class DeployContractError extends AdapterContractError {\n  /**\n   * Creates a deploy-specific contract error.\n   *\n   * @param message - Human-readable deploy contract failure.\n   * @param cause - Optional parser or provider error that triggered the failure.\n   * @returns A typed deploy contract error.\n   * @example\n   * ```ts\n   * const error = new DeployContractError(\"Invalid deployment result\");\n   * ```\n   */\n  constructor(message: string, cause?: unknown) {\n    super(\"deploy\", message, cause);\n    this.name = \"DeployContractError\";\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Serializable object stored by storage adapters. Use this schema to validate\n * local/dev object storage reads before returning them to consumers.\n *\n * @example\n * ```ts\n * const object = StorageObjectSchema.parse({ key: \"a.txt\", body: \"ok\", size: 2, updatedAt: new Date().toISOString() });\n * ```\n */\nexport const StorageObjectSchema = z.object({\n  key: z.string().min(1),\n  body: z.string(),\n  contentType: z.string().optional(),\n  size: z.number().int().nonnegative(),\n  etag: z.string().optional(),\n  metadata: AdapterMetadataSchema.default({}),\n  updatedAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Serializable object stored by storage adapters.\n *\n * @example\n * ```ts\n * const object: StorageObject = { key: \"a.txt\", body: \"ok\", size: 2, metadata: {}, updatedAt: new Date().toISOString() };\n * ```\n */\nexport type StorageObject = z.infer<typeof StorageObjectSchema>;\n\n/**\n * Write payload accepted by storage adapters. Use this schema before persisting\n * object bodies through memory or provider-bound storage implementations.\n *\n * @example\n * ```ts\n * const input = StorageWriteInputSchema.parse({ key: \"a.txt\", body: \"ok\" });\n * ```\n */\nexport const StorageWriteInputSchema = z.object({\n  key: z.string().min(1),\n  body: z\n    .string()\n    .refine(\n      (body) => getStringByteLength(body) <= STORAGE_MAX_OBJECT_BODY_BYTES,\n      \"Storage object body exceeds the 2 MiB contract limit\",\n    ),\n  contentType: z.string().min(1).optional(),\n  metadata: AdapterMetadataSchema.optional(),\n  ttlSeconds: z\n    .number()\n    .int()\n    .positive()\n    .max(STORAGE_MAX_TTL_SECONDS)\n    .optional(),\n});\n\n/**\n * Write payload accepted by storage adapters.\n *\n * @example\n * ```ts\n * const input: StorageWriteInput = { key: \"a.txt\", body: \"ok\" };\n * ```\n */\nexport type StorageWriteInput = z.infer<typeof StorageWriteInputSchema>;\n\n/**\n * Upload options accepted by file storage adapters. Use this for metadata-only\n * upload settings that remain independent of provider SDK upload types.\n *\n * @example\n * ```ts\n * const options = FileUploadOptionsSchema.parse({ name: \"avatar.png\" });\n * ```\n */\nexport const FileUploadOptionsSchema = z.object({\n  name: z.string().min(1).optional(),\n  metadata: FileStorageMetadataSchema.optional(),\n});\n\n/**\n * Runtime validator for file records returned by file storage adapters.\n *\n * @example\n * ```ts\n * const file = StoredFileSchema.parse({ id: \"1\", name: \"a.txt\", path: \"/a.txt\", size: 2, mimeType: \"text/plain\", url: \"memory://a.txt\", createdAt: new Date().toISOString() });\n * ```\n */\nexport const StoredFileSchema = z.object({\n  id: z.string().min(1),\n  name: z.string().min(1),\n  path: z.string(),\n  size: z.number().int().nonnegative(),\n  mimeType: z.string().min(1),\n  url: z.string().min(1),\n  metadata: FileStorageMetadataSchema.optional(),\n  createdAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Contract for object/blob storage providers. Implement this in local/dev\n * storage adapters or downstream provider modules that own concrete SDKs.\n *\n * @example\n * ```ts\n * const object = await storage.getObject(\"a.txt\");\n * ```\n */\nexport interface StorageAdapter {\n  getObject(key: string): Promise<StorageObject | null>;\n  putObject(input: StorageWriteInput): Promise<StorageObject>;\n  deleteObject(key: string): Promise<void>;\n  listObjects(options?: AdapterListOptions): Promise<StorageObject[]>;\n  getHealth(): Promise<AdapterHealth>;\n}\n\n/**\n * Serializable cache entry. Use this schema for cache reads that need to\n * preserve expiry metadata alongside JSON-compatible values.\n *\n * @example\n * ```ts\n * const entry = CacheEntrySchema.parse({ key: \"flag\", value: true, updatedAt: new Date().toISOString() });\n * ```\n */\nexport const CacheEntrySchema = z.object({\n  key: z.string().min(1),\n  value: AdapterJsonValueSchema,\n  expiresAt: IsoDateTimeStringSchema.optional(),\n  updatedAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Serializable cache entry.\n *\n * @example\n * ```ts\n * const entry: CacheEntry = { key: \"flag\", value: true, updatedAt: new Date().toISOString() };\n * ```\n */\nexport type CacheEntry = z.infer<typeof CacheEntrySchema>;\n\n/**\n * Cache write options. Use this schema when accepting caller-provided TTLs for\n * memory, Redis, or edge KV cache implementations.\n *\n * @example\n * ```ts\n * const options = CacheSetOptionsSchema.parse({ ttlSeconds: 60 });\n * ```\n */\nexport const CacheSetOptionsSchema = z.object({\n  ttlSeconds: z.number().int().positive().max(CACHE_MAX_TTL_SECONDS).optional(),\n});\n\n/**\n * Cache write options.\n *\n * @example\n * ```ts\n * const options: CacheSetOptions = { ttlSeconds: 60 };\n * ```\n */\nexport type CacheSetOptions = z.infer<typeof CacheSetOptionsSchema>;\n\n/**\n * Contract for key/value cache providers. Implement this for local memory,\n * Redis, or KV-backed caches while keeping values JSON-compatible.\n *\n * @example\n * ```ts\n * await cache.set(\"feature\", true, { ttlSeconds: 60 });\n * ```\n */\nexport interface CacheAdapter {\n  get<T extends AdapterJsonValue = AdapterJsonValue>(\n    key: string,\n  ): Promise<T | null>;\n  set<T extends AdapterJsonValue = AdapterJsonValue>(\n    key: string,\n    value: T,\n    options?: CacheSetOptions,\n  ): Promise<void>;\n  delete(key: string): Promise<void>;\n  has(key: string): Promise<boolean>;\n  clear(prefix?: string): Promise<void>;\n  getHealth(): Promise<AdapterHealth>;\n}\n\n/**\n * Queue job status values accepted by the scheduled-work contract.\n *\n * @example\n * ```ts\n * const status = QueueJobStatusSchema.parse(\"queued\");\n * ```\n */\nexport const QueueJobStatusSchema = z.enum([\n  \"queued\",\n  \"running\",\n  \"completed\",\n  \"failed\",\n  \"scheduled\",\n]);\n\n/**\n * Queue job status values accepted by the scheduled-work contract.\n *\n * @example\n * ```ts\n * const status: QueueJobStatus = \"scheduled\";\n * ```\n */\nexport type QueueJobStatus = z.infer<typeof QueueJobStatusSchema>;\n\n/**\n * Serializable queue job. Use this schema for queue state returned by local or\n * provider-backed queue adapters.\n *\n * @example\n * ```ts\n * const job = QueueJobSchema.parse({ id: \"1\", name: \"sync\", payload: {}, status: \"queued\", attempts: 0, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() });\n * ```\n */\nexport const QueueJobSchema = z.object({\n  id: z.string().min(1),\n  name: z.string().min(1),\n  payload: AdapterJsonValueSchema,\n  status: QueueJobStatusSchema,\n  runAt: IsoDateTimeStringSchema.optional(),\n  attempts: z.number().int().nonnegative(),\n  createdAt: IsoDateTimeStringSchema,\n  updatedAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Serializable queue job.\n *\n * @example\n * ```ts\n * const job: QueueJob = { id: \"1\", name: \"sync\", payload: {}, status: \"queued\", attempts: 0, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() };\n * ```\n */\nexport type QueueJob = z.infer<typeof QueueJobSchema>;\n\n/**\n * Queue enqueue payload. Use this schema before accepting work from callers or\n * conformance fixtures.\n *\n * @example\n * ```ts\n * const input = QueueJobInputSchema.parse({ name: \"sync\", payload: { id: 1 } });\n * ```\n */\nexport const QueueJobInputSchema = z.object({\n  name: z.string().min(1),\n  payload: AdapterJsonValueSchema.optional(),\n  runAt: IsoDateTimeStringSchema.optional(),\n});\n\n/**\n * Queue enqueue payload.\n *\n * @example\n * ```ts\n * const input: QueueJobInput = { name: \"sync\", payload: { id: 1 } };\n * ```\n */\nexport type QueueJobInput = z.infer<typeof QueueJobInputSchema>;\n\n/**\n * Contract for queue and scheduled-work providers. Implement this for local\n * test queues or downstream queue providers that own runtime SDKs.\n *\n * @example\n * ```ts\n * const job = await queue.enqueue({ name: \"sync\" });\n * ```\n */\nexport interface QueueAdapter {\n  enqueue(input: QueueJobInput): Promise<QueueJob>;\n  schedule(input: QueueJobInput & { runAt: string }): Promise<QueueJob>;\n  complete(jobId: string): Promise<void>;\n  fail(jobId: string, reason?: string): Promise<void>;\n  listJobs(options?: AdapterListOptions): Promise<QueueJob[]>;\n  getHealth(): Promise<AdapterHealth>;\n}\n\n/**\n * Serializable event envelope. Use this schema to validate pub/sub messages\n * before they cross webhook or provider adapter boundaries.\n *\n * @example\n * ```ts\n * const event = EventEnvelopeSchema.parse({ id: \"1\", topic: \"user.created\", payload: {}, createdAt: new Date().toISOString() });\n * ```\n */\nexport const EventEnvelopeSchema = z.object({\n  id: z.string().min(1),\n  topic: z.string().min(1),\n  payload: AdapterJsonValueSchema,\n  metadata: AdapterMetadataSchema.default({}),\n  createdAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Serializable event envelope.\n *\n * @example\n * ```ts\n * const event: EventEnvelope = { id: \"1\", topic: \"user.created\", payload: {}, metadata: {}, createdAt: new Date().toISOString() };\n * ```\n */\nexport type EventEnvelope = z.infer<typeof EventEnvelopeSchema>;\n\n/**\n * Event publish payload. Use this schema before handing caller-supplied events\n * to local or provider-backed pub/sub adapters.\n *\n * @example\n * ```ts\n * const input = EventPublishInputSchema.parse({ topic: \"user.created\", payload: { id: \"u1\" } });\n * ```\n */\nexport const EventPublishInputSchema = z.object({\n  topic: z.string().min(1),\n  payload: AdapterJsonValueSchema.optional(),\n  metadata: AdapterMetadataSchema.optional(),\n});\n\n/**\n * Event publish payload.\n *\n * @example\n * ```ts\n * const input: EventPublishInput = { topic: \"user.created\", payload: { id: \"u1\" } };\n * ```\n */\nexport type EventPublishInput = z.infer<typeof EventPublishInputSchema>;\n\n/**\n * Event subscription payload. Use this schema when a consumer subscribes to a\n * topic without publishing a payload.\n *\n * @example\n * ```ts\n * const input = EventSubscribeInputSchema.parse({ topic: \"user.created\" });\n * ```\n */\nexport const EventSubscribeInputSchema = EventPublishInputSchema.pick({\n  topic: true,\n});\n\n/**\n * Event subscription payload.\n *\n * @example\n * ```ts\n * const input: EventSubscribeInput = { topic: \"user.created\" };\n * ```\n */\nexport type EventSubscribeInput = z.infer<typeof EventSubscribeInputSchema>;\n\n/**\n * Webhook delivery record. Use this schema for durable delivery status returned\n * by webhook-capable events adapters.\n *\n * @example\n * ```ts\n * const delivery = WebhookDeliverySchema.parse({ id: \"1\", url: \"https://example.com\", eventId: \"evt\", status: \"queued\", createdAt: new Date().toISOString() });\n * ```\n */\nexport const WebhookDeliverySchema = z.object({\n  id: z.string().min(1),\n  url: z.string().url(),\n  eventId: z.string().min(1),\n  status: z.enum([\"queued\", \"delivered\", \"failed\"]),\n  createdAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Webhook delivery record.\n *\n * @example\n * ```ts\n * const delivery: WebhookDelivery = { id: \"1\", url: \"https://example.com\", eventId: \"evt\", status: \"queued\", createdAt: new Date().toISOString() };\n * ```\n */\nexport type WebhookDelivery = z.infer<typeof WebhookDeliverySchema>;\n\n/**\n * Webhook emit payload. Use this schema before dispatching an event envelope to\n * a caller-provided webhook URL.\n *\n * @example\n * ```ts\n * const input = WebhookEmitInputSchema.parse({ url: \"https://example.com\", event });\n * ```\n */\nexport const WebhookEmitInputSchema = z.object({\n  url: z.string().url(),\n  event: EventEnvelopeSchema,\n});\n\n/**\n * Webhook emit payload.\n *\n * @example\n * ```ts\n * const input: WebhookEmitInput = { url: \"https://example.com\", event };\n * ```\n */\nexport type WebhookEmitInput = z.infer<typeof WebhookEmitInputSchema>;\n\n/**\n * Unsubscribe handle returned by event subscriptions. Use this to model\n * provider-neutral cleanup for long-lived local or remote subscriptions.\n *\n * @example\n * ```ts\n * await subscription.unsubscribe();\n * ```\n */\nexport interface EventSubscription {\n  unsubscribe(): Promise<void>;\n}\n\n/**\n * Contract for pub/sub and webhook providers. Implement this for local event\n * emitters or downstream providers that own broker/webhook SDKs.\n *\n * @example\n * ```ts\n * const event = await events.publish({ topic: \"user.created\" });\n * ```\n */\nexport interface EventsAdapter {\n  publish(input: EventPublishInput): Promise<EventEnvelope>;\n  subscribe(\n    input: EventSubscribeInput,\n    handler: (event: EventEnvelope) => void | Promise<void>,\n  ): Promise<EventSubscription>;\n  emitWebhook(input: WebhookEmitInput): Promise<WebhookDelivery>;\n  listEvents(options?: AdapterListOptions): Promise<EventEnvelope[]>;\n  getHealth(): Promise<AdapterHealth>;\n}\n\n/**\n * Identity record used by auth provider adapters. Use this schema for user\n * identity payloads before they cross a provider-bound auth slice.\n *\n * @example\n * ```ts\n * const identity = AuthIdentitySchema.parse({ id: \"u1\", roles: [\"admin\"] });\n * ```\n */\nexport const AuthIdentitySchema = z.object({\n  id: z.string().min(1),\n  email: z.string().email().optional(),\n  name: z.string().optional(),\n  roles: z.array(z.string()).default([]),\n  metadata: AdapterMetadataSchema.default({}),\n});\n\n/**\n * Identity record used by auth provider adapters.\n *\n * @example\n * ```ts\n * const identity: AuthIdentity = { id: \"u1\", roles: [], metadata: {} };\n * ```\n */\nexport type AuthIdentity = z.infer<typeof AuthIdentitySchema>;\n\n/**\n * Session record used by auth provider adapters. Use this schema for session\n * creation and verification results from local/dev auth implementations.\n *\n * @example\n * ```ts\n * const session = AuthSessionContractSchema.parse({ id: \"s1\", identityId: \"u1\", token: \"token\", createdAt: new Date().toISOString() });\n * ```\n */\nexport const AuthSessionContractSchema = z.object({\n  id: z.string().min(1),\n  identityId: z.string().min(1),\n  token: z.string().min(1),\n  expiresAt: IsoDateTimeStringSchema.optional(),\n  createdAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Session record used by auth provider adapters.\n *\n * @example\n * ```ts\n * const session: AuthSessionContract = { id: \"s1\", identityId: \"u1\", token: \"token\", createdAt: new Date().toISOString() };\n * ```\n */\nexport type AuthSessionContract = z.infer<typeof AuthSessionContractSchema>;\n\n/**\n * Contract for session and identity providers. Implement this in local auth\n * adapters or downstream provider modules that own auth SDKs.\n *\n * @example\n * ```ts\n * const session = await auth.verifySession(token);\n * ```\n */\nexport interface AuthProviderAdapter {\n  getIdentity(identityId: string): Promise<AuthIdentity | null>;\n  createIdentity(identity: AuthIdentity): Promise<AuthIdentity>;\n  createSession(identityId: string): Promise<AuthSessionContract>;\n  verifySession(token: string): Promise<AuthSessionContract | null>;\n  revokeSession(sessionId: string): Promise<void>;\n  getHealth(): Promise<AdapterHealth>;\n}\n\n/**\n * Payment plan record. Use this schema to validate provider-neutral plan data\n * before displaying pricing or starting checkout.\n *\n * @example\n * ```ts\n * const plan = PaymentPlanContractSchema.parse({ id: \"pro\", name: \"Pro\", currency: \"USD\", amount: 2000, interval: \"month\" });\n * ```\n */\nexport const PaymentPlanContractSchema = z.object({\n  id: z.string().min(1),\n  name: z.string().min(1),\n  currency: z\n    .string()\n    .regex(ISO_4217_CURRENCY_CODE, \"Expected uppercase ISO 4217 currency code\"),\n  amount: z.number().int().nonnegative(),\n  interval: z.enum([\"month\", \"year\", \"one-time\"]),\n  features: z.array(z.string()).default([]),\n});\n\n/**\n * Payment plan record.\n *\n * @example\n * ```ts\n * const plan: PaymentPlanContract = { id: \"pro\", name: \"Pro\", currency: \"USD\", amount: 2000, interval: \"month\", features: [] };\n * ```\n */\nexport type PaymentPlanContract = z.infer<typeof PaymentPlanContractSchema>;\n\n/**\n * Checkout session creation input. Use this schema before passing checkout\n * requests to a provider-owned payments adapter.\n *\n * @example\n * ```ts\n * const input = PaymentCheckoutInputSchema.parse({ planId: \"pro\", identityId: \"u1\" });\n * ```\n */\nexport const PaymentCheckoutInputSchema = z.object({\n  planId: z.string().min(1),\n  identityId: z.string().min(1),\n  successUrl: z.string().url().optional(),\n  cancelUrl: z.string().url().optional(),\n});\n\n/**\n * Checkout session creation input.\n *\n * @example\n * ```ts\n * const input: PaymentCheckoutInput = { planId: \"pro\", identityId: \"u1\" };\n * ```\n */\nexport type PaymentCheckoutInput = z.infer<typeof PaymentCheckoutInputSchema>;\n\n/**\n * Checkout session record. Use this schema for checkout responses returned by\n * provider-bound payments adapters.\n *\n * @example\n * ```ts\n * const session = PaymentCheckoutSessionSchema.parse({ id: \"cs_1\", planId: \"pro\", identityId: \"u1\", url: \"https://pay.example.com\", status: \"created\", createdAt: new Date().toISOString() });\n * ```\n */\nexport const PaymentCheckoutSessionSchema = z.object({\n  id: z.string().min(1),\n  planId: z.string().min(1),\n  identityId: z.string().min(1),\n  url: z.string().url(),\n  status: z.enum([\"created\", \"completed\", \"expired\"]),\n  createdAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Checkout session record.\n *\n * @example\n * ```ts\n * const session: PaymentCheckoutSession = { id: \"cs_1\", planId: \"pro\", identityId: \"u1\", url: \"https://pay.example.com\", status: \"created\", createdAt: new Date().toISOString() };\n * ```\n */\nexport type PaymentCheckoutSession = z.infer<\n  typeof PaymentCheckoutSessionSchema\n>;\n\n/**\n * Subscription lifecycle record. Use this schema to normalize subscription\n * state from payment providers before checking feature access.\n *\n * @example\n * ```ts\n * const subscription = PaymentSubscriptionContractSchema.parse({ id: \"sub_1\", planId: \"pro\", identityId: \"u1\", status: \"active\", currentPeriodStart: new Date().toISOString(), currentPeriodEnd: new Date().toISOString(), createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() });\n * ```\n */\nexport const PaymentSubscriptionContractSchema = z.object({\n  id: z.string().min(1),\n  planId: z.string().min(1),\n  identityId: z.string().min(1),\n  status: z.enum([\n    \"active\",\n    \"cancelled\",\n    \"past_due\",\n    \"trialing\",\n    \"incomplete\",\n    \"unpaid\",\n  ]),\n  currentPeriodStart: IsoDateTimeStringSchema,\n  currentPeriodEnd: IsoDateTimeStringSchema,\n  cancelAtPeriodEnd: z.boolean().default(false),\n  cancelledAt: IsoDateTimeStringSchema.optional(),\n  createdAt: IsoDateTimeStringSchema,\n  updatedAt: IsoDateTimeStringSchema,\n  metadata: AdapterMetadataSchema.default({}),\n});\n\n/**\n * Subscription lifecycle record.\n *\n * @example\n * ```ts\n * const subscription: PaymentSubscriptionContract = { id: \"sub_1\", planId: \"pro\", identityId: \"u1\", status: \"active\", currentPeriodStart: new Date().toISOString(), currentPeriodEnd: new Date().toISOString(), cancelAtPeriodEnd: false, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), metadata: {} };\n * ```\n */\nexport type PaymentSubscriptionContract = z.infer<\n  typeof PaymentSubscriptionContractSchema\n>;\n\n/**\n * Contract for payment-provider adapters. Implement this in local payment\n * fakes or downstream provider modules that own payment SDKs.\n *\n * @example\n * ```ts\n * const plans = await payments.listPlans();\n * ```\n */\nexport interface PaymentsProviderAdapter {\n  listPlans(): Promise<PaymentPlanContract[]>;\n  createCheckout(input: PaymentCheckoutInput): Promise<PaymentCheckoutSession>;\n  getSubscription(\n    identityId: string,\n  ): Promise<PaymentSubscriptionContract | null>;\n  cancelSubscription(identityId: string): Promise<void>;\n  isFeatureEnabled(identityId: string, feature: string): Promise<boolean>;\n  getHealth(): Promise<AdapterHealth>;\n}\n\n/**\n * Deployment target configuration. Use this schema before a deploy provider\n * slice accepts app-supplied project and environment metadata.\n *\n * @example\n * ```ts\n * const target = DeploymentTargetSchema.parse({ id: \"prod\", provider: \"cloudflare\", projectId: \"app\", environment: \"production\" });\n * ```\n */\nexport const DeploymentTargetSchema = z.object({\n  id: z.string().min(1),\n  provider: z.enum([\"cloudflare\", \"vercel\", \"netlify\", \"heroku\"]),\n  projectId: z.string().min(1),\n  environment: z.string().min(1),\n  metadata: AdapterMetadataSchema.default({}),\n});\n\n/**\n * Deployment target configuration.\n *\n * @example\n * ```ts\n * const target: DeploymentTarget = { id: \"prod\", provider: \"cloudflare\", projectId: \"app\", environment: \"production\", metadata: {} };\n * ```\n */\nexport type DeploymentTarget = z.infer<typeof DeploymentTargetSchema>;\n\n/**\n * Deployment result record. Use this schema to validate deploy, rollback,\n * lookup, and list results returned by provider slices.\n *\n * @example\n * ```ts\n * const result = DeploymentResultSchema.parse({ id: \"dep_1\", targetId: \"prod\", status: \"ready\", createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() });\n * ```\n */\nexport const DeploymentResultSchema = z.object({\n  id: z.string().min(1),\n  targetId: z.string().min(1),\n  status: z.enum([\"queued\", \"building\", \"ready\", \"failed\", \"rolled_back\"]),\n  url: z.string().url().optional(),\n  createdAt: IsoDateTimeStringSchema,\n  updatedAt: IsoDateTimeStringSchema,\n});\n\n/**\n * Deployment result record.\n *\n * @example\n * ```ts\n * const result: DeploymentResult = { id: \"dep_1\", targetId: \"prod\", status: \"ready\", createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() };\n * ```\n */\nexport type DeploymentResult = z.infer<typeof DeploymentResultSchema>;\n\n/**\n * Contract for deployment-platform adapters. Implement this in provider slices\n * that own concrete deployment SDKs or app-local deploy wiring.\n *\n * @example\n * ```ts\n * const result = await deploy.deploy(target);\n * ```\n */\nexport interface DeployAdapter {\n  deploy(target: DeploymentTarget): Promise<DeploymentResult>;\n  rollback(deploymentId: string): Promise<DeploymentResult>;\n  getDeployment(deploymentId: string): Promise<DeploymentResult | null>;\n  listDeployments(targetId?: string): Promise<DeploymentResult[]>;\n  getHealth(): Promise<AdapterHealth>;\n}\n","/**\n * @module retry\n * @description Provides retry helpers for transient adapter failures. The\n * module applies exponential backoff and delegates retry eligibility to the\n * shared typed error helpers so callers can centralize retry policy.\n */\n\nimport { AdapterConfigurationError, isRetryable } from \"./errors\";\n\n/**\n * Configuration options for automatic retry behavior.\n * All options are optional and have sensible defaults.\n */\nexport interface RetryOptions {\n  /** Maximum number of attempts to make (default: 3, meaning 1 initial + 2 retries) */\n  maxAttempts?: number;\n  /** Initial delay before first retry in milliseconds (default: 500ms) */\n  delayMs?: number;\n  /** Multiplier applied to delay after each failed attempt (default: 2, creating exponential backoff) */\n  backoffMultiplier?: number;\n  /** Maximum delay between attempts in milliseconds. Defaults to no cap. */\n  maxDelayMs?: number;\n  /** Custom function to determine if an error should be retried (default: isRetryable from errors module) */\n  shouldRetry?: (error: unknown) => boolean;\n}\n\nfunction throwInvalidRetryOption(message: string): never {\n  throw new AdapterConfigurationError(message, \"INVALID_CONFIG\");\n}\n\nfunction validateRetryOptions(\n  maxAttempts: number,\n  delayMs: number,\n  backoffMultiplier: number,\n  maxDelayMs: number,\n): void {\n  if (!Number.isInteger(maxAttempts) || maxAttempts < 1) {\n    throwInvalidRetryOption(\"retry maxAttempts must be an integer >= 1\");\n  }\n  if (!Number.isFinite(delayMs) || delayMs < 0) {\n    throwInvalidRetryOption(\"retry delayMs must be a finite number >= 0\");\n  }\n  if (!Number.isFinite(backoffMultiplier) || backoffMultiplier <= 0) {\n    throwInvalidRetryOption(\n      \"retry backoffMultiplier must be a finite number > 0\",\n    );\n  }\n  if (\n    maxDelayMs !== Number.POSITIVE_INFINITY &&\n    (!Number.isFinite(maxDelayMs) || maxDelayMs < 0)\n  ) {\n    throwInvalidRetryOption(\n      \"retry maxDelayMs must be a finite number >= 0 or Infinity\",\n    );\n  }\n}\n\n/**\n * Executes an async function with automatic retry logic.\n * Implements exponential backoff to handle transient failures gracefully.\n *\n * @typeParam T - The return type of the function being retried\n * @param fn - The async function to execute and potentially retry\n * @param options - Configuration options for retry behavior\n * @returns A promise that resolves to the function's return value\n * @throws {Error} The last error encountered after all retry attempts are exhausted\n *\n * @example\n * ```ts\n * // Retry with defaults (3 attempts, 500ms initial delay, 2x backoff)\n * const user = await withRetry(() => adapter.db.getUser('123'));\n *\n * // Customize retry behavior\n * const result = await withRetry(\n *   () => adapter.ai.chat(messages),\n *   {\n *     maxAttempts: 5,\n *     delayMs: 1000,\n *     backoffMultiplier: 1.5,\n *     maxDelayMs: 5000,\n *   }\n * );\n *\n * // Custom retry predicate - only retry specific errors\n * const data = await withRetry(\n *   () => expensiveOperation(),\n *   {\n *     shouldRetry: (error) => {\n *       // Only retry if it's a network error or rate limit\n *       return error.code === 'RATE_LIMIT' || error.code === 'CONNECTION_ERROR';\n *     }\n *   }\n * );\n * ```\n *\n * @remarks\n * The delay progression with default settings (maxAttempts=3, delayMs=500, backoffMultiplier=2):\n * - Attempt 1: Immediate\n * - Attempt 2: After 500ms\n * - Attempt 3: After 1000ms\n *\n * For custom shouldRetry: If false is returned, the error is thrown immediately without further retries.\n */\nexport async function withRetry<T>(\n  fn: () => Promise<T>,\n  options: RetryOptions = {},\n): Promise<T> {\n  const {\n    maxAttempts = 3,\n    delayMs = 500,\n    backoffMultiplier = 2,\n    maxDelayMs = Number.POSITIVE_INFINITY,\n    shouldRetry = isRetryable,\n  } = options;\n\n  validateRetryOptions(maxAttempts, delayMs, backoffMultiplier, maxDelayMs);\n\n  let lastError: unknown;\n  for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n    try {\n      // Attempt to execute the function\n      return await fn();\n    } catch (error) {\n      lastError = error;\n\n      // Check if this is the last attempt or if this error type is not retryable\n      if (attempt === maxAttempts || !shouldRetry(error)) {\n        throw error;\n      }\n\n      // Calculate the delay for this retry using exponential backoff\n      // Formula: delayMs * (backoffMultiplier ^ (attemptNumber - 1))\n      const delay = Math.min(\n        delayMs * backoffMultiplier ** (attempt - 1),\n        maxDelayMs,\n      );\n\n      // Wait before retrying\n      await new Promise((resolve) => setTimeout(resolve, delay));\n    }\n  }\n\n  // This should never be reached, but throw lastError for defensive fallback.\n  throw lastError;\n}\n","/**\n * @module constants\n * @package @geenius/adapters/shared\n * @description Defines the shared adapter domains, provider registries, status\n * labels, and UI metadata used across every runtime variant. Explicit unions\n * preserve compile-time parity for providers, domains, and statuses.\n */\n\nimport type { AdapterDomain } from \"./types\";\n\nfunction freezeRegistryItems<T extends object>(\n  items: readonly T[],\n): readonly Readonly<T>[] {\n  const frozenItems = items.map(\n    (item) => Object.freeze({ ...item }) as Readonly<T>,\n  );\n  return Object.freeze(frozenItems);\n}\n\nfunction cloneRegistryItem<T extends object>(item: Readonly<T>): T {\n  return { ...item } as T;\n}\n\n// ─── Adapter Domains ─────────────────────────────────────────────────────────\n\n/**\n * Ordered list of all supported adapter domains.\n * These represent the major functional areas that can have pluggable implementations.\n */\nexport const ADAPTER_DOMAINS: readonly AdapterDomain[] = [\n  \"db\",\n  \"auth\",\n  \"payments\",\n  \"ai\",\n  \"storage\",\n  \"admin\",\n  \"logger\",\n];\n\n// ─── Provider Names per Domain ───────────────────────────────────────────────\n\n/**\n * Type representing valid database provider names for adapter configuration\n * and resolver registration.\n *\n * The v1 public provider subpaths are limited to `convex`, `neon`,\n * `cloudflareKV`, and `memory`; future and BYOD ids remain metadata/resolver\n * keys only.\n */\nexport type DbProviderName =\n  | \"localStorage\"\n  | \"convex\"\n  | \"supabase\"\n  | \"drizzle\"\n  | \"neon\"\n  | \"prisma\"\n  | \"kysely\"\n  | \"mongodb\"\n  | \"cloudflareKV\"\n  | \"memory\";\n/** Type representing valid authentication provider names */\nexport type AuthProviderName =\n  | \"localStorage\"\n  | \"better-auth\"\n  | \"convex-auth\"\n  | \"clerk\"\n  | \"supabase-auth\";\n/** Type representing valid AI provider names */\nexport type AiProviderName =\n  | \"localStorage\"\n  | \"openai\"\n  | \"anthropic\"\n  | \"gemini\"\n  | \"ollama\"\n  | \"cloudflare-ai-gateway\"\n  | \"vercel-ai-sdk\";\n/** Type representing valid file storage provider names */\nexport type StorageProviderName =\n  | \"localStorage\"\n  | \"r2\"\n  | \"s3\"\n  | \"uploadthing\"\n  | \"supabase-storage\"\n  | \"convex-storage\"\n  | \"minio\";\n/** Type representing valid payment provider names */\nexport type PaymentProviderName =\n  | \"localStorage\"\n  | \"stripe\"\n  | \"lemonsqueezy\"\n  | \"polar\"\n  | \"noop\";\n/** Type representing valid admin provider names */\nexport type AdminProviderName = \"localStorage\";\n/** Type representing valid logger provider names */\nexport type LoggerProviderName = \"console\" | \"memory\";\n\n/**\n * Available database providers (ordered from lightweight to production-ready).\n * Supports local mocks and the four launch provider contracts without importing\n * downstream SDKs into this package.\n */\nexport const DB_PROVIDERS: readonly DbProviderName[] = [\n  \"localStorage\",\n  \"convex\",\n  \"supabase\",\n  \"drizzle\",\n  \"neon\",\n  \"prisma\",\n  \"kysely\",\n  \"mongodb\",\n  \"cloudflareKV\",\n  \"memory\",\n];\n\n/** Canonical database backends that define the expanded boilerplate universe. */\nexport type EcosystemDbProviderName =\n  | \"convex\"\n  | \"neon\"\n  | \"cloudflareKV\"\n  | \"memory\"\n  | \"supabase\"\n  | \"mongodb\"\n  | \"drizzle\"\n  | \"prisma\"\n  | \"kysely\";\n\n/** Four database backend categories used by scaffold tooling and setup UIs. */\nexport type EcosystemDbProviderCategory =\n  | \"platform-native\"\n  | \"edge-kv\"\n  | \"in-process\"\n  | \"byod-orm\";\n\n/** Launch readiness for a database backend in the expanded ecosystem. */\nexport type EcosystemDbProviderStage = \"launch\" | \"future\" | \"byod\";\n\n/** Metadata for production database backends in the expanded ecosystem. */\nexport interface EcosystemDbProviderMeta {\n  /** Canonical provider id used in adapter config. */\n  id: EcosystemDbProviderName;\n  /** Provider family: vendor SDK/native platform versus bring-your-own ORM. */\n  category: EcosystemDbProviderCategory;\n  /** Whether this backend is part of the current four-provider launch matrix. */\n  stage: EcosystemDbProviderStage;\n  /** Runtime SDK or ORM package owned by the downstream provider implementation. */\n  sdk: string;\n  /** Optional default database driver used by the downstream provider implementation. */\n  defaultDriver?: string;\n  /** Expected auth integration for boilerplate scaffolds using this backend. */\n  authIntegration: string;\n  /** Schema or data-model artifact expected in generated boilerplates. */\n  schema: string;\n  /** Factory exported by @geenius/db for this provider family. */\n  factory: string;\n}\n\n/**\n * Platform-native database backends tracked for ecosystem metadata.\n *\n * Only entries whose metadata stage is `launch` are v1 provider subpaths.\n */\nexport const PLATFORM_NATIVE_DB_PROVIDERS: readonly EcosystemDbProviderName[] =\n  [\"convex\", \"neon\", \"supabase\", \"mongodb\"];\n\n/** BYOD ORM resolver metadata ids tracked for downstream DB adapter factories. */\nexport const BYOD_ORM_DB_PROVIDERS: readonly EcosystemDbProviderName[] = [\n  \"drizzle\",\n  \"prisma\",\n  \"kysely\",\n];\n\n/** Database backends included in the current launch matrix. */\nexport const LAUNCH_DB_PROVIDERS: readonly EcosystemDbProviderName[] = [\n  \"convex\",\n  \"neon\",\n  \"cloudflareKV\",\n  \"memory\",\n];\n\n/** Future DB providers are metadata-only until a coordinated axis expansion. */\nexport const FUTURE_DB_PROVIDERS: readonly EcosystemDbProviderName[] = [\n  \"supabase\",\n  \"mongodb\",\n];\n\n/** Full production database backend universe tracked for launch and later expansion. */\nexport const ECOSYSTEM_DB_PROVIDERS: readonly EcosystemDbProviderMeta[] =\n  freezeRegistryItems<EcosystemDbProviderMeta>([\n    {\n      id: \"convex\",\n      category: \"platform-native\",\n      stage: \"launch\",\n      sdk: \"convex\",\n      authIntegration: \"Convex Auth\",\n      schema: \"ConvexDB schema\",\n      factory: \"createConvexDbAdapter\",\n    },\n    {\n      id: \"neon\",\n      category: \"platform-native\",\n      stage: \"launch\",\n      sdk: \"@neondatabase/serverless\",\n      authIntegration: \"Better Auth\",\n      schema: \"SQL migrations\",\n      factory: \"createNeonNativeDbAdapter\",\n    },\n    {\n      id: \"cloudflareKV\",\n      category: \"edge-kv\",\n      stage: \"launch\",\n      sdk: \"Cloudflare Workers KV\",\n      authIntegration: \"Better Auth / session cache\",\n      schema: \"KV namespace keys with TTL metadata\",\n      factory: \"createCloudflareKvDbAdapter\",\n    },\n    {\n      id: \"memory\",\n      category: \"in-process\",\n      stage: \"launch\",\n      sdk: \"Map\",\n      authIntegration: \"Test/local-only\",\n      schema: \"In-process collections\",\n      factory: \"createMemoryDbAdapter\",\n    },\n    {\n      id: \"supabase\",\n      category: \"platform-native\",\n      stage: \"future\",\n      sdk: \"@supabase/supabase-js\",\n      defaultDriver: \"postgres\",\n      authIntegration: \"Supabase Auth\",\n      schema: \"SQL migrations plus storage/auth metadata\",\n      factory: \"createSupabaseDbAdapter\",\n    },\n    {\n      id: \"mongodb\",\n      category: \"platform-native\",\n      stage: \"future\",\n      sdk: \"mongodb\",\n      authIntegration: \"Better Auth\",\n      schema: \"Document collections and indexes\",\n      factory: \"createMongoDbAdapter\",\n    },\n    {\n      id: \"drizzle\",\n      category: \"byod-orm\",\n      stage: \"byod\",\n      sdk: \"drizzle-orm\",\n      defaultDriver: \"postgres\",\n      authIntegration: \"App-owned\",\n      schema: \"App-owned Drizzle schema\",\n      factory: \"createDrizzleDbAdapter\",\n    },\n    {\n      id: \"prisma\",\n      category: \"byod-orm\",\n      stage: \"byod\",\n      sdk: \"prisma\",\n      authIntegration: \"App-owned\",\n      schema: \"App-owned Prisma schema\",\n      factory: \"createPrismaDbAdapter\",\n    },\n    {\n      id: \"kysely\",\n      category: \"byod-orm\",\n      stage: \"byod\",\n      sdk: \"kysely\",\n      authIntegration: \"App-owned\",\n      schema: \"App-owned Kysely table definitions\",\n      factory: \"createKyselyDbAdapter\",\n    },\n  ]);\n\n/**\n * Available authentication providers.\n * Ranges from mock implementations (localStorage) to full-featured solutions (Clerk, Supabase).\n */\nexport const AUTH_PROVIDERS: readonly AuthProviderName[] = [\n  \"localStorage\",\n  \"better-auth\",\n  \"convex-auth\",\n  \"clerk\",\n  \"supabase-auth\",\n];\n\n/**\n * Available AI/LLM providers.\n * Includes major API providers (OpenAI, Anthropic) and local options (Ollama).\n */\nexport const AI_PROVIDERS: readonly AiProviderName[] = [\n  \"localStorage\",\n  \"openai\",\n  \"anthropic\",\n  \"gemini\",\n  \"ollama\",\n  \"cloudflare-ai-gateway\",\n  \"vercel-ai-sdk\",\n];\n\n/**\n * Available file storage providers.\n * Supports in-browser storage, cloud providers, and self-hosted options.\n */\nexport const STORAGE_PROVIDERS: readonly StorageProviderName[] = [\n  \"localStorage\",\n  \"r2\",\n  \"s3\",\n  \"uploadthing\",\n  \"supabase-storage\",\n  \"convex-storage\",\n  \"minio\",\n];\n\n/**\n * Available payment processing providers.\n * Includes full-featured (Stripe) and mock implementations for testing.\n */\nexport const PAYMENT_PROVIDERS: readonly PaymentProviderName[] = [\n  \"localStorage\",\n  \"stripe\",\n  \"lemonsqueezy\",\n  \"polar\",\n  \"noop\",\n];\n\n/**\n * Available admin panel providers.\n * Currently limited to localStorage for development/prototyping.\n */\nexport const ADMIN_PROVIDERS: readonly AdminProviderName[] = [\"localStorage\"];\n/**\n * Available logger providers.\n * Starts with the local-first console logger while preserving room for\n * dedicated downstream logging packages to register production sinks later.\n */\nexport const LOGGER_PROVIDERS: readonly LoggerProviderName[] = [\n  \"console\",\n  \"memory\",\n];\n\n// ─── Status Types ────────────────────────────────────────────────────────────\n\n/**\n * Valid adapter connection states.\n * Used to represent the health and availability of configured adapters.\n */\n/** Type representing valid adapter status values */\nexport type AdapterStatus =\n  | \"connected\"\n  | \"disconnected\"\n  | \"error\"\n  | \"initializing\";\nexport const ADAPTER_STATUSES: readonly AdapterStatus[] = [\n  \"connected\",\n  \"disconnected\",\n  \"error\",\n  \"initializing\",\n];\n\n// ─── Domain Labels ───────────────────────────────────────────────────────────\n\n/**\n * Human-readable labels for each adapter domain.\n * Used in UI components like dropdowns, headings, and breadcrumbs.\n */\nexport const DOMAIN_LABELS: Record<AdapterDomain, string> = {\n  db: \"Database\",\n  auth: \"Authentication\",\n  payments: \"Payments\",\n  ai: \"AI & LLM\",\n  storage: \"File Storage\",\n  admin: \"Admin Panel\",\n  logger: \"Logger\",\n};\n\n/**\n * Semantic icon identifiers for each adapter domain.\n * UI variants map these descriptors to native icon components or tokenized\n * icon slots instead of rendering emoji glyphs from shared metadata.\n */\nexport const DOMAIN_ICONS: Record<AdapterDomain, string> = {\n  db: \"database\",\n  auth: \"shield-check\",\n  payments: \"credit-card\",\n  ai: \"sparkles\",\n  storage: \"folder\",\n  admin: \"settings\",\n  logger: \"file-text\",\n};\n\n/**\n * Detailed descriptions of each adapter domain.\n * Displayed in help text, tooltips, and onboarding flows.\n */\nexport const DOMAIN_DESCRIPTIONS: Record<AdapterDomain, string> = {\n  db: \"Connect to your preferred database backend for data persistence.\",\n  auth: \"User authentication, sessions, and identity management.\",\n  payments: \"Subscriptions, checkout, and billing management.\",\n  ai: \"AI completions, chat, and embeddings via the selected LLM provider.\",\n  storage:\n    \"Upload, download, and manage files with the selected storage provider.\",\n  admin: \"Admin dashboard metrics and user management.\",\n  logger:\n    \"Structured logs, child loggers, and downstream observability routing.\",\n};\n\n// ─── Provider Metadata ───────────────────────────────────────────────────────\n\n/**\n * Metadata about a specific provider implementation.\n * Contains information needed for provider selection UI, documentation links, and tier gating.\n */\nexport interface ProviderMeta {\n  /** Unique identifier for the provider (matches provider name in config) */\n  id: string;\n  /** Human-readable provider name for display in UI */\n  name: string;\n  /** The domain this provider belongs to */\n  domain: AdapterDomain;\n  /** Brief description of what this provider offers */\n  description: string;\n  /** Minimum feature tier required to use this provider (tier gating) */\n  tier: \"pronto\" | \"lancio\" | \"studio\";\n  /** Whether the provider typically needs an API key or token during setup */\n  requiresApiKey?: boolean;\n  /** Whether the provider typically needs a configurable base URL during setup */\n  requiresBaseUrl?: boolean;\n  /** Optional URL to provider documentation or setup guide */\n  docUrl?: string;\n}\n\n/**\n * Comprehensive registry of all available providers across all domains.\n * Used for provider selection UI, documentation, and availability checking.\n * Organized by domain with localStorage typically first for dev/mock workflows.\n */\nexport const PROVIDER_REGISTRY: readonly Readonly<ProviderMeta>[] =\n  freezeRegistryItems<ProviderMeta>([\n    // DB\n    {\n      id: \"localStorage\",\n      name: \"localStorage\",\n      domain: \"db\",\n      description: \"In-browser mock storage for prototyping\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"convex\",\n      name: \"Convex\",\n      domain: \"db\",\n      description: \"Real-time cloud database with sub-50ms reactivity\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"supabase\",\n      name: \"Supabase\",\n      domain: \"db\",\n      description: \"PostgreSQL + Auth + Storage\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: true,\n    },\n    {\n      id: \"drizzle\",\n      name: \"Drizzle\",\n      domain: \"db\",\n      description: \"Drizzle ORM adapter via the downstream DB provider package\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"neon\",\n      name: \"Neon\",\n      domain: \"db\",\n      description:\n        \"Native Neon serverless PostgreSQL via the downstream DB provider package\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: true,\n    },\n    {\n      id: \"prisma\",\n      name: \"Prisma\",\n      domain: \"db\",\n      description:\n        \"Prisma Client adapter via the downstream DB provider package\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"kysely\",\n      name: \"Kysely\",\n      domain: \"db\",\n      description:\n        \"Kysely query builder adapter via the downstream DB provider package\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"mongodb\",\n      name: \"MongoDB\",\n      domain: \"db\",\n      description:\n        \"MongoDB document database via the downstream DB provider package\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: true,\n    },\n    {\n      id: \"cloudflareKV\",\n      name: \"Cloudflare KV\",\n      domain: \"db\",\n      description:\n        \"Edge key-value storage via the downstream DB provider package\",\n      tier: \"studio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"memory\",\n      name: \"Memory\",\n      domain: \"db\",\n      description:\n        \"Ephemeral in-memory adapter for tests and local development\",\n      tier: \"studio\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    // Auth\n    {\n      id: \"localStorage\",\n      name: \"localStorage\",\n      domain: \"auth\",\n      description: \"Mock auth for prototyping\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"better-auth\",\n      name: \"Better Auth\",\n      domain: \"auth\",\n      description: \"Self-hosted auth with OAuth + MFA\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"convex-auth\",\n      name: \"Convex Auth\",\n      domain: \"auth\",\n      description: \"Built-in Convex sessions\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"clerk\",\n      name: \"Clerk\",\n      domain: \"auth\",\n      description: \"SaaS auth with pre-built UI\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"supabase-auth\",\n      name: \"Supabase Auth\",\n      domain: \"auth\",\n      description: \"Built-in Supabase auth\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: true,\n    },\n    // AI\n    {\n      id: \"localStorage\",\n      name: \"localStorage\",\n      domain: \"ai\",\n      description: \"Mock AI for prototyping\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"openai\",\n      name: \"OpenAI\",\n      domain: \"ai\",\n      description: \"GPT models with streaming + embeddings\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"anthropic\",\n      name: \"Anthropic\",\n      domain: \"ai\",\n      description: \"Claude models with streaming\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"gemini\",\n      name: \"Google Gemini\",\n      domain: \"ai\",\n      description: \"Gemini models, zero npm deps\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"ollama\",\n      name: \"Ollama\",\n      domain: \"ai\",\n      description: \"Local LLMs, zero npm deps\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: true,\n    },\n    {\n      id: \"cloudflare-ai-gateway\",\n      name: \"CF AI Gateway\",\n      domain: \"ai\",\n      description: \"Caching/rate-limiting proxy\",\n      tier: \"studio\",\n      requiresApiKey: true,\n      requiresBaseUrl: true,\n    },\n    {\n      id: \"vercel-ai-sdk\",\n      name: \"Vercel AI SDK\",\n      domain: \"ai\",\n      description: \"generateText/embed wrappers\",\n      tier: \"studio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    // Storage\n    {\n      id: \"localStorage\",\n      name: \"localStorage\",\n      domain: \"storage\",\n      description: \"Base64 in-browser storage\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"r2\",\n      name: \"Cloudflare R2\",\n      domain: \"storage\",\n      description: \"S3-compatible, zero egress\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"s3\",\n      name: \"AWS S3\",\n      domain: \"storage\",\n      description: \"IAM roles + CloudFront CDN\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"uploadthing\",\n      name: \"Uploadthing\",\n      domain: \"storage\",\n      description: \"REST API file upload SaaS\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"supabase-storage\",\n      name: \"Supabase Storage\",\n      domain: \"storage\",\n      description: \"Native Supabase storage\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: true,\n    },\n    {\n      id: \"convex-storage\",\n      name: \"Convex Storage\",\n      domain: \"storage\",\n      description: \"Convex built-in file storage\",\n      tier: \"lancio\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"minio\",\n      name: \"Minio\",\n      domain: \"storage\",\n      description: \"Self-hosted S3-compatible\",\n      tier: \"studio\",\n      requiresApiKey: true,\n      requiresBaseUrl: true,\n    },\n    // Payments\n    {\n      id: \"localStorage\",\n      name: \"localStorage\",\n      domain: \"payments\",\n      description: \"Mock billing for prototyping\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"stripe\",\n      name: \"Stripe\",\n      domain: \"payments\",\n      description: \"Full billing, subscriptions, checkout\",\n      tier: \"lancio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"lemonsqueezy\",\n      name: \"LemonSqueezy\",\n      domain: \"payments\",\n      description:\n        \"Merchant-of-record subscriptions with SaaS-focused billing flows\",\n      tier: \"studio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"polar\",\n      name: \"Polar\",\n      domain: \"payments\",\n      description:\n        \"Developer-first billing and subscriptions with product-led pricing flows\",\n      tier: \"studio\",\n      requiresApiKey: true,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"noop\",\n      name: \"Noop\",\n      domain: \"payments\",\n      description: \"No-op adapter — always returns success\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    // Admin\n    {\n      id: \"localStorage\",\n      name: \"localStorage\",\n      domain: \"admin\",\n      description: \"Mock admin for prototyping\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    // Logger\n    {\n      id: \"console\",\n      name: \"Console\",\n      domain: \"logger\",\n      description:\n        \"Console-backed structured logger for prototyping and local development\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n    {\n      id: \"memory\",\n      name: \"Memory\",\n      domain: \"logger\",\n      description:\n        \"In-memory structured logger for tests, Storybook, and offline prototypes\",\n      tier: \"pronto\",\n      requiresApiKey: false,\n      requiresBaseUrl: false,\n    },\n  ]);\n\n/**\n * Get all available providers for a specific adapter domain.\n *\n * @param domain - The adapter domain to get providers for\n * @returns Array of provider metadata for the given domain, ordered by tier\n *\n * @example\n * const dbProviders = getProvidersForDomain('db');\n * // Returns metadata for localStorage, Convex, Neon, Cloudflare KV, and Memory.\n */\nexport function getProvidersForDomain(domain: AdapterDomain): ProviderMeta[] {\n  return PROVIDER_REGISTRY.filter((p) => p.domain === domain).map(\n    cloneRegistryItem,\n  );\n}\n\n/**\n * Get expanded ecosystem database providers by backend category.\n *\n * @param category - Backend category to filter by\n * @returns Production database provider metadata for the selected category\n */\nexport function getEcosystemDbProvidersByCategory(\n  category: EcosystemDbProviderCategory,\n): EcosystemDbProviderMeta[] {\n  return ECOSYSTEM_DB_PROVIDERS.filter(\n    (provider) => provider.category === category,\n  ).map(cloneRegistryItem);\n}\n\n/**\n * Get expanded ecosystem database providers by launch readiness.\n *\n * @param stage - Launch stage to filter by\n * @returns Production database provider metadata for the selected stage\n */\nexport function getEcosystemDbProvidersByStage(\n  stage: EcosystemDbProviderStage,\n): EcosystemDbProviderMeta[] {\n  return ECOSYSTEM_DB_PROVIDERS.filter(\n    (provider) => provider.stage === stage,\n  ).map(cloneRegistryItem);\n}\n\n/**\n * Get expanded ecosystem metadata for a database provider.\n *\n * @param providerId - Canonical database provider id\n * @returns Expanded ecosystem metadata if the provider is part of the nine-backend matrix\n */\nexport function getEcosystemDbProviderMeta(\n  providerId: string,\n): EcosystemDbProviderMeta | undefined {\n  const provider = ECOSYSTEM_DB_PROVIDERS.find(\n    (provider) => provider.id === providerId,\n  );\n  return provider ? cloneRegistryItem(provider) : undefined;\n}\n\n/**\n * Get metadata for a specific provider implementation.\n *\n * @param domain - The adapter domain the provider belongs to\n * @param providerId - The unique identifier of the provider\n * @returns Provider metadata if found, undefined otherwise\n *\n * @example\n * const stripeMeta = getProviderMeta('payments', 'stripe');\n * if (stripeMeta?.tier === 'lancio') {\n *   // Stripe is available on lancio tier\n * }\n */\nexport function getProviderMeta(\n  domain: AdapterDomain,\n  providerId: string,\n): ProviderMeta | undefined {\n  const provider = PROVIDER_REGISTRY.find(\n    (p) => p.domain === domain && p.id === providerId,\n  );\n  return provider ? cloneRegistryItem(provider) : undefined;\n}\n","/**\n * @module config\n * @description Manages the shared adapter configuration singleton and runtime\n * validation helpers. The module ensures adapter domains are configured once\n * and exposed through a typed contract before adapters are resolved.\n */\n\nimport { getProvidersForDomain } from \"./constants\";\nimport { AdapterConfigurationError } from \"./errors\";\nimport type {\n  AdapterConfig,\n  AdapterConfigForDomain,\n  AdapterDomain,\n  DomainAdapterConfig,\n  ResolvableAdapterDomain,\n} from \"./types\";\n\n/** Set of valid adapter domain names */\nconst VALID_DOMAINS: readonly ResolvableAdapterDomain[] = [\n  \"db\",\n  \"auth\",\n  \"payments\",\n  \"ai\",\n  \"storage\",\n  \"admin\",\n  \"logger\",\n  \"cache\",\n  \"queue\",\n  \"events\",\n  \"deploy\",\n];\nconst VALID_DOMAIN_SET: ReadonlySet<string> = new Set(VALID_DOMAINS);\nconst REGISTRY_VALIDATED_DOMAINS: readonly AdapterDomain[] = [\n  \"db\",\n  \"auth\",\n  \"payments\",\n  \"ai\",\n  \"storage\",\n  \"admin\",\n  \"logger\",\n];\nconst REGISTRY_VALIDATED_DOMAIN_SET: ReadonlySet<string> = new Set(\n  REGISTRY_VALIDATED_DOMAINS,\n);\n\n/** Global configuration state - null until configureAdapters() is called */\nlet _config: AdapterConfig | null = null;\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  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction cloneConfigValue(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(cloneConfigValue);\n  }\n  if (isPlainRecord(value)) {\n    return Object.fromEntries(\n      Object.entries(value).map(([key, item]) => [key, cloneConfigValue(item)]),\n    );\n  }\n  return value;\n}\n\nfunction deepFreeze<T>(value: T, seen = new WeakSet<object>()): T {\n  if (\n    (typeof value !== \"object\" && typeof value !== \"function\") ||\n    value === null\n  ) {\n    return value;\n  }\n\n  const objectValue = value as object;\n  if (seen.has(objectValue)) {\n    return value;\n  }\n  seen.add(objectValue);\n\n  for (const item of Object.values(objectValue)) {\n    deepFreeze(item, seen);\n  }\n  return Object.freeze(value);\n}\n\nfunction cloneDomainConfig<T extends DomainAdapterConfig>(config: T): T {\n  const clone: DomainAdapterConfig = {\n    provider: config.provider,\n  };\n  if (config.apiKey !== undefined) {\n    clone.apiKey = config.apiKey;\n  }\n  if (config.baseUrl !== undefined) {\n    clone.baseUrl = config.baseUrl;\n  }\n  if (config.options !== undefined) {\n    clone.options = cloneConfigValue(config.options) as Record<string, unknown>;\n  }\n  return deepFreeze(clone) as T;\n}\n\nfunction cloneAdapterConfig(config: AdapterConfig): AdapterConfig {\n  const clone: AdapterConfig = {};\n  if (config.db !== undefined) {\n    clone.db = cloneDomainConfig(config.db);\n  }\n  if (config.auth !== undefined) {\n    clone.auth = cloneDomainConfig(config.auth);\n  }\n  if (config.payments !== undefined) {\n    clone.payments = cloneDomainConfig(config.payments);\n  }\n  if (config.ai !== undefined) {\n    clone.ai = cloneDomainConfig(config.ai);\n  }\n  if (config.storage !== undefined) {\n    clone.storage = cloneDomainConfig(config.storage);\n  }\n  if (config.admin !== undefined) {\n    clone.admin = cloneDomainConfig(config.admin);\n  }\n  if (config.logger !== undefined) {\n    clone.logger = cloneDomainConfig(config.logger);\n  }\n  if (config.cache !== undefined) {\n    clone.cache = cloneDomainConfig(config.cache);\n  }\n  if (config.queue !== undefined) {\n    clone.queue = cloneDomainConfig(config.queue);\n  }\n  if (config.events !== undefined) {\n    clone.events = cloneDomainConfig(config.events);\n  }\n  if (config.deploy !== undefined) {\n    clone.deploy = cloneDomainConfig(config.deploy);\n  }\n  return deepFreeze(clone);\n}\n\nfunction isAdapterDomain(value: string): value is ResolvableAdapterDomain {\n  return VALID_DOMAIN_SET.has(value);\n}\n\nfunction isRegistryValidatedDomain(\n  domain: ResolvableAdapterDomain,\n): domain is AdapterDomain {\n  return REGISTRY_VALIDATED_DOMAIN_SET.has(domain);\n}\n\n/**\n * Validates that a domain configuration object is well-formed.\n * Uses TypeScript assertion to refine the type after validation.\n *\n * @param domain - The domain being configured (for error messages)\n * @param cfg - The configuration object to validate\n * @throws {Error} If the configuration is invalid\n *\n * @internal\n */\nfunction validateDomainConfig(\n  domain: ResolvableAdapterDomain,\n  cfg: unknown,\n): asserts cfg is DomainAdapterConfig {\n  // Check that cfg is a plain object (reject Date, Map, RegExp, class instances, etc.)\n  if (!isPlainRecord(cfg)) {\n    throw new AdapterConfigurationError(\n      `adapters.${domain}: expected a plain object, got ${Array.isArray(cfg) ? \"array\" : typeof cfg}`,\n      \"INVALID_CONFIG\",\n    );\n  }\n  const obj = cfg;\n\n  // Provider is required and must be a non-empty string\n  if (typeof obj.provider !== \"string\" || obj.provider.length === 0) {\n    throw new AdapterConfigurationError(\n      `adapters.${domain}.provider: expected a non-empty string`,\n      \"INVALID_CONFIG\",\n    );\n  }\n\n  if (isRegistryValidatedDomain(domain)) {\n    const providerIds = getProvidersForDomain(domain).map(\n      (provider) => provider.id,\n    );\n    if (!providerIds.includes(obj.provider)) {\n      throw new AdapterConfigurationError(\n        `adapters.${domain}.provider: unsupported provider \"${obj.provider}\". ` +\n          `Allowed providers: ${providerIds.join(\", \")}`,\n        \"INVALID_CONFIG\",\n      );\n    }\n  }\n\n  // Optional apiKey must be a string if provided\n  if (obj.apiKey !== undefined && typeof obj.apiKey !== \"string\") {\n    throw new AdapterConfigurationError(\n      `adapters.${domain}.apiKey: expected a string`,\n      \"INVALID_CONFIG\",\n    );\n  }\n\n  // Optional baseUrl must be a string if provided\n  if (obj.baseUrl !== undefined && typeof obj.baseUrl !== \"string\") {\n    throw new AdapterConfigurationError(\n      `adapters.${domain}.baseUrl: expected a string`,\n      \"INVALID_CONFIG\",\n    );\n  }\n\n  // Optional options must be a plain object if provided\n  if (obj.options !== undefined && !isPlainRecord(obj.options)) {\n    throw new AdapterConfigurationError(\n      `adapters.${domain}.options: expected a plain object`,\n      \"INVALID_CONFIG\",\n    );\n  }\n}\n\n/**\n * Configure the adapter system with provider implementations.\n * Must be called exactly once at application startup, before adapters are used.\n *\n * @param config - Configuration object specifying provider for each adapter domain\n * @throws {Error} If config is not a valid object or contains invalid domain configurations\n *\n * @example\n * ```ts\n * import { configureAdapters } from '@geenius/adapters';\n *\n * // Configure all domains at startup\n * configureAdapters({\n *   db: { provider: 'convex' },\n *   auth: { provider: 'better-auth' },\n *   ai: { provider: 'openai', apiKey: process.env.OPENAI_API_KEY },\n *   storage: { provider: 'r2', apiKey: process.env.R2_API_KEY },\n *   payments: { provider: 'stripe' },\n * });\n * ```\n */\nexport function configureAdapters(config: AdapterConfig): void {\n  // Validate that config is a plain object (reject Date, Map, RegExp, etc.)\n  if (!isPlainRecord(config)) {\n    throw new AdapterConfigurationError(\n      \"configureAdapters: expected a plain object\",\n      \"INVALID_CONFIG\",\n    );\n  }\n\n  // Validate each domain configuration that was provided\n  for (const [key, value] of Object.entries(config)) {\n    // Check that the domain name is valid\n    if (!isAdapterDomain(key)) {\n      throw new AdapterConfigurationError(\n        `configureAdapters: unknown domain \"${key}\". Valid domains: ${VALID_DOMAINS.join(\", \")}`,\n        \"INVALID_CONFIG\",\n      );\n    }\n\n    // Validate the domain configuration if one was provided\n    if (value !== undefined) {\n      validateDomainConfig(key, value);\n    }\n  }\n\n  // Store the validated configuration globally\n  _config = cloneAdapterConfig(config);\n}\n\n/**\n * Retrieve the global adapter configuration.\n * Safe to call multiple times from all modules.\n *\n * @returns The currently configured adapter configuration\n * @throws {Error} If configureAdapters() has not been called yet\n *\n * @example\n * ```ts\n * const config = getAdapterConfig();\n * logger.info(config.db?.provider); // 'convex'\n * ```\n */\nexport function getAdapterConfig(): AdapterConfig {\n  if (!_config) {\n    throw new AdapterConfigurationError(\n      \"Adapters not configured. Call configureAdapters() first.\",\n      \"MISSING_CONFIG\",\n    );\n  }\n  return cloneAdapterConfig(_config);\n}\n\n/**\n * Check if the adapter system has been configured.\n * Useful for lazy initialization or error handling.\n *\n * @returns True if configureAdapters() has been called, false otherwise\n *\n * @example\n * ```ts\n * if (!isAdaptersConfigured()) {\n *   throw new AdapterConfigurationError('App not initialized - configure adapters first', 'MISSING_CONFIG');\n * }\n * ```\n */\nexport function isAdaptersConfigured(): boolean {\n  return _config !== null;\n}\n\n/**\n * Reset the adapter configuration to an uninitialized state.\n * Primarily useful for testing, to avoid state leakage between test cases.\n *\n * @example\n * ```ts\n * beforeEach(() => {\n *   resetAdapterConfig(); // Clear state from previous test\n *   configureAdapters(testConfig);\n * });\n * ```\n */\nexport function resetAdapterConfig(): void {\n  _config = null;\n}\n\n/**\n * Get the configuration for a specific adapter domain.\n * Returns null if the domain is not configured.\n *\n * @param domain - The adapter domain to get configuration for\n * @returns Configuration for the domain, or null if not configured\n *\n * @example\n * ```ts\n * const dbConfig = getDomainConfig('db');\n * if (dbConfig) {\n *   logger.info(`Using ${dbConfig.provider} for database`);\n * }\n * ```\n */\nexport function getDomainConfig<D extends ResolvableAdapterDomain>(\n  domain: D,\n): AdapterConfigForDomain<D> | null {\n  const config = getAdapterConfig();\n  return (config[domain] as AdapterConfigForDomain<D> | undefined) ?? null;\n}\n","/**\n * @module resolve\n * @description Implements the configuration-driven adapter resolver registry.\n * The module bridges configured domain providers to concrete adapter factories\n * so runtime variants can resolve adapters without coupling to implementations.\n */\n\nimport type { AdminAdapter } from \"./admin/interface\";\nimport type { AiAdapter } from \"./ai/interface\";\nimport type { AuthAdapter } from \"./auth/interface\";\nimport { getDomainConfig } from \"./config\";\nimport type {\n  CacheAdapter,\n  DeployAdapter,\n  EventsAdapter,\n  QueueAdapter,\n} from \"./contracts\";\nimport type { DbAdapter } from \"./db/interface\";\nimport { AdapterResolutionError } from \"./errors\";\nimport type { LoggerAdapter } from \"./logger/interface\";\nimport type { PaymentsAdapter } from \"./payments/interface\";\nimport type { FileStorageAdapter } from \"./storage/interface\";\nimport type { DomainAdapterConfig, ResolvableAdapterDomain } from \"./types\";\n\n/**\n * Maps adapter domains to their specific interface types.\n * Used for type-safe adapter resolution without runtime type information.\n *\n * @example\n * // With D = 'db', this type resolves to DbAdapter\n * type MyAdapter = AdapterForDomain<'db'>;\n */\ntype AdapterForDomain<D extends ResolvableAdapterDomain> = D extends \"auth\"\n  ? AuthAdapter\n  : D extends \"db\"\n    ? DbAdapter\n    : D extends \"ai\"\n      ? AiAdapter\n      : D extends \"storage\"\n        ? FileStorageAdapter\n        : D extends \"payments\"\n          ? PaymentsAdapter\n          : D extends \"admin\"\n            ? AdminAdapter\n            : D extends \"logger\"\n              ? LoggerAdapter\n              : D extends \"cache\"\n                ? CacheAdapter\n                : D extends \"queue\"\n                  ? QueueAdapter\n                  : D extends \"events\"\n                    ? EventsAdapter\n                    : D extends \"deploy\"\n                      ? DeployAdapter\n                      : never;\n\n/**\n * Factory function type for creating adapter instances.\n * Takes a domain configuration and returns the appropriate adapter implementation.\n */\ntype AdapterResolver<D extends ResolvableAdapterDomain> = (\n  config: DomainAdapterConfig,\n) => AdapterForDomain<D>;\n\n/**\n * Global registry of adapter factory functions.\n * Keyed by 'domain:provider' format (e.g., 'db:convex', 'auth:better-auth').\n * Populated by concrete provider packages or app bootstrap code at\n * initialization time.\n *\n * @example\n * // After importing the downstream @geenius/db Convex provider\n * resolvers.get('db:convex') // Returns the Convex DB adapter factory\n */\nconst resolvers: {\n  [K in ResolvableAdapterDomain]: Map<string, AdapterResolver<K>>;\n} = {\n  auth: new Map(),\n  db: new Map(),\n  ai: new Map(),\n  storage: new Map(),\n  payments: new Map(),\n  admin: new Map(),\n  logger: new Map(),\n  cache: new Map(),\n  queue: new Map(),\n  events: new Map(),\n  deploy: new Map(),\n};\n\nfunction isResolvableDomain(\n  domain: unknown,\n): domain is ResolvableAdapterDomain {\n  return typeof domain === \"string\" && Object.hasOwn(resolvers, domain);\n}\n\nfunction getResolverMap<D extends ResolvableAdapterDomain>(\n  domain: D,\n): Map<string, AdapterResolver<D>> {\n  if (!isResolvableDomain(domain)) {\n    throw new AdapterResolutionError(\n      `Unknown adapter resolver domain: ${String(domain)}`,\n      \"MISSING_CONFIG\",\n    );\n  }\n  return resolvers[domain];\n}\n\n/**\n * Register a factory function for a specific domain and provider combination.\n * Called by downstream adapter implementation packages or application\n * bootstrap code to make concrete providers available for resolution.\n *\n * @typeParam D - The adapter domain being registered\n * @param domain - The adapter domain (db, auth, ai, storage, payments, admin)\n * @param provider - The specific provider name (convex, stripe, anthropic, etc.)\n * @param resolver - Factory function that creates an adapter instance from config\n *\n * @example\n * ```ts\n * // In a downstream @geenius/db Convex provider module\n * import { registerResolver } from '@geenius/adapters';\n *\n * registerResolver('db', 'convex', () => appDbAdapter);\n *\n * // In a downstream payments provider module\n * import { registerResolver } from '@geenius/adapters';\n *\n * registerResolver('payments', 'stripe', (config) =>\n *   createStripePaymentsAdapter({ apiKey: config.apiKey })\n * );\n * ```\n *\n * @remarks\n * Registration should happen at module load time (top-level), not in functions.\n * Typically done in the main export file of the concrete provider package or\n * in the application adapter bootstrap module.\n */\nexport function registerResolver<D extends ResolvableAdapterDomain>(\n  domain: D,\n  provider: string,\n  resolver: (config: DomainAdapterConfig) => AdapterForDomain<D>,\n): void {\n  getResolverMap(domain).set(provider, resolver);\n}\n\n/**\n * Get an adapter instance for a given domain using the current configuration.\n * The domain must be configured via configureAdapters() and a resolver\n * must be registered for the configured provider.\n *\n * @typeParam D - The adapter domain being requested\n * @param domain - The adapter domain to resolve\n * @returns An initialized adapter instance of the appropriate type\n * @throws {Error} If domain is not configured or no resolver is registered\n *\n * @example\n * ```ts\n * // Setup (at app startup)\n * import '@geenius/db/convex-provider'; // Registers the db:convex resolver\n * import './adapters/anthropic'; // Registers the ai:anthropic resolver\n *\n * configureAdapters({\n *   db: { provider: 'convex' },\n *   ai: { provider: 'anthropic', apiKey: process.env.ANTHROPIC_API_KEY },\n * });\n *\n * // Usage (anywhere in app)\n * const dbAdapter = resolveAdapter('db');\n * const users = await dbAdapter.query('users', {});\n *\n * const aiAdapter = resolveAdapter('ai');\n * const response = await aiAdapter.chat([{ role: 'user', content: 'Hello' }]);\n * ```\n *\n * @remarks\n * Resolving the same domain multiple times returns a fresh instance\n * (unless the adapter factory implements caching/singleton behavior).\n * For performance, consider caching the resolved adapter in your app.\n */\nexport function resolveAdapter<D extends ResolvableAdapterDomain>(\n  domain: D,\n): AdapterForDomain<D> {\n  const resolverMap = getResolverMap(domain);\n  // Get the configuration for this domain\n  const config = getDomainConfig(domain);\n  if (!config) {\n    throw new AdapterResolutionError(\n      `No configuration found for adapter domain: ${domain}`,\n      \"MISSING_CONFIG\",\n    );\n  }\n\n  // Look up the factory function for this domain:provider combination\n  const resolver = resolverMap.get(config.provider);\n  if (!resolver) {\n    throw new AdapterResolutionError(\n      `No resolver registered for ${domain}:${config.provider}. ` +\n        `Call registerResolver('${domain}', '${config.provider}', factory) first.`,\n      \"MISSING_RESOLVER\",\n    );\n  }\n\n  // Call the factory function and return the configured adapter\n  return resolver(config);\n}\n\n/**\n * Check if a resolver is registered for a specific domain and provider.\n * Useful for conditional logic around adapter availability.\n *\n * @param domain - The adapter domain\n * @param provider - The provider name\n * @returns True if a resolver is registered for this domain:provider, false otherwise\n *\n * @example\n * ```ts\n * if (hasResolver('ai', 'anthropic')) {\n *   // Anthropic is available, can safely use it\n *   const aiAdapter = resolveAdapter('ai');\n * }\n * ```\n */\nexport function hasResolver(\n  domain: ResolvableAdapterDomain,\n  provider: string,\n): boolean {\n  return getResolverMap(domain).has(provider);\n}\n\n/**\n * Clear all registered resolvers from the registry.\n * Primarily useful in testing to avoid state leakage between tests.\n *\n * @example\n * ```ts\n * beforeEach(() => {\n *   clearResolvers(); // Clean up from previous test\n *   // Re-register with test doubles\n *   registerResolver('db', 'mock', createMockDbAdapter);\n * });\n * ```\n */\nexport function clearResolvers(): void {\n  for (const resolverMap of Object.values(resolvers)) {\n    resolverMap.clear();\n  }\n}\n","/**\n * @module browser-storage\n * @description Centralizes guarded access to browser storage for local-first\n * adapter mocks so SSR and non-DOM runtimes fail through typed adapter errors.\n */\n\nimport { AdapterInvariantError } from \"./errors\";\n\nexport type BrowserStorage = Pick<\n  Storage,\n  \"clear\" | \"getItem\" | \"setItem\" | \"removeItem\"\n>;\n\ntype BrowserStorageGlobal = typeof globalThis & {\n  localStorage?: Storage;\n};\n\nfunction getBrowserStorageRef(): Storage | undefined {\n  if (typeof window === \"undefined\") {\n    return undefined;\n  }\n  return (\n    window.localStorage ?? (globalThis as BrowserStorageGlobal).localStorage\n  );\n}\n\nexport function hasBrowserLocalStorage(): boolean {\n  return getBrowserStorageRef() !== undefined;\n}\n\nexport function getBrowserLocalStorage(): BrowserStorage {\n  const storage = getBrowserStorageRef();\n  if (!storage) {\n    throw new AdapterInvariantError(\n      \"Browser storage is unavailable in this runtime.\",\n    );\n  }\n  return storage;\n}\n\nexport function isBrowserStorageQuotaError(error: unknown): boolean {\n  return (\n    typeof DOMException !== \"undefined\" &&\n    error instanceof DOMException &&\n    error.name === \"QuotaExceededError\"\n  );\n}\n","/**\n * @module runtime-warning\n * @description Centralizes production-only prototype warnings so adapter mocks\n * do not scatter direct console calls across runtime modules.\n */\n\nexport function warnRuntimeAdapterMock(message: string): void {\n  const sink = globalThis.console;\n  if (typeof sink?.warn === \"function\") {\n    sink.warn(message);\n  }\n}\n","/**\n * @module browser-storage-adapter\n * @description Implements the local-first admin adapter used for demos,\n * prototyping, and Storybook scenarios. The adapter stores admin-facing state\n * in guarded browser storage and mirrors the shared admin contract.\n */\n\nimport {\n  getBrowserLocalStorage,\n  isBrowserStorageQuotaError,\n} from \"../browser-storage\";\nimport { AdminError } from \"../errors\";\nimport { warnRuntimeAdapterMock } from \"../runtime-warning\";\nimport type {\n  AdminAdapter,\n  AdminListOptions,\n  AdminMetrics,\n  AdminRole,\n  AdminRoleInput,\n  AdminTeam,\n  AdminTeamInput,\n  ManagedUser,\n} from \"./interface\";\n\n// Reuse the auth adapter key to sync user data.\nconst USERS_KEY = \"geenius_users\";\nconst SESSION_KEY = \"geenius_session\";\nconst ROLES_KEY = \"geenius_admin_roles\";\nconst TEAMS_KEY = \"geenius_admin_teams\";\n\ninterface StoredAdminUser {\n  id: string;\n  email?: string;\n  name?: string;\n  image?: string;\n  passwordHash?: string;\n  isBanned?: boolean;\n  roleIds?: string[];\n  teamIds?: string[];\n  plan?: string;\n  createdAt?: string;\n  lastLoginAt?: string;\n}\n\ntype StoredAdminRole = AdminRole;\ntype StoredAdminTeam = AdminTeam;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n  return (\n    Array.isArray(value) && value.every((item) => typeof item === \"string\")\n  );\n}\n\nfunction isStoredAdminUser(value: unknown): value is StoredAdminUser {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    (value.email === undefined || typeof value.email === \"string\") &&\n    (value.name === undefined || typeof value.name === \"string\") &&\n    (value.image === undefined || typeof value.image === \"string\") &&\n    (value.passwordHash === undefined ||\n      typeof value.passwordHash === \"string\") &&\n    (value.isBanned === undefined || typeof value.isBanned === \"boolean\") &&\n    (value.roleIds === undefined || isStringArray(value.roleIds)) &&\n    (value.teamIds === undefined || isStringArray(value.teamIds)) &&\n    (value.plan === undefined || typeof value.plan === \"string\") &&\n    (value.createdAt === undefined || typeof value.createdAt === \"string\") &&\n    (value.lastLoginAt === undefined || typeof value.lastLoginAt === \"string\")\n  );\n}\n\nfunction isStoredAdminRole(value: unknown): value is StoredAdminRole {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    typeof value.name === \"string\" &&\n    (value.description === undefined ||\n      typeof value.description === \"string\") &&\n    isStringArray(value.permissions) &&\n    (value.isSystem === undefined || typeof value.isSystem === \"boolean\") &&\n    (value.createdAt === undefined || typeof value.createdAt === \"string\") &&\n    (value.updatedAt === undefined || typeof value.updatedAt === \"string\")\n  );\n}\n\nfunction isStoredAdminTeam(value: unknown): value is StoredAdminTeam {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    typeof value.name === \"string\" &&\n    (value.description === undefined ||\n      typeof value.description === \"string\") &&\n    isStringArray(value.memberUserIds) &&\n    isStringArray(value.roleIds) &&\n    (value.createdAt === undefined || typeof value.createdAt === \"string\") &&\n    (value.updatedAt === undefined || typeof value.updatedAt === \"string\")\n  );\n}\n\nfunction isArrayOf<T>(\n  value: unknown,\n  predicate: (item: unknown) => item is T,\n): value is T[] {\n  return Array.isArray(value) && value.every(predicate);\n}\n\nfunction readStoredUsers(): StoredAdminUser[] {\n  return readStoredCollection(USERS_KEY, isStoredAdminUser, \"users\");\n}\n\nfunction writeStoredUsers(users: StoredAdminUser[]): void {\n  writeStoredCollection(USERS_KEY, users, \"users\");\n}\n\nfunction readStoredRoles(): StoredAdminRole[] {\n  return readStoredCollection(ROLES_KEY, isStoredAdminRole, \"roles\");\n}\n\nfunction writeStoredRoles(roles: StoredAdminRole[]): void {\n  writeStoredCollection(ROLES_KEY, roles, \"roles\");\n}\n\nfunction readStoredTeams(): StoredAdminTeam[] {\n  return readStoredCollection(TEAMS_KEY, isStoredAdminTeam, \"teams\");\n}\n\nfunction writeStoredTeams(teams: StoredAdminTeam[]): void {\n  writeStoredCollection(TEAMS_KEY, teams, \"teams\");\n}\n\nfunction readStoredCollection<T>(\n  key: string,\n  predicate: (item: unknown) => item is T,\n  label: string,\n): T[] {\n  try {\n    const storage = getBrowserLocalStorage();\n    const raw = storage.getItem(key);\n    const parsed: unknown = JSON.parse(raw || \"[]\");\n    if (!isArrayOf(parsed, predicate)) {\n      throw new AdminError(\n        `Invalid ${label} payload in browser storage`,\n        \"OPERATION_FAILED\",\n      );\n    }\n    return parsed;\n  } catch (error) {\n    if (error instanceof AdminError) {\n      throw error;\n    }\n    if (error instanceof SyntaxError) {\n      throw new AdminError(\n        `Failed to parse ${label} from browser storage`,\n        \"OPERATION_FAILED\",\n        error,\n      );\n    }\n    throw new AdminError(\n      \"Failed to read from browser storage\",\n      \"OPERATION_FAILED\",\n      error,\n    );\n  }\n}\n\nfunction writeStoredCollection<T>(\n  key: string,\n  items: T[],\n  label: string,\n): void {\n  try {\n    const storage = getBrowserLocalStorage();\n    storage.setItem(key, JSON.stringify(items));\n  } catch (error) {\n    if (isBrowserStorageQuotaError(error)) {\n      throw new AdminError(\n        \"browser storage quota exceeded\",\n        \"OPERATION_FAILED\",\n        error,\n      );\n    }\n    throw new AdminError(\n      `Failed to write ${label} to browser storage`,\n      \"OPERATION_FAILED\",\n      error,\n    );\n  }\n}\n\nfunction clearStoredSessionForUser(userId: string): void {\n  try {\n    const storage = getBrowserLocalStorage();\n    const raw = storage.getItem(SESSION_KEY);\n    if (!raw) {\n      return;\n    }\n\n    const parsed: unknown = JSON.parse(raw);\n    if (isRecord(parsed) && parsed.userId === userId) {\n      storage.removeItem(SESSION_KEY);\n    }\n  } catch (error) {\n    if (error instanceof SyntaxError) {\n      throw new AdminError(\n        \"Failed to parse session from browser storage\",\n        \"OPERATION_FAILED\",\n        error,\n      );\n    }\n    throw new AdminError(\n      \"Failed to clear deleted user session from browser storage\",\n      \"OPERATION_FAILED\",\n      error,\n    );\n  }\n}\n\nfunction unique(items: readonly string[]): string[] {\n  return [...new Set(items)];\n}\n\nfunction applyListOptions<T>(\n  items: T[],\n  options: AdminListOptions | undefined,\n  getSearchText: (item: T) => Array<string | undefined>,\n): T[] {\n  let filtered = items;\n\n  if (options?.search) {\n    const query = options.search.toLowerCase();\n    filtered = filtered.filter((item) =>\n      getSearchText(item).some((value) => value?.toLowerCase().includes(query)),\n    );\n  }\n\n  const offset = options?.offset ?? 0;\n  const limit = options?.limit ?? 50;\n  return filtered.slice(offset, offset + limit);\n}\n\nfunction makeStoredRole(\n  input: AdminRoleInput,\n  existing?: AdminRole,\n): AdminRole {\n  const now = new Date().toISOString();\n  return {\n    id: input.id ?? existing?.id ?? crypto.randomUUID(),\n    name: input.name,\n    description: input.description,\n    permissions: unique(input.permissions ?? existing?.permissions ?? []),\n    isSystem: input.isSystem ?? existing?.isSystem,\n    createdAt: existing?.createdAt ?? now,\n    updatedAt: now,\n  };\n}\n\nfunction makeStoredTeam(\n  input: AdminTeamInput,\n  existing?: AdminTeam,\n): AdminTeam {\n  const now = new Date().toISOString();\n  return {\n    id: input.id ?? existing?.id ?? crypto.randomUUID(),\n    name: input.name,\n    description: input.description,\n    memberUserIds: unique(input.memberUserIds ?? existing?.memberUserIds ?? []),\n    roleIds: unique(input.roleIds ?? existing?.roleIds ?? []),\n    createdAt: existing?.createdAt ?? now,\n    updatedAt: now,\n  };\n}\n\nfunction assertKnownTeamReferences(\n  team: AdminTeam,\n  users: StoredAdminUser[],\n  roles: StoredAdminRole[],\n): void {\n  const userIds = new Set(users.map((user) => user.id));\n  const roleIds = new Set(roles.map((role) => role.id));\n  const missingUserId = team.memberUserIds.find(\n    (userId) => !userIds.has(userId),\n  );\n  const missingRoleId = team.roleIds.find((roleId) => !roleIds.has(roleId));\n\n  if (missingUserId) {\n    throw new AdminError(\n      `Cannot upsert team with unknown member user \"${missingUserId}\"`,\n      \"USER_NOT_FOUND\",\n    );\n  }\n\n  if (missingRoleId) {\n    throw new AdminError(\n      `Cannot upsert team with unknown role \"${missingRoleId}\"`,\n      \"OPERATION_FAILED\",\n    );\n  }\n}\n\nfunction upsertById<T extends { id: string }>(items: T[], item: T): T[] {\n  const index = items.findIndex((candidate) => candidate.id === item.id);\n  if (index < 0) {\n    return [...items, item];\n  }\n  const next = [...items];\n  next[index] = item;\n  return next;\n}\n\n/**\n * Creates the mock browser-storage-backed admin adapter used in demos and Storybook.\n *\n * @returns An admin adapter implementation that reuses the local auth dataset for management flows.\n * @throws {AdminError} When admin-facing browser storage reads or writes fail.\n */\nexport function createLocalStorageAdminAdapter(): AdminAdapter {\n  if (\n    typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV === \"production\"\n  ) {\n    warnRuntimeAdapterMock(\n      \"[@geenius/adapters] browser storage admin adapter is a MOCK for prototyping only. \" +\n        \"Do NOT use in production.\",\n    );\n  }\n\n  function getUsers(): ManagedUser[] {\n    return readStoredUsers().map((u) => ({\n      id: u.id,\n      email: u.email,\n      name: u.name,\n      image: u.image,\n      isActive: true,\n      isBanned: u.isBanned ?? false,\n      roleIds: unique(u.roleIds ?? []),\n      teamIds: unique(u.teamIds ?? []),\n      plan: u.plan ?? \"free\",\n      createdAt: u.createdAt,\n      lastLoginAt: u.lastLoginAt,\n    }));\n  }\n\n  return {\n    async listUsers(options?) {\n      return applyListOptions(getUsers(), options, (user) => [\n        user.email,\n        user.name,\n        user.plan,\n      ]);\n    },\n\n    async getUser(id) {\n      const users = getUsers();\n      return users.find((u) => u.id === id) || null;\n    },\n\n    async banUser(id) {\n      const data = readStoredUsers();\n      const user = data.find((u) => u.id === id);\n      if (!user || user.isBanned === true) return false;\n      user.isBanned = true;\n      writeStoredUsers(data);\n      return true;\n    },\n\n    async unbanUser(id) {\n      const data = readStoredUsers();\n      const user = data.find((u) => u.id === id);\n      if (!user || user.isBanned !== true) return false;\n      user.isBanned = false;\n      writeStoredUsers(data);\n      return true;\n    },\n\n    async deleteUser(id) {\n      const data = readStoredUsers();\n      const index = data.findIndex((u) => u.id === id);\n      if (index < 0) return false;\n      data.splice(index, 1);\n      writeStoredUsers(data);\n\n      const teams = readStoredTeams().map((team) => ({\n        ...team,\n        memberUserIds: team.memberUserIds.filter((userId) => userId !== id),\n      }));\n      writeStoredTeams(teams);\n      clearStoredSessionForUser(id);\n      return true;\n    },\n\n    async listRoles(options?) {\n      return applyListOptions(readStoredRoles(), options, (role) => [\n        role.name,\n        role.description,\n        role.permissions.join(\" \"),\n      ]);\n    },\n\n    async getRole(id) {\n      return readStoredRoles().find((role) => role.id === id) ?? null;\n    },\n\n    async upsertRole(input) {\n      const roles = readStoredRoles();\n      const existing = input.id\n        ? roles.find((role) => role.id === input.id)\n        : undefined;\n      const role = makeStoredRole(input, existing);\n      writeStoredRoles(upsertById(roles, role));\n      return role;\n    },\n\n    async deleteRole(id) {\n      const roles = readStoredRoles();\n      const nextRoles = roles.filter((role) => role.id !== id);\n      if (nextRoles.length === roles.length) return false;\n\n      writeStoredRoles(nextRoles);\n      writeStoredUsers(\n        readStoredUsers().map((user) => ({\n          ...user,\n          roleIds: (user.roleIds ?? []).filter((roleId) => roleId !== id),\n        })),\n      );\n      writeStoredTeams(\n        readStoredTeams().map((team) => ({\n          ...team,\n          roleIds: team.roleIds.filter((roleId) => roleId !== id),\n        })),\n      );\n      return true;\n    },\n\n    async assignUserRole(userId, roleId) {\n      if (!readStoredRoles().some((role) => role.id === roleId)) return false;\n\n      const users = readStoredUsers();\n      const user = users.find((candidate) => candidate.id === userId);\n      if (!user) return false;\n\n      const roleIds = unique(user.roleIds ?? []);\n      if (roleIds.includes(roleId)) return false;\n\n      user.roleIds = [...roleIds, roleId];\n      writeStoredUsers(users);\n      return true;\n    },\n\n    async removeUserRole(userId, roleId) {\n      const users = readStoredUsers();\n      const user = users.find((candidate) => candidate.id === userId);\n      if (!user?.roleIds?.includes(roleId)) return false;\n\n      user.roleIds = user.roleIds.filter(\n        (assignedRoleId) => assignedRoleId !== roleId,\n      );\n      writeStoredUsers(users);\n      return true;\n    },\n\n    async listTeams(options?) {\n      return applyListOptions(readStoredTeams(), options, (team) => [\n        team.name,\n        team.description,\n      ]);\n    },\n\n    async getTeam(id) {\n      return readStoredTeams().find((team) => team.id === id) ?? null;\n    },\n\n    async upsertTeam(input) {\n      const teams = readStoredTeams();\n      const existing = input.id\n        ? teams.find((team) => team.id === input.id)\n        : undefined;\n      const team = makeStoredTeam(input, existing);\n      const users = readStoredUsers();\n      assertKnownTeamReferences(team, users, readStoredRoles());\n      writeStoredTeams(upsertById(teams, team));\n\n      const memberIds = new Set(team.memberUserIds);\n      writeStoredUsers(\n        users.map((user) => {\n          const teamIds = unique(user.teamIds ?? []);\n          const shouldHaveTeam = memberIds.has(user.id);\n          return {\n            ...user,\n            teamIds: shouldHaveTeam\n              ? unique([...teamIds, team.id])\n              : teamIds.filter((teamId) => teamId !== team.id),\n          };\n        }),\n      );\n      return team;\n    },\n\n    async deleteTeam(id) {\n      const teams = readStoredTeams();\n      const nextTeams = teams.filter((team) => team.id !== id);\n      if (nextTeams.length === teams.length) return false;\n\n      writeStoredTeams(nextTeams);\n      writeStoredUsers(\n        readStoredUsers().map((user) => ({\n          ...user,\n          teamIds: (user.teamIds ?? []).filter((teamId) => teamId !== id),\n        })),\n      );\n      return true;\n    },\n\n    async addTeamMember(teamId, userId) {\n      const users = readStoredUsers();\n      const user = users.find((candidate) => candidate.id === userId);\n      if (!user) return false;\n\n      const teams = readStoredTeams();\n      const team = teams.find((candidate) => candidate.id === teamId);\n      if (!team || team.memberUserIds.includes(userId)) return false;\n\n      team.memberUserIds = [...team.memberUserIds, userId];\n      user.teamIds = unique([...(user.teamIds ?? []), teamId]);\n      writeStoredTeams(teams);\n      writeStoredUsers(users);\n      return true;\n    },\n\n    async removeTeamMember(teamId, userId) {\n      const teams = readStoredTeams();\n      const team = teams.find((candidate) => candidate.id === teamId);\n      if (!team?.memberUserIds.includes(userId)) return false;\n\n      const users = readStoredUsers();\n      const user = users.find((candidate) => candidate.id === userId);\n      team.memberUserIds = team.memberUserIds.filter(\n        (memberId) => memberId !== userId,\n      );\n      if (user?.teamIds) {\n        user.teamIds = user.teamIds.filter(\n          (assignedTeamId) => assignedTeamId !== teamId,\n        );\n      }\n      writeStoredTeams(teams);\n      writeStoredUsers(users);\n      return true;\n    },\n\n    async assignTeamRole(teamId, roleId) {\n      if (!readStoredRoles().some((role) => role.id === roleId)) return false;\n\n      const teams = readStoredTeams();\n      const team = teams.find((candidate) => candidate.id === teamId);\n      if (!team || team.roleIds.includes(roleId)) return false;\n\n      team.roleIds = [...team.roleIds, roleId];\n      writeStoredTeams(teams);\n      return true;\n    },\n\n    async removeTeamRole(teamId, roleId) {\n      const teams = readStoredTeams();\n      const team = teams.find((candidate) => candidate.id === teamId);\n      if (!team?.roleIds.includes(roleId)) return false;\n\n      team.roleIds = team.roleIds.filter(\n        (assignedRoleId) => assignedRoleId !== roleId,\n      );\n      writeStoredTeams(teams);\n      return true;\n    },\n\n    async getMetrics(): Promise<AdminMetrics> {\n      const users = getUsers();\n      const today = new Date().toISOString().split(\"T\")[0] ?? \"\";\n      const newToday = users.filter((u) =>\n        u.createdAt?.startsWith(today),\n      ).length;\n\n      return {\n        totalUsers: users.length,\n        activeUsers: users.filter((u) => u.isActive && !u.isBanned).length,\n        newUsersToday: newToday,\n      };\n    },\n  };\n}\n","/**\n * @module localStorage\n * @description Implements the local-first AI adapter used for demos,\n * prototyping, and Storybook scenarios. The adapter stores chat history in\n * browser `localStorage` and returns deterministic canned responses.\n */\n\nimport {\n  getBrowserLocalStorage,\n  hasBrowserLocalStorage,\n  isBrowserStorageQuotaError,\n} from \"../browser-storage\";\nimport { AiError } from \"../errors\";\nimport { warnRuntimeAdapterMock } from \"../runtime-warning\";\nimport type { AiOptions, ChatMessage, ChatResponse } from \"../types\";\nimport type { AiAdapter } from \"./interface\";\n\nconst HISTORY_KEY = \"geenius_ai_history\";\nconst DEFAULT_RATE_LIMIT_MESSAGE =\n  \"Local AI mock rate limit exceeded for this test scenario.\";\n\n/**\n * Context passed to local AI mock response resolvers.\n */\nexport interface LocalStorageAiResponseContext {\n  /** Messages supplied to the current chat or stream request. */\n  messages: readonly ChatMessage[];\n  /** Inference options supplied by the caller, when present. */\n  options?: AiOptions;\n  /** One-based successful request count for this adapter instance. */\n  requestCount: number;\n}\n\n/**\n * Controls deterministic rate-limit simulation for the local AI mock.\n */\nexport interface LocalStorageAiRateLimitOptions {\n  /** Number of successful AI operations allowed before RATE_LIMIT is thrown. */\n  afterRequests?: number;\n  /** Error message used when the configured limit is reached. */\n  message?: string;\n}\n\n/**\n * Options for configuring the localStorage-backed AI mock.\n */\nexport interface LocalStorageAiAdapterOptions {\n  /** Deterministic response pool used when no custom resolver is supplied. */\n  responses?: readonly string[];\n  /** Optional resolver for per-request mock content. */\n  resolveResponse?: (context: LocalStorageAiResponseContext) => string;\n  /** Enables deterministic RATE_LIMIT failures for tests and demos. */\n  rateLimit?: boolean | LocalStorageAiRateLimitOptions;\n}\n\ninterface StoredHistoryEntry {\n  timestamp: string;\n  messages: ChatMessage[];\n  response: string;\n}\n\ninterface HistoryStore {\n  read(): StoredHistoryEntry[];\n  write(history: StoredHistoryEntry[]): void;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nconst CANNED_RESPONSES = [\n  \"That's an interesting question! In Pronto, AI responses are simulated. Upgrade to Lancio or Studio for a real AI provider.\",\n  \"I'm a mock AI assistant. I can demonstrate the chat interface, but real responses require a production AI provider in Lancio or Studio.\",\n  \"Great question! This is a localStorage-based AI mock. The real AI adapter connects to OpenAI/Anthropic APIs.\",\n  \"I appreciate your input! This demo shows how the AI interface works. Upgrade for actual AI capabilities.\",\n  \"Interesting! While I can't provide real AI analysis in Pronto, this shows the adapter pattern in action.\",\n];\n\nfunction isChatMessage(value: unknown): value is ChatMessage {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.role === \"string\" &&\n    [\"system\", \"user\", \"assistant\"].includes(value.role) &&\n    typeof value.content === \"string\"\n  );\n}\n\nfunction validateChatMessages(messages: unknown): ChatMessage[] {\n  if (!Array.isArray(messages) || messages.length === 0) {\n    throw new AiError(\"AI messages must be a non-empty array\", \"INVALID_INPUT\");\n  }\n  if (!messages.every(isChatMessage)) {\n    throw new AiError(\n      \"AI messages must include valid role and content fields\",\n      \"INVALID_INPUT\",\n    );\n  }\n  return messages.map((message) => ({\n    role: message.role,\n    content: message.content,\n  }));\n}\n\nfunction validateEmbeddingInput(text: unknown): string[] {\n  const inputs = Array.isArray(text) ? text : [text];\n  if (\n    inputs.length === 0 ||\n    !inputs.every((item) => typeof item === \"string\" && item.length > 0)\n  ) {\n    throw new AiError(\n      \"AI embedding input must be a non-empty string or non-empty string array\",\n      \"INVALID_INPUT\",\n    );\n  }\n  return inputs;\n}\n\nfunction isStoredHistoryEntry(value: unknown): value is StoredHistoryEntry {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.timestamp === \"string\" &&\n    Array.isArray(value.messages) &&\n    value.messages.length > 0 &&\n    value.messages.every(isChatMessage) &&\n    typeof value.response === \"string\"\n  );\n}\n\nfunction readBrowserHistory(): StoredHistoryEntry[] {\n  const storage = getBrowserLocalStorage();\n  const parsed: unknown = JSON.parse(storage.getItem(HISTORY_KEY) || \"[]\");\n  if (!Array.isArray(parsed) || !parsed.every(isStoredHistoryEntry)) {\n    throw new AiError(\n      \"Invalid AI history payload in localStorage\",\n      \"SERVICE_ERROR\",\n    );\n  }\n  return parsed;\n}\n\nfunction createMemoryHistoryStore(): HistoryStore {\n  let history: StoredHistoryEntry[] = [];\n\n  return {\n    read() {\n      return structuredClone(history);\n    },\n    write(nextHistory) {\n      history = structuredClone(nextHistory);\n    },\n  };\n}\n\nfunction createBrowserHistoryStore(): HistoryStore {\n  return {\n    read: readBrowserHistory,\n    write(history) {\n      const storage = getBrowserLocalStorage();\n      storage.setItem(HISTORY_KEY, JSON.stringify(history));\n    },\n  };\n}\n\nfunction createHistoryStore(): HistoryStore {\n  return hasBrowserLocalStorage()\n    ? createBrowserHistoryStore()\n    : createMemoryHistoryStore();\n}\n\nfunction getResponsePool(\n  options: LocalStorageAiAdapterOptions,\n): readonly string[] {\n  return options.responses && options.responses.length > 0\n    ? options.responses\n    : CANNED_RESPONSES;\n}\n\nfunction getCannedResponse(\n  messages: ChatMessage[],\n  options: LocalStorageAiAdapterOptions,\n  aiOptions: AiOptions | undefined,\n  requestCount: number,\n): string {\n  const resolved = options.resolveResponse?.({\n    messages,\n    options: aiOptions,\n    requestCount,\n  });\n  if (typeof resolved === \"string\") {\n    return resolved;\n  }\n\n  const responses = getResponsePool(options);\n  const lastMsg = messages[messages.length - 1]?.content || \"\";\n  // Deterministic but varied: hash the message to pick a response\n  let hash = 0;\n  for (let i = 0; i < lastMsg.length; i++) {\n    hash = (hash << 5) - hash + lastMsg.charCodeAt(i);\n    hash |= 0;\n  }\n  return (\n    responses[Math.abs(hash) % responses.length] ??\n    responses[0] ??\n    CANNED_RESPONSES[0] ??\n    \"\"\n  );\n}\n\nfunction getRateLimitThreshold(\n  options: LocalStorageAiAdapterOptions,\n): number | null {\n  if (options.rateLimit === undefined || options.rateLimit === false) {\n    return null;\n  }\n  if (options.rateLimit === true) {\n    return 0;\n  }\n\n  const { afterRequests = 0 } = options.rateLimit;\n  return Math.max(0, afterRequests);\n}\n\nfunction assertWithinRateLimit(\n  options: LocalStorageAiAdapterOptions,\n  requestCount: number,\n): void {\n  const threshold = getRateLimitThreshold(options);\n  if (threshold === null || requestCount < threshold) {\n    return;\n  }\n\n  const message =\n    options.rateLimit && typeof options.rateLimit === \"object\"\n      ? options.rateLimit.message\n      : undefined;\n  throw new AiError(message ?? DEFAULT_RATE_LIMIT_MESSAGE, \"RATE_LIMIT\");\n}\n\nfunction saveToHistory(\n  store: HistoryStore,\n  messages: ChatMessage[],\n  response: string,\n): void {\n  try {\n    const validatedMessages = validateChatMessages(messages);\n    const history = store.read();\n    history.push({\n      timestamp: new Date().toISOString(),\n      messages: validatedMessages,\n      response,\n    });\n    // Keep last 50 conversations\n    if (history.length > 50) history.splice(0, history.length - 50);\n    store.write(history);\n  } catch (error) {\n    if (error instanceof AiError) {\n      throw error;\n    }\n    if (isBrowserStorageQuotaError(error)) {\n      throw new AiError(\"localStorage quota exceeded\", \"SERVICE_ERROR\", error);\n    }\n    if (error instanceof SyntaxError) {\n      throw new AiError(\n        \"Failed to parse AI history from localStorage\",\n        \"SERVICE_ERROR\",\n        error,\n      );\n    }\n    throw new AiError(\n      \"Failed to write AI history to localStorage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\n/**\n * Creates the mock localStorage-backed AI adapter used in demos and Storybook.\n *\n * @param options - Optional deterministic response and rate-limit simulation controls.\n * @returns An AI adapter implementation that emits deterministic canned responses and stores history locally.\n * Falls back to isolated in-memory history when browser storage is unavailable\n * during SSR or edge rendering.\n *\n * @throws {AiError} When browser storage quota exhaustion prevents history persistence.\n * @throws {AiError} With `RATE_LIMIT` when configured rate-limit simulation is reached.\n */\nexport function createLocalStorageAiAdapter(\n  options: LocalStorageAiAdapterOptions = {},\n): AiAdapter {\n  if (\n    typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV === \"production\"\n  ) {\n    warnRuntimeAdapterMock(\n      \"[@geenius/adapters] localStorage AI adapter is a MOCK for prototyping only. \" +\n        \"Do NOT use in production. Use a real AI provider from @geenius/ai instead.\",\n    );\n  }\n\n  const historyStore = createHistoryStore();\n  let requestCount = 0;\n\n  function startRequest(): number {\n    assertWithinRateLimit(options, requestCount);\n    requestCount += 1;\n    return requestCount;\n  }\n\n  return {\n    async chat(\n      messages: ChatMessage[],\n      aiOptions?: AiOptions,\n    ): Promise<ChatResponse> {\n      const validatedMessages = validateChatMessages(messages);\n      const currentRequest = startRequest();\n      const content = getCannedResponse(\n        validatedMessages,\n        options,\n        aiOptions,\n        currentRequest,\n      );\n      saveToHistory(historyStore, validatedMessages, content);\n      return {\n        content,\n        finishReason: \"stop\",\n        usage: { promptTokens: 10, completionTokens: 20, totalTokens: 30 },\n      };\n    },\n\n    async complete(prompt: string, options?: AiOptions): Promise<string> {\n      const response = await this.chat(\n        [{ role: \"user\", content: prompt }],\n        options,\n      );\n      return response.content;\n    },\n\n    async embed(text: string | string[]): Promise<number[][]> {\n      const inputs = validateEmbeddingInput(text);\n      startRequest();\n      return inputs.map((t) => {\n        const vec: number[] = [];\n        for (let i = 0; i < 8; i++) {\n          let h = i * 31;\n          for (let j = 0; j < t.length; j++) {\n            h = (h << 5) - h + t.charCodeAt(j);\n            h |= 0;\n          }\n          vec.push(Math.sin(h) * 0.5 + 0.5);\n        }\n        return vec;\n      });\n    },\n\n    async stream(\n      messages: ChatMessage[],\n      aiOptions?: AiOptions,\n    ): Promise<AsyncIterable<string>> {\n      const validatedMessages = validateChatMessages(messages);\n      const currentRequest = startRequest();\n      async function* generateStream(): AsyncIterable<string> {\n        const content = getCannedResponse(\n          validatedMessages,\n          options,\n          aiOptions,\n          currentRequest,\n        );\n        saveToHistory(historyStore, validatedMessages, content);\n        const words = content.split(\" \");\n        for (const word of words) {\n          yield `${word} `;\n        }\n      }\n\n      return generateStream();\n    },\n  };\n}\n","/**\n * @module browser-storage-adapter\n * @description Implements the local-first authentication adapter used for\n * demos, prototyping, and Storybook scenarios. The adapter persists users and\n * sessions to guarded browser storage while conforming to the shared auth contract.\n */\n\nimport {\n  type BrowserStorage,\n  getBrowserLocalStorage,\n  isBrowserStorageQuotaError,\n} from \"../browser-storage\";\nimport { AuthError } from \"../errors\";\nimport { warnRuntimeAdapterMock } from \"../runtime-warning\";\nimport type { AuthSession, AuthUser } from \"../types\";\nimport type { AuthAdapter } from \"./interface\";\n\ninterface StoredUser extends AuthUser {\n  passwordHash: string;\n  email: string;\n  isBanned?: boolean;\n}\n\nconst USERS_KEY = \"geenius_users\";\nconst SESSION_KEY = \"geenius_session\";\nconst EMAIL_ADDRESS_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction hasOwn(value: Record<string, unknown>, key: string): boolean {\n  return Object.hasOwn(value, key);\n}\n\nfunction parseSessionExpiry(value: string): Date | null {\n  const expiry = new Date(value);\n  return Number.isNaN(expiry.getTime()) ? null : expiry;\n}\n\nfunction isAuthUser(value: unknown): value is AuthUser {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    (value.email === undefined || typeof value.email === \"string\") &&\n    (value.name === undefined || typeof value.name === \"string\") &&\n    (value.image === undefined || typeof value.image === \"string\") &&\n    (value.role === undefined || typeof value.role === \"string\") &&\n    (value.isBanned === undefined || typeof value.isBanned === \"boolean\") &&\n    (value.createdAt === undefined || typeof value.createdAt === \"string\")\n  );\n}\n\nfunction isStoredUser(value: unknown): value is StoredUser {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    (value.email === undefined || typeof value.email === \"string\") &&\n    (value.name === undefined || typeof value.name === \"string\") &&\n    (value.image === undefined || typeof value.image === \"string\") &&\n    (value.role === undefined || typeof value.role === \"string\") &&\n    (value.createdAt === undefined || typeof value.createdAt === \"string\") &&\n    (value.isBanned === undefined || typeof value.isBanned === \"boolean\") &&\n    typeof value.email === \"string\" &&\n    typeof value.passwordHash === \"string\"\n  );\n}\n\nfunction isAuthSession(value: unknown): value is AuthSession {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.userId === \"string\" &&\n    hasOwn(value, \"user\") &&\n    (value.sessionToken === undefined ||\n      typeof value.sessionToken === \"string\") &&\n    (value.expiresAt === undefined ||\n      (typeof value.expiresAt === \"string\" &&\n        parseSessionExpiry(value.expiresAt) !== null)) &&\n    (value.user === null || isAuthUser(value.user))\n  );\n}\n\nfunction parseStoredUsers(raw: string | null): StoredUser[] {\n  const parsed: unknown = JSON.parse(raw || \"[]\");\n  if (!Array.isArray(parsed) || !parsed.every(isStoredUser)) {\n    throw new AuthError(\n      \"Invalid users payload in browser storage\",\n      \"SERVICE_ERROR\",\n    );\n  }\n  return parsed;\n}\n\nfunction parseStoredSession(raw: string): AuthSession {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(raw);\n  } catch (error) {\n    throw new AuthError(\n      \"Failed to parse session from browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n  if (!isAuthSession(parsed)) {\n    throw new AuthError(\n      \"Invalid session payload in browser storage\",\n      \"SERVICE_ERROR\",\n    );\n  }\n  return parsed;\n}\n\nfunction readStoredSession(storage: BrowserStorage, raw: string): AuthSession {\n  try {\n    return parseStoredSession(raw);\n  } catch (error) {\n    storage.removeItem(SESSION_KEY);\n    throw error;\n  }\n}\n\nfunction getUsers(): StoredUser[] {\n  try {\n    const storage = getBrowserLocalStorage();\n    return parseStoredUsers(storage.getItem(USERS_KEY));\n  } catch (error) {\n    if (error instanceof AuthError) {\n      throw error;\n    }\n    if (error instanceof SyntaxError) {\n      throw new AuthError(\n        \"Failed to parse users from browser storage\",\n        \"SERVICE_ERROR\",\n        error,\n      );\n    }\n    throw new AuthError(\n      \"Failed to read from browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction saveUsers(users: StoredUser[]): void {\n  try {\n    const storage = getBrowserLocalStorage();\n    storage.setItem(USERS_KEY, JSON.stringify(users));\n  } catch (error) {\n    if (isBrowserStorageQuotaError(error)) {\n      throw new AuthError(\n        \"browser storage quota exceeded\",\n        \"SERVICE_ERROR\",\n        error,\n      );\n    }\n    throw new AuthError(\n      \"Failed to write to browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\n// NOTE: This is intentionally a weak hash — it is a mock implementation for\n// prototyping only (Pronto tier). Real auth adapters use proper password\n// hashing on the server side.\nfunction simpleHash(str: string): string {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    hash = (hash << 5) - hash + str.charCodeAt(i);\n    hash |= 0;\n  }\n  return Math.abs(hash).toString(36);\n}\n\nfunction normalizeEmail(email: string): string {\n  return email.trim().toLowerCase();\n}\n\nfunction assertValidCredentials(email: string, password: string): string {\n  const normalizedEmail = normalizeEmail(email);\n  if (!EMAIL_ADDRESS_PATTERN.test(normalizedEmail) || password.trim() === \"\") {\n    throw new AuthError(\"Invalid email or password\", \"INVALID_CREDENTIALS\");\n  }\n  return normalizedEmail;\n}\n\nfunction assertUserCanAuthenticate(user: StoredUser): void {\n  if (user.isBanned === true) {\n    throw new AuthError(\"User is banned\", \"UNAUTHORIZED\");\n  }\n}\n\nfunction toAuthUser(user: StoredUser): AuthUser {\n  return {\n    id: user.id,\n    email: user.email,\n    name: user.name,\n    image: user.image,\n    role: user.role,\n    createdAt: user.createdAt,\n  };\n}\n\nfunction saveSession(session: AuthSession): AuthSession {\n  try {\n    const storage = getBrowserLocalStorage();\n    storage.setItem(SESSION_KEY, JSON.stringify(session));\n  } catch (error) {\n    if (isBrowserStorageQuotaError(error)) {\n      throw new AuthError(\n        \"browser storage quota exceeded\",\n        \"SERVICE_ERROR\",\n        error,\n      );\n    }\n    throw new AuthError(\n      \"Failed to write session to browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n  return session;\n}\n\nfunction createSession(\n  userId: string,\n  user?: Omit<AuthUser, \"id\">,\n): AuthSession {\n  const session: AuthSession = {\n    userId,\n    sessionToken: crypto.randomUUID(),\n    expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(),\n    user: user ? { id: userId, ...user } : null,\n  };\n  return saveSession(session);\n}\n\nfunction refreshStoredSessionUser(user: AuthUser): void {\n  try {\n    const storage = getBrowserLocalStorage();\n    const raw = storage.getItem(SESSION_KEY);\n    if (!raw) {\n      return;\n    }\n    const session = readStoredSession(storage, raw);\n    if (session.userId !== user.id) {\n      return;\n    }\n    saveSession({\n      ...session,\n      user,\n    });\n  } catch (error) {\n    if (error instanceof AuthError) {\n      throw error;\n    }\n    throw new AuthError(\n      \"Failed to refresh session user in browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\n/**\n * Creates the mock browser-storage-backed authentication adapter used in demos and Storybook.\n *\n * @returns An auth adapter implementation that persists users and sessions to browser storage.\n * @throws {AuthError} When browser storage reads or writes fail in a recoverable auth flow.\n */\nexport function createLocalStorageAuthAdapter(): AuthAdapter {\n  if (\n    typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV === \"production\"\n  ) {\n    warnRuntimeAdapterMock(\n      \"[@geenius/adapters] browser storage auth adapter is a MOCK for prototyping only. \" +\n        \"Do NOT use in production — passwords are not securely hashed. \" +\n        \"Use a real auth provider from @geenius/auth instead.\",\n    );\n  }\n\n  return {\n    async signInWithOAuth(provider, options) {\n      const mockEmail = `oauth-${provider}-user@example.com`;\n      const users = getUsers();\n      let user = users.find((u) => u.email === mockEmail);\n      if (!user) {\n        user = {\n          id: crypto.randomUUID(),\n          email: mockEmail,\n          name: `${provider.charAt(0).toUpperCase() + provider.slice(1)} User`,\n          createdAt: new Date().toISOString(),\n          passwordHash: \"\",\n        };\n        users.push(user);\n        saveUsers(users);\n      }\n      createSession(user.id, toAuthUser(user));\n      const redirectUrl = options?.redirectUrl || \"/\";\n      return { url: redirectUrl };\n    },\n\n    async signUp(email, password, name) {\n      const normalizedEmail = assertValidCredentials(email, password);\n      const users = getUsers();\n      if (users.find((u) => normalizeEmail(u.email) === normalizedEmail))\n        throw new AuthError(\"User already exists\", \"USER_EXISTS\");\n      const user: StoredUser = {\n        id: crypto.randomUUID(),\n        email: normalizedEmail,\n        name: name || normalizedEmail.split(\"@\")[0],\n        createdAt: new Date().toISOString(),\n        passwordHash: simpleHash(password),\n      };\n      users.push(user);\n      saveUsers(users);\n      return createSession(user.id, {\n        email: user.email,\n        name: user.name,\n        createdAt: user.createdAt,\n      });\n    },\n\n    async signIn(email, password) {\n      const normalizedEmail = normalizeEmail(email);\n      const user = getUsers().find(\n        (u) => normalizeEmail(u.email) === normalizedEmail,\n      );\n      if (!user || user.passwordHash !== simpleHash(password)) {\n        throw new AuthError(\"Invalid email or password\", \"INVALID_CREDENTIALS\");\n      }\n      assertUserCanAuthenticate(user);\n      const authUser = toAuthUser(user);\n      return createSession(user.id, authUser);\n    },\n\n    async signOut() {\n      try {\n        const storage = getBrowserLocalStorage();\n        storage.removeItem(SESSION_KEY);\n      } catch (error) {\n        throw new AuthError(\n          \"Failed to clear session from browser storage\",\n          \"SERVICE_ERROR\",\n          error,\n        );\n      }\n    },\n\n    async getSession() {\n      try {\n        const storage = getBrowserLocalStorage();\n        const raw = storage.getItem(SESSION_KEY);\n        if (!raw) return null;\n        const s = readStoredSession(storage, raw);\n        if (!s?.expiresAt) return null;\n        const expiresAt = parseSessionExpiry(s.expiresAt);\n        if (!expiresAt) {\n          storage.removeItem(SESSION_KEY);\n          throw new AuthError(\n            \"Invalid session expiry in browser storage\",\n            \"SERVICE_ERROR\",\n          );\n        }\n        if (expiresAt < new Date()) {\n          storage.removeItem(SESSION_KEY);\n          return null;\n        }\n        const storedUser = getUsers().find((u) => u.id === s.userId);\n        if (!storedUser) {\n          storage.removeItem(SESSION_KEY);\n          throw new AuthError(\"Session user no longer exists\", \"UNAUTHORIZED\");\n        }\n        if (storedUser?.isBanned === true) {\n          storage.removeItem(SESSION_KEY);\n          assertUserCanAuthenticate(storedUser);\n        }\n        return s;\n      } catch (error) {\n        if (error instanceof AuthError) {\n          throw error;\n        }\n        throw new AuthError(\n          \"Failed to read session from browser storage\",\n          \"SERVICE_ERROR\",\n          error,\n        );\n      }\n    },\n\n    async getUser() {\n      const session = await this.getSession();\n      if (!session) return null;\n      const stored = getUsers().find((u) => u.id === session.userId);\n      if (!stored) return null;\n      return toAuthUser(stored);\n    },\n\n    async updateUser(updates) {\n      const session = await this.getSession();\n      if (!session) {\n        throw new AuthError(\"User is not authenticated\", \"UNAUTHORIZED\");\n      }\n      const users = getUsers();\n      const idx = users.findIndex((u) => u.id === session.userId);\n      if (idx === -1) return null;\n      const stored = users[idx];\n      if (!stored) return null;\n      Object.assign(stored, updates);\n      saveUsers(users);\n      const user = toAuthUser(stored);\n      refreshStoredSessionUser(user);\n      return user;\n    },\n  };\n}\n","/**\n * @module localStorage\n * @description Implements the local-first database adapter used for demos,\n * prototyping, and Storybook scenarios. The adapter stores collections in\n * browser `localStorage` while conforming to the shared database contract.\n */\n\nimport {\n  getBrowserLocalStorage,\n  hasBrowserLocalStorage,\n  isBrowserStorageQuotaError,\n} from \"../browser-storage\";\nimport { DbError } from \"../errors\";\nimport { warnRuntimeAdapterMock } from \"../runtime-warning\";\nimport type { ListOptions, QueryCondition, QueryFilter } from \"../types\";\nimport type { DbAdapter } from \"./interface\";\n\nconst DB_PREFIX = \"geenius_db_\";\nconst QUERY_OPERATORS = [\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"in\",\n  \"contains\",\n] as const;\n\ntype StoredDbRecord = Record<string, unknown> & { id: string };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isStoredDbRecord(value: unknown): value is StoredDbRecord {\n  return isRecord(value) && typeof value.id === \"string\";\n}\n\nfunction isQueryOperator(value: unknown): value is QueryCondition[\"operator\"] {\n  return (\n    typeof value === \"string\" &&\n    (QUERY_OPERATORS as readonly string[]).includes(value)\n  );\n}\n\nfunction isComparableValue(value: unknown): value is number | string {\n  return typeof value === \"number\" || typeof value === \"string\";\n}\n\nfunction isQueryCondition(value: unknown): value is QueryCondition {\n  if (\n    !isRecord(value) ||\n    typeof value.field !== \"string\" ||\n    value.field.length === 0 ||\n    !isQueryOperator(value.operator)\n  ) {\n    return false;\n  }\n\n  switch (value.operator) {\n    case \"eq\":\n    case \"neq\":\n      return true;\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n      return isComparableValue(value.value);\n    case \"in\":\n      return Array.isArray(value.value);\n    case \"contains\":\n      return typeof value.value === \"string\";\n  }\n}\n\nfunction validateQueryFilter(filter: unknown): QueryFilter {\n  if (!Array.isArray(filter) || !filter.every(isQueryCondition)) {\n    throw new DbError(\"Invalid query filter\", \"QUERY_ERROR\");\n  }\n  return filter;\n}\n\nfunction parseCollectionData(raw: string | null): StoredDbRecord[] {\n  const parsed: unknown = JSON.parse(raw || \"[]\");\n  if (!Array.isArray(parsed) || !parsed.every(isStoredDbRecord)) {\n    throw new DbError(\"Invalid localStorage collection payload\", \"QUERY_ERROR\");\n  }\n  return parsed;\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    switch (operator) {\n      case \"gt\":\n        return left > right;\n      case \"gte\":\n        return left >= right;\n      case \"lt\":\n        return left < right;\n      case \"lte\":\n        return left <= right;\n    }\n  }\n\n  if (typeof left === \"string\" && typeof right === \"string\") {\n    switch (operator) {\n      case \"gt\":\n        return left > right;\n      case \"gte\":\n        return left >= right;\n      case \"lt\":\n        return left < right;\n      case \"lte\":\n        return left <= right;\n    }\n  }\n\n  return false;\n}\n\nfunction castStoredItem<T>(item: StoredDbRecord): T;\nfunction castStoredItem(item: StoredDbRecord): unknown {\n  // This adapter is intentionally schema-less; callers provide the concrete\n  // collection shape through `T` when records are read back out.\n  return item;\n}\n\nfunction castStoredItems<T>(items: StoredDbRecord[]): T[];\nfunction castStoredItems(items: StoredDbRecord[]): unknown[] {\n  // The persisted payload is validated to contain JSON objects with string ids;\n  // the rest of each record remains caller-defined collection data.\n  return items;\n}\n\nfunction getCollection(collection: string): StoredDbRecord[] {\n  try {\n    const storage = getBrowserLocalStorage();\n    return parseCollectionData(storage.getItem(DB_PREFIX + collection));\n  } catch (error) {\n    if (error instanceof DbError) {\n      throw error;\n    }\n    if (error instanceof SyntaxError) {\n      throw new DbError(\n        \"Failed to parse localStorage data\",\n        \"QUERY_ERROR\",\n        error,\n      );\n    }\n    throw new DbError(\"Failed to read from localStorage\", \"QUERY_ERROR\", error);\n  }\n}\n\nfunction saveCollection(collection: string, data: StoredDbRecord[]): void {\n  try {\n    const storage = getBrowserLocalStorage();\n    storage.setItem(DB_PREFIX + collection, JSON.stringify(data));\n  } catch (error) {\n    if (isBrowserStorageQuotaError(error)) {\n      throw new DbError(\n        \"localStorage quota exceeded\",\n        \"CONNECTION_ERROR\",\n        error,\n      );\n    }\n    throw new DbError(\"Failed to write to localStorage\", \"QUERY_ERROR\", error);\n  }\n}\n\nfunction matchesCondition(item: StoredDbRecord, cond: QueryCondition): boolean {\n  const val = item[cond.field];\n  switch (cond.operator) {\n    case \"eq\":\n      return val === cond.value;\n    case \"neq\":\n      return val !== cond.value;\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n      return compareValues(val, cond.value, cond.operator);\n    case \"in\":\n      return Array.isArray(cond.value) && cond.value.includes(val);\n    case \"contains\":\n      return (\n        typeof val === \"string\" &&\n        typeof cond.value === \"string\" &&\n        val.includes(cond.value)\n      );\n    default:\n      return false;\n  }\n}\n\nfunction matchesFilter(item: StoredDbRecord, filter: QueryFilter): boolean {\n  return filter.every((cond) => matchesCondition(item, cond));\n}\n\nfunction applyListOptions(\n  data: StoredDbRecord[],\n  options?: ListOptions,\n): StoredDbRecord[] {\n  let items = [...data];\n\n  if (options?.orderBy) {\n    const { orderBy } = options;\n    const dir = options.order === \"desc\" ? -1 : 1;\n    items.sort((a, b) => {\n      const av = a[orderBy];\n      const bv = b[orderBy];\n      if (typeof av === \"number\" && typeof bv === \"number\") {\n        return av < bv ? -dir : av > bv ? dir : 0;\n      }\n      if (typeof av === \"string\" && typeof bv === \"string\") {\n        return av < bv ? -dir : av > bv ? dir : 0;\n      }\n      return 0;\n    });\n  }\n\n  if (options?.offset) items = items.slice(options.offset);\n  if (options?.limit) items = items.slice(0, options.limit);\n  return items;\n}\n\n// Inline SSR fallback — a minimal in-memory store for when window/localStorage\n// is not available (SSR). The full memory adapter lives in @geenius/db.\nfunction createServerSideFallback(): DbAdapter {\n  const store = new Map<string, StoredDbRecord[]>();\n  const getCol = (c: string) => store.get(c) || [];\n  const setCol = (c: string, d: StoredDbRecord[]) => {\n    store.set(c, d);\n  };\n\n  return {\n    async create<T extends Record<string, unknown>>(\n      c: string,\n      data: Omit<T, \"id\">,\n    ) {\n      const items = getCol(c);\n      const item: StoredDbRecord = { ...data, id: crypto.randomUUID() };\n      items.push(item);\n      setCol(c, items);\n      return castStoredItem<T & { id: string }>(item);\n    },\n    async get<T>(c: string, id: string) {\n      const item = getCol(c).find((i) => i.id === id);\n      return item ? castStoredItem<T>(item) : null;\n    },\n    async update<T extends Record<string, unknown>>(\n      c: string,\n      id: string,\n      data: Partial<T>,\n    ) {\n      const items = getCol(c);\n      const idx = items.findIndex((i) => i.id === id);\n      if (idx === -1) return null;\n      const item = items[idx];\n      if (!item) return null;\n      Object.assign(item, data);\n      setCol(c, items);\n      return castStoredItem<T>(item);\n    },\n    async delete(c: string, id: string) {\n      const items = getCol(c);\n      const idx = items.findIndex((i) => i.id === id);\n      if (idx === -1) return false;\n      items.splice(idx, 1);\n      setCol(c, items);\n      return true;\n    },\n    async list<T>(c: string, options?: ListOptions) {\n      return castStoredItems<T>(applyListOptions(getCol(c), options));\n    },\n    async query<T>(c: string, filter: QueryFilter) {\n      const validFilter = validateQueryFilter(filter);\n      return castStoredItems<T>(\n        getCol(c).filter((item) => matchesFilter(item, validFilter)),\n      );\n    },\n    async count(c: string, filter?: QueryFilter) {\n      const items = getCol(c);\n      if (!filter || filter.length === 0) {\n        return items.length;\n      }\n      const validFilter = validateQueryFilter(filter);\n      return validFilter.length === 0\n        ? items.length\n        : items.filter((i) => matchesFilter(i, validFilter)).length;\n    },\n  };\n}\n\n/**\n * Creates the mock localStorage-backed database adapter used in demos and Storybook.\n *\n * @returns A database adapter implementation that persists collections to browser storage.\n * @throws {DbError} When collection reads or writes fail during localStorage access.\n */\nexport function createLocalStorageDbAdapter(): DbAdapter {\n  if (\n    typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV === \"production\"\n  ) {\n    warnRuntimeAdapterMock(\n      \"[@geenius/adapters] localStorage DB adapter is a MOCK for prototyping only. \" +\n        \"Do NOT use in production. Use a real DB provider from @geenius/db instead.\",\n    );\n  }\n\n  if (!hasBrowserLocalStorage()) {\n    return createServerSideFallback();\n  }\n\n  return {\n    async create<T extends Record<string, unknown>>(\n      collection: string,\n      data: Omit<T, \"id\">,\n    ) {\n      const items = getCollection(collection);\n      const item: StoredDbRecord = { ...data, id: crypto.randomUUID() };\n      items.push(item);\n      saveCollection(collection, items);\n      return castStoredItem<T & { id: string }>(item);\n    },\n\n    async get<T>(collection: string, id: string) {\n      const found = getCollection(collection).find((item) => item.id === id);\n      return found ? castStoredItem<T>(found) : null;\n    },\n\n    async update<T extends Record<string, unknown>>(\n      collection: string,\n      id: string,\n      data: Partial<T>,\n    ) {\n      const items = getCollection(collection);\n      const idx = items.findIndex((item) => item.id === id);\n      if (idx === -1) return null;\n      const item = items[idx];\n      if (!item) return null;\n      Object.assign(item, data);\n      saveCollection(collection, items);\n      return castStoredItem<T>(item);\n    },\n\n    async delete(collection: string, id: string) {\n      const items = getCollection(collection);\n      const idx = items.findIndex((item) => item.id === id);\n      if (idx === -1) return false;\n      items.splice(idx, 1);\n      saveCollection(collection, items);\n      return true;\n    },\n\n    async list<T>(collection: string, options?: ListOptions) {\n      return castStoredItems<T>(\n        applyListOptions(getCollection(collection), options),\n      );\n    },\n\n    async query<T>(collection: string, filter: QueryFilter) {\n      const validFilter = validateQueryFilter(filter);\n      return castStoredItems<T>(\n        getCollection(collection).filter((item) =>\n          matchesFilter(item, validFilter),\n        ),\n      );\n    },\n\n    async count(collection: string, filter?: QueryFilter) {\n      const items = getCollection(collection);\n      if (!filter || filter.length === 0) return items.length;\n      const validFilter = validateQueryFilter(filter);\n      return items.filter((item) => matchesFilter(item, validFilter)).length;\n    },\n  };\n}\n","/**\n * @module console\n * @description Implements the shared console-backed logger used by the\n * adapters package. The logger applies log-level filtering, prefixes, and\n * contextual child loggers without requiring an external logging backend.\n */\n\nimport { warnRuntimeAdapterMock } from \"../runtime-warning\";\nimport type { LoggerAdapter, LogLevel, LogMeta } from \"./interface\";\n\n/**\n * Priority ordering of log levels.\n * Used to filter which logs are output based on minimum level.\n * Debug < Info < Warn < Error\n */\nconst LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {\n  debug: 0,\n  info: 1,\n  warn: 2,\n  error: 3,\n};\n\n/**\n * Configuration options for console logger behavior.\n */\nexport interface ConsoleLoggerOptions {\n  /** Minimum log level to display. Defaults to 'debug' in development, 'info' in production */\n  minLevel?: LogLevel;\n  /** Prefix prepended to every log message (e.g., '[MyApp]', '[adapter]') */\n  prefix?: string;\n}\n\n/**\n * Creates a logger that outputs to browser/Node console.\n *\n * This is the default logger implementation for geenius adapters.\n * It filters logs by level and supports context via child loggers.\n *\n * Log levels are ordered by severity:\n * - debug: Detailed diagnostic information (disabled in production by default)\n * - info: General informational messages\n * - warn: Warning messages about unusual conditions\n * - error: Error messages about failures\n *\n * @param options - Configuration for logger behavior\n * @returns A LoggerAdapter instance that logs to console\n *\n * @example\n * ```ts\n * // Default setup - debug in dev, info in prod\n * const logger = createConsoleLoggerAdapter();\n *\n * // Custom minimum level\n * const quietLogger = createConsoleLoggerAdapter({ minLevel: 'warn' });\n * // Only warns and errors are printed\n *\n * // Custom prefix\n * const prefixedLogger = createConsoleLoggerAdapter({\n *   prefix: '[MyApp]',\n *   minLevel: 'info'\n * });\n * // Output: \"[MyApp] Database connected\"\n *\n * // Use in code\n * const dbLogger = await logger.child({ adapter: 'db', provider: 'convex' });\n * dbLogger.info('Connection established'); // \"[geenius] Connection established { adapter, provider }\"\n * ```\n */\nexport function createConsoleLoggerAdapter(\n  options?: ConsoleLoggerOptions,\n): LoggerAdapter {\n  // Detect development environment\n  const isDev =\n    typeof process !== \"undefined\" && process.env?.NODE_ENV !== \"production\";\n  // Use provided min level or pick based on environment\n  const minLevel = options?.minLevel ?? (isDev ? \"debug\" : \"info\");\n  // Use provided prefix or default\n  const prefix = options?.prefix ?? \"[geenius]\";\n\n  if (!isDev) {\n    warnRuntimeAdapterMock(\n      \"[@geenius/adapters] console logger adapter is a MOCK for prototyping only. \" +\n        \"Do NOT use in production. Use a real logger provider from a dedicated downstream package instead.\",\n    );\n  }\n\n  /**\n   * Check if a given log level should be displayed.\n   * Compares the level's priority against the minimum level.\n   *\n   * @internal\n   */\n  function shouldLog(level: LogLevel): boolean {\n    return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[minLevel];\n  }\n\n  /**\n   * Add prefix to a message.\n   *\n   * @internal\n   */\n  function formatMessage(message: string): string {\n    return prefix ? `${prefix} ${message}` : message;\n  }\n\n  /**\n   * Create a logger function with optional default metadata.\n   * This function is called recursively to support child loggers.\n   *\n   * @internal\n   */\n  function createLogger(defaultMeta?: LogMeta): LoggerAdapter {\n    /**\n     * Internal log function that handles filtering, formatting, and output.\n     *\n     * @internal\n     */\n    async function log(\n      level: LogLevel,\n      message: string,\n      meta?: LogMeta,\n    ): Promise<void> {\n      // Skip if below minimum log level\n      if (!shouldLog(level)) return;\n\n      // Merge default metadata with provided metadata\n      const merged = defaultMeta ? { ...defaultMeta, ...meta } : meta;\n      // Format message with prefix\n      const formatted = formatMessage(message);\n\n      // Output to console with optional metadata\n      if (merged && Object.keys(merged).length > 0) {\n        console[level](formatted, merged);\n      } else {\n        console[level](formatted);\n      }\n    }\n\n    return {\n      debug: (message, meta) => log(\"debug\", message, meta),\n      info: (message, meta) => log(\"info\", message, meta),\n      warn: (message, meta) => log(\"warn\", message, meta),\n      error: (message, meta) => log(\"error\", message, meta),\n      // Create child logger by merging metadata\n      child: async (childMeta) =>\n        createLogger({ ...defaultMeta, ...childMeta }),\n    };\n  }\n\n  return createLogger();\n}\n","/**\n * @module memory\n * @description Implements an in-memory logger transport for tests, Storybook\n * fixtures, and offline prototypes that need to assert structured log output.\n */\n\nimport type { LoggerAdapter, LogLevel, LogMeta } from \"./interface\";\n\nconst LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {\n  debug: 0,\n  info: 1,\n  warn: 2,\n  error: 3,\n};\n\n/** Structured entry captured by the memory logger transport. */\nexport interface MemoryLogEntry {\n  /** ISO 8601 timestamp captured when the entry was written */\n  timestamp: string;\n  /** Entry severity level */\n  level: LogLevel;\n  /** Human-readable log message */\n  message: string;\n  /** Merged default and per-entry metadata */\n  meta?: LogMeta;\n}\n\n/** Configuration for the in-memory logger transport. */\nexport interface MemoryLoggerOptions {\n  /** Minimum log level to capture. Defaults to debug. */\n  minLevel?: LogLevel;\n  /** Existing entry buffer to append to, useful for composing test fixtures. */\n  entries?: MemoryLogEntry[];\n  /** Clock hook for deterministic tests. */\n  now?: () => Date;\n}\n\n/**\n * Logger adapter with test-friendly access to captured entries.\n */\nexport interface MemoryLoggerAdapter extends LoggerAdapter {\n  /** Frozen cloned snapshot of captured log entries. */\n  readonly entries: readonly Readonly<MemoryLogEntry>[];\n  /** Snapshot captured entries so assertions cannot mutate the live buffer. */\n  getEntries(): MemoryLogEntry[];\n  /** Clear captured entries from the shared buffer. */\n  clear(): void;\n  /** Create a child memory logger that appends to the same captured buffer. */\n  child(defaultMeta: LogMeta): Promise<MemoryLoggerAdapter>;\n}\n\n/**\n * Creates an in-memory structured logger for test and local review flows.\n *\n * @param options - Capture behavior, injected buffer, and clock configuration\n * @returns A memory logger with captured-entry helpers and child metadata support\n */\nexport function createMemoryLoggerAdapter(\n  options?: MemoryLoggerOptions,\n): MemoryLoggerAdapter {\n  const minLevel = options?.minLevel ?? \"debug\";\n  const entries = options?.entries ?? [];\n  const now = options?.now ?? (() => new Date());\n\n  function shouldCapture(level: LogLevel): boolean {\n    return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[minLevel];\n  }\n\n  function cloneEntry(entry: MemoryLogEntry): MemoryLogEntry {\n    return {\n      ...entry,\n      meta: entry.meta ? { ...entry.meta } : undefined,\n    };\n  }\n\n  function freezeEntry(entry: MemoryLogEntry): Readonly<MemoryLogEntry> {\n    const snapshot = cloneEntry(entry);\n    if (snapshot.meta) {\n      Object.freeze(snapshot.meta);\n    }\n    return Object.freeze(snapshot);\n  }\n\n  function createLogger(defaultMeta?: LogMeta): MemoryLoggerAdapter {\n    async function log(\n      level: LogLevel,\n      message: string,\n      meta?: LogMeta,\n    ): Promise<void> {\n      if (!shouldCapture(level)) return;\n\n      const mergedMeta: LogMeta = {\n        ...(defaultMeta ?? {}),\n        ...(meta ?? {}),\n      };\n      const entry: MemoryLogEntry = {\n        timestamp: now().toISOString(),\n        level,\n        message,\n      };\n\n      if (Object.keys(mergedMeta).length > 0) {\n        entry.meta = mergedMeta;\n      }\n      entries.push(entry);\n    }\n\n    return {\n      get entries() {\n        return Object.freeze(entries.map(freezeEntry));\n      },\n      getEntries: () => entries.map(cloneEntry),\n      clear: () => {\n        entries.length = 0;\n      },\n      debug: (message, meta) => log(\"debug\", message, meta),\n      info: (message, meta) => log(\"info\", message, meta),\n      warn: (message, meta) => log(\"warn\", message, meta),\n      error: (message, meta) => log(\"error\", message, meta),\n      child: async (childMeta) =>\n        createLogger({ ...(defaultMeta ?? {}), ...childMeta }),\n    };\n  }\n\n  return createLogger();\n}\n","/**\n * @module browser-storage-adapter\n * @description Implements the local-first payments adapter used for demos,\n * prototyping, and Storybook scenarios. The adapter stores plans and\n * subscriptions in guarded browser storage while mirroring the payments contract.\n */\n\nimport {\n  type BrowserStorage,\n  getBrowserLocalStorage,\n  isBrowserStorageQuotaError,\n} from \"../browser-storage\";\nimport { PaymentsError } from \"../errors\";\nimport { warnRuntimeAdapterMock } from \"../runtime-warning\";\nimport type {\n  CheckoutParams,\n  CheckoutResult,\n  Plan,\n  Subscription,\n} from \"../types\";\nimport type { PaymentsAdapter } from \"./interface\";\n\nconst SUBS_KEY = \"geenius_subscriptions\";\nconst PLANS_KEY = \"geenius_plans\";\n\nconst DEFAULT_PLANS: Plan[] = [\n  {\n    id: \"free\",\n    name: \"Free\",\n    price: 0,\n    currency: \"USD\",\n    interval: \"month\",\n    features: [\"basic-features\", \"single-project\", \"community-support\"],\n  },\n  {\n    id: \"pro\",\n    name: \"Pro\",\n    price: 29,\n    currency: \"USD\",\n    interval: \"month\",\n    features: [\n      \"basic-features\",\n      \"unlimited-projects\",\n      \"priority-support\",\n      \"ai-features\",\n      \"pdf-export\",\n      \"api-access\",\n    ],\n  },\n  {\n    id: \"team\",\n    name: \"Team\",\n    price: 79,\n    currency: \"USD\",\n    interval: \"month\",\n    features: [\n      \"basic-features\",\n      \"unlimited-projects\",\n      \"priority-support\",\n      \"ai-features\",\n      \"pdf-export\",\n      \"api-access\",\n      \"team-sharing\",\n      \"admin-dashboard\",\n      \"custom-integrations\",\n      \"custom-domain\",\n      \"sso\",\n    ],\n  },\n];\n\nconst LEGACY_FEATURE_ALIASES: Record<string, readonly string[]> = {\n  \"1 project\": [\"single-project\"],\n  \"admin dashboard\": [\"admin-dashboard\"],\n  \"ai features\": [\"ai-features\"],\n  \"all free features\": [\n    \"basic-features\",\n    \"single-project\",\n    \"community-support\",\n  ],\n  \"all pro features\": [\n    \"basic-features\",\n    \"unlimited-projects\",\n    \"priority-support\",\n    \"ai-features\",\n    \"pdf-export\",\n    \"api-access\",\n  ],\n  \"basic features\": [\"basic-features\"],\n  \"community support\": [\"community-support\"],\n  \"custom integrations\": [\"custom-integrations\"],\n  \"priority support\": [\"priority-support\"],\n  \"team management\": [\"team-sharing\"],\n  \"unlimited projects\": [\"unlimited-projects\"],\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPlan(value: unknown): value is Plan {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    typeof value.name === \"string\" &&\n    typeof value.price === \"number\" &&\n    typeof value.currency === \"string\" &&\n    (value.interval === \"month\" ||\n      value.interval === \"year\" ||\n      value.interval === \"one-time\") &&\n    Array.isArray(value.features) &&\n    value.features.every((feature: unknown) => typeof feature === \"string\")\n  );\n}\n\nfunction isSubscription(value: unknown): value is Subscription {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    typeof value.userId === \"string\" &&\n    typeof value.planId === \"string\" &&\n    [\"active\", \"cancelled\", \"past_due\", \"trialing\"].includes(\n      String(value.status),\n    ) &&\n    typeof value.currentPeriodEnd === \"string\" &&\n    typeof value.cancelAtPeriodEnd === \"boolean\"\n  );\n}\n\nfunction parseSubscriptions(raw: string | null): Subscription[] {\n  const parsed: unknown = JSON.parse(raw || \"[]\");\n  if (!Array.isArray(parsed) || !parsed.every(isSubscription)) {\n    throw new PaymentsError(\n      \"Invalid subscriptions payload in browser storage\",\n      \"SERVICE_ERROR\",\n    );\n  }\n  return parsed;\n}\n\nfunction parsePlans(raw: string | null): Plan[] {\n  const parsed: unknown = JSON.parse(raw || \"[]\");\n  if (!Array.isArray(parsed) || !parsed.every(isPlan)) {\n    throw new PaymentsError(\n      \"Invalid plans payload in browser storage\",\n      \"SERVICE_ERROR\",\n    );\n  }\n  return parsed;\n}\n\nfunction normalizeFeatureId(feature: string): string {\n  return feature.trim().toLowerCase();\n}\n\nfunction getFeatureLookupIds(feature: string): ReadonlySet<string> {\n  const normalized = normalizeFeatureId(feature);\n  return new Set([normalized, ...(LEGACY_FEATURE_ALIASES[normalized] ?? [])]);\n}\n\nfunction getPlanFeatureIds(plan: Plan): ReadonlySet<string> {\n  const features = new Set<string>();\n  for (const feature of plan.features) {\n    const normalized = normalizeFeatureId(feature);\n    features.add(normalized);\n    for (const alias of LEGACY_FEATURE_ALIASES[normalized] ?? []) {\n      features.add(alias);\n    }\n  }\n  return features;\n}\n\nfunction getSubs(): Subscription[] {\n  try {\n    const storage = getBrowserLocalStorage();\n    return parseSubscriptions(storage.getItem(SUBS_KEY));\n  } catch (error) {\n    if (error instanceof PaymentsError) {\n      throw error;\n    }\n    if (error instanceof SyntaxError) {\n      throw new PaymentsError(\n        \"Failed to parse subscriptions from browser storage\",\n        \"SERVICE_ERROR\",\n        error,\n      );\n    }\n    throw new PaymentsError(\n      \"Failed to read from browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction saveSubs(subs: Subscription[]): void {\n  try {\n    const storage = getBrowserLocalStorage();\n    storage.setItem(SUBS_KEY, JSON.stringify(subs));\n  } catch (error) {\n    if (isBrowserStorageQuotaError(error)) {\n      throw new PaymentsError(\n        \"browser storage quota exceeded\",\n        \"SERVICE_ERROR\",\n        error,\n      );\n    }\n    throw new PaymentsError(\n      \"Failed to write to browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction getPlansFromStorage(): Plan[] {\n  try {\n    const storage = getBrowserLocalStorage();\n    seedDefaultPlans(storage);\n    const rawPlans = storage.getItem(PLANS_KEY);\n    return rawPlans ? parsePlans(rawPlans) : DEFAULT_PLANS;\n  } catch (error) {\n    if (error instanceof PaymentsError) {\n      throw error;\n    }\n    throw new PaymentsError(\n      \"Failed to read plans from browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction seedDefaultPlans(storage: BrowserStorage): void {\n  if (storage.getItem(PLANS_KEY)) {\n    return;\n  }\n\n  try {\n    storage.setItem(PLANS_KEY, JSON.stringify(DEFAULT_PLANS));\n  } catch (error) {\n    if (isBrowserStorageQuotaError(error)) {\n      throw new PaymentsError(\n        \"browser storage quota exceeded\",\n        \"SERVICE_ERROR\",\n        error,\n      );\n    }\n    throw new PaymentsError(\n      \"Failed to initialize plans\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\n/**\n * Creates the mock browser-storage-backed payments adapter used in demos and Storybook.\n *\n * @returns A payments adapter implementation that stores plans and subscriptions in browser storage.\n * @throws {PaymentsError} When plans or subscriptions cannot be persisted during method calls.\n */\nexport function createLocalStoragePaymentsAdapter(): PaymentsAdapter {\n  if (\n    typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV === \"production\"\n  ) {\n    warnRuntimeAdapterMock(\n      \"[@geenius/adapters] browser storage payments adapter is a MOCK for prototyping only. \" +\n        \"Do NOT use in production. Use a real payments provider from @geenius/payments instead.\",\n    );\n  }\n\n  return {\n    async createCheckout(params: CheckoutParams) {\n      const plan = getPlansFromStorage().find(\n        (candidate) => candidate.id === params.planId,\n      );\n      if (!plan) {\n        throw new PaymentsError(\n          `Unknown plan: ${params.planId}`,\n          \"INVALID_PLAN\",\n        );\n      }\n\n      // Mock: instantly create a subscription\n      const subs = getSubs();\n      const sub: Subscription = {\n        id: crypto.randomUUID(),\n        userId: params.userId,\n        planId: plan.id,\n        status: \"active\",\n        currentPeriodEnd: new Date(\n          Date.now() + 30 * 24 * 60 * 60 * 1000,\n        ).toISOString(),\n        cancelAtPeriodEnd: false,\n      };\n      subs.push(sub);\n      saveSubs(subs);\n      const result: CheckoutResult = {\n        url: params.successUrl || \"/\",\n        sessionId: sub.id,\n      };\n      return result;\n    },\n\n    async getSubscription(userId) {\n      const sub = getSubs().find(\n        (s) => s.userId === userId && s.status === \"active\",\n      );\n      return sub ?? null;\n    },\n\n    async cancelSubscription(subscriptionId) {\n      const subs = getSubs();\n      const idx = subs.findIndex((s) => s.id === subscriptionId);\n      if (idx === -1) {\n        throw new PaymentsError(\n          `Subscription not found: ${subscriptionId}`,\n          \"SUBSCRIPTION_NOT_FOUND\",\n        );\n      }\n\n      const subscription = subs[idx];\n      if (!subscription) {\n        throw new PaymentsError(\n          `Subscription not found: ${subscriptionId}`,\n          \"SUBSCRIPTION_NOT_FOUND\",\n        );\n      }\n      subscription.cancelAtPeriodEnd = true;\n      subscription.status = \"cancelled\";\n      saveSubs(subs);\n    },\n\n    async getPlans() {\n      return getPlansFromStorage();\n    },\n\n    async isFeatureEnabled(userId, feature) {\n      const sub = await this.getSubscription(userId);\n      if (!sub) return false;\n      const plans: Plan[] = await this.getPlans();\n      const plan = plans.find((p) => p.id === sub.planId);\n      if (!plan) return false;\n\n      const enabledFeatures = getPlanFeatureIds(plan);\n      return [...getFeatureLookupIds(feature)].some((featureId) =>\n        enabledFeatures.has(featureId),\n      );\n    },\n  };\n}\n\n/**\n * Creates a payments adapter that accepts billing operations without contacting\n * a provider.\n *\n * @returns A no-op payments adapter used by CI, tests, and tiers that intentionally disable billing flows.\n */\nexport function createNoopPaymentsAdapter(): PaymentsAdapter {\n  return {\n    async createCheckout(params) {\n      return {\n        url: params.successUrl ?? \"/\",\n        sessionId: `noop_${params.userId}_${params.planId}`,\n      };\n    },\n    async getSubscription() {\n      return null;\n    },\n    async cancelSubscription() {},\n    async getPlans() {\n      return [];\n    },\n    async isFeatureEnabled() {\n      return false;\n    },\n  };\n}\n","/**\n * @module browser-storage-adapter\n * @description Implements the local-first file storage adapter used for demos,\n * prototyping, and Storybook scenarios. The adapter persists file metadata and\n * base64 payloads to guarded browser storage while following the shared contract.\n */\n\nimport {\n  type BrowserStorage,\n  getBrowserLocalStorage,\n  isBrowserStorageQuotaError,\n} from \"../browser-storage\";\nimport { StorageError } from \"../errors\";\nimport { warnRuntimeAdapterMock } from \"../runtime-warning\";\nimport type { FileStorageMetadata, StoredFile } from \"../types\";\nimport type {\n  FileStorageAdapter,\n  FileUploadOptions,\n  LocalStorageFileAdapterOptions,\n} from \"./interface\";\n\nconst FILES_KEY = \"geenius_files\";\nconst BLOBS_PREFIX = \"geenius_blob_\";\nconst DEFAULT_MAX_PAYLOAD_BYTES = 2 * 1024 * 1024;\n\ninterface StoredFileEntry extends StoredFile {\n  blobKey: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isMetadataValue(\n  value: unknown,\n): value is FileStorageMetadata[keyof FileStorageMetadata] {\n  return (\n    value === null ||\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  );\n}\n\nfunction isFileStorageMetadata(value: unknown): value is FileStorageMetadata {\n  return isRecord(value) && Object.values(value).every(isMetadataValue);\n}\n\nfunction isStoredFileEntry(value: unknown): value is StoredFileEntry {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.id === \"string\" &&\n    typeof value.name === \"string\" &&\n    typeof value.path === \"string\" &&\n    typeof value.size === \"number\" &&\n    typeof value.mimeType === \"string\" &&\n    typeof value.url === \"string\" &&\n    (value.metadata === undefined || isFileStorageMetadata(value.metadata)) &&\n    typeof value.createdAt === \"string\" &&\n    typeof value.blobKey === \"string\"\n  );\n}\n\nfunction parseStoredFiles(raw: string | null): StoredFileEntry[] {\n  const parsed: unknown = JSON.parse(raw || \"[]\");\n  if (!Array.isArray(parsed) || !parsed.every(isStoredFileEntry)) {\n    throw new StorageError(\n      \"Invalid files payload in browser storage\",\n      \"INVALID_KEY\",\n    );\n  }\n  return parsed;\n}\n\nfunction getFiles(): StoredFileEntry[] {\n  try {\n    const storage = getBrowserLocalStorage();\n    return parseStoredFiles(storage.getItem(FILES_KEY));\n  } catch (error) {\n    if (error instanceof StorageError) {\n      throw error;\n    }\n    if (error instanceof SyntaxError) {\n      throw new StorageError(\n        \"Failed to parse files from browser storage\",\n        \"INVALID_KEY\",\n        error,\n      );\n    }\n    throw new StorageError(\n      \"Failed to read from browser storage\",\n      \"SERVICE_ERROR\",\n      error,\n    );\n  }\n}\n\nfunction saveFiles(files: StoredFileEntry[]): void {\n  try {\n    const storage = getBrowserLocalStorage();\n    storage.setItem(FILES_KEY, JSON.stringify(files));\n  } catch (error) {\n    if (isBrowserStorageQuotaError(error)) {\n      throw new StorageError(\n        \"browser storage quota exceeded\",\n        \"QUOTA_EXCEEDED\",\n        error,\n      );\n    }\n    throw new StorageError(\n      \"Failed to write to browser storage\",\n      \"INVALID_KEY\",\n      error,\n    );\n  }\n}\n\nfunction blobToBase64(blob: Blob): Promise<string> {\n  return new Promise((resolve, reject) => {\n    let reader: FileReader;\n    try {\n      reader = new FileReader();\n    } catch (error) {\n      reject(\n        new StorageError(\n          \"Failed to initialize file reader\",\n          \"UPLOAD_FAILED\",\n          error,\n        ),\n      );\n      return;\n    }\n\n    reader.onload = () => {\n      if (typeof reader.result !== \"string\") {\n        reject(\n          new StorageError(\n            \"Failed to convert file to data URL\",\n            \"UPLOAD_FAILED\",\n          ),\n        );\n        return;\n      }\n      resolve(reader.result);\n    };\n    reader.onerror = () => {\n      reject(\n        new StorageError(\n          \"Failed to read file contents\",\n          \"UPLOAD_FAILED\",\n          reader.error,\n        ),\n      );\n    };\n    try {\n      reader.readAsDataURL(blob);\n    } catch (error) {\n      reject(\n        new StorageError(\n          \"Failed to read file contents\",\n          \"UPLOAD_FAILED\",\n          error,\n        ),\n      );\n    }\n  });\n}\n\nfunction base64ToBlob(dataUrl: string): Blob {\n  try {\n    const separatorIndex = dataUrl.indexOf(\",\");\n    const meta = separatorIndex >= 0 ? dataUrl.slice(0, separatorIndex) : \"\";\n    const data = separatorIndex >= 0 ? dataUrl.slice(separatorIndex + 1) : \"\";\n    if (!meta.startsWith(\"data:\") || separatorIndex < 0) {\n      throw new Error(\"Invalid data URL payload\");\n    }\n    const mime = meta.match(/:(.*?);/)?.[1] || \"application/octet-stream\";\n    const bytes = atob(data);\n    const buffer = new Uint8Array(bytes.length);\n    for (let i = 0; i < bytes.length; i++) buffer[i] = bytes.charCodeAt(i);\n    return new Blob([buffer], { type: mime });\n  } catch (error) {\n    if (error instanceof StorageError) {\n      throw error;\n    }\n    throw new StorageError(\n      \"Failed to decode file contents\",\n      \"DOWNLOAD_FAILED\",\n      error,\n    );\n  }\n}\n\nfunction normalizeUploadOptions(\n  nameOrOptions: string | FileUploadOptions | undefined,\n): FileUploadOptions {\n  if (typeof nameOrOptions === \"string\") {\n    return { name: nameOrOptions };\n  }\n  const options = nameOrOptions ?? {};\n  if (\n    options.metadata !== undefined &&\n    !isFileStorageMetadata(options.metadata)\n  ) {\n    throw new StorageError(\n      \"File metadata values must be string, number, boolean, or null\",\n      \"INVALID_KEY\",\n    );\n  }\n  return options;\n}\n\nfunction resolveMaxPayloadBytes(\n  options: LocalStorageFileAdapterOptions,\n): number {\n  const maxPayloadBytes = options.maxPayloadBytes ?? DEFAULT_MAX_PAYLOAD_BYTES;\n\n  if (!Number.isInteger(maxPayloadBytes) || maxPayloadBytes <= 0) {\n    throw new StorageError(\n      \"File payload limit must be a positive integer\",\n      \"INVALID_KEY\",\n    );\n  }\n\n  return maxPayloadBytes;\n}\n\nfunction assertPayloadWithinLimit(file: Blob, maxPayloadBytes: number): void {\n  if (file.size <= maxPayloadBytes) {\n    return;\n  }\n\n  throw new StorageError(\n    `File payload exceeds localStorage adapter limit of ${maxPayloadBytes} bytes`,\n    \"PAYLOAD_TOO_LARGE\",\n  );\n}\n\nfunction getStorageForOperation(\n  operation: string,\n  code: \"DOWNLOAD_FAILED\" | \"SERVICE_ERROR\" | \"UPLOAD_FAILED\",\n): BrowserStorage {\n  try {\n    return getBrowserLocalStorage();\n  } catch (error) {\n    throw new StorageError(\n      `Failed to access browser storage while ${operation}`,\n      code,\n      error,\n    );\n  }\n}\n\nfunction removeBlobPayload(\n  storage: BrowserStorage,\n  blobKey: string,\n  code: \"SERVICE_ERROR\" | \"UPLOAD_FAILED\",\n): void {\n  try {\n    storage.removeItem(blobKey);\n  } catch (error) {\n    throw new StorageError(\"Failed to remove stored file payload\", code, error);\n  }\n}\n\nfunction cleanupBlobPayload(storage: BrowserStorage, blobKey: string): void {\n  try {\n    storage.removeItem(blobKey);\n  } catch {\n    // Preserve the original persistence failure; cleanup is best-effort.\n  }\n}\n\n/**\n * Creates the mock browser-storage-backed file adapter used in demos and Storybook.\n *\n * @param options - Optional local adapter limits for test and prototype payloads.\n * @returns A file-storage adapter implementation that persists metadata and payloads to browser storage.\n * @throws {StorageError} When file metadata or blob payloads cannot be persisted or resolved.\n */\nexport function createLocalStorageFileAdapter(\n  options: LocalStorageFileAdapterOptions = {},\n): FileStorageAdapter {\n  const maxPayloadBytes = resolveMaxPayloadBytes(options);\n\n  if (\n    typeof process !== \"undefined\" &&\n    process.env?.NODE_ENV === \"production\"\n  ) {\n    warnRuntimeAdapterMock(\n      \"[@geenius/adapters] browser storage file storage adapter is a MOCK for prototyping only. \" +\n        \"Do NOT use in production. Use a real storage provider from @geenius/file-storage instead.\",\n    );\n  }\n\n  return {\n    async upload(file, path, nameOrOptions?) {\n      const options = normalizeUploadOptions(nameOrOptions);\n      assertPayloadWithinLimit(file, maxPayloadBytes);\n      const base64 = await blobToBase64(file);\n      const id = crypto.randomUUID();\n      const blobKey = BLOBS_PREFIX + id;\n\n      const storage = getStorageForOperation(\"uploading file\", \"UPLOAD_FAILED\");\n      try {\n        storage.setItem(blobKey, base64);\n      } catch (error) {\n        if (error instanceof StorageError) {\n          throw error;\n        }\n        if (isBrowserStorageQuotaError(error)) {\n          throw new StorageError(\n            \"browser storage quota exceeded\",\n            \"QUOTA_EXCEEDED\",\n            error,\n          );\n        }\n        throw new StorageError(\"Failed to store file\", \"INVALID_KEY\", error);\n      }\n\n      const entry: StoredFileEntry = {\n        id,\n        name:\n          options.name ||\n          (file instanceof File ? file.name : `file-${id.slice(0, 8)}`),\n        path,\n        size: file.size,\n        mimeType: file.type || \"application/octet-stream\",\n        url: `local://${id}`,\n        metadata: options.metadata,\n        createdAt: new Date().toISOString(),\n        blobKey,\n      };\n      try {\n        const files = getFiles();\n        files.push(entry);\n        saveFiles(files);\n      } catch (error) {\n        cleanupBlobPayload(storage, blobKey);\n        throw error;\n      }\n\n      const { blobKey: _, ...storedFile } = entry;\n      return storedFile;\n    },\n\n    async download(fileId) {\n      const entry = getFiles().find((f) => f.id === fileId);\n      if (!entry)\n        throw new StorageError(`File not found: ${fileId}`, \"NOT_FOUND\");\n      const storage = getStorageForOperation(\n        \"downloading file\",\n        \"DOWNLOAD_FAILED\",\n      );\n      let base64: string | null;\n      try {\n        base64 = storage.getItem(entry.blobKey);\n      } catch (error) {\n        throw new StorageError(\n          `Failed to read blob data for file: ${fileId}`,\n          \"DOWNLOAD_FAILED\",\n          error,\n        );\n      }\n      if (!base64)\n        throw new StorageError(\n          `Blob data missing for file: ${fileId}`,\n          \"NOT_FOUND\",\n        );\n      return base64ToBlob(base64);\n    },\n\n    async delete(fileId) {\n      const files = getFiles();\n      const idx = files.findIndex((f) => f.id === fileId);\n      if (idx === -1) return false;\n      const file = files[idx];\n      if (!file) return false;\n      const storage = getStorageForOperation(\"deleting file\", \"SERVICE_ERROR\");\n      const nextFiles = [...files.slice(0, idx), ...files.slice(idx + 1)];\n      saveFiles(nextFiles);\n      try {\n        removeBlobPayload(storage, file.blobKey, \"SERVICE_ERROR\");\n      } catch (error) {\n        try {\n          saveFiles(files);\n        } catch {\n          // The blob removal failure is the actionable delete error.\n        }\n        throw new StorageError(\n          `Failed to delete blob data for file: ${fileId}`,\n          \"SERVICE_ERROR\",\n          error,\n        );\n      }\n      return true;\n    },\n\n    async list(prefix?) {\n      let files = getFiles();\n      if (prefix) files = files.filter((f) => f.path.startsWith(prefix));\n      return files.map(({ blobKey: _, ...f }) => f);\n    },\n\n    async getUrl(fileId) {\n      const entry = getFiles().find((f) => f.id === fileId);\n      if (!entry)\n        throw new StorageError(`File not found: ${fileId}`, \"NOT_FOUND\");\n      const storage = getStorageForOperation(\n        \"resolving file URL\",\n        \"SERVICE_ERROR\",\n      );\n      let base64: string | null;\n      try {\n        base64 = storage.getItem(entry.blobKey);\n      } catch (error) {\n        throw new StorageError(\n          `Failed to resolve blob data for file: ${fileId}`,\n          \"SERVICE_ERROR\",\n          error,\n        );\n      }\n      return base64 || entry.url;\n    },\n  };\n}\n","/**\n * @module tier-gate\n * @description Declares the shared pricing-tier gating rules used by the\n * adapters package. The module maps features and packages to project tiers for\n * setup-time and runtime availability checks.\n */\n\n/**\n * Supported project pricing tiers in ascending order of capability.\n * Determines which features and packages are available to a project.\n */\nexport type ProjectTier = \"pronto\" | \"lancio\" | \"studio\";\n\n/**\n * Configuration object defining feature and package access per tier.\n * Features and packages are cumulative - higher tiers inherit from lower tiers.\n * This means:\n * - lancio includes all pronto features + lancio-specific features\n * - studio includes all pronto + lancio features + studio-specific features\n */\nexport interface TierGateConfig {\n  /** Set of features available for each tier (key examples: 'auth', 'payments', 'ai-chat') */\n  features: Record<ProjectTier, readonly string[]>;\n  /** NPM packages available for each tier (key examples: '@geenius/admin', '@geenius/payments') */\n  packages: Record<ProjectTier, readonly string[]>;\n}\n\n/** Readonly tier gating configuration used for frozen default tier records. */\nexport type ReadonlyTierGateConfig = Readonly<{\n  features: Readonly<Record<ProjectTier, readonly string[]>>;\n  packages: Readonly<Record<ProjectTier, readonly string[]>>;\n}>;\n\n/**\n * Result returned by requireTier() for feature availability checks.\n * The shape is intentionally explicit so UI code can render upgrade prompts\n * without throwing for normal \"not available on this tier\" outcomes.\n */\nexport interface TierGateResult {\n  /** True when the requested feature is available at the current tier. */\n  ok: boolean;\n  /** Current project tier that was checked. */\n  tier: ProjectTier;\n  /** Feature key that was requested. */\n  feature: string;\n  /** The first tier where the feature becomes available, when known. */\n  requiredTier?: ProjectTier;\n  /** Human-readable explanation for failed checks. */\n  reason?: string;\n}\n\nconst TIER_ORDER: readonly ProjectTier[] = [\"pronto\", \"lancio\", \"studio\"];\nconst TIER_LABELS: Record<ProjectTier, string> = {\n  pronto: \"Pronto\",\n  lancio: \"Lancio\",\n  studio: \"Studio\",\n};\n\nfunction freezeTierItems(items: readonly string[]): readonly string[] {\n  return Object.freeze([...items]);\n}\n\nfunction freezeTierRecord(\n  record: Record<ProjectTier, readonly string[]>,\n): Readonly<Record<ProjectTier, readonly string[]>> {\n  return Object.freeze({\n    pronto: freezeTierItems(record.pronto),\n    lancio: freezeTierItems(record.lancio),\n    studio: freezeTierItems(record.studio),\n  });\n}\n\nfunction freezeTierGateConfig(config: TierGateConfig): ReadonlyTierGateConfig {\n  return Object.freeze({\n    features: freezeTierRecord(config.features),\n    packages: freezeTierRecord(config.packages),\n  });\n}\n\n/**\n * Default tier gating configuration for geenius applications.\n * Defines all available features and packages organized by tier.\n *\n * Tier progression:\n * - pronto: Core features for rapid prototyping\n * - lancio: Production-ready with payments, admin, AI\n * - studio: Full-featured with advanced AI, analytics, teams, etc.\n */\nexport const DEFAULT_TIER_GATE: ReadonlyTierGateConfig = freezeTierGateConfig({\n  // Available features (UI-level components and functionality)\n  features: {\n    pronto: [\n      // Core auth and i18n\n      \"auth\",\n      \"i18n\",\n      \"ai-chat\",\n    ],\n    lancio: [\n      // Inherit pronto features\n      \"auth\",\n      \"i18n\",\n      \"ai-chat\",\n      // Add production features\n      \"admin\",\n      \"payments\",\n      \"blog\",\n      \"file-storage\",\n      \"ai-workflow\",\n      \"ai-embeddings\",\n    ],\n    studio: [\n      // Inherit all lower-tier features\n      \"auth\",\n      \"i18n\",\n      \"ai-chat\",\n      \"admin\",\n      \"payments\",\n      \"blog\",\n      \"file-storage\",\n      \"ai-workflow\",\n      \"ai-embeddings\",\n      // Add enterprise features\n      \"ai-magic\",\n      \"analytics\",\n      \"emails\",\n      \"teams\",\n      \"feature-flags\",\n      \"docs\",\n      \"monitoring\",\n      \"notifications\",\n      \"jobs\",\n      \"changelog\",\n      \"roadmap\",\n      \"waitlist\",\n      \"seo\",\n      \"onboarding\",\n      \"feedback\",\n      \"pricing\",\n      \"search\",\n    ],\n  },\n  // Available NPM packages for each tier\n  packages: {\n    pronto: [\n      // Core packages\n      \"@geenius/adapters\",\n      \"@geenius/auth\",\n      \"@geenius/i18n\",\n      \"@geenius/config\",\n      \"@geenius/errors\",\n      \"@geenius/logger\",\n      \"@geenius/env\",\n      \"@geenius/convex\",\n      \"@geenius/devtools\",\n      \"@geenius/perf\",\n      \"@geenius/ui\",\n    ],\n    lancio: [\n      // Inherit pronto packages\n      \"@geenius/adapters\",\n      \"@geenius/auth\",\n      \"@geenius/i18n\",\n      \"@geenius/config\",\n      \"@geenius/errors\",\n      \"@geenius/logger\",\n      \"@geenius/env\",\n      \"@geenius/convex\",\n      \"@geenius/devtools\",\n      \"@geenius/perf\",\n      \"@geenius/ui\",\n      // Add production packages\n      \"@geenius/admin\",\n      \"@geenius/db\",\n      \"@geenius/payments\",\n      \"@geenius/stripe\",\n      \"@geenius/blog\",\n      \"@geenius/file-storage\",\n      \"@geenius/ai\",\n    ],\n    studio: [\n      // Inherit all lower-tier packages\n      \"@geenius/adapters\",\n      \"@geenius/auth\",\n      \"@geenius/i18n\",\n      \"@geenius/config\",\n      \"@geenius/errors\",\n      \"@geenius/logger\",\n      \"@geenius/env\",\n      \"@geenius/convex\",\n      \"@geenius/devtools\",\n      \"@geenius/perf\",\n      \"@geenius/ui\",\n      \"@geenius/admin\",\n      \"@geenius/db\",\n      \"@geenius/payments\",\n      \"@geenius/stripe\",\n      \"@geenius/blog\",\n      \"@geenius/file-storage\",\n      \"@geenius/ai\",\n      // Add enterprise packages\n      \"@geenius/ai-magic\",\n      \"@geenius/ai-workflow\",\n      \"@geenius/analytics\",\n      \"@geenius/emails\",\n      \"@geenius/teams\",\n      \"@geenius/feature-flags\",\n      \"@geenius/docs\",\n      \"@geenius/monitoring\",\n      \"@geenius/notifications\",\n      \"@geenius/jobs\",\n      \"@geenius/changelog\",\n      \"@geenius/roadmap\",\n      \"@geenius/waitlist\",\n      \"@geenius/seo\",\n      \"@geenius/onboarding\",\n      \"@geenius/feedback\",\n      \"@geenius/pricing\",\n      \"@geenius/search\",\n      \"@geenius/agent\",\n    ],\n  },\n});\n\n/**\n * Require a feature for the current tier without throwing.\n *\n * @param tier - Current project tier\n * @param feature - Feature key to check\n * @param config - Optional tier-gate configuration, defaults to DEFAULT_TIER_GATE\n * @returns Result object describing whether the feature is available or which tier unlocks it\n */\nexport function requireTier(\n  tier: ProjectTier,\n  feature: string,\n  config: TierGateConfig = DEFAULT_TIER_GATE,\n): TierGateResult {\n  if (config.features[tier]?.includes(feature)) {\n    return { ok: true, tier, feature };\n  }\n\n  const requiredTier = TIER_ORDER.find((candidate) =>\n    config.features[candidate]?.includes(feature),\n  );\n\n  if (requiredTier) {\n    return {\n      ok: false,\n      tier,\n      feature,\n      requiredTier,\n      reason: `Feature \"${feature}\" requires the ${TIER_LABELS[requiredTier]} tier.`,\n    };\n  }\n\n  return {\n    ok: false,\n    tier,\n    feature,\n    reason: `Feature \"${feature}\" is not available in any configured tier.`,\n  };\n}\n\n/**\n * Check if a specific feature is available for a given tier.\n *\n * @param feature - The feature name to check (e.g., 'payments', 'ai-chat')\n * @param tier - The tier to check against\n * @returns True if the feature is available in this tier, false otherwise\n *\n * @example\n * ```ts\n * if (isFeatureAvailable('payments', 'lancio')) {\n *   // Show payment UI\n * }\n * ```\n */\nexport function isFeatureAvailable(\n  feature: string,\n  tier: ProjectTier,\n): boolean {\n  return DEFAULT_TIER_GATE.features[tier]?.includes(feature) ?? false;\n}\n\n/**\n * Check if a specific package is available for a given tier.\n *\n * @param pkg - The package name to check (e.g., '@geenius/payments')\n * @param tier - The tier to check against\n * @returns True if the package is available in this tier, false otherwise\n *\n * @example\n * ```ts\n * if (isPackageAvailable('@geenius/admin', 'lancio')) {\n *   // Package can be installed\n * }\n * ```\n */\nexport function isPackageAvailable(pkg: string, tier: ProjectTier): boolean {\n  return DEFAULT_TIER_GATE.packages[tier]?.includes(pkg) ?? false;\n}\n\n/**\n * Get all features available for a specific tier.\n * Includes features inherited from lower tiers.\n *\n * @param tier - The tier to get features for\n * @returns Array of available feature names\n *\n * @example\n * ```ts\n * const lancioFeatures = getAvailableFeatures('lancio');\n * logger.info(lancioFeatures); // ['auth', 'i18n', 'ai-chat', 'admin', ...]\n * ```\n */\nexport function getAvailableFeatures(tier: ProjectTier): string[] {\n  return [...(DEFAULT_TIER_GATE.features[tier] || [])];\n}\n\n/**\n * Get all packages available for a specific tier.\n * Includes packages inherited from lower tiers.\n *\n * @param tier - The tier to get packages for\n * @returns Array of available package names\n *\n * @example\n * ```ts\n * const studioPackages = getAvailablePackages('studio');\n * logger.info(studioPackages.length); // 35+\n * ```\n */\nexport function getAvailablePackages(tier: ProjectTier): string[] {\n  return [...(DEFAULT_TIER_GATE.packages[tier] || [])];\n}\n\n/**\n * Get the new features that would be unlocked by upgrading from one tier to another.\n * Useful for upgrade prompts and marketing copy.\n *\n * @param currentTier - The current tier the project is on\n * @param targetTier - The tier being upgraded to\n * @returns Array of feature names new in the target tier (not in current tier)\n *\n * @example\n * ```ts\n * const newFeatures = getUpgradeFeatures('pronto', 'lancio');\n * logger.info(newFeatures); // ['admin', 'payments', 'blog', ...]\n *\n * // Use in UI\n * showUpgradeDialog({\n *   title: 'Upgrade to Lancio',\n *   newFeatures: newFeatures,\n *   benefitsList: newFeatures.map(f => `Unlock ${f}`)\n * });\n * ```\n */\nexport function getUpgradeFeatures(\n  currentTier: ProjectTier,\n  targetTier: ProjectTier,\n): string[] {\n  const current = new Set(getAvailableFeatures(currentTier));\n  const target = getAvailableFeatures(targetTier);\n  // Return features in target that aren't in current\n  return target.filter((f) => !current.has(f));\n}\n"]}