Per-build enable gate for App Check. Default true — when an
AppCheckConfig is passed to dreamicBootstrap, App Check activates. Set
--dart-define=APP_CHECK_ENABLED=false to disable activation for a single
build (e.g. local debugging) WITHOUT removing the config from main().
(App Check is still entirely off when no config is passed at all.)
The web reCAPTCHA site key App Check uses on web. Empty ⇒ web falls back to
the debug provider (keyless-web guard in AppCheckConfig.resolveWebProvider).
Programmatic default for appCheckRecaptchaSiteKey. Set this from your
app's config (before bootstrap). Overridden by the
APP_CHECK_RECAPTCHA_SITE_KEY dart-define when provided.
Programmatic default for backendFirestoreDatabaseId. Set this from your
app's config (before any Firestore use). Overridden by the
BACKEND_FIRESTORE_DATABASE_ID dart-define when that is provided.
Threshold for forwarding breadcrumbs to the error reporter, evaluated at
breadcrumb-emit time and independent of the console logLevel. Mirrors
logLevel exactly: dart-define breadcrumbLevel → Remote Config
breadcrumbLevel → defaultRemoteConfig default info, with the same
GetIt-not-ready try/catch fallback so early-boot reads never throw (ERH-008).
Whether to automatically initialize FCM and request notification permissions on login.
Default is false - consuming apps must explicitly request notification permissions.
Set to true for automatic permission prompt on login (legacy behavior).
Persisted failed-attempt count bound for the one-time FCM backfill give-up
(A.7/FCM-116). A permanently-failing already-broken install stops re-forcing
a backfill persist — and stamps the one-way FCM-024 marker — only after
failures pass BOTH this count AND a ~30-day time floor from the first
recorded backfill attempt. This count+time hybrid keeps a transient outage
or a few logout→login troubleshooting cycles from prematurely exhausting the
bound and stamping the irreversible marker on a still-healable install. This
is ADDITIVE to the immediate give-up on a classified permission-denied.
The Web Push VAPID public key used to mint an FCM token on web
(getToken(vapidKey: …)). Empty ⇒ web token capture is skipped quietly
(BEH-26); a non-empty value AUTO-ENABLES web FCM (see useFCM).
Programmatic default for fcmWebVapidKey. Set this from your app's config
(before bootstrap). Overridden by the FCM_WEB_VAPID_KEY dart-define when
provided.
Optional escape-hatch builder for mobile email-link ActionCodeSettings.
When set, dreamic defers entirely to this callback and ignores
emailConfirmMobileOrigin.
Number of days to wait before asking for notification permission again after denial.
This is the base delay; if notificationAskAgainMultiplier > 1, subsequent delays will increase.
Maximum number of times to ask for notification permission after denials.
After this many denials, the app will stop asking (until tracking is cleared).
Maximum number of value-proposition reminders shown to a user who
previously declined the in-app value-proposition sheet. Returns null
when unlimited (cooldown is the sole gate).
For testing only: override useFCM. Pass a bool to force the resolved
value, or null to RESET the memoized cache so the next read re-resolves
(per FCM-118 — useFCM is _useFCM ??= …, so the two R1 web-auto-enable
assertions cannot re-resolve within one test isolate without an explicit
reset).
Whether to enable FCM on web platforms.
Default is false - web FCM requires VAPID key and service worker setup.
Set to true only if you've configured web push notifications.
Initialize the emulator address with automatic discovery if needed
Call this before connecting to Firebase emulators
This is separate from the main init because it is expensive and should not block app startup outside
of using the Firebase emulator
Operational bounds for Remote Config int values.
Only applied to remote values — env overrides bypass these for testing flexibility.
Min bounds start at 1 because Firebase Remote Config getInt() returns 0 for
unset keys, and all getters use if (remoteValue > 0) to detect "set" values.
Sentinel stored in defaultRemoteConfig to mean "unlimited" for the
notification max-ask-count programmatic defaults. Firebase Remote Config
setDefaults rejects null (it must be bool/num/String), so null
cannot be stored in the defaults map; this -1 sentinel is stored
instead and the getters map it back to null (= unlimited).