/** * Lists the dev instances of gerbeur, each an API server and a Vite server of * its own, run side by side so that federated sign-in between instances can be * tried on one machine. In the devcontainer each is a service of * `.devcontainer/compose.yaml`, which starts with it; outside, `deno task dev` * starts them all, or `deno task dev …` those named. Both run * `dev/start.ts`. A new instance is an entry here, and a service there. * * Every instance follows the same rule, which `start.ts` applies: * * - its API at `http://localhost:`, its pages at * `http://localhost:`; * - its database at `api/sql/.db`, its uploads under * `api/uploads//`; * - the base `.env` for everything else, `env` overriding it. * * A new database starts with the user `admin` / `admin`. The instances may * reach each other over http on localhost; whether one trusts another is up to * its admin, on `/manage`. * * @module */ /** One instance of {@link INSTANCES}. */ export interface DevInstance { /** * Names its database and uploads, and prefixes its output. Lowercase * letters, digits and hyphens. */ name: string; /** The port of its API server, `GERBEUR_PORT`. */ apiPort: number; /** The port of its Vite server, where its pages are. */ webPort: number; /** * `GERBEUR_*` settings of its own, over the base `.env`: a site name, an * emoji or a style, to tell the instances apart, or which ways federated * sign-in goes. */ env?: Record; } /** * The instances `deno task dev` starts, in this order. The first keeps the * ports the single dev server always had, and takes no users of the others, * while its own sign in to them, so that both switches of federated sign-in * can be tried. */ export const INSTANCES: readonly DevInstance[] = [ { name: "gerbeur", apiPort: 8000, webPort: 3000, env: { GERBEUR_FEDERATION_INCOMING: "0" }, }, { name: "musique", apiPort: 8001, webPort: 3001, env: { GERBEUR_SITE_NAME: "musique", GERBEUR_SITE_EMOJI: "🎵", GERBEUR_DEFAULT_STYLE: "kanagawa", }, }, ];