import { join } from "node:path"; import { openBucket } from "./bucket/reader.ts"; import { startSyncLoop } from "./bucket/sync.ts"; import { createApp } from "./server/app.ts"; import { startBackupLoop } from "./server/backup.ts"; import { CONFIG_FILE, ConfigError, loadConfig } from "./server/config.ts"; import { openKeprDb } from "./server/db.ts"; import { startMailLoop } from "./server/mail.ts"; try { const config = await loadConfig(CONFIG_FILE); const kepr = openKeprDb(config.dataDir); // One bucket for the sync loop and the app, so settings saved in the console reach both. const bucket = openBucket(config.bucket); startBackupLoop(kepr, config.dataDir); startMailLoop(kepr, config); startSyncLoop({ bucket, kepr, mirrorDir: join(config.dataDir, "mirror"), tarballDir: join(config.dataDir, "tarballs"), }); // Bun.serve reads the port from $PORT (default 3000). const server = Bun.serve({ fetch: createApp(config, kepr, bucket).fetch }); console.log(`kepr listening on ${server.url}`); } catch (error) { if (!(error instanceof ConfigError)) throw error; console.error(`kepr: ${error.message}`); process.exit(1); }