Guardo una lista de usuarios invitados a una organización, junto con la marca de tiempo que indica cuándo caduca la invitación en Firebase. Cuando extraigo la marca de tiempo de Firebase, la analizo para determinar si aún es válida o ha caducado usando:
Codigo del cliente
const inviteStatus = invitee?.validUntil.toDate() >= Date.now() ? 'valid_invitee' : 'expired_invitee'También incorporé una funcionalidad para generar nuevas invitaciones a través de una llamada a Firebase Cloud Functions. Una vez que se ha creado una invitación, devuelvo un nuevo objeto de invitado:
Código de funciones de Firebase
const expiryDate = admin.firestore.Timestamp.now().toDate() expiryDate.setTime(expiryDate.getTime() + (1000 * 60 * 60 * 24 * 7)) // 7-day expiration return { invitee: { validUntil: admin.firestore.Timestamp.fromDate(expiryDate) } } La razón por la que no devuelvo solo un objeto Date , sino que lo convierto al formato de Timestamp de tiempo de Firestore es para garantizar que el cliente siempre reciba los datos validUntil en el mismo formato, independientemente de si se lee directamente desde Firestore DB o se devuelve a través de Firebase Cloud Functions.
Sin embargo, una vez que se devuelve este objeto invitado y se ejecuta el código del cliente (consulte el primer fragmento de código), aparece el siguiente error:
TypeError no detectado: invitee.validUntil.toDate no es una función
investigando
Imprimí ambos objetos (uno extraído directamente de DB y otro devuelto a través de Cloud Functions) y noté que el objeto devuelto directamente de DB, cuando se imprime, muestra una ut en Chrome Dev Tools junto al objeto validUntil , mientras que el objeto devuelto de Cloud Funciones no muestra ut .
Objeto impreso consultado desde Firestore 
Objeto impreso devuelto desde Cloud Functions 
Pregunta
¿Por qué Firebase genera dos tipos diferentes de objetos de marca de tiempo donde uno se puede convertir a Date usando la función .toDate() y otro arroja un error?
¿Hay alguna manera de devolver un objeto de marca de tiempo adecuado a través de Cloud Functions en el que pueda aplicar la función .toDate() en el cliente?