loadOrCreateTursoServerAccessToken function

Future<String> loadOrCreateTursoServerAccessToken({
  1. required Map secrets,
  2. required String flavor,
  3. String generate()?,
})

Loads or generates the server access token of the shared Turso database for flavor.

A non-empty cloudflare.turso.shared.server_access_token in katana_secrets.yaml (a single value or a {dev:, prod:} map) takes precedence. Otherwise the value stored in tursoManagedStatePath is reused, or a new random token is generated and saved there. The state file is added to cloudflare/.gitignore.

flavor用の共用Turso DBのサーバーアクセストークンを読み込むか生成します。

katana_secrets.yamlのcloudflare.turso.shared.server_access_token(単一値または {dev:, prod:}形式)が空でなければ優先します。それ以外はtursoManagedStatePathの値を 再利用し、なければランダムなトークンを生成して保存します。状態ファイルは cloudflare/.gitignoreに追加します。

Implementation

Future<String> loadOrCreateTursoServerAccessToken({
  required Map secrets,
  required String flavor,
  String Function()? generate,
}) async {
  final configured = secrets
      .getAsMap("cloudflare")
      .getAsMap("turso")
      .getAsMap("shared")["server_access_token"];
  final configuredValue = configured is Map
      ? configured[flavor]?.toString().trim() ?? ""
      : configured?.toString().trim() ?? "";
  if (configuredValue.isNotEmpty) {
    return configuredValue;
  }
  await _ensureTursoManagedStateIsGitIgnored();
  final file = File(tursoManagedStatePath);
  final state = file.existsSync()
      ? Map<String, dynamic>.from(
          modifize(loadYaml(await file.readAsString())) as Map? ?? {},
        )
      : <String, dynamic>{};
  final tokens = state["shared_server_access_token"] is Map
      ? Map<String, dynamic>.from(state["shared_server_access_token"] as Map)
      : <String, dynamic>{};
  final stored = tokens[flavor]?.toString() ?? "";
  if (stored.isNotEmpty) {
    return stored;
  }
  final token = (generate ?? _generateTursoServerAccessToken)();
  tokens[flavor] = token;
  state["version"] = 1;
  state["shared_server_access_token"] = tokens;
  await file.parent.create(recursive: true);
  await file.writeAsString(YamlWriter().write(state));
  label(
    "Generated $tursoServerAccessTokenSecret ($flavor) and stored it in `$tursoManagedStatePath` (git-ignored).",
  );
  return token;
}