{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/api-token.ts","../src/organization.ts","../src/location.ts","../src/group.ts","../src/database.ts","../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import \"whatwg-fetch\";\n\nexport { createClient } from \"./client\";\n\nexport type {\n  ApiToken,\n  ApiTokenWithJWT,\n  RevokedApiToken,\n  ApiTokenValidation,\n} from \"./api-token\";\nexport type { TursoClientError } from \"./client\";\nexport type { TursoConfig, TursoToken } from \"./config\";\nexport type {\n  Database,\n  CreatedDatabase,\n  DatabaseUsage,\n  InstanceUsages,\n  TotalUsage,\n  DatabaseInstance,\n  DeletedDatabase,\n  DatabaseToken,\n} from \"./database\";\nexport type { Group, ExtensionType, GroupToken } from \"./group\";\nexport type { LocationKeys, Location, ClosestLocation } from \"./location\";\nexport type {\n  Organization,\n  OrganizationMember,\n  OrganizationInvite,\n  OrganizationInviteCreated,\n  Invoice,\n  OrganizationMemberRole,\n  OrganizationAddedMember,\n  OrganizationRemovedMember,\n} from \"./organization\";\n","/**\n * API token used to authenticate requests. Either a static string or a factory\n * that resolves one on demand (e.g. to refresh short-lived tokens).\n */\nexport type TursoToken = string | (() => Promise<string>);\n\nexport interface TursoConfig {\n  /**\n   * Organization slug. Provide either `org` or `orgId`.\n   */\n  org?: string;\n  /**\n   * Organization id. Can be provided instead of the organization slug (`org`).\n   * Takes precedence over `org` when both are set.\n   *\n   * Requires v3 of the Turso API.\n   */\n  orgId?: string;\n  token: TursoToken;\n  baseUrl?: string;\n}\n\n/**\n * Resolves the organization identifier used in request paths, preferring the\n * explicit `orgId` over the `org` slug. Throws if neither is provided.\n */\nexport function resolveOrganization(config: TursoConfig): string {\n  const organization = config.orgId || config.org;\n  if (!organization) {\n    throw new Error(\n      \"You must provide an organization slug (org) or id (orgId)\"\n    );\n  }\n  return organization;\n}\n\n/**\n * Resolves the API token, invoking the factory when a function is provided.\n */\nexport async function resolveToken(config: TursoConfig): Promise<string> {\n  return typeof config.token === \"function\"\n    ? await config.token()\n    : config.token;\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface ApiToken {\n  id: string;\n  name: string;\n}\n\nexport interface ApiTokenWithJWT extends ApiToken {\n  token: string;\n}\n\nexport interface RevokedApiToken {\n  token: string;\n}\n\nexport interface ApiTokenValidation {\n  valid: boolean;\n  expiry: number;\n}\n\nexport class ApiTokenClient {\n  constructor(private config: TursoConfig) {}\n\n  async list(): Promise<ApiToken[]> {\n    const response = await TursoClient.request<{ tokens: ApiToken[] }>(\n      \"auth/api-tokens\",\n      this.config\n    );\n\n    return response.tokens ?? [];\n  }\n\n  async create(name: string): Promise<ApiTokenWithJWT> {\n    const response = await TursoClient.request<ApiTokenWithJWT>(\n      `auth/api-tokens/${name}`,\n      this.config,\n      {\n        method: \"POST\",\n        headers: {\n          \"content-type\": \"application/json\",\n        },\n      }\n    );\n\n    return response;\n  }\n\n  async revoke(name: string): Promise<RevokedApiToken> {\n    const response = await TursoClient.request<RevokedApiToken>(\n      `auth/api-tokens/${name}`,\n      this.config,\n      {\n        method: \"DELETE\",\n      }\n    );\n\n    return response;\n  }\n\n  async validate(token: string): Promise<ApiTokenValidation> {\n    const response = await TursoClient.request<{ exp: number }>(\n      \"auth/api-tokens/validate\",\n      this.config,\n      {\n        headers: {\n          Authorization: `Bearer ${token}`,\n        },\n      }\n    );\n\n    const currentTime = Math.floor(Date.now() / 1000);\n\n    return {\n      valid: response.exp !== -1 && response.exp > currentTime,\n      expiry: response.exp,\n    };\n  }\n}\n","import { TursoConfig, resolveOrganization } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Organization {\n  name: string;\n  slug: string;\n  type: \"personal\" | \"team\";\n  overages: boolean;\n  blocked_reads: boolean;\n  blocked_writes: boolean;\n}\n\nexport interface OrganizationMember {\n  role: \"owner\" | \"admin\" | \"member\";\n  username: string;\n  email: string;\n}\n\nexport interface OrganizationInvite {\n  id: number;\n  email: string;\n  role: \"admin\" | \"member\" | \"viewer\";\n  token: string;\n  created_at: string;\n}\n\nexport interface OrganizationInviteCreated {\n  email: string;\n  role: \"admin\" | \"member\" | \"viewer\";\n  organization: string;\n  token: string;\n}\n\nexport interface Invoice {\n  invoice_number: string;\n  amount_due: string;\n  due_date: string;\n  paid_at: string;\n  payment_failed_at: string;\n  invoice_pdf: string;\n}\n\nexport type OrganizationMemberRole = \"admin\" | \"member\";\n\nexport interface OrganizationAddedMember {\n  member: string;\n  role: OrganizationMemberRole;\n}\n\nexport interface OrganizationRemovedMember {\n  member: string;\n}\n\nexport class OrganizationClient {\n  constructor(private config: TursoConfig) {}\n\n  private get org(): string {\n    return resolveOrganization(this.config);\n  }\n\n  async list(): Promise<Organization[]> {\n    const response = await TursoClient.request<{\n      organizations: Organization[];\n    }>(\"organizations\", this.config);\n\n    return response.organizations ?? [];\n  }\n\n  async update(options: { overages: boolean }): Promise<Organization> {\n    const response = await TursoClient.request<{\n      organization: Organization;\n    }>(`organizations/${this.org}`, this.config, {\n      method: \"PATCH\",\n      body: JSON.stringify(options),\n    });\n\n    return response.organization ?? null;\n  }\n\n  async delete(): Promise<void> {\n    return TursoClient.request(\n      `organizations/${this.org}`,\n      this.config,\n      {\n        method: \"DELETE\",\n      }\n    );\n  }\n\n  async members(): Promise<OrganizationMember[]> {\n    const response = await TursoClient.request<{\n      members: OrganizationMember[];\n    }>(`organizations/${this.org}/members`, this.config);\n\n    return response.members ?? [];\n  }\n\n  async addMember(\n    username: string,\n    role?: \"admin\" | \"member\"\n  ): Promise<OrganizationAddedMember> {\n    return TursoClient.request(\n      `organizations/${this.org}/members/${username}`,\n      this.config,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          member: username,\n          role: role ? role : \"member\",\n        }),\n      }\n    );\n  }\n\n  async removeMember(username: string): Promise<OrganizationRemovedMember> {\n    return TursoClient.request(\n      `organizations/${this.org}/members/${username}`,\n      this.config,\n      {\n        method: \"DELETE\",\n      }\n    );\n  }\n\n  async listInvites(): Promise<OrganizationInvite[]> {\n    const response = await TursoClient.request<{\n      invites: OrganizationInvite[];\n    }>(\n      `../v2/organizations/${this.org}/invites`,\n      this.config\n    );\n\n    return response.invites ?? [];\n  }\n\n  async inviteUser(\n    email: string,\n    role?: OrganizationMemberRole\n  ): Promise<OrganizationInviteCreated> {\n    const response = await TursoClient.request<{\n      invited: OrganizationInviteCreated;\n    }>(\n      `../v2/organizations/${this.org}/invites`,\n      this.config,\n      {\n        method: \"POST\",\n        body: JSON.stringify({ email, role: role ? role : \"member\" }),\n      }\n    );\n\n    return response.invited;\n  }\n\n  async deleteInvite(email: string): Promise<void> {\n    await TursoClient.request(\n      `../v2/organizations/${this.org}/invites/${email}`,\n      this.config,\n      {\n        method: \"DELETE\",\n      }\n    );\n  }\n\n  async invoices(): Promise<Invoice[]> {\n    const response = await TursoClient.request<{\n      invoices: Invoice[];\n    }>(`organizations/${this.org}/invoices`, this.config);\n\n    return response.invoices ?? [];\n  }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport type LocationKeys = {\n  ams: string;\n  arn: string;\n  bog: string;\n  bos: string;\n  cdg: string;\n  den: string;\n  dfw: string;\n  ewr: string;\n  fra: string;\n  gdl: string;\n  gig: string;\n  gru: string;\n  hkg: string;\n  iad: string;\n  jnb: string;\n  lax: string;\n  lhr: string;\n  mad: string;\n  mia: string;\n  nrt: string;\n  ord: string;\n  otp: string;\n  qro: string;\n  scl: string;\n  sea: string;\n  sin: string;\n  sjc: string;\n  syd: string;\n  waw: string;\n  yul: string;\n  yyz: string;\n  [key: string]: string;\n};\n\nexport type Location = {\n  [K in keyof LocationKeys]: { code: K; description: LocationKeys[K] };\n}[keyof LocationKeys];\n\nexport interface ClosestLocation {\n  server: keyof LocationKeys;\n  client: keyof LocationKeys;\n}\n\nexport class LocationClient {\n  constructor(private config: TursoConfig) {}\n\n  async list(): Promise<Location[]> {\n    const response = await TursoClient.request<{\n      locations: LocationKeys;\n    }>(\"locations\", this.config);\n\n    if (!response.locations) {\n      return [];\n    }\n\n    return Object.entries(response.locations).map(([code, description]) => ({\n      code,\n      description,\n    }));\n  }\n\n  async closest(): Promise<ClosestLocation> {\n    return fetch(\"https://region.turso.io/\").then((res) => res.json());\n  }\n}\n","import { TursoConfig, resolveOrganization } from \"./config\";\nimport { LocationKeys } from \"./location\";\nimport { TursoClient } from \"./client\";\nimport type { Database } from \"./database\";\n\nexport interface Group {\n  locations: Array<keyof LocationKeys>;\n  name: string;\n  primary: keyof LocationKeys;\n}\n\nexport type ExtensionType =\n  | \"vector\"\n  | \"vec\"\n  | \"crypto\"\n  | \"fuzzy\"\n  | \"math\"\n  | \"stats\"\n  | \"text\"\n  | \"unicode\"\n  | \"uuid\"\n  | \"regexp\";\n\nexport interface GroupToken {\n  jwt: string;\n}\n\nexport class GroupClient {\n  constructor(private config: TursoConfig) {}\n\n  private get org(): string {\n    return resolveOrganization(this.config);\n  }\n\n  async list(): Promise<Group[]> {\n    const response = await TursoClient.request<{ groups: Group[] }>(\n      `organizations/${this.org}/groups`,\n      this.config\n    );\n\n    return response.groups ?? [];\n  }\n\n  async get(name: string): Promise<Group> {\n    const response = await TursoClient.request<{ group: Group }>(\n      `organizations/${this.org}/groups/${name}`,\n      this.config\n    );\n\n    return response.group;\n  }\n\n  async create(\n    name: string,\n    location: keyof LocationKeys,\n    options?: { extensions?: Array<ExtensionType> | \"all\" }\n  ): Promise<Group> {\n    const response = await TursoClient.request<{ group: Group }>(\n      `organizations/${this.org}/groups`,\n      this.config,\n      {\n        method: \"POST\",\n        headers: {\n          \"content-type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          name,\n          location,\n          ...options,\n        }),\n      }\n    );\n\n    return response.group;\n  }\n\n  async delete(name: string): Promise<Group> {\n    const response = await TursoClient.request<{ group: Group }>(\n      `organizations/${this.org}/groups/${name}`,\n      this.config,\n      {\n        method: \"DELETE\",\n      }\n    );\n\n    return response.group;\n  }\n\n  /**\n   * @deprecated Turso Cloud deprecated edge replicas\n   */\n  async addLocation(\n    groupName: string,\n    location: keyof LocationKeys\n  ): Promise<Group> {\n    const response = await TursoClient.request<{ group: Group }>(\n      `organizations/${this.org}/groups/${groupName}/locations/${location}`,\n      this.config,\n      {\n        method: \"POST\",\n      }\n    );\n\n    return response.group;\n  }\n\n  /**\n   * @deprecated Turso Cloud deprecated edge replicas\n   */\n  async removeLocation(\n    groupName: string,\n    location: keyof LocationKeys\n  ): Promise<Group> {\n    const response = await TursoClient.request<{ group: Group }>(\n      `organizations/${this.org}/groups/${groupName}/locations/${location}`,\n      this.config,\n      {\n        method: \"DELETE\",\n      }\n    );\n\n    return response.group;\n  }\n\n  /**\n   * Creates a token for a group\n   * @param groupName The name of the group\n   * @param options Token creation options\n   * @param options.expiration Token expiration\n   * @param options.authorization Token authorization level\n   * @param options.permissions - @deprecated This parameter is deprecated and will be removed in a future version\n   */\n  async createToken(\n    groupName: string,\n    options?: {\n      expiration?: string;\n      authorization?: \"read-only\" | \"full-access\";\n      permissions?: {\n        read_attach: { databases: Database[\"name\"][] };\n      };\n    }\n  ): Promise<GroupToken> {\n    const queryParams = new URLSearchParams();\n\n    if (options?.expiration) {\n      queryParams.set(\"expiration\", options.expiration);\n    }\n\n    if (options?.authorization) {\n      queryParams.set(\"authorization\", options.authorization);\n    }\n\n    const response = await TursoClient.request<GroupToken>(\n      `organizations/${this.org}/groups/${groupName}/auth/tokens?${queryParams}`,\n      this.config,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          permissions: {\n            read_attach: {\n              databases: options?.permissions?.read_attach?.databases ?? [],\n            },\n          },\n        }),\n      }\n    );\n\n    return response;\n  }\n\n  async rotateTokens(groupName: string): Promise<void> {\n    return await TursoClient.request<void>(\n      `organizations/${this.org}/groups/${groupName}/auth/rotate`,\n      this.config,\n      {\n        method: \"POST\",\n      }\n    );\n  }\n}\n","import { LocationKeys } from \"./location\";\nimport { TursoConfig, resolveOrganization } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Database {\n  name: string;\n  id: string;\n  hostname: string;\n  regions?: Array<keyof LocationKeys>;\n  primaryRegion?: keyof LocationKeys;\n  type: string;\n  version: string;\n  group?: string;\n  sleeping: boolean;\n  archived: boolean;\n  allow_attach: boolean;\n  block_reads: boolean;\n  block_writes: boolean;\n  schema?: string;\n  is_schema: boolean;\n}\n\nexport interface ApiDatabaseResponse\n  extends Database,\n  ApiCreateDatabaseResponse { }\n\nexport interface ApiCreateDatabaseResponse {\n  DbId: string;\n  Hostname: string;\n  Name: string;\n}\n\nexport interface CreatedDatabase {\n  name: string;\n  id: string;\n  hostname: string;\n}\n\ninterface DatabaseInstanceUsageDetail {\n  rows_read: number;\n  rows_written: number;\n  storage_bytes: number;\n}\n\ninterface DatabaseInstanceUsage {\n  uuid: string;\n  usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface DatabaseUsage {\n  uuid: string;\n  instances: DatabaseInstanceUsage[];\n  usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface InstanceUsages {\n  [instanceUuid: string]: DatabaseInstanceUsageDetail;\n}\n\nexport interface TotalUsage {\n  rows_read: number;\n  rows_written: number;\n  storage_bytes: number;\n}\n\nexport interface DatabaseInstance {\n  uuid: string;\n  name: keyof LocationKeys;\n  type: \"primary\" | \"replica\";\n  region: keyof LocationKeys;\n  hostname: string;\n}\n\nexport interface DeletedDatabase {\n  database: string;\n}\n\nexport interface DatabaseToken {\n  jwt: string;\n}\n\nexport type EncryptionCipher =\n  | \"aes256gcm\"\n  | \"aes128gcm\"\n  | \"chacha20poly1305\"\n  | \"aegis128l\"\n  | \"aegis128x2\"\n  | \"aegis128x4\"\n  | \"aegis256\"\n  | \"aegis256x2\"\n  | \"aegis256x4\";\n\nexport interface RemoteEncryption {\n  /**\n   * Base64-encoded encryption key. Key size depends on the cipher: 32 bytes\n   * for aes256gcm, chacha20poly1305 and aegis256 variants; 16 bytes for\n   * aes128gcm and aegis128l variants.\n   */\n  encryption_key: string;\n  encryption_cipher: EncryptionCipher;\n}\n\ntype MultiDBSchemaOptions =\n  | { is_schema: boolean; schema?: never }\n  | { is_schema?: never; schema: string }\n  | {};\n\nfunction hasIsSchemaOption(\n  options: any\n): options is { is_schema: boolean; schema?: never } {\n  return options !== undefined && options.is_schema !== undefined;\n}\n\nfunction hasSchemaOption(\n  options: any\n): options is { is_schema?: never; schema: string } {\n  return options !== undefined && options.schema !== undefined;\n}\n\n/**\n * Methods that operate on a single database take a `dbName` positional\n * argument that identifies the database in the request path. On v1/v2 of the\n * Turso API this is the database name; on v3 it is the database id.\n */\nexport class DatabaseClient {\n  constructor(private config: TursoConfig) { }\n\n  private get org(): string {\n    return resolveOrganization(this.config);\n  }\n\n  async list(options?: {\n    schema?: string;\n    group?: string;\n    type?: \"schema\";\n  }): Promise<Database[]> {\n    const queryParams = new URLSearchParams(\n      Object.entries({\n        schema: options?.schema,\n        group: options?.group,\n        type: options?.type,\n      }).filter(([_, value]) => value !== undefined) as [string, string][]\n    );\n\n    const url = `organizations/${this.org}/databases${queryParams.toString() ? `?${queryParams.toString()}` : \"\"}`;\n\n    const response = await TursoClient.request<{\n      databases: ApiDatabaseResponse[];\n    }>(url, this.config);\n\n    return (response.databases ?? []).map((db) => this.formatResponse(db));\n  }\n\n  async get(dbName: string): Promise<Database> {\n    const response = await TursoClient.request<{\n      database: ApiDatabaseResponse;\n    }>(`organizations/${this.org}/databases/${dbName}`, this.config);\n\n    return this.formatResponse(response.database);\n  }\n\n  async create(\n    dbName: string,\n    options?: {\n      image?: \"latest\" | \"canary\";\n      /** Name of the group where the database should be created. */\n      group?: string;\n      /**\n       * Id of the group where the database should be created. Mutually\n       * exclusive with `group`. Requires v3 of the Turso API.\n       */\n      groupId?: string;\n      seed?: {\n        type: \"database\" | \"dump\";\n        name?: string;\n        url?: string;\n        timestamp?: string | Date;\n      };\n      size_limit?: string;\n      remote_encryption?: RemoteEncryption;\n      /** When true, provisions the database using TursoDB. */\n      useTursoDb?: boolean;\n    } & MultiDBSchemaOptions\n  ): Promise<CreatedDatabase> {\n    if (hasIsSchemaOption(options) && hasSchemaOption(options)) {\n      throw new Error(\"'is_schema' and 'schema' cannot both be provided\");\n    }\n\n    if (options?.group !== undefined && options?.groupId !== undefined) {\n      throw new Error(\"'group' and 'groupId' cannot both be provided\");\n    }\n\n    if (options?.seed) {\n      if (options.seed.type === \"database\" && !options.seed.name) {\n        throw new Error(\"Seed name is required when type is 'database'\");\n      }\n      if (options.seed.type === \"dump\" && !options.seed.url) {\n        throw new Error(\"Seed URL is required when type is 'dump'\");\n      }\n    }\n\n    if (options?.seed?.timestamp) {\n      options.seed.timestamp = this.formatDateParameter(options.seed.timestamp);\n    }\n\n    const { groupId, useTursoDb, ...rest } = options ?? {};\n\n    const response = await TursoClient.request<{\n      database: ApiCreateDatabaseResponse;\n    }>(`organizations/${this.org}/databases`, this.config, {\n      method: \"POST\",\n      headers: {\n        \"content-type\": \"application/json\",\n      },\n      body: JSON.stringify({\n        name: dbName,\n        ...rest,\n        ...(groupId !== undefined ? { group_id: groupId } : {}),\n        ...(useTursoDb !== undefined ? { use_tursodb: useTursoDb } : {}),\n      }),\n    });\n\n    return this.formatCreateResponse(response.database);\n  }\n\n  async updateVersion(dbName: string): Promise<void> {\n    return await TursoClient.request(\n      `organizations/${this.org}/databases/${dbName}/update`,\n      this.config,\n      {\n        method: \"POST\",\n      }\n    );\n  }\n\n  async delete(dbName: string) {\n    const response = await TursoClient.request<DeletedDatabase>(\n      `organizations/${this.org}/databases/${dbName}`,\n      this.config,\n      {\n        method: \"DELETE\",\n      }\n    );\n\n    return response;\n  }\n\n  async listInstances(dbName: string): Promise<DatabaseInstance[]> {\n    const response = await TursoClient.request<{\n      instances: DatabaseInstance[];\n    }>(\n      `organizations/${this.org}/databases/${dbName}/instances`,\n      this.config\n    );\n\n    return response.instances ?? [];\n  }\n\n  async getInstance(\n    dbName: string,\n    instanceName: keyof LocationKeys\n  ): Promise<DatabaseInstance> {\n    const response = await TursoClient.request<{\n      instance: DatabaseInstance;\n    }>(\n      `organizations/${this.org}/databases/${dbName}/instances/${instanceName}`,\n      this.config\n    );\n\n    return response.instance ?? null;\n  }\n\n  async createToken(\n    dbName: string,\n    options?: {\n      expiration?: string;\n      authorization?: \"read-only\" | \"full-access\";\n      permissions?: {\n        read_attach: { databases: Database[\"name\"][] };\n      };\n    }\n  ): Promise<DatabaseToken> {\n    const queryParams = new URLSearchParams();\n\n    if (options?.expiration) {\n      queryParams.set(\"expiration\", options.expiration);\n    }\n\n    if (options?.authorization) {\n      queryParams.set(\"authorization\", options.authorization);\n    }\n\n    const response = await TursoClient.request<DatabaseToken>(\n      `organizations/${this.org}/databases/${dbName}/auth/tokens?${queryParams}`,\n      this.config,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          permissions: {\n            read_attach: {\n              databases: options?.permissions?.read_attach?.databases ?? [],\n            },\n          },\n        }),\n      }\n    );\n\n    return response;\n  }\n\n  async rotateTokens(dbName: string): Promise<void> {\n    return await TursoClient.request<void>(\n      `organizations/${this.org}/databases/${dbName}/auth/rotate`,\n      this.config,\n      {\n        method: \"POST\",\n      }\n    );\n  }\n\n  async usage(\n    dbName: string,\n    options?: { from?: Date | string; to?: Date | string }\n  ): Promise<DatabaseUsage> {\n    const queryParams = new URLSearchParams();\n\n    if (options?.from) {\n      queryParams.set(\"from\", this.formatDateParameter(options.from));\n    }\n\n    if (options?.to) {\n      queryParams.set(\"to\", this.formatDateParameter(options.to));\n    }\n\n    const response = await TursoClient.request<{\n      database: DatabaseUsage;\n      instances: InstanceUsages;\n      total: TotalUsage;\n    }>(\n      `organizations/${this.org}/databases/${dbName}/usage?${queryParams}`,\n      this.config\n    );\n\n    return response.database;\n  }\n\n  private formatDateParameter(date: Date | string): string {\n    return date instanceof Date ? date.toISOString() : date;\n  }\n\n  private formatResponse(db: ApiDatabaseResponse): Database {\n    return {\n      name: db.Name,\n      id: db.DbId,\n      hostname: db.Hostname,\n      regions: db.regions,\n      primaryRegion: db.primaryRegion,\n      type: db.type,\n      version: db.version,\n      group: db.group,\n      sleeping: db.sleeping,\n      archived: db.archived,\n      allow_attach: db.allow_attach,\n      block_reads: db.block_reads,\n      block_writes: db.block_writes,\n      schema: db.schema,\n      is_schema: db.is_schema,\n    };\n  }\n\n  private formatCreateResponse(db: ApiCreateDatabaseResponse): CreatedDatabase {\n    return {\n      id: db.DbId,\n      hostname: db.Hostname,\n      name: db.Name,\n    };\n  }\n}\n","import { TursoConfig, resolveOrganization, resolveToken } from \"./config\";\nimport { ApiTokenClient } from \"./api-token\";\nimport { OrganizationClient } from \"./organization\";\nimport { LocationClient } from \"./location\";\nimport { GroupClient } from \"./group\";\nimport { DatabaseClient } from \"./database\";\n\ninterface ApiErrorResponse {\n  error: string;\n}\n\ninterface AdditionalInfo {\n  status?: number;\n}\n\nexport class TursoClientError extends Error {\n  status?: number;\n  constructor(message: string, additionalInfo?: AdditionalInfo) {\n    super(message);\n    this.name = \"TursoClientError\";\n    this.status = additionalInfo?.status;\n  }\n}\n\nexport class TursoClient {\n  private config: TursoConfig;\n  public apiTokens: ApiTokenClient;\n  public organizations: OrganizationClient;\n  public locations: LocationClient;\n  public groups: GroupClient;\n  public databases: DatabaseClient;\n\n  constructor(config: TursoConfig) {\n    if (!config.token) {\n      throw new Error(\"You must provide an API token\");\n    }\n\n    this.config = {\n      baseUrl: \"https://api.turso.tech/v1/\",\n      ...config,\n    };\n\n    // Ensure an organization slug or id is available before any request.\n    resolveOrganization(this.config);\n\n    this.apiTokens = new ApiTokenClient(this.config);\n    this.organizations = new OrganizationClient(this.config);\n    this.locations = new LocationClient(this.config);\n    this.groups = new GroupClient(this.config);\n    this.databases = new DatabaseClient(this.config);\n  }\n\n  static async request<T>(\n    url: string,\n    config: TursoConfig,\n    options: RequestInit = {}\n  ) {\n    const token = await resolveToken(config);\n\n    const response = await fetch(new URL(url, config.baseUrl), {\n      ...options,\n      headers: {\n        ...options.headers,\n        Authorization: `Bearer ${token}`,\n        \"User-Agent\": \"@tursodatabase/api\",\n      },\n    });\n\n    if (!response.ok) {\n      const errorResponse = (await response.json().catch(() => {\n        throw new Error(`Something went wrong! Status ${response.status}`);\n      })) as ApiErrorResponse;\n\n      throw new TursoClientError(errorResponse.error, {\n        status: response.status,\n      });\n    }\n\n    return response.json() as T;\n  }\n}\n\nexport function createClient(config: TursoConfig): TursoClient {\n  return new TursoClient(config);\n}\n"]}