Skip to content

Instantly share code, notes, and snippets.

@schmidt-sebastian
Created July 29, 2021 16:26
Show Gist options
  • Save schmidt-sebastian/59c76a6655b3556d542b90882de689bc to your computer and use it in GitHub Desktop.
Save schmidt-sebastian/59c76a6655b3556d542b90882de689bc to your computer and use it in GitHub Desktop.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const firebase = require('firebase');
require('firebase/firestore');
admin.firestore.setLogFunction(console.log);
firebase.firestore.setLogLevel('debug');
var firebaseConfig = {...};
firebase.initializeApp(firebaseConfig);
const db = firebase.firestore();
db.useEmulator("localhost", 8080);
exports.makeUppercase = functions.firestore.document('/foo/{documentId}')
.onCreate(async (snap, context) => {
console.log('Writing via Admin SDK');
await snap.ref.set({adminTime: admin.firestore.Timestamp.now()}, {merge: true});
await db.doc(snap.ref.path).set({clientTime: firebase.firestore.Timestamp.now()}, {merge: true});
});
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "12"
},
"main": "index.js",
"dependencies": {
"firebase-admin": "^9.2.0",
"firebase-functions": "^3.11.0"
},
"devDependencies": {
"firebase-functions-test": "^0.2.0"
},
"private": true
}
Final state of document:
adminTime
Thu Jul 29 2021 10:22:50 GMT-0600 (Mountain Daylight Time)
clientTime
Thu Jul 29 2021 10:22:50 GMT-0600 (Mountain Daylight Time)
webTime
Thu Jul 29 2021 10:22:48 GMT-0600 (Mountain Daylight Time)
[Log] [2021-07-29T16:17:05.317Z] @firebase/firestore: – "Firestore (8.8.0): FirestoreClient" – "Received user=" – "null" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.318Z] @firebase/firestore: – "Firestore (8.8.0): FirestoreClient" – "Using default OnlineComponentProvider" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.318Z] @firebase/firestore: – "Firestore (8.8.0): FirestoreClient" – "Using default OfflineComponentProvider" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.318Z] @firebase/firestore: – "Firestore (8.8.0): FirestoreClient" – "Initializing OfflineComponentProvider" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.318Z] @firebase/firestore: – "Firestore (8.8.0): FirestoreClient" – "Initializing OnlineComponentProvider" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.319Z] @firebase/firestore: – "Firestore (8.8.0): MemoryPersistence" – "Starting transaction:" – "Locally write mutations" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.320Z] @firebase/firestore: – "Firestore (8.8.0): MemoryPersistence" – "Starting transaction:" – "Get next mutation batch" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.320Z] @firebase/firestore: – "Firestore (8.8.0): MemoryPersistence" – "Starting transaction:" – "Get next mutation batch" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.320Z] @firebase/firestore: – "Firestore (8.8.0): Connection" – "Creating WebChannel: http://localhost:8080/google.firestore.v1.Firestore/Write/channel" – "{\"httpSessionIdParam\":\"gsessionid\",\"initMessageHeaders\":{\"X-Goog-Api-Client\":\"gl-js…" (firebase-firestore.js, line 1)
"{\"httpSessionIdParam\":\"gsessionid\",\"initMessageHeaders\":{\"X-Goog-Api-Client\":\"gl-js/ fire/8.8.0\",\"Content-Type\":\"text/plain\"},\"messageUrlParams\":{\"database\":\"projects/***/databases/(default)\"},\"sendRawJson\":true,\"supportsCrossDomainXhr\":true,\"internalChannelParams\":{\"forwardChannelRequestTimeoutMs\":600000},\"forceLongPolling\":false,\"detectBufferingProxy\":false,\"httpHeadersOverwriteParam\":\"$httpHeaders\"}"
[Log] [2021-07-29T16:17:05.322Z] @firebase/firestore: – "Firestore (8.8.0): Connection" – "Opening WebChannel transport." (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.322Z] @firebase/firestore: – "Firestore (8.8.0): Connection" – "WebChannel sending:" – "{\"database\":\"projects/***/databases/(default)\"}" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.333Z] @firebase/firestore: – "Firestore (8.8.0): Connection" – "WebChannel transport opened." (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.341Z] @firebase/firestore: – "Firestore (8.8.0): Connection" – "WebChannel received:" – "{\"streamId\":\"20\",\"streamToken\":\"MA==\"}" (firebase-firestore.js, line 1)
[Log] [2021-07-29T16:17:05.341Z] @firebase/firestore: – "Firestore (8.8.0): Connection" – "WebChannel sending:" (firebase-firestore.js, line 1)
"{\"streamToken\":\"MA==\",\"writes\":[{\"update\":{\"name\":\"projects/***/databases/(default)/documents/foo/bQOUiAZ1KHH0LgKqzR1d\",\"fields\":{\"webTime\":{\"timestampValue\":\"2021-07-29T16:17:05.119000000Z\"}}},\"currentDocument\":{\"exists\":false}}]}"
[Log] [2021-07-29T16:17:05.358Z] @firebase/firestore: – "Firestore (8.8.0): Connection" – "WebChannel received:" – "{\"streamToken\":\"MQ==\",\"writeResults\":[{\"updateTime\":\"2021-07-29T16:17:05.349992Z\"}],\"commitTime\":\"2021-07-29T16:17:05.349992Z\"}" (firebase-firestore.js, line 1)
Beginning execution of "makeUppercase"
Firestore (4.13.2) 2021-07-29T16:22:50.073Z ##### [Firestore]: Initialized Firestore
Writing via Admin SDK
Firestore (4.13.2) 2021-07-29T16:22:50.296Z F8wT0 [WriteBatch.commit]: Sending 1 writes
Firestore (4.13.2) 2021-07-29T16:22:50.297Z F8wT0 [ClientPool.acquire]: Creating a new client
Firestore (4.13.2) 2021-07-29T16:22:50.431Z ##### [Firestore]: Initialized Firestore GAPIC Client
Firestore (4.13.2) 2021-07-29T16:22:50.431Z F8wT0 [Firestore.request]: Sending request: {"database":"projects/***/databases/(default)","writes":[{"update":{"name":"projects/***/databases/(default)/documents/foo/poKlDHetPUpzqxr0rezg","fields":{"adminTime":{"timestampValue":{"seconds":"1627575770","nanos":76000000}}}},"updateMask":{"fieldPaths":["adminTime"]}}]}
[2021-07-29T16:22:50.451Z] @firebase/firestore: Firestore (8.8.0): FirebaseCredentialsProvider Auth detected
[2021-07-29T16:22:50.451Z] @firebase/firestore: Firestore (8.8.0): FirebaseCredentialsProvider Auth detected
[2021-07-29T16:22:50.452Z] @firebase/firestore: Firestore (8.8.0): FirebaseCredentialsProvider Auth detected
Firestore (4.13.2) 2021-07-29T16:22:50.523Z F8wT0 [Firestore.request]: Received response: {"writeResults":[{"transformResults":[],"updateTime":{"seconds":"1627575770","nanos":512358000}}],"commitTime":{"seconds":"1627575770","nanos":512358000}}
[2021-07-29T16:22:50.527Z] @firebase/firestore: Firestore (8.8.0): FirestoreClient Received user= null
[2021-07-29T16:22:50.528Z] @firebase/firestore: Firestore (8.8.0): FirestoreClient Using default OnlineComponentProvider
[2021-07-29T16:22:50.528Z] @firebase/firestore: Firestore (8.8.0): FirestoreClient Using default OfflineComponentProvider
[2021-07-29T16:22:50.528Z] @firebase/firestore: Firestore (8.8.0): FirestoreClient Initializing OfflineComponentProvider
[2021-07-29T16:22:50.529Z] @firebase/firestore: Firestore (8.8.0): FirestoreClient Initializing OnlineComponentProvider
[2021-07-29T16:22:50.613Z] @firebase/firestore: Firestore (8.8.0): MemoryPersistence Starting transaction: Locally write mutations
[2021-07-29T16:22:50.616Z] @firebase/firestore: Firestore (8.8.0): MemoryPersistence Starting transaction: Get next mutation batch
[2021-07-29T16:22:50.617Z] @firebase/firestore: Firestore (8.8.0): MemoryPersistence Starting transaction: Get next mutation batch
[2021-07-29T16:22:50.617Z] @firebase/firestore: Firestore (8.8.0): Connection Creating Firestore stub.
[2021-07-29T16:22:50.622Z] @firebase/firestore: Firestore (8.8.0): Connection Opening GRPC stream
[2021-07-29T16:22:50.628Z] @firebase/firestore: Firestore (8.8.0): Connection GRPC stream sending: { database: 'projects/***/databases/(default)' }
[2021-07-29T16:22:50.657Z] @firebase/firestore: Firestore (8.8.0): Connection GRPC stream received: {
writeResults: [],
streamId: '2',
streamToken: <Buffer 30>,
commitTime: null
}
[2021-07-29T16:22:50.658Z] @firebase/firestore: Firestore (8.8.0): Connection GRPC stream sending: {
streamToken: <Buffer 30>,
writes: [
{
update: {
name: 'projects/***/databases/(default)/documents/foo/poKlDHetPUpzqxr0rezg',
fields: {
clientTime: {
timestampValue: { seconds: '1627575770', nanos: 524000000 }
}
}
},
updateMask: { fieldPaths: [ 'clientTime' ] }
}
]
}
[2021-07-29T16:22:50.682Z] @firebase/firestore: Firestore (8.8.0): Connection GRPC stream received: {
writeResults: [
{
transformResults: [],
updateTime: { seconds: '1627575770', nanos: 674275000 }
}
],
streamId: '',
streamToken: <Buffer 31>,
commitTime: { seconds: '1627575770', nanos: 674275000 }
}
[2021-07-29T16:22:50.682Z] @firebase/firestore: Firestore (8.8.0): MemoryPersistence Starting transaction: Acknowledge batch
[2021-07-29T16:22:50.685Z] @firebase/firestore: Firestore (8.8.0): MemoryPersistence Starting transaction: Get next mutation batch
Finished "makeUppercase" in ~1s
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Welcome to Firebase Hosting</title>
<!-- update the version number as needed -->
<script defer src="/__/firebase/8.8.0/firebase-app.js"></script>
<!-- include only the Firebase features as you need -->
<script defer src="/__/firebase/8.8.0/firebase-auth.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-database.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-firestore.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-functions.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-messaging.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-storage.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-analytics.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-remote-config.js"></script>
<script defer src="/__/firebase/8.8.0/firebase-performance.js"></script>
<script defer src="/__/firebase/init.js?useEmulator=true"></script>
</head>
<body>
<script>
document.addEventListener('DOMContentLoaded', function() {
const loadEl = document.querySelector('#load');
firebase.firestore.setLogLevel('debug');
const db = firebase.firestore();
db.collection("foo").add({webTime: firebase.firestore.Timestamp.now()});
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment