halkyon/apps/train/halkyon_train_server/lib/server.dart
Tizian 「ティツィアーン」 190c3872f4
feat(train): the instance's own map tiles, drawn by Train's style (ADR 0030, D50)
Protomaps' basemap cut for Europe and served by pmtiles beside Train's server
(compose.maps.yaml), drawn by Train's own style, light and dark, which the
server serves. Only people signed in get tiles: map.source hands a key that
Caddy has the server check before each tile; nothing logs a tile.

Also fixes .dockerignore, which left apps/train/ out of the build context, so
Train's server's and BRouter's images couldn't have been built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-30 15:53:07 +01:00

38 lines
1.5 KiB
Dart

import 'package:halkyon_base_server/base.dart';
import 'package:halkyon_train_server/src/generated/serverpod.dart';
import 'package:halkyon_train_server/src/map/instance_map.dart';
import 'package:halkyon_train_server/src/pruning.dart';
import 'package:halkyon_train_server/src/train_base.dart';
import 'package:serverpod_auth_idp_server/core.dart';
/// The starting point of Halkyon Train's server.
Future<void> run(List<String> args) async {
// The generated Serverpod is already connected with the generated code.
final pod = Serverpod(args);
// What every Halkyon server has (ADR 0014): sign-in, the account and its
// deletion, the pruning, the instance's basics, set up for Train; a member
// of the instance's register where the operator names one (ADR 0016).
HalkyonBase.configure(
pod,
trainBase(accounts: AccountsMode.fromEnvironment()),
);
// Token managers validate and issue authentication keys; identity
// providers are the ways people can sign in (halkyon_base's
// auth_config.dart).
pod.initializeAuthServices(
tokenManagerBuilders: tokenManagerBuilders,
identityProviderBuilders: identityProviderBuilders(pod),
);
// The calls between the instance's services, on the web server
// (ADR 0016); Caddy never forwards them.
addInstanceRoutes(pod);
// The instance's own tiles' style and their check (ADR 0030, D50), which
// Caddy asks before each tile; no start where they couldn't be had.
checkMapKeySecret(pod);
addMapRoutes(pod);
await pod.start();
await schedulePruning(pod);
}