scripts/bunny-regions.ts
Rama main · réplica de lectura del repositorio original.
#!/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));