import { applicationDefault, type App } from "firebase-admin/app"; import { type Firestore } from "firebase-admin/firestore"; import type { Catalox } from "../catalox/catalox.js"; export type FirebaseAdminCredentialSource = "service_account_path" | "service_account_base64" | "adc"; export type FirebaseBootstrapEnvVars = { FIREBASE_PROJECT_ID?: string; GOOGLE_SERVICE_ACCOUNT_BASE64?: string; FIRESTORE_DATABASE_ID?: string; CATALOX_MONGO_URI?: string; }; export type FirebaseBootstrapOptions = { /** * Override env reads (useful for tests). When omitted, reads from `process.env`. */ env?: FirebaseBootstrapEnvVars; /** * Optional Firebase Admin app name. If omitted, Admin chooses the default app. * Prefer setting this when your process may initialize multiple Admin apps. */ appName?: string; /** * When `true`, and an Admin app with the selected name already exists, delete it before creating a new one. * * This is useful for long-lived hosts that may need to swap credentials/project/database identity at runtime * (e.g. dev server reload, multi-tenant playgrounds, test harnesses). * * Notes: * - If `appName` is omitted, the target name is the Admin SDK default (`[DEFAULT]`). * - Only the Admin app is disposed; higher-level singletons in your host (if any) are your responsibility. * * @default false */ replaceExistingApp?: boolean; /** * Optional Firestore database id (named database). If omitted, uses `(default)`. * When set, this is passed to `getFirestore(app, databaseId)`. */ databaseId?: string; /** * Optional explicit project id override. If omitted, uses `FIREBASE_PROJECT_ID` when set. */ projectId?: string; /** * Optional filesystem path to service account JSON. Caller-supplied only; not read from any environment variable. */ serviceAccountPath?: string; /** * Optional base64-encoded service account JSON override. If omitted, uses `GOOGLE_SERVICE_ACCOUNT_BASE64` from `env` / `process.env` when set. */ serviceAccountBase64?: string; }; export type ResolvedFirebaseAdminCredential = { source: FirebaseAdminCredentialSource; } & ({ source: "adc"; credential: ReturnType; } | { source: "service_account_path"; serviceAccountPath: string; serviceAccountJson: unknown; } | { source: "service_account_base64"; serviceAccountJson: unknown; }); /** * Resolve the Firebase Admin credential from explicit options and supported environment variables. * * Precedence: * 1) `serviceAccountBase64` option, else `GOOGLE_SERVICE_ACCOUNT_BASE64` from env — decode to JSON, then `cert(...)`. * 2) `serviceAccountPath` option only — read JSON from disk, then `cert(...)`. No env var supplies this path. * 3) Application Default Credentials (`applicationDefault()`). Prefer base64 in CI/scripts to avoid machine-dependent ADC. */ export declare function resolveFirebaseAdminCredentialFromEnv(options?: FirebaseBootstrapOptions): ResolvedFirebaseAdminCredential; export type TestFirestoreConnectionFromEnvResult = { ok: true; credentialSource: FirebaseAdminCredentialSource; } | { ok: false; credentialSource?: FirebaseAdminCredentialSource; error: unknown; }; /** * Top-level collection id used only by {@link testFirestoreConnectionFromEnv}. * Must not match Firestore’s reserved `__.*__` pattern for collection/document ids. */ export declare const CATALOX_FIRESTORE_PROBE_COLLECTION_ID: "cataloxConnectivityProbe"; /** * Verifies Firestore connectivity using the same credential resolution as `createCataloxFromEnv`. * Uses a disposable named Admin app (never `[DEFAULT]`) and deletes it in `finally`. * Performs a single non-mutating `.get()` on a random doc under {@link CATALOX_FIRESTORE_PROBE_COLLECTION_ID}. */ export declare function testFirestoreConnectionFromEnv(options?: FirebaseBootstrapOptions): Promise; export type CreateFirebaseAdminAppFromEnvResult = { app: App; credentialSource: FirebaseAdminCredentialSource; }; export declare function createFirebaseAdminAppFromEnv(options?: FirebaseBootstrapOptions): CreateFirebaseAdminAppFromEnvResult; export declare function createFirebaseAdminAppFromEnvAsync(options?: FirebaseBootstrapOptions): Promise; export type GetFirestoreFromEnvResult = { app: App; firestore: Firestore; credentialSource: FirebaseAdminCredentialSource; databaseId?: string; }; export declare function getFirestoreFromEnv(options?: FirebaseBootstrapOptions): GetFirestoreFromEnvResult; export declare function getFirestoreFromEnvAsync(options?: FirebaseBootstrapOptions): Promise; export type CreateCataloxFromEnvOptions = FirebaseBootstrapOptions & { /** @deprecated Ignored — Firebase Catalox bootstrap removed. */ catalox?: Record; /** @deprecated Ignored — Firebase Catalox bootstrap removed. */ mongoUri?: string; }; export type CreateCataloxFromEnvResult = { catalox: Catalox; app: App; firestore: Firestore; credentialSource: FirebaseAdminCredentialSource; databaseId?: string; }; export type CreateCataloxFromFirebaseAppOptions = { app: App; firestore?: Firestore; databaseId?: string; catalox?: Record; mongoUri?: string; }; export type CreateCataloxFromFirebaseAppResult = { catalox: Catalox; app: App; firestore: Firestore; databaseId?: string; }; /** @deprecated Removed — throws. Use createCataloxFromMongoEnv from @x12i/catalox/mongo. */ export declare function createCataloxFromFirebaseEnv(options?: CreateCataloxFromEnvOptions): CreateCataloxFromEnvResult; /** @deprecated Alias of {@link createCataloxFromFirebaseEnv}. */ export declare const createCataloxFromEnv: typeof createCataloxFromFirebaseEnv; export declare function createCataloxFromFirebaseApp(options: CreateCataloxFromFirebaseAppOptions): CreateCataloxFromFirebaseAppResult; export type CataloxFirebaseHost = { catalox: Catalox; app: App; firestore: Firestore; credentialSource: FirebaseAdminCredentialSource; databaseId?: string; dispose: () => Promise; rebuild: (options?: CreateCataloxFromEnvOptions) => Promise; }; /** @deprecated Firebase host bootstrap removed — use createCataloxFromMongoEnv. */ export declare function createCataloxHostFromEnv(options?: CreateCataloxFromEnvOptions): Promise; //# sourceMappingURL=bootstrap.d.ts.map