// Copyright 2017 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import * as functions from 'firebase-functions' import * as google from 'googleapis' import * as _ from 'lodash' const sheets = google.sheets('v4') const spreadsheetId = 'YOUR_SPREADSHEET_ID_HERE' const serviceAccount = require('../your_service_account_credentials.json') const jwtClient = new google.auth.JWT( serviceAccount.client_email, null, serviceAccount.private_key, ['https://www.googleapis.com/auth/spreadsheets'], // read and write sheets null ); const jwtAuthPromise = new Promise((resolve, reject) => { jwtClient.authorize((err, tokens) => { console.info("Tokens", tokens) if (err) { console.error(err) reject(err) return } resolve(tokens) }) }) export const copyScoresToSheet = functions.database.ref('/scores').onUpdate(event => { const data = event.data.val() console.info(data) // Sort the scores. scores is an array of arrays each containing name and score. const scores = _.map(data, (value, key) => [String(key), value]) scores.sort((a,b) => {return b[1] - a[1]}) return jwtAuthPromise.then(tokens => { return new Promise((resolve, reject) => { sheets.spreadsheets.values.update({ auth: jwtClient, spreadsheetId: spreadsheetId, range: 'Scores!A2:B7', // update this range of cells valueInputOption: 'RAW', resource: { values: scores } }, (err, result) => { if (err) { console.log(err) reject(err) return } console.log(result) resolve(result) }) }) }) })