38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
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);
|
|
}
|
|
});
|