Athena — roomy-mobile/archive/changes/2026-01-05-add-roomy-firestore-mcp/tasks/002-project-config-firebase-admin.md


status: done

Task: Project config discovery + EnvironmentService + firebase-admin

End Goal

EnvironmentService can read Firebase config files, resolve project IDs, and connect to emulator/staging/prod Firestore via firebase-admin.

Currently

Package skeleton exists with basic get_env/set_env tools.

Should

  • Read .firebaserc and firebase.json from repo root
  • Extract project IDs for staging and prod
  • Connect to Firestore emulator with correct host/port
  • Connect to staging/prod with service account credentials
  • Cache initialized firebase-admin handles per environment

Constraints

  • [ ] Read config from ${ROOMY_MCP_REPO_ROOT}/.firebaserc and firebase.json
  • [ ] Fail fast with clear error if required config is missing
  • [ ] Require service account path for staging/prod environments

Acceptance Criteria

  • [ ] With correct repo root and emulator running, server starts in emulator
  • [ ] If env=prod and ROOMY_MCP_SERVICE_ACCOUNT_PATH_PROD is missing, server fails fast
  • [ ] Unit tests pass for config parsing

Implementation Checklist

  • [x] 2.1 Create src/env/projectConfig.ts to read .firebaserc and firebase.json
  • [x] 2.2 Extract prodProjectId from .firebaserc.projects.default
  • [x] 2.3 Extract stagingProjectId from .firebaserc.projects.staging
  • [x] 2.4 Extract emulatorFirestoreHost from firebase.json.emulators.firestore.port (default: 8081)
  • [x] 2.5 Create src/firebase/admin.ts with getOrInitFirebaseAdminHandles()
  • [x] 2.6 Implement emulator connection: initializeApp({ projectId }) + firestore.settings({ host, ssl:false })
  • [x] 2.7 Implement staging/prod connection: cert(serviceAccountJson) + projectId
  • [x] 2.8 Update src/env/environmentService.ts to use projectConfig and firebase-admin
  • [x] 2.9 Add getFirestore() method that returns cached Firestore handle
  • [x] 2.10 Update src/index.ts to eagerly initialize Firestore on startup
  • [x] 2.11 Add unit tests for loadProjectConfig with port fallback

Notes

  • App naming: roomy-mcp-${env}
  • Service account paths from:
    • ROOMY_MCP_SERVICE_ACCOUNT_PATH_STAGING
    • ROOMY_MCP_SERVICE_ACCOUNT_PATH_PROD

Reacties

Nog geen reacties