From 2a51ec6d9f410a5b784efb09dd7a6468cbecee34 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Fri, 17 Jan 2020 13:27:37 -0500 Subject: [PATCH 01/70] Moved proxy code to be handled in each strategy --- functions/network.js | 5 ----- functions/strategies/AxiosStrategy.js | 17 ++++++++++++++++- functions/strategies/ProxyStrategy.js | 12 ------------ 3 files changed, 16 insertions(+), 18 deletions(-) delete mode 100644 functions/strategies/ProxyStrategy.js diff --git a/functions/network.js b/functions/network.js index 7ed233cf8..a2c885be5 100644 --- a/functions/network.js +++ b/functions/network.js @@ -1,5 +1,4 @@ import AxiosStrategy from "./strategies/AxiosStrategy"; -import ProxyStrategy from "./strategies/ProxyStrategy"; import FirefoxStrategy from "./strategies/FirefoxStrategy"; @@ -10,10 +9,6 @@ const runAppropriateStrategy = (req, store) => { return FirefoxStrategy(req, store); } - if (store.state.postwoman.settings.PROXY_ENABLED) { - return ProxyStrategy(req, store); - } - return AxiosStrategy(req, store); } diff --git a/functions/strategies/AxiosStrategy.js b/functions/strategies/AxiosStrategy.js index 9bef30aef..885ed2f1e 100644 --- a/functions/strategies/AxiosStrategy.js +++ b/functions/strategies/AxiosStrategy.js @@ -1,8 +1,23 @@ import axios from "axios"; -const axiosStrategy = async (req, _store) => { +const axiosWithProxy = async (req, store) => { + const { data } = await axios.post( + store.state.postwoman.settings.PROXY_URL || + "https://postwoman.apollotv.xyz/", + req + ); + return data; +} + +const axiosWithoutProxy = async (req, _store) => { const res = await axios(req); return res; }; +const axiosStrategy = (req, store) => { + if (store.state.postwoman.settings.PROXY_ENABLED) + return axiosWithProxy(req, store); + else return axiosWithoutProxy(req, store); +} + export default axiosStrategy; diff --git a/functions/strategies/ProxyStrategy.js b/functions/strategies/ProxyStrategy.js deleted file mode 100644 index 0b6f50b0f..000000000 --- a/functions/strategies/ProxyStrategy.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from "axios"; - -const proxyStrategy = async (req, store) => { - const { data } = await axios.post( - store.state.postwoman.settings.PROXY_URL || - "https://postwoman.apollotv.xyz/", - req - ); - return data; -}; - -export default proxyStrategy; From 951266e52946c99a4acf7d8818795a5e5d510562 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Fri, 17 Jan 2020 13:28:04 -0500 Subject: [PATCH 02/70] Added proxy support to FirefoxStrategy --- functions/strategies/FirefoxStrategy.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/functions/strategies/FirefoxStrategy.js b/functions/strategies/FirefoxStrategy.js index 77b15f453..ecd7b133a 100644 --- a/functions/strategies/FirefoxStrategy.js +++ b/functions/strategies/FirefoxStrategy.js @@ -1,5 +1,22 @@ -const firefoxStrategy = (req, _store) => new Promise((resolve, reject) => { +const firefoxWithProxy = (req, store) => new Promise((resolve, reject) => { + const eventListener = (event) => { + window.removeEventListener("firefoxExtSendRequestComplete", event); + + if (event.detail.error) reject(JSON.parse(event.detail.error)); + else resolve(JSON.parse(event.detail.response)); + }; + + window.addEventListener("firefoxExtSendRequestComplete", eventListener); + + window.firefoxExtSendRequest({ + method: "post", + url: store.state.postwoman.settings.PROXY_URL || "https://postwoman.apollotv.xyz/", + data: req + }); +}); + +const firefoxWithoutProxy = (req, _store) => new Promise((resolve, reject) => { const eventListener = (event) => { window.removeEventListener("firefoxExtSendRequestComplete", eventListener); @@ -12,4 +29,10 @@ const firefoxStrategy = (req, _store) => new Promise((resolve, reject) => { window.firefoxExtSendRequest(req); }); +const firefoxStrategy = (req, store) => { + if (store.state.postwoman.settings.PROXY_ENABLED) + return firefoxWithProxy(req, store); + else return firefoxWithoutProxy(req, store); +} + export default firefoxStrategy; From fe81a7dba929669bc1e28bac1fe226f331ad83eb Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:14:10 -0500 Subject: [PATCH 03/70] Added debounce util function --- functions/utils/debounce.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 functions/utils/debounce.js diff --git a/functions/utils/debounce.js b/functions/utils/debounce.js new file mode 100644 index 000000000..09acda07d --- /dev/null +++ b/functions/utils/debounce.js @@ -0,0 +1,15 @@ +// Debounce is a higher order function which makes its enclosed function be executed +// only if the function wasn't called again till 'delay' time has passed, this helps reduce impact of heavy working +// functions which might be called frequently +// NOTE : Don't use lambda functions as this doesn't get bound properly in them, use the 'function (args) {}' format +const debounce = (func, delay) => { + let inDebounce + return function() { + const context = this + const args = arguments + clearTimeout(inDebounce) + inDebounce = setTimeout(() => func.apply(context, args), delay) + } +} + +export default debounce; From 82756a9c55184ee3cdb697063e8cda2c13a7de2b Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:14:30 -0500 Subject: [PATCH 04/70] Added GQL Query Editor component --- components/graphql/queryeditor.vue | 118 +++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 components/graphql/queryeditor.vue diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue new file mode 100644 index 000000000..f44044e0f --- /dev/null +++ b/components/graphql/queryeditor.vue @@ -0,0 +1,118 @@ + + + From d8af767dc4a3eb10f512967837508c97bc1b74fe Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:15:28 -0500 Subject: [PATCH 05/70] Updated graphql page to use QueryEditor for query field --- pages/graphql.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pages/graphql.vue b/pages/graphql.vue index 05e14e940..0aee8d984 100644 --- a/pages/graphql.vue +++ b/pages/graphql.vue @@ -175,7 +175,8 @@ - import("../components/graphql/field"), "gql-type": () => import("../components/graphql/type"), autocomplete: () => import("../components/autocomplete"), - Editor: AceEditor + Editor: AceEditor, + QueryEditor: QueryEditor }, data() { return { @@ -543,6 +546,7 @@ export default { responseBodyMaxLines: 16 }; }, + computed: { url: { get() { From 730018b45ff8036955b301eff81dc4753b07641c Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:16:51 -0500 Subject: [PATCH 06/70] Improve strategy code redability --- functions/strategies/AxiosStrategy.js | 3 ++- functions/strategies/FirefoxStrategy.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/functions/strategies/AxiosStrategy.js b/functions/strategies/AxiosStrategy.js index 885ed2f1e..3c237ea6c 100644 --- a/functions/strategies/AxiosStrategy.js +++ b/functions/strategies/AxiosStrategy.js @@ -15,8 +15,9 @@ const axiosWithoutProxy = async (req, _store) => { }; const axiosStrategy = (req, store) => { - if (store.state.postwoman.settings.PROXY_ENABLED) + if (store.state.postwoman.settings.PROXY_ENABLED) { return axiosWithProxy(req, store); + } else return axiosWithoutProxy(req, store); } diff --git a/functions/strategies/FirefoxStrategy.js b/functions/strategies/FirefoxStrategy.js index ecd7b133a..cfe47d059 100644 --- a/functions/strategies/FirefoxStrategy.js +++ b/functions/strategies/FirefoxStrategy.js @@ -30,8 +30,9 @@ const firefoxWithoutProxy = (req, _store) => new Promise((resolve, reject) => { }); const firefoxStrategy = (req, store) => { - if (store.state.postwoman.settings.PROXY_ENABLED) + if (store.state.postwoman.settings.PROXY_ENABLED) { return firefoxWithProxy(req, store); + } else return firefoxWithoutProxy(req, store); } From a1568a98d4cbba0959affb9336bf4db8306bbfcf Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:22:21 -0500 Subject: [PATCH 07/70] Update functions/strategies/FirefoxStrategy.js Co-Authored-By: James George --- functions/strategies/FirefoxStrategy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/strategies/FirefoxStrategy.js b/functions/strategies/FirefoxStrategy.js index cfe47d059..aeda4c146 100644 --- a/functions/strategies/FirefoxStrategy.js +++ b/functions/strategies/FirefoxStrategy.js @@ -33,7 +33,7 @@ const firefoxStrategy = (req, store) => { if (store.state.postwoman.settings.PROXY_ENABLED) { return firefoxWithProxy(req, store); } - else return firefoxWithoutProxy(req, store); + return firefoxWithoutProxy(req, store); } export default firefoxStrategy; From 8e86e4c8e8d02fcce35f844b0f586ae163e181d4 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:22:30 -0500 Subject: [PATCH 08/70] Update functions/strategies/AxiosStrategy.js Co-Authored-By: James George --- functions/strategies/AxiosStrategy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/strategies/AxiosStrategy.js b/functions/strategies/AxiosStrategy.js index 3c237ea6c..10ab56a2f 100644 --- a/functions/strategies/AxiosStrategy.js +++ b/functions/strategies/AxiosStrategy.js @@ -18,7 +18,7 @@ const axiosStrategy = (req, store) => { if (store.state.postwoman.settings.PROXY_ENABLED) { return axiosWithProxy(req, store); } - else return axiosWithoutProxy(req, store); + return axiosWithoutProxy(req, store); } export default axiosStrategy; From 3b96f85c55490f5f5312b43a6dec9f84cf8040fa Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:30:24 -0500 Subject: [PATCH 09/70] Make James happy by doing proper code refactors --- functions/strategies/FirefoxStrategy.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/functions/strategies/FirefoxStrategy.js b/functions/strategies/FirefoxStrategy.js index aeda4c146..1e12ba119 100644 --- a/functions/strategies/FirefoxStrategy.js +++ b/functions/strategies/FirefoxStrategy.js @@ -3,8 +3,11 @@ const firefoxWithProxy = (req, store) => new Promise((resolve, reject) => { const eventListener = (event) => { window.removeEventListener("firefoxExtSendRequestComplete", event); - if (event.detail.error) reject(JSON.parse(event.detail.error)); - else resolve(JSON.parse(event.detail.response)); + if (event.detail.error) { + reject(JSON.parse(event.detail.error)); + } else { + resolve(JSON.parse(event.detail.response)); + } }; window.addEventListener("firefoxExtSendRequestComplete", eventListener); @@ -20,8 +23,11 @@ const firefoxWithoutProxy = (req, _store) => new Promise((resolve, reject) => { const eventListener = (event) => { window.removeEventListener("firefoxExtSendRequestComplete", eventListener); - if (event.detail.error) reject(JSON.parse(event.detail.error)); - else resolve(JSON.parse(event.detail.response)); + if (event.detail.error) { + reject(JSON.parse(event.detail.error)); + } else { + resolve(JSON.parse(event.detail.response)); + } }; window.addEventListener("firefoxExtSendRequestComplete", eventListener); @@ -32,8 +38,9 @@ const firefoxWithoutProxy = (req, _store) => new Promise((resolve, reject) => { const firefoxStrategy = (req, store) => { if (store.state.postwoman.settings.PROXY_ENABLED) { return firefoxWithProxy(req, store); + } else { + return firefoxWithoutProxy(req, store); } - return firefoxWithoutProxy(req, store); } export default firefoxStrategy; From 0cec1b977a70e5c9dce0b3f11be9c16e8d4ee20a Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:42:50 -0500 Subject: [PATCH 10/70] QueryEditor parses query on mount --- components/graphql/queryeditor.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue index f44044e0f..46c21048b 100644 --- a/components/graphql/queryeditor.vue +++ b/components/graphql/queryeditor.vue @@ -76,6 +76,8 @@ export default { this.cacheValue = content; }); + + this.parseContents(this.value); }, methods: { From b3dd2ebf3104a7e451ac34c8cca983f9ba3a31aa Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sat, 18 Jan 2020 04:43:58 -0500 Subject: [PATCH 11/70] Removed GQL parse log --- components/graphql/queryeditor.vue | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue index 46c21048b..23eb15a04 100644 --- a/components/graphql/queryeditor.vue +++ b/components/graphql/queryeditor.vue @@ -93,21 +93,14 @@ export default { parseContents: debounce(function (content) { try { - console.log(this.editor.session); - console.log(gql.parse(content)); - console.log("Parse Success"); + gql.parse(content); } catch (e) { - console.log(e); - console.log("Parse Failed"); - this.editor.session.setAnnotations([{ row: e.locations[0].line - 1, column: e.locations[0].column - 1, text: e.message, type: "error" }]); - console.log("Annotated"); - console.log(this.editor.session.getAnnotations()); } }, 2000) }, From aa056ff1c159cc971a506cb4e1917a30afc67aa9 Mon Sep 17 00:00:00 2001 From: jamesgeorge007 Date: Sat, 18 Jan 2020 15:22:59 +0530 Subject: [PATCH 12/70] refactor: remove extraneous else --- functions/strategies/FirefoxStrategy.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/functions/strategies/FirefoxStrategy.js b/functions/strategies/FirefoxStrategy.js index 1e12ba119..10d5a09ec 100644 --- a/functions/strategies/FirefoxStrategy.js +++ b/functions/strategies/FirefoxStrategy.js @@ -38,9 +38,8 @@ const firefoxWithoutProxy = (req, _store) => new Promise((resolve, reject) => { const firefoxStrategy = (req, store) => { if (store.state.postwoman.settings.PROXY_ENABLED) { return firefoxWithProxy(req, store); - } else { - return firefoxWithoutProxy(req, store); } + return firefoxWithoutProxy(req, store); } export default firefoxStrategy; From 5458debe35f614c0d6708defae305ad34681d7f9 Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Sun, 19 Jan 2020 12:37:19 +0530 Subject: [PATCH 13/70] :recycle: Refactor --- README.md | 4 +- components/graphql/queryeditor.vue | 23 +++++---- functions/strategies/AxiosStrategy.js | 9 ++-- functions/strategies/FirefoxStrategy.js | 63 +++++++++++++------------ layouts/default.vue | 3 +- pages/graphql.vue | 2 +- 6 files changed, 53 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 41b3cce62..529a1da32 100644 --- a/README.md +++ b/README.md @@ -69,8 +69,8 @@ _Customized themes are synced with local session storage_ - Instant loading with [Service Workers](https://developers.google.com/web/fundamentals/primers/service-workers) - Offline support - Low RAM/memory and CPU usage - - [Add to Home Screen](https://developers.google.com/web/fundamentals/app-install-banners) (button in footer) - - [Desktop PWA](https://developers.google.com/web/progressive-web-apps/desktop) support (button in footer) + - Add to Home Screen + - Desktop PWA - ([full features](https://developers.google.com/web/progressive-web-apps)) 🚀 **Request**: Retrieve response from endpoint instantly. diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue index 23eb15a04..c89d9807e 100644 --- a/components/graphql/queryeditor.vue +++ b/components/graphql/queryeditor.vue @@ -7,9 +7,8 @@ const DEFAULT_THEME = "twilight"; import ace from "ace-builds"; import * as gql from "graphql"; - import "ace-builds/webpack-resolver"; -import debounce from '../../functions/utils/debounce'; +import debounce from "../../functions/utils/debounce"; export default { props: { @@ -71,9 +70,7 @@ export default { editor.on("change", () => { const content = editor.getValue(); this.$emit("input", content); - - this.parseContents(content) - + this.parseContents(content); this.cacheValue = content; }); @@ -91,16 +88,18 @@ export default { } }, - parseContents: debounce(function (content) { + parseContents: debounce(function(content) { try { gql.parse(content); } catch (e) { - this.editor.session.setAnnotations([{ - row: e.locations[0].line - 1, - column: e.locations[0].column - 1, - text: e.message, - type: "error" - }]); + this.editor.session.setAnnotations([ + { + row: e.locations[0].line - 1, + column: e.locations[0].column - 1, + text: e.message, + type: "error" + } + ]); } }, 2000) }, diff --git a/functions/strategies/AxiosStrategy.js b/functions/strategies/AxiosStrategy.js index 10ab56a2f..4b3be7263 100644 --- a/functions/strategies/AxiosStrategy.js +++ b/functions/strategies/AxiosStrategy.js @@ -1,13 +1,12 @@ import axios from "axios"; -const axiosWithProxy = async (req, store) => { +const axiosWithProxy = async (req, { state }) => { const { data } = await axios.post( - store.state.postwoman.settings.PROXY_URL || - "https://postwoman.apollotv.xyz/", + state.postwoman.settings.PROXY_URL || "https://postwoman.apollotv.xyz/", req ); return data; -} +}; const axiosWithoutProxy = async (req, _store) => { const res = await axios(req); @@ -19,6 +18,6 @@ const axiosStrategy = (req, store) => { return axiosWithProxy(req, store); } return axiosWithoutProxy(req, store); -} +}; export default axiosStrategy; diff --git a/functions/strategies/FirefoxStrategy.js b/functions/strategies/FirefoxStrategy.js index 10d5a09ec..afe63498c 100644 --- a/functions/strategies/FirefoxStrategy.js +++ b/functions/strategies/FirefoxStrategy.js @@ -1,45 +1,50 @@ +const firefoxWithProxy = (req, { state }) => + new Promise((resolve, reject) => { + const eventListener = event => { + window.removeEventListener("firefoxExtSendRequestComplete", event); -const firefoxWithProxy = (req, store) => new Promise((resolve, reject) => { - const eventListener = (event) => { - window.removeEventListener("firefoxExtSendRequestComplete", event); + if (event.detail.error) { + reject(JSON.parse(event.detail.error)); + } else { + resolve(JSON.parse(event.detail.response)); + } + }; - if (event.detail.error) { - reject(JSON.parse(event.detail.error)); - } else { - resolve(JSON.parse(event.detail.response)); - } - }; + window.addEventListener("firefoxExtSendRequestComplete", eventListener); - window.addEventListener("firefoxExtSendRequestComplete", eventListener); - - window.firefoxExtSendRequest({ - method: "post", - url: store.state.postwoman.settings.PROXY_URL || "https://postwoman.apollotv.xyz/", - data: req + window.firefoxExtSendRequest({ + method: "post", + url: + state.postwoman.settings.PROXY_URL || "https://postwoman.apollotv.xyz/", + data: req + }); }); -}); -const firefoxWithoutProxy = (req, _store) => new Promise((resolve, reject) => { - const eventListener = (event) => { - window.removeEventListener("firefoxExtSendRequestComplete", eventListener); +const firefoxWithoutProxy = (req, _store) => + new Promise((resolve, reject) => { + const eventListener = ({ detail }) => { + window.removeEventListener( + "firefoxExtSendRequestComplete", + eventListener + ); - if (event.detail.error) { - reject(JSON.parse(event.detail.error)); - } else { - resolve(JSON.parse(event.detail.response)); - } - }; + if (detail.error) { + reject(JSON.parse(detail.error)); + } else { + resolve(JSON.parse(detail.response)); + } + }; - window.addEventListener("firefoxExtSendRequestComplete", eventListener); + window.addEventListener("firefoxExtSendRequestComplete", eventListener); - window.firefoxExtSendRequest(req); -}); + window.firefoxExtSendRequest(req); + }); const firefoxStrategy = (req, store) => { if (store.state.postwoman.settings.PROXY_ENABLED) { return firefoxWithProxy(req, store); } return firefoxWithoutProxy(req, store); -} +}; export default firefoxStrategy; diff --git a/layouts/default.vue b/layouts/default.vue index 447e58ae4..9514893c6 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -619,8 +619,7 @@ export default { showExtensions: false, showShortcuts: false, showSupport: false, - firefoxExtInstalled: - window.firefoxExtSendRequest !== undefined ? true : false, + firefoxExtInstalled: window.firefoxExtSendRequest, chromeExtInstalled: false }; }, diff --git a/pages/graphql.vue b/pages/graphql.vue index 0aee8d984..f6ca59d6c 100644 --- a/pages/graphql.vue +++ b/pages/graphql.vue @@ -820,7 +820,7 @@ export default { }); } catch (error) { this.$nuxt.$loading.finish(); - this.schemaString = `${error}. ${check_console_details}`; + this.schemaString = `${error}. ${this.$t("check_console_details")}`; this.$toast.error(`${error} ${this.$t("f12_details")}`, { icon: "error" }); From f0cfee56f2106d906f00968ce0ef0ac307690016 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sun, 19 Jan 2020 14:21:31 -0500 Subject: [PATCH 14/70] Added ability to query editor to validate based on schema --- components/graphql/queryeditor.vue | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue index c89d9807e..959781992 100644 --- a/components/graphql/queryeditor.vue +++ b/components/graphql/queryeditor.vue @@ -33,7 +33,8 @@ export default { data() { return { editor: null, - cacheValue: "" + cacheValue: "", + validationSchema: null }; }, @@ -87,10 +88,29 @@ export default { ); } }, + + setValidationSchema(schema) { + this.validationSchema = schema; + this.parseContents(this.cacheValue); + }, parseContents: debounce(function(content) { try { - gql.parse(content); + const doc = gql.parse(content); + + if (this.validationSchema) { + this.editor.session.setAnnotations( + gql.validate(this.validationSchema, doc) + .map((err) => { + return { + row: err.locations[0].line - 1, + column: err.locations[0].column - 1, + text: err.message, + type: "error" + } + }) + ) + } } catch (e) { this.editor.session.setAnnotations([ { From 77e51f330111312be0eda10a57732cd620daa2b6 Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sun, 19 Jan 2020 14:22:56 -0500 Subject: [PATCH 15/70] GraphQL page now notifies the query editor about the schema for validation --- pages/graphql.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/graphql.vue b/pages/graphql.vue index f6ca59d6c..606796472 100644 --- a/pages/graphql.vue +++ b/pages/graphql.vue @@ -812,6 +812,8 @@ export default { } } this.gqlTypes = types; + + this.$refs.queryEditor.setValidationSchema(schema); this.$nuxt.$loading.finish(); const duration = Date.now() - startTime; From 744d6477044a2856c4d59d487c6fb406f7aa0f7c Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sun, 19 Jan 2020 14:38:46 -0500 Subject: [PATCH 16/70] GQL Query Editor doesn't give errors for empty queries --- components/graphql/queryeditor.vue | 50 ++++++++++++++++-------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/components/graphql/queryeditor.vue b/components/graphql/queryeditor.vue index 959781992..7f1084b85 100644 --- a/components/graphql/queryeditor.vue +++ b/components/graphql/queryeditor.vue @@ -95,31 +95,35 @@ export default { }, parseContents: debounce(function(content) { - try { - const doc = gql.parse(content); + if (content !== "") { + try { + const doc = gql.parse(content); - if (this.validationSchema) { - this.editor.session.setAnnotations( - gql.validate(this.validationSchema, doc) - .map((err) => { - return { - row: err.locations[0].line - 1, - column: err.locations[0].column - 1, - text: err.message, - type: "error" - } - }) - ) - } - } catch (e) { - this.editor.session.setAnnotations([ - { - row: e.locations[0].line - 1, - column: e.locations[0].column - 1, - text: e.message, - type: "error" + if (this.validationSchema) { + this.editor.session.setAnnotations( + gql.validate(this.validationSchema, doc) + .map((err) => { + return { + row: err.locations[0].line - 1, + column: err.locations[0].column - 1, + text: err.message, + type: "error" + } + }) + ) } - ]); + } catch (e) { + this.editor.session.setAnnotations([ + { + row: e.locations[0].line - 1, + column: e.locations[0].column - 1, + text: e.message, + type: "error" + } + ]); + } + } else { + this.editor.session.setAnnotations([]); } }, 2000) }, From 8ae5dbc3750b9576e924d28b444e42288ce6c0af Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Sun, 19 Jan 2020 15:24:17 -0500 Subject: [PATCH 17/70] Fixed proxying through the firefox extension --- functions/strategies/FirefoxStrategy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/strategies/FirefoxStrategy.js b/functions/strategies/FirefoxStrategy.js index afe63498c..9160a27d3 100644 --- a/functions/strategies/FirefoxStrategy.js +++ b/functions/strategies/FirefoxStrategy.js @@ -6,7 +6,7 @@ const firefoxWithProxy = (req, { state }) => if (event.detail.error) { reject(JSON.parse(event.detail.error)); } else { - resolve(JSON.parse(event.detail.response)); + resolve(JSON.parse(event.detail.response).data); } }; From fb4554abe3791272d4082b89f946c1de391ccb51 Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Mon, 20 Jan 2020 22:25:48 +0530 Subject: [PATCH 18/70] :tada: Initial Auth --- components/BallsFeed.vue | 20 + components/InputForm.vue | 25 + components/Login.vue | 30 ++ functions/store.js | 63 +++ layouts/default.vue | 37 +- package-lock.json | 994 ++++++++++++++++++++++++++++++++++++++- package.json | 2 + 7 files changed, 1153 insertions(+), 18 deletions(-) create mode 100644 components/BallsFeed.vue create mode 100644 components/InputForm.vue create mode 100644 components/Login.vue create mode 100644 functions/store.js diff --git a/components/BallsFeed.vue b/components/BallsFeed.vue new file mode 100644 index 000000000..8e01e2a77 --- /dev/null +++ b/components/BallsFeed.vue @@ -0,0 +1,20 @@ + + + diff --git a/components/InputForm.vue b/components/InputForm.vue new file mode 100644 index 000000000..25c655e3c --- /dev/null +++ b/components/InputForm.vue @@ -0,0 +1,25 @@ + + + diff --git a/components/Login.vue b/components/Login.vue new file mode 100644 index 000000000..e05d4dc77 --- /dev/null +++ b/components/Login.vue @@ -0,0 +1,30 @@ + + + diff --git a/functions/store.js b/functions/store.js new file mode 100644 index 000000000..918a9a0c4 --- /dev/null +++ b/functions/store.js @@ -0,0 +1,63 @@ +import Vue from "vue"; +import firebase from "firebase/app"; +import "firebase/firestore"; +import "firebase/auth"; + +// Initialize Firebase, copied from cloud console +var config = { + apiKey: "AIzaSyCMsFreESs58-hRxTtiqQrIcimh4i1wbsM", + authDomain: "postwoman-api.firebaseapp.com", + databaseURL: "https://postwoman-api.firebaseio.com", + projectId: "postwoman-api", + storageBucket: "postwoman-api.appspot.com", + messagingSenderId: "421993993223", + appId: "1:421993993223:web:ec0baa8ee8c02ffa1fc6a2", + measurementId: "G-ERJ6025CEB" +}; +firebase.initializeApp(config); + +// a reference to the Balls collection +const ballsCollection = firebase.firestore().collection("balls"); + +// the shared state object that any vue component +// can get access to +export const store = { + ballsInFeed: null, + currentUser: null, + writeBall: message => { + const dt = { + createdOn: new Date(), + author: store.currentUser.uid, + author_name: store.currentUser.displayName, + author_image: store.currentUser.photoURL, + message + }; + return ballsCollection + .add(dt) + .catch(e => console.error("error inserting", dt, e)); + } +}; + +// onSnapshot is executed every time the data +// in the underlying firestore collection changes +// It will get passed an array of references to +// the documents that match your query +ballsCollection + .orderBy("createdOn", "desc") + .limit(5) + .onSnapshot(ballsRef => { + const balls = []; + ballsRef.forEach(doc => { + const ball = doc.data(); + ball.id = doc.id; + balls.push(ball); + }); + console.log("Received Balls feed:", balls); + store.ballsInFeed = balls; + }); + +// When a user logs in or out, save that in the store +firebase.auth().onAuthStateChanged(user => { + console.log("Logged in as:", user); + store.currentUser = user; +}); diff --git a/layouts/default.vue b/layouts/default.vue index 9514893c6..341b8c72d 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -345,6 +345,17 @@ + + + + +
+ + + +
+ + @@ -594,10 +605,22 @@ import intializePwa from "../assets/js/pwa"; import * as version from "../.postwoman/version.json"; + +import firebase from 'firebase/app'; +import 'firebase/auth'; + +import { store } from '../functions/store'; +import Login from '../components/Login'; +import InputForm from '../components/InputForm'; +import BallsFeed from '../components/BallsFeed'; + + export default { components: { logo: () => import("../components/logo"), - modal: () => import("../components/modal") + modal: () => import("../components/modal"), + + Login, InputForm, BallsFeed }, methods: { @@ -606,7 +629,13 @@ export default { "nuxt-link-exact-active": this.$route.path === path, "nuxt-link-active": this.$route.path === path }; - } + }, + + + logout() { + firebase.auth().signOut() + .catch((err) => alert(err.message || err)); + }, }, data() { @@ -620,7 +649,9 @@ export default { showShortcuts: false, showSupport: false, firefoxExtInstalled: window.firefoxExtSendRequest, - chromeExtInstalled: false + chromeExtInstalled: false, + + store }; }, diff --git a/package-lock.json b/package-lock.json index 596757fe5..eb672b789 100644 --- a/package-lock.json +++ b/package-lock.json @@ -905,6 +905,264 @@ "lodash.once": "^4.1.1" } }, + "@firebase/analytics": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.2.11.tgz", + "integrity": "sha512-2+Z3CBRAExe1Auf9tApnuz6akAdi9DzPUSx/ssKChWbSzInCeaYGN40pKIameux7BAVecZHxZNh5tJmW27lgtw==", + "requires": { + "@firebase/analytics-types": "0.2.5", + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/analytics-types": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.2.5.tgz", + "integrity": "sha512-aa746gTiILMn9TPBJXaYhYqnCL4CQwd4aYTAZseI9RZ/hf117xJTNy9/ZTmG5gl2AqxV0LgtdHYqKAjRlNqPIQ==" + }, + "@firebase/app": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.5.2.tgz", + "integrity": "sha512-QOhSO414Yfc7BAH62QdsFiI/5bNaFrjDMLfRNAqnzGwLkiqIK+QH1Hma7dAF4ff1UjzEpbXQn3rXv7gtAXy6Lw==", + "requires": { + "@firebase/app-types": "0.5.0", + "@firebase/component": "0.1.3", + "@firebase/logger": "0.1.34", + "@firebase/util": "0.2.38", + "dom-storage": "2.1.0", + "tslib": "1.10.0", + "xmlhttprequest": "1.8.0" + } + }, + "@firebase/app-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.5.0.tgz", + "integrity": "sha512-8j+vCXTpAkYGcFk86mPZ90V6HMFmn196RIEW9Opi0PN+VrPFC1l/eW0gptM8v7VXaQhECOxws3TN2g+dDaeSYA==" + }, + "@firebase/auth": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.13.4.tgz", + "integrity": "sha512-dFDuLMHHmigs9ZH56h+UO78SMuvYkwRcPbEudaemYisGLXnYFa0pUKS2WfvA/9d/14X/VnzG8NGApAw5BylpvA==", + "requires": { + "@firebase/auth-types": "0.9.4" + } + }, + "@firebase/auth-interop-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.1.tgz", + "integrity": "sha512-rNpCOyCspZvNDoQVQLQQgWAGBMB2ClCWKN1c8cEFgLNFgnMJrjVB+tcL7KW2q2UjKa7l8Mxgwys7szTiEDAcvA==" + }, + "@firebase/auth-types": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.9.4.tgz", + "integrity": "sha512-06ZrpYz1GaUfIJs7C3Yf4lARH8+2kzgKfgG/9B3FaGHFYLa5U7rLBGGaca4oiVI12jmhe9CV3+M8e3U2CRCr2w==" + }, + "@firebase/component": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.3.tgz", + "integrity": "sha512-PvWS/2TVC5rBKvzxdv91FBPbZxuN2WiwDyO2xaHdtsUkZ+P/E825PIh9en9kR+FSQkTCFRDmboLzispN1Tonrg==", + "requires": { + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/database": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.19.tgz", + "integrity": "sha512-UVd0XTBbA/7mcwGeNwhMFHyrz3uJUyLAUeaROuppfo4bBK0jUhdkwqmeNC+q/Q9vU4GUV0UkMm7XgWlsfI+j8Q==", + "requires": { + "@firebase/auth-interop-types": "0.1.1", + "@firebase/component": "0.1.3", + "@firebase/database-types": "0.4.10", + "@firebase/logger": "0.1.34", + "@firebase/util": "0.2.38", + "faye-websocket": "0.11.3", + "tslib": "1.10.0" + } + }, + "@firebase/database-types": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.10.tgz", + "integrity": "sha512-66puLsckt5HASgRN3CfhLn2iuGrgCjfH3u17OL0f5MtEweYLx+yW2QW5d539Wx30xD4B+INEdaRetw6xEa9t7g==", + "requires": { + "@firebase/app-types": "0.5.0" + } + }, + "@firebase/firestore": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.9.3.tgz", + "integrity": "sha512-FGHZ5Dj+6PTqTDr1eEdEPA3fbzQy5v0i21k2DA1d4bdD20bVWWdOAyoOuku4BawfK7ZzgVJipd2+EH8pWIlwIQ==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/firestore-types": "1.9.0", + "@firebase/logger": "0.1.34", + "@firebase/util": "0.2.38", + "@firebase/webchannel-wrapper": "0.2.35", + "@grpc/proto-loader": "^0.5.0", + "grpc": "1.24.2", + "tslib": "1.10.0" + } + }, + "@firebase/firestore-types": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.9.0.tgz", + "integrity": "sha512-UOtneGMUTLr58P56Y0GT/c4ZyC39vOoRAzgwad4PIsyc7HlKShbHKJpyys/LdlUYIsQdy/2El3Qy1veiBQ+ZJg==" + }, + "@firebase/functions": { + "version": "0.4.30", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.30.tgz", + "integrity": "sha512-gIcmtwn+HF5YnnJmyiK3iRKSLE+Ro92ngmwJEyhupk6PBpuqVF1r22kUlrjFsFlPXEx7TrkWvfZkYbTtLpkRHw==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/functions-types": "0.3.13", + "@firebase/messaging-types": "0.4.1", + "isomorphic-fetch": "2.2.1", + "tslib": "1.10.0" + } + }, + "@firebase/functions-types": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.13.tgz", + "integrity": "sha512-wD075tCmZo+t/GHs5xMhi3irwjbc6SWnjXAIHjuNhVDKic5gQNkHH5QnxX930WPrPhD0RV9wuSP15fy9T1mvjw==" + }, + "@firebase/installations": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.0.tgz", + "integrity": "sha512-eAUrLjDnaKJ0oV4ApKlrS5TQeUv42hA39UZkZXDiMLnH94uPD5YaoGI2aR4H+PlxnGrhCqdh07BIPJY+vcmZgw==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations-types": "0.3.0", + "@firebase/util": "0.2.38", + "idb": "3.0.2", + "tslib": "1.10.0" + } + }, + "@firebase/installations-types": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.0.tgz", + "integrity": "sha512-1W82H1F4WfuWjftMiWLNUTy1w2SD7svn8/U8k6T/CJSnzkET6m+3pPt3Q4FDI6E2zOgU8ZVGWm9IZ4DK84mP/A==" + }, + "@firebase/logger": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.34.tgz", + "integrity": "sha512-J2h6ylpd1IcuonRM3HBdXThitds6aQSIeoPYRPvApSFy82NhFPKRzJlflAhlQWjJOh59/jyQBGWJNxCL6fp4hw==" + }, + "@firebase/messaging": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.6.2.tgz", + "integrity": "sha512-sjdFF3v8Wc0K6r06UvskL/9zHFDbX0ospp1XSdl3OdYdq8mC/z8Fkw8oKN9+0StPWAQx8MdpmxDU/7Ixucf1fg==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/messaging-types": "0.4.1", + "@firebase/util": "0.2.38", + "idb": "3.0.2", + "tslib": "1.10.0" + } + }, + "@firebase/messaging-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.4.1.tgz", + "integrity": "sha512-z2ki1nIE8TYH9LiXdozEzrPi9Cfckh9/x7HbDfj5KoVFYYvwLndUczstpKm2hvAUD3GuJF0JRUuxMHpJ6pwqzQ==" + }, + "@firebase/performance": { + "version": "0.2.30", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.30.tgz", + "integrity": "sha512-XxkiJIiEPnJUOrtv0h0AvDmcTyiYbhGfH12WksN9d53O61aTRUsjngHN6lEtlMud+0yEi6Q09pi4U+KBGm8yZQ==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/logger": "0.1.34", + "@firebase/performance-types": "0.0.8", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/performance-types": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.8.tgz", + "integrity": "sha512-3RK15Bct9PRdr0YBdbZV2KTi5yrPzscJVEsdnsLHuwXBntqlQaouQqwlCNFn25dtCMY0cgV/yiaFmuo13mbJ8A==" + }, + "@firebase/polyfill": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.31.tgz", + "integrity": "sha512-7XItMz50tdba57tCOTCSH8REvHYbrTU7MBOksnNZ3td/J9W/RkCPcLVSSnFWNmn0Jv1aufpUevryX1J4DZ/oiw==", + "requires": { + "core-js": "3.6.2", + "promise-polyfill": "8.1.3", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.2.tgz", + "integrity": "sha512-hIE5dXkRzRvnZ5vhkRfQxUvDxQZmD9oueA08jDYRBKJHx+VIl/Pne/e0A4x9LObEEthC/TqiZybUoNM4tRgnKg==" + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + } + } + }, + "@firebase/remote-config": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.11.tgz", + "integrity": "sha512-AsrwmtYVkU1ZqUujV1i2wt0XK2Zph6gBeOIPEo+xD4uyzXoqTHUaW5ZPTBzjYCw1KDKTL6ciXXxk5c+cfNzjyg==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/logger": "0.1.34", + "@firebase/remote-config-types": "0.1.5", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/remote-config-types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.5.tgz", + "integrity": "sha512-1JR0XGVN0dNKJlu5sMYh0qL0jC85xNgXfUquUGNHhy9lH3++t1gD91MeiDBgxI73oFQR7PEPeu+CTeDS0g8lWQ==" + }, + "@firebase/storage": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.24.tgz", + "integrity": "sha512-hwk5ObwtqcfMFOnd4BcCpCPlr13L686iRAaa7qlOEimx0CizWD1QRmduDuxjuxHsqNnSr3QIUleG48Z8gKOg6A==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/storage-types": "0.3.8", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/storage-types": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.8.tgz", + "integrity": "sha512-F0ED2WZaGjhjEdOk85c/1ikDQdWM1NiATFuTmRsaGYZyoERiwh/Mr6FnjqnLIeiJZqa6v2hk/aUgKosXjMWH/Q==" + }, + "@firebase/util": { + "version": "0.2.38", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.38.tgz", + "integrity": "sha512-EcTQWuWrUG7wgU8IGx50Zd/xE1DdwmYpMAIElsu5G5RPAJJ9VoAOAnxyRBPrrHmFeSLJpGtKPxc/rJXnEaGrXw==", + "requires": { + "tslib": "1.10.0" + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.35.tgz", + "integrity": "sha512-7njiGBbFW0HCnuKNEJLcQt9EjfOzG8EJiXlFJwA3XfgiFxPVHmXrcF4d5yold2wfiwCwrXpeNTGZ854oRr6Hcw==" + }, + "@grpc/proto-loader": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.3.tgz", + "integrity": "sha512-8qvUtGg77G2ZT2HqdqYoM/OY97gQd/0crSG34xNmZ4ZOsv3aQT/FQV9QfZPazTGna6MIoyUd+u6AxsoZjJ/VMQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + } + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -1508,11 +1766,84 @@ "stack-trace": "0.0.10" } }, + "@posva/vuefire-core": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@posva/vuefire-core/-/vuefire-core-2.3.0.tgz", + "integrity": "sha512-QXYYjcekmlKgWtrjla3z6FjcAFgzZD2wrHukz40V3c80gbVSBoDjM/oSvrHCwxzhvTg95abkHgE2yEL0UlHJCQ==" + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@types/bytebuffer": { + "version": "5.0.40", + "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.40.tgz", + "integrity": "sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g==", + "requires": { + "@types/long": "*", + "@types/node": "*" + } + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, + "@types/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", + "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + }, "@types/node": { "version": "12.12.17", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.17.tgz", @@ -2041,6 +2372,15 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, + "ascli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", + "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", + "requires": { + "colour": "~0.7.1", + "optjs": "~3.2.2" + } + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -2578,6 +2918,21 @@ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, + "bytebuffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", + "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", + "requires": { + "long": "~3" + }, + "dependencies": { + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" + } + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -3041,7 +3396,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -3051,14 +3405,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3067,7 +3419,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3078,7 +3429,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3087,7 +3437,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -3119,8 +3468,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collection-visit": { "version": "1.0.0", @@ -3177,6 +3525,11 @@ "simple-swizzle": "^0.2.2" } }, + "colour": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", + "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3987,6 +4340,11 @@ } } }, + "dom-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", + "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -4122,6 +4480,14 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4644,6 +5010,14 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, "fd-slicer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", @@ -4754,6 +5128,27 @@ "locate-path": "^3.0.0" } }, + "firebase": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.7.0.tgz", + "integrity": "sha512-rAjobH47rAYMyS4jiJqBATa5fNTqUTHNHvLzoMGzWNbmYqBzKyCk7EySRJek/+ZhfgJRYDfJxIActCTZ1jyN1Q==", + "requires": { + "@firebase/analytics": "0.2.11", + "@firebase/app": "0.5.2", + "@firebase/app-types": "0.5.0", + "@firebase/auth": "0.13.4", + "@firebase/database": "0.5.19", + "@firebase/firestore": "1.9.3", + "@firebase/functions": "0.4.30", + "@firebase/installations": "0.4.0", + "@firebase/messaging": "0.6.2", + "@firebase/performance": "0.2.30", + "@firebase/polyfill": "0.3.31", + "@firebase/remote-config": "0.1.11", + "@firebase/storage": "0.3.24", + "@firebase/util": "0.2.38" + } + }, "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", @@ -5129,6 +5524,459 @@ "iterall": "^1.2.2" } }, + "grpc": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.2.tgz", + "integrity": "sha512-EG3WH6AWMVvAiV15d+lr+K77HJ/KV/3FvMpjKjulXHbTwgDZkhkcWbwhxFAoTdxTkQvy0WFcO3Nog50QBbHZWw==", + "requires": { + "@types/bytebuffer": "^5.0.40", + "lodash.camelcase": "^4.3.0", + "lodash.clone": "^4.5.0", + "nan": "^2.13.2", + "node-pre-gyp": "^0.14.0", + "protobufjs": "^5.0.3" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "chownr": { + "version": "1.1.3", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.4", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "ms": { + "version": "2.1.2", + "bundled": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true + }, + "npm-packlist": { + "version": "1.4.6", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true + }, + "protobufjs": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz", + "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==", + "requires": { + "ascli": "~1", + "bytebuffer": "~5", + "glob": "^7.0.5", + "yargs": "^3.10.0" + } + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "sax": { + "version": "1.2.4", + "bundled": true + }, + "semver": { + "version": "5.7.1", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "3.1.1", + "bundled": true + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } + }, "gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", @@ -5465,6 +6313,11 @@ "toidentifier": "1.0.0" } }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, "http-proxy": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", @@ -5523,6 +6376,11 @@ "postcss": "^7.0.14" } }, + "idb": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", + "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" + }, "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", @@ -5620,8 +6478,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ip": { "version": "1.1.5", @@ -5919,6 +6776,26 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -6091,7 +6968,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -6428,6 +7304,16 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" + }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -6503,6 +7389,11 @@ } } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7190,8 +8081,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nuxt": { "version": "2.11.0", @@ -7368,6 +8258,11 @@ "last-call-webpack-plugin": "^3.0.0" } }, + "optjs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", + "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" + }, "ora": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", @@ -7437,7 +8332,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, "requires": { "lcid": "^1.0.0" } @@ -8730,6 +9624,11 @@ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, + "promise-polyfill": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", + "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" + }, "proper-lockfile": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.1.tgz", @@ -8740,6 +9639,33 @@ "signal-exit": "^3.0.2" } }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==" + } + } + }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -11141,6 +12067,14 @@ "resolved": "https://registry.npmjs.org/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.4.4.tgz", "integrity": "sha512-wU7FDpd9Xy4f62pf8SBg/ak21jMI/pdx4s4JPah+z/zuhmeAafQgp8BjtZvvt+b0BZOsOS1FJuCfUH7azTkivQ==" }, + "vuefire": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vuefire/-/vuefire-2.2.1.tgz", + "integrity": "sha512-Hgb4SJRJJd3+PZk+/YcqK3kjr28nRPHcODSaFRf731bnvdchjN7vDCeovRZNcXqRxLQ46lSyFzmcaZoqv5YdFQ==", + "requires": { + "@posva/vuefire-core": "^2.3.0" + } + }, "vuejs-auto-complete": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/vuejs-auto-complete/-/vuejs-auto-complete-0.9.0.tgz", @@ -12003,6 +12937,26 @@ "wrap-ansi": "^6.0.0" } }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -12061,6 +13015,11 @@ "string-width": "^4.0.0" } }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, "workbox-cdn": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/workbox-cdn/-/workbox-cdn-4.3.1.tgz", @@ -12163,6 +13122,11 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 2a375a7a3..73776225d 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,13 @@ "@nuxtjs/sitemap": "^2.0.1", "@nuxtjs/toast": "^3.3.0", "ace-builds": "^1.4.8", + "firebase": "^7.7.0", "graphql": "^14.5.8", "nuxt": "^2.11.0", "nuxt-i18n": "^6.4.1", "v-tooltip": "^2.0.2", "vue-virtual-scroll-list": "^1.4.4", + "vuefire": "^2.2.1", "vuejs-auto-complete": "^0.9.0", "vuex-persist": "^2.2.0", "yargs-parser": "^16.1.0" From 19a23238802b6fc2eb7d7b9b035b674d898659fc Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Mon, 20 Jan 2020 23:01:31 +0530 Subject: [PATCH 19/70] :recycle: Lint --- .../{BallsFeed.vue => firebase/feeds.vue} | 4 +- .../{InputForm.vue => firebase/inputform.vue} | 4 +- components/{Login.vue => firebase/login.vue} | 5 +-- functions/store.js | 4 +- layouts/default.vue | 42 +++++++------------ 5 files changed, 24 insertions(+), 35 deletions(-) rename components/{BallsFeed.vue => firebase/feeds.vue} (70%) rename components/{InputForm.vue => firebase/inputform.vue} (76%) rename components/{Login.vue => firebase/login.vue} (79%) diff --git a/components/BallsFeed.vue b/components/firebase/feeds.vue similarity index 70% rename from components/BallsFeed.vue rename to components/firebase/feeds.vue index 8e01e2a77..693eaad85 100644 --- a/components/BallsFeed.vue +++ b/components/firebase/feeds.vue @@ -1,14 +1,14 @@ diff --git a/components/firebase/inputform.vue b/components/firebase/inputform.vue index 3b5e8f2c7..baf4cdf48 100644 --- a/components/firebase/inputform.vue +++ b/components/firebase/inputform.vue @@ -16,7 +16,7 @@ export default { }, methods: { formPost() { - store.writeBall(this.message); + store.writeFeed(this.message); this.message = null; this.$refs.inputMessage.focus(); } diff --git a/functions/store.js b/functions/store.js index bddd16e20..4c251d248 100644 --- a/functions/store.js +++ b/functions/store.js @@ -16,15 +16,15 @@ const firebaseConfig = { }; firebase.initializeApp(firebaseConfig); -// a reference to the Balls collection -const ballsCollection = firebase.firestore().collection("balls"); +// a reference to the Feeds collection +const feedsCollection = firebase.firestore().collection("feeds"); // the shared state object that any vue component // can get access to export const store = { - ballsInFeed: null, - currentUser: null, - writeBall: message => { + feedsInFeed: [], + currentUser: {}, + writeFeed: message => { const dt = { createdOn: new Date(), author: store.currentUser.uid, @@ -32,9 +32,15 @@ export const store = { author_image: store.currentUser.photoURL, message }; - return ballsCollection + return feedsCollection .add(dt) .catch(e => console.error("error inserting", dt, e)); + }, + deleteFeed: id => { + return feedsCollection + .doc(id) + .delete() + .catch(e => console.error("error deleting", dt, e)); } }; @@ -42,17 +48,17 @@ export const store = { // in the underlying firestore collection changes // It will get passed an array of references to // the documents that match your query -ballsCollection +feedsCollection .orderBy("createdOn", "desc") - .limit(5) - .onSnapshot(ballsRef => { - const balls = []; - ballsRef.forEach(doc => { - const ball = doc.data(); - ball.id = doc.id; - balls.push(ball); + // .limit(0) + .onSnapshot(feedsRef => { + const feeds = []; + feedsRef.forEach(doc => { + const feed = doc.data(); + feed.id = doc.id; + feeds.push(feed); }); - store.ballsInFeed = balls; + store.feedsInFeed = feeds; }); // When a user logs in or out, save that in the store From 8bc1df9b8e813f115f7de258feb28c127e3ad5ca Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Tue, 21 Jan 2020 11:47:47 +0530 Subject: [PATCH 23/70] :sparkles: Show logged in user image --- assets/css/fonts.scss | 1 + layouts/default.vue | 38 +++++++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/assets/css/fonts.scss b/assets/css/fonts.scss index 313b4b58a..0c714f199 100644 --- a/assets/css/fonts.scss +++ b/assets/css/fonts.scss @@ -27,6 +27,7 @@ -webkit-font-feature-settings: "liga"; -webkit-font-smoothing: antialiased; font-feature-settings: "liga"; + border-radius: 50%; } /* poppins-500 - latin */ diff --git a/layouts/default.vue b/layouts/default.vue index b22777ccb..0f3561ee8 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -290,9 +290,41 @@ - + + + + + + + + + @@ -620,10 +631,22 @@ import intializePwa from "../assets/js/pwa"; import * as version from "../.postwoman/version.json"; import { hasChromeExtensionInstalled } from "../functions/strategies/ChromeStrategy"; + +import firebase from 'firebase/app'; +import 'firebase/auth'; + +import { store } from '../functions/store'; +import Login from '../components/Login'; +import InputForm from '../components/InputForm'; +import BallsFeed from '../components/BallsFeed'; + + export default { components: { logo: () => import("../components/logo"), - modal: () => import("../components/modal") + modal: () => import("../components/modal"), + + Login, InputForm, BallsFeed }, methods: { @@ -632,7 +655,13 @@ export default { "nuxt-link-exact-active": this.$route.path === path, "nuxt-link-active": this.$route.path === path }; - } + }, + + + logout() { + firebase.auth().signOut() + .catch((err) => alert(err.message || err)); + }, }, data() { diff --git a/package-lock.json b/package-lock.json index 596757fe5..eb672b789 100644 --- a/package-lock.json +++ b/package-lock.json @@ -905,6 +905,264 @@ "lodash.once": "^4.1.1" } }, + "@firebase/analytics": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.2.11.tgz", + "integrity": "sha512-2+Z3CBRAExe1Auf9tApnuz6akAdi9DzPUSx/ssKChWbSzInCeaYGN40pKIameux7BAVecZHxZNh5tJmW27lgtw==", + "requires": { + "@firebase/analytics-types": "0.2.5", + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/analytics-types": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.2.5.tgz", + "integrity": "sha512-aa746gTiILMn9TPBJXaYhYqnCL4CQwd4aYTAZseI9RZ/hf117xJTNy9/ZTmG5gl2AqxV0LgtdHYqKAjRlNqPIQ==" + }, + "@firebase/app": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.5.2.tgz", + "integrity": "sha512-QOhSO414Yfc7BAH62QdsFiI/5bNaFrjDMLfRNAqnzGwLkiqIK+QH1Hma7dAF4ff1UjzEpbXQn3rXv7gtAXy6Lw==", + "requires": { + "@firebase/app-types": "0.5.0", + "@firebase/component": "0.1.3", + "@firebase/logger": "0.1.34", + "@firebase/util": "0.2.38", + "dom-storage": "2.1.0", + "tslib": "1.10.0", + "xmlhttprequest": "1.8.0" + } + }, + "@firebase/app-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.5.0.tgz", + "integrity": "sha512-8j+vCXTpAkYGcFk86mPZ90V6HMFmn196RIEW9Opi0PN+VrPFC1l/eW0gptM8v7VXaQhECOxws3TN2g+dDaeSYA==" + }, + "@firebase/auth": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.13.4.tgz", + "integrity": "sha512-dFDuLMHHmigs9ZH56h+UO78SMuvYkwRcPbEudaemYisGLXnYFa0pUKS2WfvA/9d/14X/VnzG8NGApAw5BylpvA==", + "requires": { + "@firebase/auth-types": "0.9.4" + } + }, + "@firebase/auth-interop-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.1.tgz", + "integrity": "sha512-rNpCOyCspZvNDoQVQLQQgWAGBMB2ClCWKN1c8cEFgLNFgnMJrjVB+tcL7KW2q2UjKa7l8Mxgwys7szTiEDAcvA==" + }, + "@firebase/auth-types": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.9.4.tgz", + "integrity": "sha512-06ZrpYz1GaUfIJs7C3Yf4lARH8+2kzgKfgG/9B3FaGHFYLa5U7rLBGGaca4oiVI12jmhe9CV3+M8e3U2CRCr2w==" + }, + "@firebase/component": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.3.tgz", + "integrity": "sha512-PvWS/2TVC5rBKvzxdv91FBPbZxuN2WiwDyO2xaHdtsUkZ+P/E825PIh9en9kR+FSQkTCFRDmboLzispN1Tonrg==", + "requires": { + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/database": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.19.tgz", + "integrity": "sha512-UVd0XTBbA/7mcwGeNwhMFHyrz3uJUyLAUeaROuppfo4bBK0jUhdkwqmeNC+q/Q9vU4GUV0UkMm7XgWlsfI+j8Q==", + "requires": { + "@firebase/auth-interop-types": "0.1.1", + "@firebase/component": "0.1.3", + "@firebase/database-types": "0.4.10", + "@firebase/logger": "0.1.34", + "@firebase/util": "0.2.38", + "faye-websocket": "0.11.3", + "tslib": "1.10.0" + } + }, + "@firebase/database-types": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.10.tgz", + "integrity": "sha512-66puLsckt5HASgRN3CfhLn2iuGrgCjfH3u17OL0f5MtEweYLx+yW2QW5d539Wx30xD4B+INEdaRetw6xEa9t7g==", + "requires": { + "@firebase/app-types": "0.5.0" + } + }, + "@firebase/firestore": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.9.3.tgz", + "integrity": "sha512-FGHZ5Dj+6PTqTDr1eEdEPA3fbzQy5v0i21k2DA1d4bdD20bVWWdOAyoOuku4BawfK7ZzgVJipd2+EH8pWIlwIQ==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/firestore-types": "1.9.0", + "@firebase/logger": "0.1.34", + "@firebase/util": "0.2.38", + "@firebase/webchannel-wrapper": "0.2.35", + "@grpc/proto-loader": "^0.5.0", + "grpc": "1.24.2", + "tslib": "1.10.0" + } + }, + "@firebase/firestore-types": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.9.0.tgz", + "integrity": "sha512-UOtneGMUTLr58P56Y0GT/c4ZyC39vOoRAzgwad4PIsyc7HlKShbHKJpyys/LdlUYIsQdy/2El3Qy1veiBQ+ZJg==" + }, + "@firebase/functions": { + "version": "0.4.30", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.30.tgz", + "integrity": "sha512-gIcmtwn+HF5YnnJmyiK3iRKSLE+Ro92ngmwJEyhupk6PBpuqVF1r22kUlrjFsFlPXEx7TrkWvfZkYbTtLpkRHw==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/functions-types": "0.3.13", + "@firebase/messaging-types": "0.4.1", + "isomorphic-fetch": "2.2.1", + "tslib": "1.10.0" + } + }, + "@firebase/functions-types": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.13.tgz", + "integrity": "sha512-wD075tCmZo+t/GHs5xMhi3irwjbc6SWnjXAIHjuNhVDKic5gQNkHH5QnxX930WPrPhD0RV9wuSP15fy9T1mvjw==" + }, + "@firebase/installations": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.0.tgz", + "integrity": "sha512-eAUrLjDnaKJ0oV4ApKlrS5TQeUv42hA39UZkZXDiMLnH94uPD5YaoGI2aR4H+PlxnGrhCqdh07BIPJY+vcmZgw==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations-types": "0.3.0", + "@firebase/util": "0.2.38", + "idb": "3.0.2", + "tslib": "1.10.0" + } + }, + "@firebase/installations-types": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.0.tgz", + "integrity": "sha512-1W82H1F4WfuWjftMiWLNUTy1w2SD7svn8/U8k6T/CJSnzkET6m+3pPt3Q4FDI6E2zOgU8ZVGWm9IZ4DK84mP/A==" + }, + "@firebase/logger": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.34.tgz", + "integrity": "sha512-J2h6ylpd1IcuonRM3HBdXThitds6aQSIeoPYRPvApSFy82NhFPKRzJlflAhlQWjJOh59/jyQBGWJNxCL6fp4hw==" + }, + "@firebase/messaging": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.6.2.tgz", + "integrity": "sha512-sjdFF3v8Wc0K6r06UvskL/9zHFDbX0ospp1XSdl3OdYdq8mC/z8Fkw8oKN9+0StPWAQx8MdpmxDU/7Ixucf1fg==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/messaging-types": "0.4.1", + "@firebase/util": "0.2.38", + "idb": "3.0.2", + "tslib": "1.10.0" + } + }, + "@firebase/messaging-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.4.1.tgz", + "integrity": "sha512-z2ki1nIE8TYH9LiXdozEzrPi9Cfckh9/x7HbDfj5KoVFYYvwLndUczstpKm2hvAUD3GuJF0JRUuxMHpJ6pwqzQ==" + }, + "@firebase/performance": { + "version": "0.2.30", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.30.tgz", + "integrity": "sha512-XxkiJIiEPnJUOrtv0h0AvDmcTyiYbhGfH12WksN9d53O61aTRUsjngHN6lEtlMud+0yEi6Q09pi4U+KBGm8yZQ==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/logger": "0.1.34", + "@firebase/performance-types": "0.0.8", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/performance-types": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.8.tgz", + "integrity": "sha512-3RK15Bct9PRdr0YBdbZV2KTi5yrPzscJVEsdnsLHuwXBntqlQaouQqwlCNFn25dtCMY0cgV/yiaFmuo13mbJ8A==" + }, + "@firebase/polyfill": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.31.tgz", + "integrity": "sha512-7XItMz50tdba57tCOTCSH8REvHYbrTU7MBOksnNZ3td/J9W/RkCPcLVSSnFWNmn0Jv1aufpUevryX1J4DZ/oiw==", + "requires": { + "core-js": "3.6.2", + "promise-polyfill": "8.1.3", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "core-js": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.2.tgz", + "integrity": "sha512-hIE5dXkRzRvnZ5vhkRfQxUvDxQZmD9oueA08jDYRBKJHx+VIl/Pne/e0A4x9LObEEthC/TqiZybUoNM4tRgnKg==" + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + } + } + }, + "@firebase/remote-config": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.11.tgz", + "integrity": "sha512-AsrwmtYVkU1ZqUujV1i2wt0XK2Zph6gBeOIPEo+xD4uyzXoqTHUaW5ZPTBzjYCw1KDKTL6ciXXxk5c+cfNzjyg==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/installations": "0.4.0", + "@firebase/logger": "0.1.34", + "@firebase/remote-config-types": "0.1.5", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/remote-config-types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.5.tgz", + "integrity": "sha512-1JR0XGVN0dNKJlu5sMYh0qL0jC85xNgXfUquUGNHhy9lH3++t1gD91MeiDBgxI73oFQR7PEPeu+CTeDS0g8lWQ==" + }, + "@firebase/storage": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.24.tgz", + "integrity": "sha512-hwk5ObwtqcfMFOnd4BcCpCPlr13L686iRAaa7qlOEimx0CizWD1QRmduDuxjuxHsqNnSr3QIUleG48Z8gKOg6A==", + "requires": { + "@firebase/component": "0.1.3", + "@firebase/storage-types": "0.3.8", + "@firebase/util": "0.2.38", + "tslib": "1.10.0" + } + }, + "@firebase/storage-types": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.8.tgz", + "integrity": "sha512-F0ED2WZaGjhjEdOk85c/1ikDQdWM1NiATFuTmRsaGYZyoERiwh/Mr6FnjqnLIeiJZqa6v2hk/aUgKosXjMWH/Q==" + }, + "@firebase/util": { + "version": "0.2.38", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.38.tgz", + "integrity": "sha512-EcTQWuWrUG7wgU8IGx50Zd/xE1DdwmYpMAIElsu5G5RPAJJ9VoAOAnxyRBPrrHmFeSLJpGtKPxc/rJXnEaGrXw==", + "requires": { + "tslib": "1.10.0" + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.35.tgz", + "integrity": "sha512-7njiGBbFW0HCnuKNEJLcQt9EjfOzG8EJiXlFJwA3XfgiFxPVHmXrcF4d5yold2wfiwCwrXpeNTGZ854oRr6Hcw==" + }, + "@grpc/proto-loader": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.3.tgz", + "integrity": "sha512-8qvUtGg77G2ZT2HqdqYoM/OY97gQd/0crSG34xNmZ4ZOsv3aQT/FQV9QfZPazTGna6MIoyUd+u6AxsoZjJ/VMQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + } + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -1508,11 +1766,84 @@ "stack-trace": "0.0.10" } }, + "@posva/vuefire-core": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@posva/vuefire-core/-/vuefire-core-2.3.0.tgz", + "integrity": "sha512-QXYYjcekmlKgWtrjla3z6FjcAFgzZD2wrHukz40V3c80gbVSBoDjM/oSvrHCwxzhvTg95abkHgE2yEL0UlHJCQ==" + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, + "@types/bytebuffer": { + "version": "5.0.40", + "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.40.tgz", + "integrity": "sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g==", + "requires": { + "@types/long": "*", + "@types/node": "*" + } + }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, + "@types/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", + "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + }, "@types/node": { "version": "12.12.17", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.17.tgz", @@ -2041,6 +2372,15 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, + "ascli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", + "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", + "requires": { + "colour": "~0.7.1", + "optjs": "~3.2.2" + } + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -2578,6 +2918,21 @@ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, + "bytebuffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", + "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", + "requires": { + "long": "~3" + }, + "dependencies": { + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" + } + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -3041,7 +3396,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -3051,14 +3405,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3067,7 +3419,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3078,7 +3429,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3087,7 +3437,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -3119,8 +3468,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collection-visit": { "version": "1.0.0", @@ -3177,6 +3525,11 @@ "simple-swizzle": "^0.2.2" } }, + "colour": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", + "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3987,6 +4340,11 @@ } } }, + "dom-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", + "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -4122,6 +4480,14 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4644,6 +5010,14 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, "fd-slicer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", @@ -4754,6 +5128,27 @@ "locate-path": "^3.0.0" } }, + "firebase": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.7.0.tgz", + "integrity": "sha512-rAjobH47rAYMyS4jiJqBATa5fNTqUTHNHvLzoMGzWNbmYqBzKyCk7EySRJek/+ZhfgJRYDfJxIActCTZ1jyN1Q==", + "requires": { + "@firebase/analytics": "0.2.11", + "@firebase/app": "0.5.2", + "@firebase/app-types": "0.5.0", + "@firebase/auth": "0.13.4", + "@firebase/database": "0.5.19", + "@firebase/firestore": "1.9.3", + "@firebase/functions": "0.4.30", + "@firebase/installations": "0.4.0", + "@firebase/messaging": "0.6.2", + "@firebase/performance": "0.2.30", + "@firebase/polyfill": "0.3.31", + "@firebase/remote-config": "0.1.11", + "@firebase/storage": "0.3.24", + "@firebase/util": "0.2.38" + } + }, "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", @@ -5129,6 +5524,459 @@ "iterall": "^1.2.2" } }, + "grpc": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.2.tgz", + "integrity": "sha512-EG3WH6AWMVvAiV15d+lr+K77HJ/KV/3FvMpjKjulXHbTwgDZkhkcWbwhxFAoTdxTkQvy0WFcO3Nog50QBbHZWw==", + "requires": { + "@types/bytebuffer": "^5.0.40", + "lodash.camelcase": "^4.3.0", + "lodash.clone": "^4.5.0", + "nan": "^2.13.2", + "node-pre-gyp": "^0.14.0", + "protobufjs": "^5.0.3" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "chownr": { + "version": "1.1.3", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.4", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "ms": { + "version": "2.1.2", + "bundled": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true + }, + "npm-packlist": { + "version": "1.4.6", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true + }, + "protobufjs": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz", + "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==", + "requires": { + "ascli": "~1", + "bytebuffer": "~5", + "glob": "^7.0.5", + "yargs": "^3.10.0" + } + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "sax": { + "version": "1.2.4", + "bundled": true + }, + "semver": { + "version": "5.7.1", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "3.1.1", + "bundled": true + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } + }, "gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", @@ -5465,6 +6313,11 @@ "toidentifier": "1.0.0" } }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, "http-proxy": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", @@ -5523,6 +6376,11 @@ "postcss": "^7.0.14" } }, + "idb": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", + "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" + }, "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", @@ -5620,8 +6478,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ip": { "version": "1.1.5", @@ -5919,6 +6776,26 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -6091,7 +6968,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -6428,6 +7304,16 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" + }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -6503,6 +7389,11 @@ } } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7190,8 +8081,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nuxt": { "version": "2.11.0", @@ -7368,6 +8258,11 @@ "last-call-webpack-plugin": "^3.0.0" } }, + "optjs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", + "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" + }, "ora": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", @@ -7437,7 +8332,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, "requires": { "lcid": "^1.0.0" } @@ -8730,6 +9624,11 @@ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, + "promise-polyfill": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", + "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" + }, "proper-lockfile": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.1.tgz", @@ -8740,6 +9639,33 @@ "signal-exit": "^3.0.2" } }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==" + } + } + }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -11141,6 +12067,14 @@ "resolved": "https://registry.npmjs.org/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.4.4.tgz", "integrity": "sha512-wU7FDpd9Xy4f62pf8SBg/ak21jMI/pdx4s4JPah+z/zuhmeAafQgp8BjtZvvt+b0BZOsOS1FJuCfUH7azTkivQ==" }, + "vuefire": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vuefire/-/vuefire-2.2.1.tgz", + "integrity": "sha512-Hgb4SJRJJd3+PZk+/YcqK3kjr28nRPHcODSaFRf731bnvdchjN7vDCeovRZNcXqRxLQ46lSyFzmcaZoqv5YdFQ==", + "requires": { + "@posva/vuefire-core": "^2.3.0" + } + }, "vuejs-auto-complete": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/vuejs-auto-complete/-/vuejs-auto-complete-0.9.0.tgz", @@ -12003,6 +12937,26 @@ "wrap-ansi": "^6.0.0" } }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -12061,6 +13015,11 @@ "string-width": "^4.0.0" } }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, "workbox-cdn": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/workbox-cdn/-/workbox-cdn-4.3.1.tgz", @@ -12163,6 +13122,11 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 2a375a7a3..73776225d 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,13 @@ "@nuxtjs/sitemap": "^2.0.1", "@nuxtjs/toast": "^3.3.0", "ace-builds": "^1.4.8", + "firebase": "^7.7.0", "graphql": "^14.5.8", "nuxt": "^2.11.0", "nuxt-i18n": "^6.4.1", "v-tooltip": "^2.0.2", "vue-virtual-scroll-list": "^1.4.4", + "vuefire": "^2.2.1", "vuejs-auto-complete": "^0.9.0", "vuex-persist": "^2.2.0", "yargs-parser": "^16.1.0" From 67bcf91073f617b387c8e0675ecb0036af56d575 Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Mon, 20 Jan 2020 23:01:31 +0530 Subject: [PATCH 53/70] :recycle: Lint --- .../{BallsFeed.vue => firebase/feeds.vue} | 4 +-- .../{InputForm.vue => firebase/inputform.vue} | 4 +-- components/{Login.vue => firebase/login.vue} | 5 ++-- functions/store.js | 4 +-- layouts/default.vue | 30 +++++++++---------- 5 files changed, 22 insertions(+), 25 deletions(-) rename components/{BallsFeed.vue => firebase/feeds.vue} (70%) rename components/{InputForm.vue => firebase/inputform.vue} (76%) rename components/{Login.vue => firebase/login.vue} (79%) diff --git a/components/BallsFeed.vue b/components/firebase/feeds.vue similarity index 70% rename from components/BallsFeed.vue rename to components/firebase/feeds.vue index 8e01e2a77..693eaad85 100644 --- a/components/BallsFeed.vue +++ b/components/firebase/feeds.vue @@ -1,14 +1,14 @@ diff --git a/components/firebase/inputform.vue b/components/firebase/inputform.vue index 3b5e8f2c7..baf4cdf48 100644 --- a/components/firebase/inputform.vue +++ b/components/firebase/inputform.vue @@ -16,7 +16,7 @@ export default { }, methods: { formPost() { - store.writeBall(this.message); + store.writeFeed(this.message); this.message = null; this.$refs.inputMessage.focus(); } diff --git a/functions/store.js b/functions/store.js index bddd16e20..4c251d248 100644 --- a/functions/store.js +++ b/functions/store.js @@ -16,15 +16,15 @@ const firebaseConfig = { }; firebase.initializeApp(firebaseConfig); -// a reference to the Balls collection -const ballsCollection = firebase.firestore().collection("balls"); +// a reference to the Feeds collection +const feedsCollection = firebase.firestore().collection("feeds"); // the shared state object that any vue component // can get access to export const store = { - ballsInFeed: null, - currentUser: null, - writeBall: message => { + feedsInFeed: [], + currentUser: {}, + writeFeed: message => { const dt = { createdOn: new Date(), author: store.currentUser.uid, @@ -32,9 +32,15 @@ export const store = { author_image: store.currentUser.photoURL, message }; - return ballsCollection + return feedsCollection .add(dt) .catch(e => console.error("error inserting", dt, e)); + }, + deleteFeed: id => { + return feedsCollection + .doc(id) + .delete() + .catch(e => console.error("error deleting", dt, e)); } }; @@ -42,17 +48,17 @@ export const store = { // in the underlying firestore collection changes // It will get passed an array of references to // the documents that match your query -ballsCollection +feedsCollection .orderBy("createdOn", "desc") - .limit(5) - .onSnapshot(ballsRef => { - const balls = []; - ballsRef.forEach(doc => { - const ball = doc.data(); - ball.id = doc.id; - balls.push(ball); + // .limit(0) + .onSnapshot(feedsRef => { + const feeds = []; + feedsRef.forEach(doc => { + const feed = doc.data(); + feed.id = doc.id; + feeds.push(feed); }); - store.ballsInFeed = balls; + store.feedsInFeed = feeds; }); // When a user logs in or out, save that in the store From 94d0bf59b2d46b9f3f7ca532fde263daf489ed5c Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Tue, 21 Jan 2020 11:47:47 +0530 Subject: [PATCH 57/70] :sparkles: Show logged in user image --- assets/css/fonts.scss | 1 + layouts/default.vue | 38 +++++++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/assets/css/fonts.scss b/assets/css/fonts.scss index 313b4b58a..0c714f199 100644 --- a/assets/css/fonts.scss +++ b/assets/css/fonts.scss @@ -27,6 +27,7 @@ -webkit-font-feature-settings: "liga"; -webkit-font-smoothing: antialiased; font-feature-settings: "liga"; + border-radius: 50%; } /* poppins-500 - latin */ diff --git a/layouts/default.vue b/layouts/default.vue index fd1e5f0d0..88ff392c6 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -290,9 +290,41 @@ - + + + +