2026-07-07 23:36:16 -05:00
|
|
|
import { setGlobalOptions } from 'firebase-functions/v2'
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Global 2nd-gen options for every v2 function in this codebase.
|
|
|
|
|
*
|
|
|
|
|
* region: pinned to us-central1 — the Android client calls FirebaseFunctions.getInstance() with
|
|
|
|
|
* no region override (di/SecurityModule.kt, data/remote/FirestoreAnswerDataSource.kt), so the
|
|
|
|
|
* callables MUST live in us-central1 or every install breaks. Do not change without also
|
|
|
|
|
* pinning the client.
|
2026-07-08 02:44:06 -05:00
|
|
|
* maxInstances: a runaway-bill guardrail AND a Cloud Run quota constraint. Each 2nd-gen function
|
|
|
|
|
* is a Cloud Run service, and the project's regional "total CPU allocation" quota is charged as
|
|
|
|
|
* the SUM of (maxInstances x vCPU) across every function. With ~34 v2 functions and a new
|
|
|
|
|
* project's default quota (~560 vCPU in us-central1), this must stay low or deploys fail with
|
|
|
|
|
* "Quota exceeded for total allowable CPU per project per region". 5 x 34 = 170, well under.
|
|
|
|
|
* For production: request a Cloud Run CPU quota increase (console → IAM & Admin → Quotas) and
|
|
|
|
|
* raise this. ~80 concurrent requests per instance means 5 instances still serves ~400 in flight.
|
2026-07-07 23:36:16 -05:00
|
|
|
*
|
|
|
|
|
* This module is imported FIRST in index.ts so these options are set before any v2 function is
|
|
|
|
|
* defined. It has no effect on the one v1 holdout (onUserDelete), which keeps its own defaults.
|
|
|
|
|
*/
|
2026-07-08 02:44:06 -05:00
|
|
|
setGlobalOptions({ region: 'us-central1', maxInstances: 5 })
|
2026-07-07 23:36:16 -05:00
|
|
|
|
|
|
|
|
/** Region constant for any per-function override that ever needs to pin it explicitly. */
|
|
|
|
|
export const REGION = 'us-central1'
|