Repository navigation
Open
4 / 164 of 16 issues completedDescription
Tracks parity between the firestore-send-email extension (0.2.10) and the @firebase-function-kits/firestore-send-email kit.
How it was tested: both deployed side by side on a test project with matching configs, then compared on emails sent (through an SMTP sink), delivery state, events, logs, runtime settings, load, install and uninstall. Kit tested at kits @ 1c7b047, installed three ways: the README's manual setup, functions:kits:install, and ext:migrate.
Sub-issues are ordered by priority, highest first.
Issues labelled decision need a call: change the kit, or record the difference as accepted in the below "Decisions" section.
Decisions
- decision(firestore-send-email): kit/extension parity – CLI-installed kit runs Node 24, extension runs Node 22 #3325: the runtime follows the host codebase, so
functions:kits:installwrites Node 24 where the extension ran nodejs22. Accepted. - decision(firestore-send-email): kit/extension parity – kit continues after an Eventarc publish failure, the extension aborts #3326: Eventarc publish failures are logged as warnings and delivery carries on, where a failed
onStartpublish stopped the extension sending the mail. Accepted. Documented in docs(firestore-send-email): note that a failed event publish doesn't stop delivery #3322.
Intentional Differences
- Function region: the function is placed next to the database, derived from
DATABASE_REGION(multi-regions map to a Cloud Run region). The extension ran it in its own location setting, defaultus-central1. The Firestore trigger still fires in the database's region. kit-naming: functions, secrets and service accounts are namedkit-<instance>-…/firebase-fn-…instead ofext-<instance>-….- Declared roles and APIs: the kit declares
datastore.user,eventarc.eventReceiver,run.invokerandeventarc.publisher, and enablesfirestoreandeventarcpublishing, instead of relying on the Extensions platform's implicit grants. - All four secrets required:
SMTP_PASSWORD,CLIENT_ID,CLIENT_SECRETandREFRESH_TOKENmust exist at deploy, becausedefineSecretcan't be optional. - Eventarc channel: you create the channel and set
EVENTARC_CHANNELyourself. Publish failures are logged as warnings and no longer stop delivery (decision(firestore-send-email): kit/extension parity – kit continues after an Eventarc publish failure, the extension aborts #3326). - Node runtime and image: the runtime follows the host codebase (
functions:kits:installwrites Node 24), and the base image gets automatic updates. The extension was fixed at nodejs22 with a frozen image (decision(firestore-send-email): kit/extension parity – CLI-installed kit runs Node 24, extension runs Node 22 #3325). - Config handling: string values and secrets are trimmed (whitespace-only means unset).
- Instances and versions: all instances in a kit stanza share one package version. Extension instances were versioned separately.
TESTINGenv path: can be set from.env(fix(firestore-send-email): restore the TESTING env path #3110).
Activity
docs(firestore-send-email): note that a failed event publish doesn't …