{"version":3,"file":"remote.cjs","sources":["@gensx/storage/../../../../src/database/remote.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/only-throw-error */\n\nimport { readConfig } from \"@gensx/core\";\nimport { InArgs } from \"@libsql/client\";\n\nimport { USER_AGENT } from \"../utils/user-agent.js\";\nimport {\n  Database,\n  DatabaseBatchResult,\n  DatabaseError,\n  DatabaseInfo,\n  DatabaseInternalError,\n  DatabaseNetworkError,\n  DatabaseResult,\n  DatabaseStatement,\n  DatabaseStorage,\n  DeleteDatabaseResult,\n  EnsureDatabaseResult,\n} from \"./types.js\";\n\n/**\n * Base URL for the GenSX Console API\n */\nconst API_BASE_URL = \"https://api.gensx.com\";\n\n/**\n * Helper to convert between API errors and DatabaseErrors\n */\nfunction handleApiError(err: unknown, operation: string): never {\n  if (err instanceof DatabaseError) {\n    throw err;\n  }\n  if (err instanceof Error) {\n    throw new DatabaseNetworkError(\n      `Error during ${operation}: ${err.message}`,\n      err,\n    );\n  }\n  throw new DatabaseNetworkError(`Error during ${operation}: ${String(err)}`);\n}\n\n/**\n * Implementation of Database interface for remote cloud storage\n */\nexport class RemoteDatabase implements Database {\n  private databaseName: string;\n  private baseUrl: string;\n  private apiKey: string;\n  private org: string;\n  private project: string;\n  private environment: string;\n\n  constructor(\n    databaseName: string,\n    baseUrl: string,\n    apiKey: string,\n    org: string,\n    project: string,\n    environment: string,\n  ) {\n    this.databaseName = encodeURIComponent(databaseName);\n    this.baseUrl = baseUrl;\n    this.apiKey = apiKey;\n    this.org = org;\n    this.project = project;\n    this.environment = environment;\n  }\n\n  async execute(sql: string, params?: InArgs): Promise<DatabaseResult> {\n    try {\n      const response = await fetch(\n        `${this.baseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database/${this.databaseName}/execute`,\n        {\n          method: \"POST\",\n          headers: {\n            Authorization: `Bearer ${this.apiKey}`,\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": USER_AGENT,\n          },\n          body: JSON.stringify({\n            sql,\n            params,\n          }),\n        },\n      );\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to execute SQL: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as DatabaseResult;\n      return data;\n    } catch (err) {\n      throw handleApiError(err, \"execute\");\n    }\n  }\n\n  async batch(statements: DatabaseStatement[]): Promise<DatabaseBatchResult> {\n    try {\n      const response = await fetch(\n        `${this.baseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database/${this.databaseName}/batch`,\n        {\n          method: \"POST\",\n          headers: {\n            Authorization: `Bearer ${this.apiKey}`,\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": USER_AGENT,\n          },\n          body: JSON.stringify({ statements }),\n        },\n      );\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to execute batch: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as DatabaseBatchResult;\n      return data;\n    } catch (err) {\n      throw handleApiError(err, \"batch\");\n    }\n  }\n\n  async executeMultiple(sql: string): Promise<DatabaseBatchResult> {\n    try {\n      const response = await fetch(\n        `${this.baseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database/${this.databaseName}/multiple`,\n        {\n          method: \"POST\",\n          headers: {\n            Authorization: `Bearer ${this.apiKey}`,\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": USER_AGENT,\n          },\n          body: JSON.stringify({ sql }),\n        },\n      );\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to execute multiple: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as DatabaseBatchResult;\n      return data;\n    } catch (err) {\n      throw handleApiError(err, \"executeMultiple\");\n    }\n  }\n\n  async migrate(sql: string): Promise<DatabaseBatchResult> {\n    try {\n      const response = await fetch(\n        `${this.baseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database/${this.databaseName}/migrate`,\n        {\n          method: \"POST\",\n          headers: {\n            Authorization: `Bearer ${this.apiKey}`,\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": USER_AGENT,\n          },\n          body: JSON.stringify({ sql }),\n        },\n      );\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to execute migration: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as DatabaseBatchResult;\n      return data;\n    } catch (err) {\n      throw handleApiError(err, \"migrate\");\n    }\n  }\n\n  async getInfo(): Promise<DatabaseInfo> {\n    try {\n      const response = await fetch(\n        `${this.baseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database/${this.databaseName}/info`,\n        {\n          method: \"GET\",\n          headers: {\n            Authorization: `Bearer ${this.apiKey}`,\n            \"User-Agent\": USER_AGENT,\n          },\n        },\n      );\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to get database info: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as DatabaseInfo;\n\n      // Convert date string to Date object\n      const { lastModified, ...rest } = data;\n      return {\n        ...rest,\n        lastModified: new Date(lastModified as unknown as string),\n      };\n    } catch (err) {\n      throw handleApiError(err, \"getInfo\");\n    }\n  }\n\n  close() {\n    // No-op for remote database - connection is managed by API\n    return;\n  }\n}\n\n/**\n * Implementation of DatabaseStorage interface for remote cloud storage\n */\nexport class RemoteDatabaseStorage implements DatabaseStorage {\n  private apiKey: string;\n  private apiBaseUrl: string;\n  private org: string;\n  private project: string;\n  private environment: string;\n  private databases: Map<string, RemoteDatabase> = new Map<\n    string,\n    RemoteDatabase\n  >();\n\n  constructor(project: string, environment: string) {\n    this.project = project;\n    this.environment = environment;\n\n    const config = readConfig();\n\n    this.apiKey = process.env.GENSX_API_KEY ?? config.api?.token ?? \"\";\n    if (!this.apiKey) {\n      throw new Error(\n        \"GENSX_API_KEY environment variable must be set for cloud storage\",\n      );\n    }\n\n    this.org = process.env.GENSX_ORG ?? config.api?.org ?? \"\";\n    if (!this.org) {\n      throw new Error(\n        \"Organization ID must be provided via props or GENSX_ORG environment variable\",\n      );\n    }\n\n    this.apiBaseUrl =\n      process.env.GENSX_API_BASE_URL ?? config.api?.baseUrl ?? API_BASE_URL;\n  }\n\n  getDatabase(name: string): Database {\n    if (!this.databases.has(name)) {\n      this.databases.set(\n        name,\n        new RemoteDatabase(\n          name,\n          this.apiBaseUrl,\n          this.apiKey,\n          this.org,\n          this.project,\n          this.environment,\n        ),\n      );\n    }\n\n    return this.databases.get(name)!;\n  }\n\n  async listDatabases(options?: { limit?: number; cursor?: string }): Promise<{\n    databases: { name: string; createdAt: Date }[];\n    nextCursor?: string;\n  }> {\n    try {\n      const url = new URL(\n        `${this.apiBaseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database`,\n      );\n\n      if (options?.limit) {\n        url.searchParams.append(\"limit\", options.limit.toString());\n      }\n\n      if (options?.cursor) {\n        url.searchParams.append(\"cursor\", options.cursor);\n      }\n\n      const response = await fetch(url.toString(), {\n        method: \"GET\",\n        headers: {\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n      });\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to list databases: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as {\n        databases: { name: string; createdAt: string }[];\n        nextCursor?: string;\n      };\n\n      return {\n        databases: data.databases.map((db) => ({\n          name: decodeURIComponent(db.name),\n          createdAt: new Date(db.createdAt),\n        })),\n        ...(data.nextCursor && { nextCursor: data.nextCursor }),\n      };\n    } catch (err) {\n      throw handleApiError(err, \"listDatabases\");\n    }\n  }\n\n  async ensureDatabase(name: string): Promise<EnsureDatabaseResult> {\n    try {\n      const response = await fetch(\n        `${this.apiBaseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database/${encodeURIComponent(\n          name,\n        )}/ensure`,\n        {\n          method: \"POST\",\n          headers: {\n            Authorization: `Bearer ${this.apiKey}`,\n            \"Content-Type\": \"application/json\",\n            \"User-Agent\": USER_AGENT,\n          },\n        },\n      );\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to ensure database: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as EnsureDatabaseResult;\n\n      // Make sure the database is in our cache\n      if (!this.databases.has(name)) {\n        this.getDatabase(name);\n      }\n\n      return data;\n    } catch (err) {\n      if (err instanceof DatabaseError) {\n        throw err;\n      }\n      throw new DatabaseNetworkError(\n        `Error during ensureDatabase operation: ${String(err)}`,\n        err as Error,\n      );\n    }\n  }\n\n  hasEnsuredDatabase(name: string): boolean {\n    return this.databases.has(name);\n  }\n\n  async deleteDatabase(name: string): Promise<DeleteDatabaseResult> {\n    try {\n      const response = await fetch(\n        `${this.apiBaseUrl}/org/${this.org}/projects/${this.project}/environments/${this.environment}/database/${encodeURIComponent(\n          name,\n        )}`,\n        {\n          method: \"DELETE\",\n          headers: {\n            Authorization: `Bearer ${this.apiKey}`,\n            \"User-Agent\": USER_AGENT,\n          },\n        },\n      );\n\n      if (!response.ok) {\n        throw new DatabaseInternalError(\n          `Failed to delete database: ${response.statusText}`,\n        );\n      }\n\n      const data = (await response.json()) as DeleteDatabaseResult;\n\n      // Remove database from caches if it was successfully deleted\n      if (data.deleted) {\n        if (this.databases.has(name)) {\n          const db = this.databases.get(name);\n          if (db) {\n            db.close();\n            this.databases.delete(name);\n          }\n        }\n      }\n\n      return data;\n    } catch (err) {\n      if (err instanceof DatabaseError) {\n        throw err;\n      }\n      throw new DatabaseNetworkError(\n        `Error during deleteDatabase operation: ${String(err)}`,\n        err as Error,\n      );\n    }\n  }\n}\n"],"names":["DatabaseError","DatabaseNetworkError","USER_AGENT","DatabaseInternalError","readConfig"],"mappings":"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"}