From ff0606a159f8cc29c35ee8a1f3f3e00064384d5c Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Wed, 5 Apr 2023 19:38:05 -0500 Subject: [PATCH 01/15] APIs --- backend/apartments/routes.js | 21 +++++++++++++++++---- backend/firebase.js | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/backend/apartments/routes.js b/backend/apartments/routes.js index 79a1444..d08b954 100644 --- a/backend/apartments/routes.js +++ b/backend/apartments/routes.js @@ -1,15 +1,28 @@ const express = require("express"); const cors = require("cors"); const middleware = require("../middleware/middle_functions"); -const firebase = require("../firebase"); +const {db} = require("../firebase"); const auth = express.Router(); require("dotenv").config(); auth.use(cors()); auth.use(express.json()); -auth.get("/", middleware.auth(req, res, next), (req, res) => { +auth.get("/apartment_list", middleware.auth(req, res, next), async (req, res) => { + try { + const groups = await db.collection('groups').get(); + } + catch(error) { + res.status(400).json(error); + } }); -auth.post("/", middleware.auth(req, res, next), (req, res) => { +auth.post("/amenities", middleware.auth(req, res, next), (req, res) => { + try { -}); \ No newline at end of file + } + catch(error) { + + } +}); + +module.exports = {auth}; \ No newline at end of file diff --git a/backend/firebase.js b/backend/firebase.js index f057277..0d2727f 100644 --- a/backend/firebase.js +++ b/backend/firebase.js @@ -8,4 +8,4 @@ admin.initializeApp({ const db = admin.firestore(); -module.exports = {admin, db} \ No newline at end of file +module.exports = {db} \ No newline at end of file From b14bbb36c004b3736b641c0391d32033b58d0005 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Sun, 9 Apr 2023 17:06:16 -0500 Subject: [PATCH 02/15] Intermediate API stage --- backend/.env | 14 +- backend/apartments/routes.js | 12 +- backend/firebase.js | 5 +- backend/index.js | 5 +- backend/package-lock.json | 971 ++++++++++++++++++++++++++++------- backend/package.json | 6 +- backend/server.js | 7 - 7 files changed, 812 insertions(+), 208 deletions(-) delete mode 100644 backend/server.js diff --git a/backend/.env b/backend/.env index 7e49fb2..7fdc31a 100644 --- a/backend/.env +++ b/backend/.env @@ -1 +1,13 @@ -PORT = 4000; \ No newline at end of file +PORT = 4000; +CRED_JSON={ + "type": "service_account", + "project_id": "crib-critiq", + "private_key_id": "a1ec3cda88670e23ca623d41cd928887f8d4a78b", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSScBnHQu2aXkT\ne3pQI0rZuki1CFDMY9f0RW3AZEnZImiiKN5DU5GuS+0q02cuT+dUdvHlwa+c1pwP\nMarUdyUByaDeFXu4jrW1zhHlge8CD51gxi5LNxsQMC/B8txC3qC2iXGAu1F3MGVl\nMzohV1qlRjLuISPVn5DqvuI7YvCrKpH4eAiEiIhx/FyJQBcYW9WrRSfw7I8+c2Rd\nj8fomi4rq437TREs0l2kGqf+1z1GsqjWXO8vondRBTQVhm67e9ov6nQ8V55QS8XV\nVt2x2U4ut16Zuope/sBqLM5XrDKjhkSK5sfT90+uHr6YJau5gJhDfE3QUX4x1/Aj\nM3EBc8J1AgMBAAECggEAJP3NRzZAT7PJFSjE8ODsc1WGIbZXREUSAYnPDyd1KCmZ\n32CyDITgXRlFHKH4hhiPOHf+AG0sX7oO1MtnYh2dWG2oCzkbPPF5vIQF+On86c9m\nX1YtYZTNgXEAja0Tmv2/pqyR11PcNkvAomc7BA9yRh2Nqv8QZy09GFZAxLKYZHt0\nbo5zlf+cXFo30Qm54ytjlygNDVNwpoEpvrK9QLr7oZBCpbh2+fCRJyOdSt0IXxGU\n+g5L6j3O3MdwUhCKjhKTBVV1fSO3H0WdSncjD5xg2hFsNFmMUmMphh1meAhY6hcD\nTPjoNCmTiyyxuNgNZeqr2UxXrPCjnAQnr+1dKVfa0QKBgQDuMpSFvkRzNzZr5VDJ\n4HzUnsFLCRwSgDRKPnFrDlR5kBTPrzqx39UrLmdmabVkevn+RnKmUMs3IG2WNy+3\n4Gh+4bPL1/b7awwyq5LDgeyWRevzNcmvU5knJkmEwoWRAg2XGdIZBNitccpEDAVt\nPsDpYyMAl4pbcuhuSsnFrk2ymQKBgQDiAS5O27wQbxah3AaY4w+VrsJHZXdgMuMF\nHi+yCO7AIa5jTE1soFlLNB7VeVLC19MXFxN3TVIuEWLorg4hwIxBF/Q4y2LF+yNW\nt5L4pqCY/SmQ8g12zDXkNCgc0TA/Z5UXoV+2ZAxJgbT0Sj8Jxk12JCC+dEV8YFJc\n8tNSmMZUPQKBgCYNwpiTSxA1E+as3flCee7l5e985xU1kiUCUNBPm8NH92sujWv5\nXG7nnPFJlgcVdnbe/lX/tld6QMeszVzM5yTOHhFE0VpdQbeenXXKfeeMCCP0xeHS\nszcD8N7azMfb0hv/rgb9NTiQY0X3va40RlGC2wavLxVpCCUGobGJJTSRAoGAaY/p\npFXIQtjQdmvB/RlZhy2oexauqpU6KoLN/ldjxQQ2YxUZuNowuwquOEHB4VZTt55E\nrl3EO9ZNH6dk3GkGWcUpgnmlOhoyiGeYU2Ho82yURKp6lXmO1ndyIPuokIT+Q5pR\njWyvvInEDrK7PQKN3dfEH5FJf22yKs4U3KiVQnUCgYEAo6VQinonb1cpT7o/ireO\nepy0onaX1KR4kSDGt+4nfi5nq5A+CxIIAn7eqlFFIKvV1WwbpcftBdLqn2CCgvjA\njP+ijFfKumQzjSRyDFWHbxKixnXeO7WaYI7fLzlp640xUHZw0EhWPQr+ILPUz3Vw\n0s4Hs3ER6BtncPT9p/gHYdY=\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-knlqt@crib-critiq.iam.gserviceaccount.com", + "client_id": "104169567249573733110", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-knlqt%40crib-critiq.iam.gserviceaccount.com" + }; \ No newline at end of file diff --git a/backend/apartments/routes.js b/backend/apartments/routes.js index d08b954..8dc4383 100644 --- a/backend/apartments/routes.js +++ b/backend/apartments/routes.js @@ -2,12 +2,12 @@ const express = require("express"); const cors = require("cors"); const middleware = require("../middleware/middle_functions"); const {db} = require("../firebase"); -const auth = express.Router(); +const apartmentRouter = express.Router(); require("dotenv").config(); -auth.use(cors()); -auth.use(express.json()); +apartmentRouter.use(cors()); +apartmentRouter.use(express.json()); -auth.get("/apartment_list", middleware.auth(req, res, next), async (req, res) => { +apartmentRouter.get("/apartment_list", middleware.auth(req, res, next), async (req, res) => { try { const groups = await db.collection('groups').get(); } @@ -16,7 +16,7 @@ auth.get("/apartment_list", middleware.auth(req, res, next), async (req, res) => } }); -auth.post("/amenities", middleware.auth(req, res, next), (req, res) => { +apartmentRouter.post("/amenities", middleware.auth(req, res, next), (req, res) => { try { } @@ -25,4 +25,4 @@ auth.post("/amenities", middleware.auth(req, res, next), (req, res) => { } }); -module.exports = {auth}; \ No newline at end of file +module.exports = {apartmentRouter}; \ No newline at end of file diff --git a/backend/firebase.js b/backend/firebase.js index 0d2727f..ace27cd 100644 --- a/backend/firebase.js +++ b/backend/firebase.js @@ -1,6 +1,9 @@ var admin = require("firebase-admin"); +require('dotenv').config() -var serviceAccount = require("./cred.json"); +var serviceAccount = process.env.CRED_JSON; + +console.log(process.env.CRED_JSON) admin.initializeApp({ credential: admin.credential.cert(serviceAccount) diff --git a/backend/index.js b/backend/index.js index 3a46fba..4fba206 100644 --- a/backend/index.js +++ b/backend/index.js @@ -2,5 +2,8 @@ const express = require("express"); const app = express(); app.use(express.json()); require("dotenv").config(); +const {apartmentRouter} = require('./apartments/routes.js'); -const PORT = process.env.PORT; \ No newline at end of file +app.use("/apartments", apartmentRouter); + +app.listen(process.env.PORT, () => console.log("Listening on port ", process.env.PORT)); \ No newline at end of file diff --git a/backend/package-lock.json b/backend/package-lock.json index 6fbe2ca..4c1e31a 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -9,9 +9,11 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "cors": "^2.8.5", "dotenv": "^16.0.3", - "firebase": "^9.16.0", - "firebase-admin": "^11.5.0" + "express": "^4.18.2", + "firebase": "^9.19.1", + "firebase-admin": "^11.6.0" } }, "node_modules/@babel/parser": { @@ -38,14 +40,14 @@ } }, "node_modules/@firebase/analytics": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.9.1.tgz", - "integrity": "sha512-ARXtNHDrjDhVrs5MqmFDpr5yyCw89r1eHLd+Dw9fotAufxL1WTmo6O9bJqKb7QulIJaA84vsFokA3NaO2DNCnQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.9.5.tgz", + "integrity": "sha512-hJTVs2jLxPXE7hs7D/jaEsgGivrm7tSEl65kb5NkDBWV7QQBUnRfVML/xra9nTFLLJhAdbExZPHg6HfIuMSYEQ==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -53,14 +55,14 @@ } }, "node_modules/@firebase/analytics-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.1.tgz", - "integrity": "sha512-qfFAGS4YFsBbmZwVa7xaDnGh7k9BKF4o/piyjySAv0lxRYd74/tSrm3kMk1YM7GCti7PdbgKvl6oSR70zMFQjw==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.5.tgz", + "integrity": "sha512-ohKUrwSoXvyUJdSLuDr82mOqrzgWKyHMUt9/TfYKkyDXnFjNlBcFBpkpl/UHMAOJe0M60YYXiVCZoGQYldCslA==", "dependencies": { - "@firebase/analytics": "0.9.1", + "@firebase/analytics": "0.9.5", "@firebase/analytics-types": "0.8.0", - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -73,25 +75,25 @@ "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" }, "node_modules/@firebase/app": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.1.tgz", - "integrity": "sha512-Z8wOSol+pvp4CFyY1mW+aqdZlrwhW/ha2YXQ6/avJ56c5Hnvt4k6GktZE6o5NyzvfJTgNHryhMtnEJMIuLaT4w==", + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.7.tgz", + "integrity": "sha512-ADnRXaW4XQF11QYYhZQEJEtOGnmLkGl2FCixCxPighLrmJmGwCZrzSFtwITd8w/EU3dRYaU5Og37VfnY+gKxGw==", "dependencies": { - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-check": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.6.1.tgz", - "integrity": "sha512-gDG4Gr4n3MnBZAAwLMynU9u/b+f1y87lCezfwlmN1gUxD85mJcvp4hLf87fACTyRkdVfe8hqSXm+MOYn2bMGLg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.6.4.tgz", + "integrity": "sha512-M9qyVTWkEkHXmgwGtObvXQqKcOe9iKAOPqm0pCe74mzgKVTNq157ff39+fxHPb4nFbipToY+GuvtabLUzkHehQ==", "dependencies": { - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -99,15 +101,15 @@ } }, "node_modules/@firebase/app-check-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.1.tgz", - "integrity": "sha512-IaSYdmaoQgWUrN6rjAYJs1TGXj38Wl9damtrDEyJBf7+rrvKshPAP/CP6e2bd89XOMZKbvy8rKoe1CqX1K3ZjQ==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.4.tgz", + "integrity": "sha512-s6ON0ixPKe99M1DNYMI2eR5aLwQZgy0z8fuW1tnEbzg5p/N/GKFmqiIHSV4gfp8+X7Fw5NLm7qMfh4xrcPgQCw==", "dependencies": { - "@firebase/app-check": "0.6.1", + "@firebase/app-check": "0.6.4", "@firebase/app-check-types": "0.5.0", - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -125,14 +127,14 @@ "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" }, "node_modules/@firebase/app-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.1.tgz", - "integrity": "sha512-UgPy2ZO0li0j4hAkaZKY9P1TuJEx5RylhUWPzCb8DZhBm+uHdfsFI9Yr+wMlu6qQH2sWoweFtYU6ljGzxwdctw==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.7.tgz", + "integrity": "sha512-KYBUKoRrvSGW8jqKgARRsma0lJie9M0zyWhPF3PNjqc9pYsw7SZXp5s5SzsheeCXzIDFydP5uEA4f1Z87D7CxQ==", "dependencies": { - "@firebase/app": "0.9.1", - "@firebase/component": "0.6.1", + "@firebase/app": "0.9.7", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, @@ -142,13 +144,13 @@ "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" }, "node_modules/@firebase/auth": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.21.1.tgz", - "integrity": "sha512-/ap7eT9X7kZTD4Fn2m+nJyC1a9DfFo0H4euoJDN8U+JCMN+GOqkPbkMWCey7wV510WNoPCZQ05+nsAqKkbEVJw==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.22.0.tgz", + "integrity": "sha512-4PiaDJEhJ7FNo48WG0TAlqHiCuRBXxUow2q+0emh+PhmM0cLT1UdqK1EuWWGc5CY+ztNQZUh+Yzeh+nv9tZL0w==", "dependencies": { - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -157,14 +159,14 @@ } }, "node_modules/@firebase/auth-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.3.1.tgz", - "integrity": "sha512-Ndcaam+IL1TuJ6hZ0EcQ+v261cK3kPm4mvUtouoTfl3FNinm9XvhccN8ojuaRtIV9TiY18mzGjONKF5ZCXLIZw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.3.7.tgz", + "integrity": "sha512-+r8/++hYZLA/to6Iq8A70LTUsZvhkdT2R4mB4oJGxryJ7vNjpuP5m5hfAd42h/VvX8eT1OXJCENCfEZoDyhksA==", "dependencies": { - "@firebase/auth": "0.21.1", + "@firebase/auth": "0.22.0", "@firebase/auth-types": "0.12.0", - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -225,57 +227,57 @@ } }, "node_modules/@firebase/component": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.1.tgz", - "integrity": "sha512-yvKthG0InjFx9aOPnh6gk0lVNfNVEtyq3LwXgZr+hOwD0x/CtXq33XCpqv0sQj5CA4FdMy8OO+y9edI+ZUw8LA==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.4.tgz", + "integrity": "sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==", "dependencies": { - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "node_modules/@firebase/database": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.1.tgz", - "integrity": "sha512-iX6/p7hoxUMbYAGZD+D97L05xQgpkslF2+uJLZl46EdaEfjVMEwAdy7RS/grF96kcFZFg502LwPYTXoIdrZqOA==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.4.tgz", + "integrity": "sha512-+Ea/IKGwh42jwdjCyzTmeZeLM3oy1h0mFPsTy6OqCWzcu/KFqRAr5Tt1HRCOBlNOdbh84JPZC47WLU18n2VbxQ==", "dependencies": { "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.1.tgz", - "integrity": "sha512-sI7LNh0C8PCq9uUKjrBKLbZvqHTSjsf2LeZRxin+rHVegomjsOAYk9OzYwxETWh3URhpMkCM8KcTl7RVwAldog==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.4.tgz", + "integrity": "sha512-kuAW+l+sLMUKBThnvxvUZ+Q1ZrF/vFJ58iUY9kAcbX48U03nVzIF6Tmkf0p3WVQwMqiXguSgtOPIB6ZCeF+5Gg==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/database": "0.14.1", - "@firebase/database-types": "0.10.1", + "@firebase/component": "0.6.4", + "@firebase/database": "0.14.4", + "@firebase/database-types": "0.10.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" } }, "node_modules/@firebase/database-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.1.tgz", - "integrity": "sha512-UgUx9VakTHbP2WrVUdYrUT2ofTFVfWjGW2O1fwuvvMyo6WSnuSyO5nB1u0cyoMPvO25dfMIUVerfK7qFfwGL3Q==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.4.tgz", + "integrity": "sha512-dPySn0vJ/89ZeBac70T+2tWWPiJXWbmRygYv0smT5TfE3hDrQ09eKMF3Y+vMlTdrMWq7mUdYW5REWPSGH4kAZQ==", "dependencies": { "@firebase/app-types": "0.9.0", - "@firebase/util": "1.9.0" + "@firebase/util": "1.9.3" } }, "node_modules/@firebase/firestore": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.8.1.tgz", - "integrity": "sha512-oc2HMkUnq/zF+g9o974tp5RVCdXCnrU8e5S98ajfWG/hGV+8pr4i6vIa4z0yEXKWGi4X0FguxrC69z1dxEJbNg==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.10.0.tgz", + "integrity": "sha512-St6yy2r7zYxJiAEiI19aQJqxVV8LDvlmeK52R9KMn2nZsgdDVOurch1cH7bBl0OxEgfiVxBmAQJLYvZc+qwAgw==", "dependencies": { - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "@firebase/webchannel-wrapper": "0.9.0", "@grpc/grpc-js": "~1.7.0", "@grpc/proto-loader": "^0.6.13", @@ -290,14 +292,14 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.1.tgz", - "integrity": "sha512-7eE4O2ASyy5X2h4a+KCRt0ZpliUAKo2jrKxKl1ZVCnOOjSCkXXeRVRG9eNZRqBwukhdwskJTM9acs0WxmKOYLA==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.6.tgz", + "integrity": "sha512-svS8oV0nwTyoHW5mslFV0gRb3FLpRQGjz2F7nc5imnPUTjSJmAfXECtgs5HG5MSJM/laSimfAeGuQVh5FM1AEw==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/firestore": "3.8.1", + "@firebase/component": "0.6.4", + "@firebase/firestore": "3.10.0", "@firebase/firestore-types": "2.5.1", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -376,15 +378,15 @@ } }, "node_modules/@firebase/functions": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.1.tgz", - "integrity": "sha512-xCSSU4aVSqYU+lCqhn9o5jJcE1KLUOOKyJfCTdCSCyTn2J3vl9Vk4TDm3JSb1Eu6XsNWtxeMW188F/GYxuMWcw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.4.tgz", + "integrity": "sha512-3H2qh6U+q+nepO5Hds+Ddl6J0pS+zisuBLqqQMRBHv9XpWfu0PnDHklNmE8rZ+ccTEXvBj6zjkPfdxt6NisvlQ==", "dependencies": { "@firebase/app-check-interop-types": "0.2.0", "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -393,14 +395,14 @@ } }, "node_modules/@firebase/functions-compat": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.1.tgz", - "integrity": "sha512-f2D2XoRN+QCziCrUL7UrLaBEoG3v2iAeyNwbbOQ3vv0rI0mtku2/yeB2OINz5/iI6oIrBPUMNLr5fitofj7FpQ==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.4.tgz", + "integrity": "sha512-kxVxTGyLV1MBR3sp3mI+eQ6JBqz0G5bk310F8eX4HzDFk4xjk5xY0KdHktMH+edM2xs1BOg0vwvvsAHczIjB+w==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/functions": "0.9.1", + "@firebase/component": "0.6.4", + "@firebase/functions": "0.9.4", "@firebase/functions-types": "0.6.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -432,12 +434,12 @@ } }, "node_modules/@firebase/installations": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.1.tgz", - "integrity": "sha512-gpobP09LLLakBfNCL04fyblfyb3oX1pn+iNmELygrcAkXTO13IAMuOzThI+Xk4NHQZMX1p5GFSAiGbG4yfsSUQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.4.tgz", + "integrity": "sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" }, @@ -446,14 +448,14 @@ } }, "node_modules/@firebase/installations-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.1.tgz", - "integrity": "sha512-X4IBVKajEeaE45zWX0Y1q8ey39aPFLa+BsUoYzsduMzCxcMBIPZd5/lV1EVGt8SN3+unnC2J75flYkxXVlhBoQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.4.tgz", + "integrity": "sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", "@firebase/installations-types": "0.5.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -477,14 +479,14 @@ } }, "node_modules/@firebase/messaging": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.1.tgz", - "integrity": "sha512-/F+2OWarR8TcJJVlQS6zBoHHfXMgfgR0/ukQ3h7Ow3WZ3WZ9+Sj/gvxzothXZm+WtBylfXuhiANFgHEDFL0J0w==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.4.tgz", + "integrity": "sha512-6JLZct6zUaex4g7HI3QbzeUrg9xcnmDAPTWpkoMpd/GoSVWH98zDoWXMGrcvHeCAIsLpFMe4MPoZkJbrPhaASw==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", "@firebase/messaging-interop-types": "0.2.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "idb": "7.0.1", "tslib": "^2.1.0" }, @@ -493,13 +495,13 @@ } }, "node_modules/@firebase/messaging-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.1.tgz", - "integrity": "sha512-BykvXtAWOs0W4Ik79lNfMKSxaUCtOJ47PJ9Vw2ySHZ14vFFNuDAtRTOBOlAFhUpsHqRoQFvFCkBGsRIQYq8hzw==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.4.tgz", + "integrity": "sha512-lyFjeUhIsPRYDPNIkYX1LcZMpoVbBWXX4rPl7c/rqc7G+EUea7IEtSt4MxTvh6fDfPuzLn7+FZADfscC+tNMfg==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/messaging": "0.12.1", - "@firebase/util": "1.9.0", + "@firebase/component": "0.6.4", + "@firebase/messaging": "0.12.4", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -512,14 +514,14 @@ "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==" }, "node_modules/@firebase/performance": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.1.tgz", - "integrity": "sha512-mT/CWz3CLgyn/a3sO/TJgrTt+RA3DfuvWwGXY9zmIiuBZY2bDi1M2uMefJdJKc9sBUPRajNF6RL10nGYq3BAuQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.4.tgz", + "integrity": "sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -527,15 +529,15 @@ } }, "node_modules/@firebase/performance-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.1.tgz", - "integrity": "sha512-4mn6eS7r2r+ZAHvU0OHE+3ZO+x6gOVhf2ypBoijuDNaRNjSn9GcvA8udD4IbJ8FNv/k7mbbtA9AdxVb701Lr1g==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.4.tgz", + "integrity": "sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg==", "dependencies": { - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/performance": "0.6.1", + "@firebase/performance": "0.6.4", "@firebase/performance-types": "0.2.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -548,14 +550,14 @@ "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==" }, "node_modules/@firebase/remote-config": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.1.tgz", - "integrity": "sha512-RCzBH3FjAPRSP3M1T7jdxLYBesIdLtNIQ0fR9ywJpGSSa0kIXEJ9iSZMTP+9pJtaCxz8db07FvjEqg7Y+lgjzg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.4.tgz", + "integrity": "sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/installations": "0.6.1", + "@firebase/component": "0.6.4", + "@firebase/installations": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -563,15 +565,15 @@ } }, "node_modules/@firebase/remote-config-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.1.tgz", - "integrity": "sha512-RPCj7c2Q3QxMgJH3YCt0iD57KppFApghxAGETzlr6Jm6vT7k0vqvk2KgRBgKa4koJBsgwlUtRn2roaCqUEadyg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz", + "integrity": "sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA==", "dependencies": { - "@firebase/component": "0.6.1", + "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", - "@firebase/remote-config": "0.4.1", + "@firebase/remote-config": "0.4.4", "@firebase/remote-config-types": "0.3.0", - "@firebase/util": "1.9.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -584,12 +586,12 @@ "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==" }, "node_modules/@firebase/storage": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.10.1.tgz", - "integrity": "sha512-eN4ME+TFCh5KfyG9uo8PhE6cgKjK5Rb9eucQg1XEyLHMiaZiUv2xSuWehJn0FaL+UdteoaWKuRUZ4WXRDskXrA==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.11.2.tgz", + "integrity": "sha512-CtvoFaBI4hGXlXbaCHf8humajkbXhs39Nbh6MbNxtwJiCqxPy9iH3D3CCfXAvP0QvAAwmJUTK3+z9a++Kc4nkA==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/util": "1.9.0", + "@firebase/component": "0.6.4", + "@firebase/util": "1.9.3", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -598,14 +600,14 @@ } }, "node_modules/@firebase/storage-compat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.2.1.tgz", - "integrity": "sha512-H0oFdYsMn2Z6tP9tlVERBkJiZsCbFAcl3Li1dnpvDg9g323egdjCnUUgH/tJODRR/Y84iZSNRkg4FvHDVI/o7Q==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.2.tgz", + "integrity": "sha512-wvsXlLa9DVOMQJckbDNhXKKxRNNewyUhhbXev3t8kSgoCotd1v3MmqhKKz93ePhDnhHnDs7bYHy+Qa8dRY6BXw==", "dependencies": { - "@firebase/component": "0.6.1", - "@firebase/storage": "0.10.1", - "@firebase/storage-types": "0.7.0", - "@firebase/util": "1.9.0", + "@firebase/component": "0.6.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-types": "0.8.0", + "@firebase/util": "1.9.3", "tslib": "^2.1.0" }, "peerDependencies": { @@ -613,9 +615,9 @@ } }, "node_modules/@firebase/storage-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.7.0.tgz", - "integrity": "sha512-n/8pYd82hc9XItV3Pa2KGpnuJ/2h/n/oTAaBberhe6GeyWQPnsmwwRK94W3GxUwBA/ZsszBAYZd7w7tTE+6XXA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz", + "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" @@ -641,9 +643,9 @@ } }, "node_modules/@firebase/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.0.tgz", - "integrity": "sha512-oeoq/6Sr9btbwUQs5HPfeww97bf7qgBbkknbDTXpRaph2LZ23O9XLCE5tJy856SBmGQfO4xBZP8dyryLLM2nSQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", + "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", "dependencies": { "tslib": "^2.1.0" } @@ -943,6 +945,18 @@ "node": ">=6.5" } }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -1004,6 +1018,11 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "optional": true }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -1063,6 +1082,42 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "optional": true }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -1077,6 +1132,26 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/catharsis": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", @@ -1149,6 +1224,50 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "optional": true }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1171,6 +1290,23 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "optional": true }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/dotenv": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", @@ -1199,11 +1335,24 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -1236,6 +1385,11 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, "node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -1333,6 +1487,14 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -1342,6 +1504,60 @@ "node": ">=6" } }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1377,43 +1593,73 @@ "node": ">=0.8.0" } }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/firebase": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.16.0.tgz", - "integrity": "sha512-nNLpDwJvfP3crRc6AjnHH46TAkFzk8zimNVMJfYRCwAf5amOSGyU8duuc3IsJF6dQGiYLSfzfr2tMCsQa+rhKQ==", - "dependencies": { - "@firebase/analytics": "0.9.1", - "@firebase/analytics-compat": "0.2.1", - "@firebase/app": "0.9.1", - "@firebase/app-check": "0.6.1", - "@firebase/app-check-compat": "0.3.1", - "@firebase/app-compat": "0.2.1", + "version": "9.19.1", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.19.1.tgz", + "integrity": "sha512-MeukV4NIk6usV1ZbnoA36gumK62JzxOZmF6OZyqkFwJ7edpAEyYNZXvExQlFsvnx2ery0UwNIvu4pKIZS3HiEQ==", + "dependencies": { + "@firebase/analytics": "0.9.5", + "@firebase/analytics-compat": "0.2.5", + "@firebase/app": "0.9.7", + "@firebase/app-check": "0.6.4", + "@firebase/app-check-compat": "0.3.4", + "@firebase/app-compat": "0.2.7", "@firebase/app-types": "0.9.0", - "@firebase/auth": "0.21.1", - "@firebase/auth-compat": "0.3.1", - "@firebase/database": "0.14.1", - "@firebase/database-compat": "0.3.1", - "@firebase/firestore": "3.8.1", - "@firebase/firestore-compat": "0.3.1", - "@firebase/functions": "0.9.1", - "@firebase/functions-compat": "0.3.1", - "@firebase/installations": "0.6.1", - "@firebase/installations-compat": "0.2.1", - "@firebase/messaging": "0.12.1", - "@firebase/messaging-compat": "0.2.1", - "@firebase/performance": "0.6.1", - "@firebase/performance-compat": "0.2.1", - "@firebase/remote-config": "0.4.1", - "@firebase/remote-config-compat": "0.2.1", - "@firebase/storage": "0.10.1", - "@firebase/storage-compat": "0.2.1", - "@firebase/util": "1.9.0" + "@firebase/auth": "0.22.0", + "@firebase/auth-compat": "0.3.7", + "@firebase/database": "0.14.4", + "@firebase/database-compat": "0.3.4", + "@firebase/firestore": "3.10.0", + "@firebase/firestore-compat": "0.3.6", + "@firebase/functions": "0.9.4", + "@firebase/functions-compat": "0.3.4", + "@firebase/installations": "0.6.4", + "@firebase/installations-compat": "0.2.4", + "@firebase/messaging": "0.12.4", + "@firebase/messaging-compat": "0.2.4", + "@firebase/performance": "0.6.4", + "@firebase/performance-compat": "0.2.4", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-compat": "0.2.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-compat": "0.3.2", + "@firebase/util": "1.9.3" } }, "node_modules/firebase-admin": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.5.0.tgz", - "integrity": "sha512-bBdlYtNvXx8yZGdCd00NrfZl1o1A0aXOw5h8q5PwC8RXikOLNXq8vYtSKW44dj8zIaafVP6jFdcUXZem/LMsHA==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.6.0.tgz", + "integrity": "sha512-Kvjs+u/EHs+8B4pNOehbXkazEVMNmTQjkz+B5vUIvWWWR44GOiZj4lBf/hM5An4k3rFkBfO6G4s0kWi7QMOm3g==", "dependencies": { "@fastify/busboy": "^1.1.0", "@firebase/database-compat": "^0.3.0", @@ -1432,12 +1678,33 @@ "@google-cloud/storage": "^6.5.2" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "optional": true }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -1480,6 +1747,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -1613,6 +1893,17 @@ "node": ">=12.0.0" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1622,6 +1913,32 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", @@ -1654,6 +1971,17 @@ "node": ">= 6" } }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/idb": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", @@ -1672,8 +2000,15 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "optional": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", @@ -1961,6 +2296,27 @@ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "optional": true }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -1977,7 +2333,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "optional": true, "engines": { "node": ">= 0.6" } @@ -1986,7 +2341,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "optional": true, "dependencies": { "mime-db": "1.52.0" }, @@ -2032,6 +2386,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/node-fetch": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", @@ -2060,6 +2422,14 @@ "node": ">= 6.13.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -2069,6 +2439,25 @@ "node": ">= 6" } }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2110,6 +2499,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2119,6 +2516,11 @@ "node": ">=0.10.0" } }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -2196,11 +2598,59 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -2330,6 +2780,11 @@ } ] }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -2344,6 +2799,90 @@ "node": ">=10" } }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2353,6 +2892,14 @@ "node": ">=0.10.0" } }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -2470,6 +3017,14 @@ "node": ">=8.17.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -2492,6 +3047,18 @@ "node": ">= 0.8.0" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -2516,12 +3083,28 @@ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", "optional": true }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "optional": true }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", @@ -2530,6 +3113,14 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/backend/package.json b/backend/package.json index 30746b5..4013172 100644 --- a/backend/package.json +++ b/backend/package.json @@ -9,8 +9,10 @@ "author": "", "license": "ISC", "dependencies": { + "cors": "^2.8.5", "dotenv": "^16.0.3", - "firebase": "^9.16.0", - "firebase-admin": "^11.5.0" + "express": "^4.18.2", + "firebase": "^9.19.1", + "firebase-admin": "^11.6.0" } } diff --git a/backend/server.js b/backend/server.js deleted file mode 100644 index c736069..0000000 --- a/backend/server.js +++ /dev/null @@ -1,7 +0,0 @@ -const express = require('express'); -const app = express(); -require("dotenv").config(); - -app.listen(process.env.PORT, () => { - console.log('Server running on port ' + process.env.PORT); -}); \ No newline at end of file From bf434da4b356edd16546074d54cc7f84c0b510b7 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Sun, 9 Apr 2023 17:41:25 -0500 Subject: [PATCH 03/15] Added all API Routes --- backend/.env | 6 +++--- backend/apartments/routes.js | 13 ++++++++----- backend/firebase.js | 6 ++---- backend/index.js | 2 ++ 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/backend/.env b/backend/.env index 7fdc31a..e8bf8b7 100644 --- a/backend/.env +++ b/backend/.env @@ -1,5 +1,5 @@ -PORT = 4000; -CRED_JSON={ +PORT = 3000 +CRED_JSON='{ "type": "service_account", "project_id": "crib-critiq", "private_key_id": "a1ec3cda88670e23ca623d41cd928887f8d4a78b", @@ -10,4 +10,4 @@ CRED_JSON={ "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-knlqt%40crib-critiq.iam.gserviceaccount.com" - }; \ No newline at end of file + }' \ No newline at end of file diff --git a/backend/apartments/routes.js b/backend/apartments/routes.js index 8dc4383..edfad43 100644 --- a/backend/apartments/routes.js +++ b/backend/apartments/routes.js @@ -3,22 +3,25 @@ const cors = require("cors"); const middleware = require("../middleware/middle_functions"); const {db} = require("../firebase"); const apartmentRouter = express.Router(); -require("dotenv").config(); apartmentRouter.use(cors()); apartmentRouter.use(express.json()); -apartmentRouter.get("/apartment_list", middleware.auth(req, res, next), async (req, res) => { +apartmentRouter.get("/apartment_list", async (req, res) => { try { - const groups = await db.collection('groups').get(); + const apartments = await db.collection('apartments').get(); + const apartmentNames = []; + apartments.forEach((doc) => { + apartmentNames.push(doc.id); + }) + res.status(200).json({apartmentNames: apartmentNames}); } catch(error) { res.status(400).json(error); } }); -apartmentRouter.post("/amenities", middleware.auth(req, res, next), (req, res) => { +apartmentRouter.post("/amenities", (req, res) => { try { - } catch(error) { diff --git a/backend/firebase.js b/backend/firebase.js index ace27cd..d014377 100644 --- a/backend/firebase.js +++ b/backend/firebase.js @@ -1,9 +1,7 @@ var admin = require("firebase-admin"); -require('dotenv').config() +require('dotenv').config(); -var serviceAccount = process.env.CRED_JSON; - -console.log(process.env.CRED_JSON) +var serviceAccount = JSON.parse(process.env.CRED_JSON); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) diff --git a/backend/index.js b/backend/index.js index 4fba206..f0f87b8 100644 --- a/backend/index.js +++ b/backend/index.js @@ -1,9 +1,11 @@ const express = require("express"); const app = express(); + app.use(express.json()); require("dotenv").config(); const {apartmentRouter} = require('./apartments/routes.js'); app.use("/apartments", apartmentRouter); + app.listen(process.env.PORT, () => console.log("Listening on port ", process.env.PORT)); \ No newline at end of file From fcced44fe080fbfae088639db2695975147e36ae Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Sun, 9 Apr 2023 17:55:51 -0500 Subject: [PATCH 04/15] Fixing vercel deployment --- backend/vercel.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 backend/vercel.json diff --git a/backend/vercel.json b/backend/vercel.json new file mode 100644 index 0000000..5ff890e --- /dev/null +++ b/backend/vercel.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "builds": [ + { + "src": "./index.js", + "use": "@vercel/node" + } + ], + "routes": [ + { + "src": "/(.*)", + "dst": "/" + } + ] +} \ No newline at end of file From 78cad8b86abe87fe5b7854ad858e747d4852a7bc Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Sun, 9 Apr 2023 18:00:28 -0500 Subject: [PATCH 05/15] Fixed vercel.json --- backend/vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/vercel.json b/backend/vercel.json index 5ff890e..05d15bc 100644 --- a/backend/vercel.json +++ b/backend/vercel.json @@ -9,7 +9,7 @@ "routes": [ { "src": "/(.*)", - "dst": "/" + "dest": "/" } ] } \ No newline at end of file From c0ecda5946a100171c58092ab43a9fb729e6149f Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Sun, 9 Apr 2023 18:01:31 -0500 Subject: [PATCH 06/15] Renamed directories --- backend/index.js | 3 +-- backend/{apartments/routes.js => routes/apartments.js} | 0 2 files changed, 1 insertion(+), 2 deletions(-) rename backend/{apartments/routes.js => routes/apartments.js} (100%) diff --git a/backend/index.js b/backend/index.js index f0f87b8..3d2644d 100644 --- a/backend/index.js +++ b/backend/index.js @@ -3,9 +3,8 @@ const app = express(); app.use(express.json()); require("dotenv").config(); -const {apartmentRouter} = require('./apartments/routes.js'); +const {apartmentRouter} = require('./routes/apartments.js'); app.use("/apartments", apartmentRouter); - app.listen(process.env.PORT, () => console.log("Listening on port ", process.env.PORT)); \ No newline at end of file diff --git a/backend/apartments/routes.js b/backend/routes/apartments.js similarity index 100% rename from backend/apartments/routes.js rename to backend/routes/apartments.js From 4cb70cc48306ef2b5050b2f3047d6066837c933d Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Sun, 9 Apr 2023 18:11:27 -0500 Subject: [PATCH 07/15] Changed .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8e182a7..f0d17b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -cred.json \ No newline at end of file +cred.json +.env \ No newline at end of file From 21d845cc143ab622831e5f6c14f674ad5edf0bf8 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 10:39:49 -0500 Subject: [PATCH 08/15] Added new apartment routes --- backend/routes/apartments.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/routes/apartments.js b/backend/routes/apartments.js index edfad43..8d8278a 100644 --- a/backend/routes/apartments.js +++ b/backend/routes/apartments.js @@ -2,6 +2,9 @@ const express = require("express"); const cors = require("cors"); const middleware = require("../middleware/middle_functions"); const {db} = require("../firebase"); +const { doc, getDoc } = require("firebase/firestore"); + + const apartmentRouter = express.Router(); apartmentRouter.use(cors()); apartmentRouter.use(express.json()); @@ -20,11 +23,14 @@ apartmentRouter.get("/apartment_list", async (req, res) => { } }); -apartmentRouter.post("/amenities", (req, res) => { +apartmentRouter.get("/apartment_features", async (req, res) => { try { + const apartmentsRef = db.collection('apartments'); + const document = await apartmentsRef.doc(req.body.name).get(); + res.status(200).json(document.data()); } catch(error) { - + res.status(400).json(error); } }); From a19bec965de6bd3706cfcf4e858c2d72f24ee55e Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 10:46:32 -0500 Subject: [PATCH 09/15] Removed extra imports --- backend/routes/apartments.js | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/routes/apartments.js b/backend/routes/apartments.js index 8d8278a..a6504bf 100644 --- a/backend/routes/apartments.js +++ b/backend/routes/apartments.js @@ -2,7 +2,6 @@ const express = require("express"); const cors = require("cors"); const middleware = require("../middleware/middle_functions"); const {db} = require("../firebase"); -const { doc, getDoc } = require("firebase/firestore"); const apartmentRouter = express.Router(); From fb70c790cdb93908d54c4995dd7cda80c5d02a39 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 11:21:16 -0500 Subject: [PATCH 10/15] Changed some apartment routing --- backend/routes/apartments.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/routes/apartments.js b/backend/routes/apartments.js index a6504bf..91aec95 100644 --- a/backend/routes/apartments.js +++ b/backend/routes/apartments.js @@ -22,15 +22,16 @@ apartmentRouter.get("/apartment_list", async (req, res) => { } }); -apartmentRouter.get("/apartment_features", async (req, res) => { +apartmentRouter.get("/apartment_features/:name", async (req, res) => { try { - const apartmentsRef = db.collection('apartments'); - const document = await apartmentsRef.doc(req.body.name).get(); - res.status(200).json(document.data()); + const apartmentsRef = db.collection('apartments'); + const document = await apartmentsRef.doc(req.params.name).get(); + res.status(200).json(document.data()); } catch(error) { - res.status(400).json(error); + res.status(400).json(error); } -}); + }); + module.exports = {apartmentRouter}; \ No newline at end of file From 0ff5ac94944a22ce5512a01a4b668c98c7b02b65 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 13:27:37 -0500 Subject: [PATCH 11/15] Added User endpoints --- backend/index.js | 4 +++- backend/routes/users.js | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 backend/routes/users.js diff --git a/backend/index.js b/backend/index.js index 3d2644d..7e20182 100644 --- a/backend/index.js +++ b/backend/index.js @@ -1,10 +1,12 @@ const express = require("express"); const app = express(); - app.use(express.json()); require("dotenv").config(); const {apartmentRouter} = require('./routes/apartments.js'); +const {userRouter} = require('./routes/users.js'); app.use("/apartments", apartmentRouter); +app.use('/users', userRouter); + app.listen(process.env.PORT, () => console.log("Listening on port ", process.env.PORT)); \ No newline at end of file diff --git a/backend/routes/users.js b/backend/routes/users.js new file mode 100644 index 0000000..f4084c7 --- /dev/null +++ b/backend/routes/users.js @@ -0,0 +1,36 @@ +const express = require("express"); +const cors = require("cors"); +const middleware = require("../middleware/middle_functions"); +const {db} = require("../firebase"); + +const userRouter = express.Router(); +userRouter.use(cors()); +userRouter.use(express.json()); + +userRouter.post('/add_to_favorites', async (req, res) => { + try { + const usersRef = db.collection('users'); + const documentRef = usersRef.doc(req.body.user); + const document = await documentRef.get(); + const existingArray = document.get(`favorites`) || []; + existingArray.push(req.body.apartment); + await documentRef.update({ favorites: existingArray }); + res.status(200).json("Successful add"); + } + catch(error) { + res.status(400).json(error); + } +}); + +userRouter.post('/favorites/:username', async (req, res) => { + try { + const usersRef = db.collection('users'); + const document = await usersRef.doc(req.params.username).get(); + res.status(200).json({favorites: document.data().favorites}); + } + catch(error) { + res.status(400).json(error); + } +}) + +module.exports = {userRouter}; \ No newline at end of file From 72a5f1973a0e6810d5b3bcca005c663f56e22df4 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 13:38:03 -0500 Subject: [PATCH 12/15] Added user endpoints including delete --- backend/routes/users.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/backend/routes/users.js b/backend/routes/users.js index f4084c7..2298d62 100644 --- a/backend/routes/users.js +++ b/backend/routes/users.js @@ -22,7 +22,7 @@ userRouter.post('/add_to_favorites', async (req, res) => { } }); -userRouter.post('/favorites/:username', async (req, res) => { +userRouter.get('/favorites/:username', async (req, res) => { try { const usersRef = db.collection('users'); const document = await usersRef.doc(req.params.username).get(); @@ -33,4 +33,21 @@ userRouter.post('/favorites/:username', async (req, res) => { } }) +userRouter.delete('/favorites/', async (req, res) => { + try { + console.log(req.body) + const usersRef = db.collection('users'); + const documentRef = usersRef.doc(req.body.username); + const document = await documentRef.get(); + const existingArray = document.get('favorites'); + const updatedArray = existingArray.filter(item => item !== req.body.apartment); + await documentRef.update({ favorites: updatedArray }); + console.log(2); + res.status(200).json("Completed"); + } + catch(error) { + res.status(400).json(error); + } +}) + module.exports = {userRouter}; \ No newline at end of file From e368c34dd85ff6066a1df4f46438ef4247e3f173 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 13:51:51 -0500 Subject: [PATCH 13/15] Added middleware for server authentication --- backend/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/index.js b/backend/index.js index 7e20182..3ead340 100644 --- a/backend/index.js +++ b/backend/index.js @@ -9,4 +9,11 @@ app.use("/apartments", apartmentRouter); app.use('/users', userRouter); +app.use((req, res, next) => { + res.setHeader("Access-Control-Allow-Origin", "http://localhost:3000"); + res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); + res.setHeader("Access-Control-Allow-Headers", "Content-Type"); + next(); +}); + app.listen(process.env.PORT, () => console.log("Listening on port ", process.env.PORT)); \ No newline at end of file From 2862d0c12604c6818f487626ebec306c53fd03f2 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 14:58:04 -0500 Subject: [PATCH 14/15] Added Card listings --- backend/routes/apartments.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/backend/routes/apartments.js b/backend/routes/apartments.js index 91aec95..e79ea96 100644 --- a/backend/routes/apartments.js +++ b/backend/routes/apartments.js @@ -32,6 +32,26 @@ apartmentRouter.get("/apartment_features/:name", async (req, res) => { res.status(400).json(error); } }); + +apartmentRouter.get("/card_list", async (req, res) => { + try { + const apartments = await db.collection('apartments').get(); + const apartmentNames = []; + apartments.forEach((doc) => { + console.log(doc) + console.log(doc.data()) + apartmentNames.push({ + name: doc.id, + address: doc.data().address, + image: doc.data().picture, + }); + }); + res.status(200).json({apartmentNames: apartmentNames}); +} +catch(error) { + res.status(400).json(error); +} +}) module.exports = {apartmentRouter}; \ No newline at end of file From f943d571276289e1d0851fb0f039da4b42b856e4 Mon Sep 17 00:00:00 2001 From: Aaryan Sagar Date: Mon, 10 Apr 2023 16:06:13 -0500 Subject: [PATCH 15/15] Added card page list API --- backend/routes/users.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/backend/routes/users.js b/backend/routes/users.js index 2298d62..0c93c39 100644 --- a/backend/routes/users.js +++ b/backend/routes/users.js @@ -35,14 +35,12 @@ userRouter.get('/favorites/:username', async (req, res) => { userRouter.delete('/favorites/', async (req, res) => { try { - console.log(req.body) const usersRef = db.collection('users'); const documentRef = usersRef.doc(req.body.username); const document = await documentRef.get(); const existingArray = document.get('favorites'); const updatedArray = existingArray.filter(item => item !== req.body.apartment); await documentRef.update({ favorites: updatedArray }); - console.log(2); res.status(200).json("Completed"); } catch(error) { @@ -50,4 +48,27 @@ userRouter.delete('/favorites/', async (req, res) => { } }) +userRouter.get('/favorites_card_list/:username', async (req, res) => { + try { + const usersRef = db.collection('users'); + const apartmentsRef = db.collection('apartments'); + const document = await usersRef.doc(req.params.username).get(); + const favorites = document.data().favorites; + const returnValues = []; + + for (const e of favorites) { + const apartDoc = await apartmentsRef.doc(e).get(); + returnValues.push({ + name: e, + address: apartDoc.data().address, + image: apartDoc.data().picture, + }); + } + res.status(200).json({card_values: returnValues}); + } + catch(error) { + res.status(400).json("Didn't work"); + } +}) + module.exports = {userRouter}; \ No newline at end of file