Bootstrap de un tenant
De cero a un cliente operando en producción. Combina el alta de la org, la carga de la config y el onboarding de usuarios.
Esto escribe en producción. Requiere ADC (gcloud auth application-default login) y la web API key del proyecto. Hacelo con intención.
Crear la org + el admin
ADMIN_EMAIL=admin@cliente.com ORG_ID=cliente ORG_NAME="Cliente SA" \
ADMIN_PASSWORD=<temporal> \
node scripts/admin/bootstrap-prod-admin.mjs --confirmDeja la org, el usuario Auth, su /users/{uid} activo y el member doc admin.
Cargar la config del caso
Con el template del cliente (copiado de reference-pilot.json):
AUTH_BASE="https://identitytoolkit.googleapis.com/v1" \
FUNCTIONS_BASE="https://us-central1-dawoork-mentat.cloudfunctions.net" \
SEED_API_KEY="<web-api-key>" \
SEED_EMAIL="admin@cliente.com" SEED_PASSWORD="<temporal>" \
SEED_ORG_ID="cliente" TEMPLATE="scripts/pilot/cliente.json" \
node scripts/pilot/load-config.mjs --confirm-prodOnboardear al equipo
Un comando por usuario no-admin:
MEMBER_EMAIL=ana@cliente.com ORG_ID=cliente ROLE=operator \
MEMBER_PASSWORD=<temporal> \
node scripts/admin/add-org-member.mjs --confirmSmoke en prod
SEED_EMAIL=ana@cliente.com SEED_PASSWORD=<temporal> SEED_ORG_ID=cliente \
AUTH_BASE="https://identitytoolkit.googleapis.com/v1" \
FUNCTIONS_BASE="https://us-central1-dawoork-mentat.cloudfunctions.net" \
SEED_API_KEY="<web-api-key>" \
node scripts/pilot/prod-smoke.mjsVerificar
Confirmá por la REST de Firestore que la org tiene sus ontologyTypes,
actionTypes, dataSources, members, y que las otras orgs quedaron intactas.
Notas de seguridad: las contraseñas temporales no se versionan; comunicalas por canal seguro y pedí cambio al primer login. Verificá el dominio de email en Resend para que las invitaciones lleguen. Cuando exista el panel de admin, este flujo se reemplaza por esa UI.
Si ADC está caído y no podés re-loguearte, el alta se puede hacer por la REST de
Firestore + Identity Toolkit con el token de usuario de gcloud (equivalente pero
manual). Es el plan B documentado.