on Firestore and Storage events

on Firestore events

Run Cloud functions on database events. They are non-blocking: they run after writes. As they don't prevent writes, we don't call it validation. Instead we use the term sanitization.

sanitize data post-write

List of Cloud Firestore triggers.

For example, onDocumentWritten triggers on:

  • onDocumentCreated
  • onDocumentUpdated
  • onDocumentDeleted
export const onUserWritten = onDocumentWritten("users/{docId}", (event) => {
    const docId = event.params.docId // string

    const change = event.data
    // Change<QueryDocumentSnapshot | DocumentSnapshot> | undefined

    const before = change?.before.data() // DocumentData | undefined
    const after = change?.after.data() // DocumentData | undefined
})

on Storage events

sanitize data post-upload

the user uploads a file to Firebase Storage. Sanitize data post-upload. For example:

import { onObjectFinalized } from "firebase-functions/v2/storage"

export const generateThumbnail = onObjectFinalized(async (event) => {
    const file = event.data

    // const fileBucket = file.bucket;
    // const filePath = file.name;
    // const contentType = file.contentType;
    // const metageneration = file.metageneration;
    // // Number of times metadata has been generated. New objects have a value of 1.
})
earlymorning logo

on Firestore and Storage events

on Firestore events

Run Cloud functions on database events. They are non-blocking: they run after writes. As they don't prevent writes, we don't call it validation. Instead we use the term sanitization.

sanitize data post-write

List of Cloud Firestore triggers.

For example, onDocumentWritten triggers on:

  • onDocumentCreated
  • onDocumentUpdated
  • onDocumentDeleted
export const onUserWritten = onDocumentWritten("users/{docId}", (event) => {
    const docId = event.params.docId // string

    const change = event.data
    // Change<QueryDocumentSnapshot | DocumentSnapshot> | undefined

    const before = change?.before.data() // DocumentData | undefined
    const after = change?.after.data() // DocumentData | undefined
})

on Storage events

sanitize data post-upload

the user uploads a file to Firebase Storage. Sanitize data post-upload. For example:

import { onObjectFinalized } from "firebase-functions/v2/storage"

export const generateThumbnail = onObjectFinalized(async (event) => {
    const file = event.data

    // const fileBucket = file.bucket;
    // const filePath = file.name;
    // const contentType = file.contentType;
    // const metageneration = file.metageneration;
    // // Number of times metadata has been generated. New objects have a value of 1.
})