import { adapterEnv } from "../src/config/env"; import { buildPostgresOptions, databaseUrlFor, DatabaseGuardError } from "../src/infra/db/connection-policy"; import { createPostgresDb } from "../src/infra/db/postgres"; import { assertInitAuthorized, installProjectIdentity } from "../src/infra/db/project-identity"; import { assertAdminTarget } from "../src/infra/db/target-guard"; import { runScript } from "./_bootstrap"; /** * Grava `adaptador_guard.project_identity` uma única vez. * Exige ADAPTER_INIT_PROJECT_IDENTITY=1 e o destino administrativo já conferido. * Não chama o fail-fast da aplicação: nesta etapa os papéis web e worker ainda * não existem, e Redis, seed e a feature flag ficam fora desta operação. * Migrate, seed e deploy não chamam este script. */ try { assertInitAuthorized(process.env); } catch (error) { const code = error instanceof DatabaseGuardError ? error.code : "init_recusada"; console.error(`[init-project-identity] ${code}`); process.exit(1); } console.log(`[init-project-identity] ambiente=${adapterEnv()}`); runScript("init-project-identity", async () => { const databaseUrl = databaseUrlFor("admin"); if (!databaseUrl) throw new DatabaseGuardError("url_ausente"); const db = createPostgresDb(databaseUrl, buildPostgresOptions(databaseUrl, "admin")); try { await assertAdminTarget(db); const ref = process.env.ADAPTER_DB_PROJECT_REF?.trim() ?? ""; const result = await installProjectIdentity(db, ref); console.log(`identidade: ${result}`); } finally { await db.close().catch(() => undefined); } });