Ctrl K
ComunidadGuías…

scripts/bunny-regions.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env -S deno run --allow-net --allow-env
/**
 * Diagnostic script: prints the storage zones and database regions that
 * Bunny will accept when creating a libSQL database.
 *
 * Hits the same endpoint the `bunny db create` CLI uses internally
 * (GET /database/v1/config) so the values match what the API will
 * actually accept in a create-database request body.
 *
 * Usage: BUNNY_API_KEY=... deno run --allow-net --allow-env scripts/bunny-regions.ts
 */
import { keepAndTake } from "#fp";

interface BunnyRegion {
  group: string;
  id: string;
  name: string;
}

interface BunnyConfig {
  primary_regions: BunnyRegion[];
  replica_regions: BunnyRegion[];
  storage_region_available: BunnyRegion[];
}

const apiKey = Deno.env.get("BUNNY_API_KEY");
if (!apiKey) {
  console.error("BUNNY_API_KEY is required");
  Deno.exit(1);
}

const res = await fetch("https://api.bunny.net/database/v1/config", {
  headers: { AccessKey: apiKey },
});

if (!res.ok) {
  console.error(`Bunny config endpoint failed: ${res.status}`);
  console.error(await res.text());
  Deno.exit(1);
}

const config: BunnyConfig = await res.json();

const fmt = (rs: BunnyRegion[]) =>
  rs
    .map((r) => `  ${r.id.padEnd(12)} ${r.group.padEnd(6)} ${r.name}`)
    .join("\n");

console.log("Storage zones (use the id as `storage_region`):");
console.log(fmt(config.storage_region_available));
console.log("\nPrimary regions:");
console.log(fmt(config.primary_regions));
console.log("\nReplica regions:");
console.log(fmt(config.replica_regions));

const euIds = keepAndTake(
  (region: BunnyRegion) => region.group === "EU",
  (region) => region.id,
);
console.log("\nEuropean storage zone ids:");
console.log(euIds(config.storage_region_available));
console.log("European primary region ids:");
console.log(euIds(config.primary_regions));
console.log("European replica region ids:");
console.log(euIds(config.replica_regions));