) => {
12 | e.preventDefault()
13 | if (editedNews.id === '') {
14 | createNewsMutation.mutate(editedNews.content)
15 | } else {
16 | updateNewsMutation.mutate(editedNews)
17 | }
18 | }
19 | if (createNewsMutation.error || updateNewsMutation.error) {
20 | return {'Error'}
21 | }
22 | return (
23 |
24 |
41 |
42 | )
43 | }
44 | export const NewsEditMemo = memo(NewsEdit)
45 |
--------------------------------------------------------------------------------
/components/NewsItem.tsx:
--------------------------------------------------------------------------------
1 | import { VFC, memo } from 'react'
2 | import { useDispatch } from 'react-redux'
3 | import { setEditedNews } from '../slices/uiSlice'
4 | import { PencilAltIcon, TrashIcon } from '@heroicons/react/solid'
5 | import { useAppMutate } from '../hooks/useAppMutate'
6 | import { News } from '../types/types'
7 |
8 | interface Props {
9 | news: News
10 | }
11 |
12 | const NewsItem: VFC = ({ news }) => {
13 | const dispatch = useDispatch()
14 | const { deleteNewsMutation } = useAppMutate()
15 |
16 | if (deleteNewsMutation.isLoading) {
17 | return Deleting...
18 | }
19 | if (deleteNewsMutation.error) {
20 | return Error
21 | }
22 | return (
23 |
24 | {news.content}
25 |
26 |
{
29 | dispatch(
30 | setEditedNews({
31 | id: news.id,
32 | content: news.content,
33 | })
34 | )
35 | }}
36 | />
37 | {
40 | deleteNewsMutation.mutate(news.id)
41 | }}
42 | />
43 |
44 |
45 | )
46 | }
47 | export const NewsItemMemo = memo(NewsItem)
48 |
--------------------------------------------------------------------------------
/components/NewsList.tsx:
--------------------------------------------------------------------------------
1 | import { VFC, memo } from 'react'
2 | import { useQueryNews } from '../hooks/useQueryNews'
3 | import { NewsItemMemo } from './NewsItem'
4 |
5 | const NewsList: VFC = () => {
6 | const { status, data } = useQueryNews()
7 | if (status === 'loading') return {'Loading...'}
8 | if (status === 'error') return {'Error'}
9 | return (
10 |
11 | {data?.map((news) => (
12 |
13 | ))}
14 |
15 | )
16 | }
17 | export const NewsListMemo = memo(NewsList)
18 |
--------------------------------------------------------------------------------
/components/TaskEdit.tsx:
--------------------------------------------------------------------------------
1 | import { VFC, memo, FormEvent } from 'react'
2 | import { useAppMutate } from '../hooks/useAppMutate'
3 | import { useSelector, useDispatch } from 'react-redux'
4 | import { setEditedTask, selectTask } from '../slices/uiSlice'
5 |
6 | const TaskEdit: VFC = () => {
7 | const dispatch = useDispatch()
8 | const editedTask = useSelector(selectTask)
9 | const { createTaskMutation, updateTaskMutation } = useAppMutate()
10 | const submitHandler = (e: FormEvent) => {
11 | e.preventDefault()
12 | if (editedTask.id === '') {
13 | createTaskMutation.mutate(editedTask.title)
14 | } else {
15 | updateTaskMutation.mutate(editedTask)
16 | }
17 | }
18 | if (createTaskMutation.error || updateTaskMutation.error) {
19 | return {'Error'}
20 | }
21 | return (
22 |
23 |
40 |
41 | )
42 | }
43 | export const TaskEditMemo = memo(TaskEdit)
44 |
--------------------------------------------------------------------------------
/components/TaskItem.tsx:
--------------------------------------------------------------------------------
1 | import { VFC, memo } from 'react'
2 | import { useDispatch } from 'react-redux'
3 | import { setEditedTask } from '../slices/uiSlice'
4 | import { PencilAltIcon, TrashIcon } from '@heroicons/react/solid'
5 | import { useAppMutate } from '../hooks/useAppMutate'
6 | import { Task } from '../types/types'
7 |
8 | interface Props {
9 | task: Task
10 | }
11 |
12 | const TaskItem: VFC = ({ task }) => {
13 | const dispatch = useDispatch()
14 | const { deleteTaskMutation } = useAppMutate()
15 | if (deleteTaskMutation.isLoading) {
16 | return Deleting...
17 | }
18 | if (deleteTaskMutation.error) {
19 | return Error
20 | }
21 | return (
22 |
23 | {task.title}
24 |
25 |
{
28 | dispatch(
29 | setEditedTask({
30 | id: task.id,
31 | title: task.title,
32 | })
33 | )
34 | }}
35 | />
36 | {
39 | deleteTaskMutation.mutate(task.id)
40 | }}
41 | />
42 |
43 |
44 | )
45 | }
46 | export const TaskItemMemo = memo(TaskItem)
47 |
--------------------------------------------------------------------------------
/components/TaskList.tsx:
--------------------------------------------------------------------------------
1 | import { VFC, memo } from 'react'
2 | import { useQueryTasks } from '../hooks/useQueryTasks'
3 | import { TaskItemMemo } from './TaskItem'
4 |
5 | const TaskList: VFC = () => {
6 | const { status, data } = useQueryTasks()
7 | if (status === 'loading') return {'Loading...'}
8 | if (status === 'error') return {'Error'}
9 | return (
10 |
11 | {data?.map((task) => (
12 |
13 | ))}
14 |
15 | )
16 | }
17 | export const TaskListMemo = memo(TaskList)
18 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "functions": {
3 | "predeploy": [
4 | "npm --prefix \"$RESOURCE_DIR\" run lint",
5 | "npm --prefix \"$RESOURCE_DIR\" run build"
6 | ]
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/firebaseConfig.ts:
--------------------------------------------------------------------------------
1 | import firebase from 'firebase/app'
2 | import 'firebase/auth'
3 | import 'firebase/firestore'
4 |
5 | !firebase.apps.length
6 | ? firebase.initializeApp({
7 | apiKey: process.env.NEXT_PUBLIC_FIREBASE_APIKEY,
8 | authDomain: process.env.NEXT_PUBLIC_FIREBASE_DOMAIN,
9 | projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
10 | storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
11 | messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_SENDER_ID,
12 | appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
13 | })
14 | : firebase.app()
15 |
16 | export default firebase
17 |
--------------------------------------------------------------------------------
/functions/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | browser: true,
4 | es6: true,
5 | node: true,
6 | },
7 | extends: [
8 | "plugin:import/errors",
9 | "plugin:import/warnings",
10 | "plugin:import/typescript",
11 | ],
12 | parser: "@typescript-eslint/parser",
13 | parserOptions: {
14 | project: "tsconfig.json",
15 | sourceType: "module",
16 | },
17 | plugins: [
18 | "@typescript-eslint",
19 | "import",
20 | ],
21 | rules: {
22 | "@typescript-eslint/adjacent-overload-signatures": "error",
23 | "@typescript-eslint/no-empty-function": "error",
24 | "@typescript-eslint/no-empty-interface": "warn",
25 | "@typescript-eslint/no-floating-promises": "error",
26 | "@typescript-eslint/no-namespace": "error",
27 | "@typescript-eslint/no-unnecessary-type-assertion": "error",
28 | "@typescript-eslint/prefer-for-of": "warn",
29 | "@typescript-eslint/triple-slash-reference": "error",
30 | "@typescript-eslint/unified-signatures": "warn",
31 | "comma-dangle": "warn",
32 | "constructor-super": "error",
33 | eqeqeq: ["warn", "always"],
34 | "import/no-deprecated": "warn",
35 | "import/no-extraneous-dependencies": "error",
36 | "import/no-unassigned-import": "warn",
37 | "no-cond-assign": "error",
38 | "no-duplicate-case": "error",
39 | "no-duplicate-imports": "error",
40 | "no-empty": [
41 | "error",
42 | {
43 | allowEmptyCatch: true,
44 | },
45 | ],
46 | "no-invalid-this": "error",
47 | "no-new-wrappers": "error",
48 | "no-param-reassign": "error",
49 | "no-redeclare": "error",
50 | "no-sequences": "error",
51 | "no-shadow": [
52 | "error",
53 | {
54 | hoist: "all",
55 | },
56 | ],
57 | "no-throw-literal": "error",
58 | "no-unsafe-finally": "error",
59 | "no-unused-labels": "error",
60 | "no-var": "warn",
61 | "no-void": "error",
62 | "prefer-const": "warn",
63 | },
64 | settings: {
65 | jsdoc: {
66 | tagNamePreference: {
67 | returns: "return",
68 | },
69 | },
70 | },
71 | };
72 |
--------------------------------------------------------------------------------
/functions/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled JavaScript files
2 | **/*.js
3 | **/*.js.map
4 |
5 | # Except the ESLint config file
6 | !.eslintrc.js
7 |
8 | # TypeScript v1 declaration files
9 | typings/
10 |
11 | # Node.js dependency directory
12 | node_modules/
13 |
--------------------------------------------------------------------------------
/functions/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "functions",
3 | "requires": true,
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "@babel/code-frame": {
7 | "version": "7.12.11",
8 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
9 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
10 | "dev": true,
11 | "requires": {
12 | "@babel/highlight": "^7.10.4"
13 | }
14 | },
15 | "@babel/helper-validator-identifier": {
16 | "version": "7.14.5",
17 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz",
18 | "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==",
19 | "dev": true
20 | },
21 | "@babel/highlight": {
22 | "version": "7.14.5",
23 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
24 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
25 | "dev": true,
26 | "requires": {
27 | "@babel/helper-validator-identifier": "^7.14.5",
28 | "chalk": "^2.0.0",
29 | "js-tokens": "^4.0.0"
30 | },
31 | "dependencies": {
32 | "ansi-styles": {
33 | "version": "3.2.1",
34 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
35 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
36 | "dev": true,
37 | "requires": {
38 | "color-convert": "^1.9.0"
39 | }
40 | },
41 | "chalk": {
42 | "version": "2.4.2",
43 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
44 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
45 | "dev": true,
46 | "requires": {
47 | "ansi-styles": "^3.2.1",
48 | "escape-string-regexp": "^1.0.5",
49 | "supports-color": "^5.3.0"
50 | }
51 | },
52 | "color-convert": {
53 | "version": "1.9.3",
54 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
55 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
56 | "dev": true,
57 | "requires": {
58 | "color-name": "1.1.3"
59 | }
60 | },
61 | "color-name": {
62 | "version": "1.1.3",
63 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
64 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
65 | "dev": true
66 | },
67 | "escape-string-regexp": {
68 | "version": "1.0.5",
69 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
70 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
71 | "dev": true
72 | }
73 | }
74 | },
75 | "@eslint/eslintrc": {
76 | "version": "0.4.2",
77 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz",
78 | "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==",
79 | "dev": true,
80 | "requires": {
81 | "ajv": "^6.12.4",
82 | "debug": "^4.1.1",
83 | "espree": "^7.3.0",
84 | "globals": "^13.9.0",
85 | "ignore": "^4.0.6",
86 | "import-fresh": "^3.2.1",
87 | "js-yaml": "^3.13.1",
88 | "minimatch": "^3.0.4",
89 | "strip-json-comments": "^3.1.1"
90 | }
91 | },
92 | "@firebase/app-types": {
93 | "version": "0.6.2",
94 | "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.2.tgz",
95 | "integrity": "sha512-2VXvq/K+n8XMdM4L2xy5bYp2ZXMawJXluUIDzUBvMthVR+lhxK4pfFiqr1mmDbv9ydXvEAuFsD+6DpcZuJcSSw=="
96 | },
97 | "@firebase/auth-interop-types": {
98 | "version": "0.1.6",
99 | "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz",
100 | "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g=="
101 | },
102 | "@firebase/component": {
103 | "version": "0.5.2",
104 | "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.2.tgz",
105 | "integrity": "sha512-QT+o6VaBCz/k8wmC/DErU9dQK2QeIoHtkBkryZVTSRkrvulglEWNIpbPp86UbuqZZd1wwzoh6m7BL6JbdEp9SQ==",
106 | "requires": {
107 | "@firebase/util": "1.1.0",
108 | "tslib": "^2.1.0"
109 | }
110 | },
111 | "@firebase/database": {
112 | "version": "0.10.4",
113 | "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.10.4.tgz",
114 | "integrity": "sha512-Mi6fJGzv9JH+GoYhgzSQAxsUhanW4jU6lqe/9kTyxNxHd+asphoJXJcKDs97uxRaowmSzu5LSAkGlWe63vJ7wA==",
115 | "requires": {
116 | "@firebase/auth-interop-types": "0.1.6",
117 | "@firebase/component": "0.5.2",
118 | "@firebase/database-types": "0.7.2",
119 | "@firebase/logger": "0.2.6",
120 | "@firebase/util": "1.1.0",
121 | "faye-websocket": "0.11.3",
122 | "tslib": "^2.1.0"
123 | }
124 | },
125 | "@firebase/database-types": {
126 | "version": "0.7.2",
127 | "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.2.tgz",
128 | "integrity": "sha512-cdAd/dgwvC0r3oLEDUR+ULs1vBsEvy0b27nlzKhU6LQgm9fCDzgaH9nFGv8x+S9dly4B0egAXkONkVoWcOAisg==",
129 | "requires": {
130 | "@firebase/app-types": "0.6.2"
131 | }
132 | },
133 | "@firebase/logger": {
134 | "version": "0.2.6",
135 | "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz",
136 | "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw=="
137 | },
138 | "@firebase/util": {
139 | "version": "1.1.0",
140 | "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.1.0.tgz",
141 | "integrity": "sha512-lfuSASuPKNdfebuFR8rjFamMQUPH9iiZHcKS755Rkm/5gRT0qC7BMhCh3ZkHf7NVbplzIc/GhmX2jM+igDRCag==",
142 | "requires": {
143 | "tslib": "^2.1.0"
144 | }
145 | },
146 | "@google-cloud/common": {
147 | "version": "3.6.0",
148 | "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.6.0.tgz",
149 | "integrity": "sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q==",
150 | "optional": true,
151 | "requires": {
152 | "@google-cloud/projectify": "^2.0.0",
153 | "@google-cloud/promisify": "^2.0.0",
154 | "arrify": "^2.0.1",
155 | "duplexify": "^4.1.1",
156 | "ent": "^2.2.0",
157 | "extend": "^3.0.2",
158 | "google-auth-library": "^7.0.2",
159 | "retry-request": "^4.1.1",
160 | "teeny-request": "^7.0.0"
161 | }
162 | },
163 | "@google-cloud/firestore": {
164 | "version": "4.12.2",
165 | "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.12.2.tgz",
166 | "integrity": "sha512-5rurTAJXQ0SANEf8K9eA2JAB5zAh+pu4tGRnkZx5gBWQLZXdBFdtepS+irvKuSXw1KbeAQOuRANSc/nguys6SQ==",
167 | "optional": true,
168 | "requires": {
169 | "fast-deep-equal": "^3.1.1",
170 | "functional-red-black-tree": "^1.0.1",
171 | "google-gax": "^2.12.0",
172 | "protobufjs": "^6.8.6"
173 | }
174 | },
175 | "@google-cloud/paginator": {
176 | "version": "3.0.5",
177 | "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.5.tgz",
178 | "integrity": "sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw==",
179 | "optional": true,
180 | "requires": {
181 | "arrify": "^2.0.0",
182 | "extend": "^3.0.2"
183 | }
184 | },
185 | "@google-cloud/projectify": {
186 | "version": "2.1.0",
187 | "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.0.tgz",
188 | "integrity": "sha512-qbpidP/fOvQNz3nyabaVnZqcED1NNzf7qfeOlgtAZd9knTwY+KtsGRkYpiQzcATABy4gnGP2lousM3S0nuWVzA==",
189 | "optional": true
190 | },
191 | "@google-cloud/promisify": {
192 | "version": "2.0.3",
193 | "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz",
194 | "integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==",
195 | "optional": true
196 | },
197 | "@google-cloud/storage": {
198 | "version": "5.8.5",
199 | "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.8.5.tgz",
200 | "integrity": "sha512-i0gB9CRwQeOBYP7xuvn14M40LhHCwMjceBjxE4CTvsqL519sVY5yVKxLiAedHWGwUZHJNRa7Q2CmNfkdRwVNPg==",
201 | "optional": true,
202 | "requires": {
203 | "@google-cloud/common": "^3.6.0",
204 | "@google-cloud/paginator": "^3.0.0",
205 | "@google-cloud/promisify": "^2.0.0",
206 | "arrify": "^2.0.0",
207 | "async-retry": "^1.3.1",
208 | "compressible": "^2.0.12",
209 | "date-and-time": "^1.0.0",
210 | "duplexify": "^4.0.0",
211 | "extend": "^3.0.2",
212 | "gaxios": "^4.0.0",
213 | "gcs-resumable-upload": "^3.1.4",
214 | "get-stream": "^6.0.0",
215 | "hash-stream-validation": "^0.2.2",
216 | "mime": "^2.2.0",
217 | "mime-types": "^2.0.8",
218 | "onetime": "^5.1.0",
219 | "p-limit": "^3.0.1",
220 | "pumpify": "^2.0.0",
221 | "snakeize": "^0.1.0",
222 | "stream-events": "^1.0.1",
223 | "xdg-basedir": "^4.0.0"
224 | }
225 | },
226 | "@grpc/grpc-js": {
227 | "version": "1.3.2",
228 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.2.tgz",
229 | "integrity": "sha512-UXepkOKCATJrhHGsxt+CGfpZy9zUn1q9mop5kfcXq1fBkTePxVNPOdnISlCbJFlCtld+pSLGyZCzr9/zVprFKA==",
230 | "optional": true,
231 | "requires": {
232 | "@types/node": ">=12.12.47"
233 | }
234 | },
235 | "@grpc/proto-loader": {
236 | "version": "0.6.2",
237 | "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.2.tgz",
238 | "integrity": "sha512-q2Qle60Ht2OQBCp9S5hv1JbI4uBBq6/mqSevFNK3ZEgRDBCAkWqZPUhD/K9gXOHrHKluliHiVq2L9sw1mVyAIg==",
239 | "optional": true,
240 | "requires": {
241 | "@types/long": "^4.0.1",
242 | "lodash.camelcase": "^4.3.0",
243 | "long": "^4.0.0",
244 | "protobufjs": "^6.10.0",
245 | "yargs": "^16.1.1"
246 | }
247 | },
248 | "@panva/asn1.js": {
249 | "version": "1.0.0",
250 | "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz",
251 | "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw=="
252 | },
253 | "@protobufjs/aspromise": {
254 | "version": "1.1.2",
255 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
256 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=",
257 | "optional": true
258 | },
259 | "@protobufjs/base64": {
260 | "version": "1.1.2",
261 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
262 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
263 | "optional": true
264 | },
265 | "@protobufjs/codegen": {
266 | "version": "2.0.4",
267 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
268 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
269 | "optional": true
270 | },
271 | "@protobufjs/eventemitter": {
272 | "version": "1.1.0",
273 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
274 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=",
275 | "optional": true
276 | },
277 | "@protobufjs/fetch": {
278 | "version": "1.1.0",
279 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
280 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
281 | "optional": true,
282 | "requires": {
283 | "@protobufjs/aspromise": "^1.1.1",
284 | "@protobufjs/inquire": "^1.1.0"
285 | }
286 | },
287 | "@protobufjs/float": {
288 | "version": "1.0.2",
289 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
290 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=",
291 | "optional": true
292 | },
293 | "@protobufjs/inquire": {
294 | "version": "1.1.0",
295 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
296 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=",
297 | "optional": true
298 | },
299 | "@protobufjs/path": {
300 | "version": "1.1.2",
301 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
302 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=",
303 | "optional": true
304 | },
305 | "@protobufjs/pool": {
306 | "version": "1.1.0",
307 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
308 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=",
309 | "optional": true
310 | },
311 | "@protobufjs/utf8": {
312 | "version": "1.1.0",
313 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
314 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
315 | "optional": true
316 | },
317 | "@tootallnate/once": {
318 | "version": "1.1.2",
319 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
320 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
321 | "optional": true
322 | },
323 | "@types/body-parser": {
324 | "version": "1.19.0",
325 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
326 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
327 | "requires": {
328 | "@types/connect": "*",
329 | "@types/node": "*"
330 | }
331 | },
332 | "@types/connect": {
333 | "version": "3.4.34",
334 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz",
335 | "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==",
336 | "requires": {
337 | "@types/node": "*"
338 | }
339 | },
340 | "@types/eslint-visitor-keys": {
341 | "version": "1.0.0",
342 | "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
343 | "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
344 | "dev": true
345 | },
346 | "@types/express": {
347 | "version": "4.17.12",
348 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz",
349 | "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==",
350 | "requires": {
351 | "@types/body-parser": "*",
352 | "@types/express-serve-static-core": "^4.17.18",
353 | "@types/qs": "*",
354 | "@types/serve-static": "*"
355 | }
356 | },
357 | "@types/express-jwt": {
358 | "version": "0.0.42",
359 | "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz",
360 | "integrity": "sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==",
361 | "requires": {
362 | "@types/express": "*",
363 | "@types/express-unless": "*"
364 | }
365 | },
366 | "@types/express-serve-static-core": {
367 | "version": "4.17.21",
368 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.21.tgz",
369 | "integrity": "sha512-gwCiEZqW6f7EoR8TTEfalyEhb1zA5jQJnRngr97+3pzMaO1RKoI1w2bw07TK72renMUVWcWS5mLI6rk1NqN0nA==",
370 | "requires": {
371 | "@types/node": "*",
372 | "@types/qs": "*",
373 | "@types/range-parser": "*"
374 | }
375 | },
376 | "@types/express-unless": {
377 | "version": "0.5.1",
378 | "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.1.tgz",
379 | "integrity": "sha512-5fuvg7C69lemNgl0+v+CUxDYWVPSfXHhJPst4yTLcqi4zKJpORCxnDrnnilk3k0DTq/WrAUdvXFs01+vUqUZHw==",
380 | "requires": {
381 | "@types/express": "*"
382 | }
383 | },
384 | "@types/json-schema": {
385 | "version": "7.0.7",
386 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
387 | "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==",
388 | "dev": true
389 | },
390 | "@types/json5": {
391 | "version": "0.0.29",
392 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
393 | "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
394 | "dev": true
395 | },
396 | "@types/lodash": {
397 | "version": "4.14.170",
398 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz",
399 | "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==",
400 | "dev": true
401 | },
402 | "@types/long": {
403 | "version": "4.0.1",
404 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
405 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==",
406 | "optional": true
407 | },
408 | "@types/mime": {
409 | "version": "1.3.2",
410 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
411 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
412 | },
413 | "@types/node": {
414 | "version": "15.12.2",
415 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz",
416 | "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww=="
417 | },
418 | "@types/qs": {
419 | "version": "6.9.6",
420 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz",
421 | "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA=="
422 | },
423 | "@types/range-parser": {
424 | "version": "1.2.3",
425 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
426 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA=="
427 | },
428 | "@types/serve-static": {
429 | "version": "1.13.9",
430 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz",
431 | "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==",
432 | "requires": {
433 | "@types/mime": "^1",
434 | "@types/node": "*"
435 | }
436 | },
437 | "@typescript-eslint/eslint-plugin": {
438 | "version": "3.10.1",
439 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz",
440 | "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==",
441 | "dev": true,
442 | "requires": {
443 | "@typescript-eslint/experimental-utils": "3.10.1",
444 | "debug": "^4.1.1",
445 | "functional-red-black-tree": "^1.0.1",
446 | "regexpp": "^3.0.0",
447 | "semver": "^7.3.2",
448 | "tsutils": "^3.17.1"
449 | },
450 | "dependencies": {
451 | "semver": {
452 | "version": "7.3.5",
453 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
454 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
455 | "dev": true,
456 | "requires": {
457 | "lru-cache": "^6.0.0"
458 | }
459 | }
460 | }
461 | },
462 | "@typescript-eslint/experimental-utils": {
463 | "version": "3.10.1",
464 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz",
465 | "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==",
466 | "dev": true,
467 | "requires": {
468 | "@types/json-schema": "^7.0.3",
469 | "@typescript-eslint/types": "3.10.1",
470 | "@typescript-eslint/typescript-estree": "3.10.1",
471 | "eslint-scope": "^5.0.0",
472 | "eslint-utils": "^2.0.0"
473 | }
474 | },
475 | "@typescript-eslint/parser": {
476 | "version": "3.10.1",
477 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz",
478 | "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==",
479 | "dev": true,
480 | "requires": {
481 | "@types/eslint-visitor-keys": "^1.0.0",
482 | "@typescript-eslint/experimental-utils": "3.10.1",
483 | "@typescript-eslint/types": "3.10.1",
484 | "@typescript-eslint/typescript-estree": "3.10.1",
485 | "eslint-visitor-keys": "^1.1.0"
486 | }
487 | },
488 | "@typescript-eslint/types": {
489 | "version": "3.10.1",
490 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz",
491 | "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==",
492 | "dev": true
493 | },
494 | "@typescript-eslint/typescript-estree": {
495 | "version": "3.10.1",
496 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz",
497 | "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==",
498 | "dev": true,
499 | "requires": {
500 | "@typescript-eslint/types": "3.10.1",
501 | "@typescript-eslint/visitor-keys": "3.10.1",
502 | "debug": "^4.1.1",
503 | "glob": "^7.1.6",
504 | "is-glob": "^4.0.1",
505 | "lodash": "^4.17.15",
506 | "semver": "^7.3.2",
507 | "tsutils": "^3.17.1"
508 | },
509 | "dependencies": {
510 | "semver": {
511 | "version": "7.3.5",
512 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
513 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
514 | "dev": true,
515 | "requires": {
516 | "lru-cache": "^6.0.0"
517 | }
518 | }
519 | }
520 | },
521 | "@typescript-eslint/visitor-keys": {
522 | "version": "3.10.1",
523 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz",
524 | "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==",
525 | "dev": true,
526 | "requires": {
527 | "eslint-visitor-keys": "^1.1.0"
528 | }
529 | },
530 | "abort-controller": {
531 | "version": "3.0.0",
532 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
533 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
534 | "optional": true,
535 | "requires": {
536 | "event-target-shim": "^5.0.0"
537 | }
538 | },
539 | "accepts": {
540 | "version": "1.3.7",
541 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
542 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
543 | "requires": {
544 | "mime-types": "~2.1.24",
545 | "negotiator": "0.6.2"
546 | }
547 | },
548 | "acorn": {
549 | "version": "7.4.1",
550 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
551 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
552 | "dev": true
553 | },
554 | "acorn-jsx": {
555 | "version": "5.3.1",
556 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
557 | "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
558 | "dev": true
559 | },
560 | "agent-base": {
561 | "version": "6.0.2",
562 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
563 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
564 | "optional": true,
565 | "requires": {
566 | "debug": "4"
567 | }
568 | },
569 | "ajv": {
570 | "version": "6.12.6",
571 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
572 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
573 | "dev": true,
574 | "requires": {
575 | "fast-deep-equal": "^3.1.1",
576 | "fast-json-stable-stringify": "^2.0.0",
577 | "json-schema-traverse": "^0.4.1",
578 | "uri-js": "^4.2.2"
579 | }
580 | },
581 | "ansi-colors": {
582 | "version": "4.1.1",
583 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
584 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
585 | "dev": true
586 | },
587 | "ansi-regex": {
588 | "version": "5.0.0",
589 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
590 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
591 | },
592 | "ansi-styles": {
593 | "version": "4.3.0",
594 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
595 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
596 | "requires": {
597 | "color-convert": "^2.0.1"
598 | }
599 | },
600 | "argparse": {
601 | "version": "1.0.10",
602 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
603 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
604 | "dev": true,
605 | "requires": {
606 | "sprintf-js": "~1.0.2"
607 | }
608 | },
609 | "array-flatten": {
610 | "version": "1.1.1",
611 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
612 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
613 | },
614 | "array-includes": {
615 | "version": "3.1.3",
616 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
617 | "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
618 | "dev": true,
619 | "requires": {
620 | "call-bind": "^1.0.2",
621 | "define-properties": "^1.1.3",
622 | "es-abstract": "^1.18.0-next.2",
623 | "get-intrinsic": "^1.1.1",
624 | "is-string": "^1.0.5"
625 | }
626 | },
627 | "array.prototype.flat": {
628 | "version": "1.2.4",
629 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
630 | "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
631 | "dev": true,
632 | "requires": {
633 | "call-bind": "^1.0.0",
634 | "define-properties": "^1.1.3",
635 | "es-abstract": "^1.18.0-next.1"
636 | }
637 | },
638 | "arrify": {
639 | "version": "2.0.1",
640 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
641 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
642 | "optional": true
643 | },
644 | "astral-regex": {
645 | "version": "2.0.0",
646 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
647 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
648 | "dev": true
649 | },
650 | "async-retry": {
651 | "version": "1.3.1",
652 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz",
653 | "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==",
654 | "optional": true,
655 | "requires": {
656 | "retry": "0.12.0"
657 | }
658 | },
659 | "balanced-match": {
660 | "version": "1.0.2",
661 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
662 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
663 | "dev": true
664 | },
665 | "base64-js": {
666 | "version": "1.5.1",
667 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
668 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
669 | "optional": true
670 | },
671 | "bignumber.js": {
672 | "version": "9.0.1",
673 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
674 | "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==",
675 | "optional": true
676 | },
677 | "body-parser": {
678 | "version": "1.19.0",
679 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
680 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
681 | "requires": {
682 | "bytes": "3.1.0",
683 | "content-type": "~1.0.4",
684 | "debug": "2.6.9",
685 | "depd": "~1.1.2",
686 | "http-errors": "1.7.2",
687 | "iconv-lite": "0.4.24",
688 | "on-finished": "~2.3.0",
689 | "qs": "6.7.0",
690 | "raw-body": "2.4.0",
691 | "type-is": "~1.6.17"
692 | },
693 | "dependencies": {
694 | "debug": {
695 | "version": "2.6.9",
696 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
697 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
698 | "requires": {
699 | "ms": "2.0.0"
700 | }
701 | },
702 | "ms": {
703 | "version": "2.0.0",
704 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
705 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
706 | }
707 | }
708 | },
709 | "brace-expansion": {
710 | "version": "1.1.11",
711 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
712 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
713 | "dev": true,
714 | "requires": {
715 | "balanced-match": "^1.0.0",
716 | "concat-map": "0.0.1"
717 | }
718 | },
719 | "buffer-equal-constant-time": {
720 | "version": "1.0.1",
721 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
722 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
723 | },
724 | "bytes": {
725 | "version": "3.1.0",
726 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
727 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
728 | },
729 | "call-bind": {
730 | "version": "1.0.2",
731 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
732 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
733 | "dev": true,
734 | "requires": {
735 | "function-bind": "^1.1.1",
736 | "get-intrinsic": "^1.0.2"
737 | }
738 | },
739 | "callsites": {
740 | "version": "3.1.0",
741 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
742 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
743 | "dev": true
744 | },
745 | "chalk": {
746 | "version": "4.1.1",
747 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
748 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
749 | "dev": true,
750 | "requires": {
751 | "ansi-styles": "^4.1.0",
752 | "supports-color": "^7.1.0"
753 | },
754 | "dependencies": {
755 | "has-flag": {
756 | "version": "4.0.0",
757 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
758 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
759 | "dev": true
760 | },
761 | "supports-color": {
762 | "version": "7.2.0",
763 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
764 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
765 | "dev": true,
766 | "requires": {
767 | "has-flag": "^4.0.0"
768 | }
769 | }
770 | }
771 | },
772 | "cliui": {
773 | "version": "7.0.4",
774 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
775 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
776 | "optional": true,
777 | "requires": {
778 | "string-width": "^4.2.0",
779 | "strip-ansi": "^6.0.0",
780 | "wrap-ansi": "^7.0.0"
781 | }
782 | },
783 | "color-convert": {
784 | "version": "2.0.1",
785 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
786 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
787 | "requires": {
788 | "color-name": "~1.1.4"
789 | }
790 | },
791 | "color-name": {
792 | "version": "1.1.4",
793 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
794 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
795 | },
796 | "compressible": {
797 | "version": "2.0.18",
798 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
799 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
800 | "optional": true,
801 | "requires": {
802 | "mime-db": ">= 1.43.0 < 2"
803 | }
804 | },
805 | "concat-map": {
806 | "version": "0.0.1",
807 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
808 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
809 | "dev": true
810 | },
811 | "configstore": {
812 | "version": "5.0.1",
813 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
814 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
815 | "optional": true,
816 | "requires": {
817 | "dot-prop": "^5.2.0",
818 | "graceful-fs": "^4.1.2",
819 | "make-dir": "^3.0.0",
820 | "unique-string": "^2.0.0",
821 | "write-file-atomic": "^3.0.0",
822 | "xdg-basedir": "^4.0.0"
823 | }
824 | },
825 | "content-disposition": {
826 | "version": "0.5.3",
827 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
828 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
829 | "requires": {
830 | "safe-buffer": "5.1.2"
831 | },
832 | "dependencies": {
833 | "safe-buffer": {
834 | "version": "5.1.2",
835 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
836 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
837 | }
838 | }
839 | },
840 | "content-type": {
841 | "version": "1.0.4",
842 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
843 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
844 | },
845 | "cookie": {
846 | "version": "0.4.0",
847 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
848 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
849 | },
850 | "cookie-signature": {
851 | "version": "1.0.6",
852 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
853 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
854 | },
855 | "cors": {
856 | "version": "2.8.5",
857 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
858 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
859 | "requires": {
860 | "object-assign": "^4",
861 | "vary": "^1"
862 | }
863 | },
864 | "cross-spawn": {
865 | "version": "7.0.3",
866 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
867 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
868 | "dev": true,
869 | "requires": {
870 | "path-key": "^3.1.0",
871 | "shebang-command": "^2.0.0",
872 | "which": "^2.0.1"
873 | }
874 | },
875 | "crypto-random-string": {
876 | "version": "2.0.0",
877 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
878 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
879 | "optional": true
880 | },
881 | "date-and-time": {
882 | "version": "1.0.1",
883 | "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-1.0.1.tgz",
884 | "integrity": "sha512-7u+uNfnjWkX+YFQfivvW24TjaJG6ahvTrfw1auq7KlC7osuGcZBIWGBvB9UcENjH6JnLVhMqlRripk1dSHjAUA==",
885 | "optional": true
886 | },
887 | "debug": {
888 | "version": "4.3.1",
889 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
890 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
891 | "requires": {
892 | "ms": "2.1.2"
893 | }
894 | },
895 | "deep-is": {
896 | "version": "0.1.3",
897 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
898 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
899 | "dev": true
900 | },
901 | "define-properties": {
902 | "version": "1.1.3",
903 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
904 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
905 | "dev": true,
906 | "requires": {
907 | "object-keys": "^1.0.12"
908 | }
909 | },
910 | "depd": {
911 | "version": "1.1.2",
912 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
913 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
914 | },
915 | "destroy": {
916 | "version": "1.0.4",
917 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
918 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
919 | },
920 | "dicer": {
921 | "version": "0.3.0",
922 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz",
923 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==",
924 | "requires": {
925 | "streamsearch": "0.1.2"
926 | }
927 | },
928 | "doctrine": {
929 | "version": "3.0.0",
930 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
931 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
932 | "dev": true,
933 | "requires": {
934 | "esutils": "^2.0.2"
935 | }
936 | },
937 | "dot-prop": {
938 | "version": "5.3.0",
939 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
940 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
941 | "optional": true,
942 | "requires": {
943 | "is-obj": "^2.0.0"
944 | }
945 | },
946 | "duplexify": {
947 | "version": "4.1.1",
948 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz",
949 | "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==",
950 | "optional": true,
951 | "requires": {
952 | "end-of-stream": "^1.4.1",
953 | "inherits": "^2.0.3",
954 | "readable-stream": "^3.1.1",
955 | "stream-shift": "^1.0.0"
956 | }
957 | },
958 | "ecdsa-sig-formatter": {
959 | "version": "1.0.11",
960 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
961 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
962 | "requires": {
963 | "safe-buffer": "^5.0.1"
964 | }
965 | },
966 | "ee-first": {
967 | "version": "1.1.1",
968 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
969 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
970 | },
971 | "emoji-regex": {
972 | "version": "8.0.0",
973 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
974 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
975 | },
976 | "encodeurl": {
977 | "version": "1.0.2",
978 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
979 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
980 | },
981 | "end-of-stream": {
982 | "version": "1.4.4",
983 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
984 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
985 | "optional": true,
986 | "requires": {
987 | "once": "^1.4.0"
988 | }
989 | },
990 | "enquirer": {
991 | "version": "2.3.6",
992 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
993 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
994 | "dev": true,
995 | "requires": {
996 | "ansi-colors": "^4.1.1"
997 | }
998 | },
999 | "ent": {
1000 | "version": "2.2.0",
1001 | "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
1002 | "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
1003 | "optional": true
1004 | },
1005 | "error-ex": {
1006 | "version": "1.3.2",
1007 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
1008 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
1009 | "dev": true,
1010 | "requires": {
1011 | "is-arrayish": "^0.2.1"
1012 | }
1013 | },
1014 | "es-abstract": {
1015 | "version": "1.18.3",
1016 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
1017 | "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
1018 | "dev": true,
1019 | "requires": {
1020 | "call-bind": "^1.0.2",
1021 | "es-to-primitive": "^1.2.1",
1022 | "function-bind": "^1.1.1",
1023 | "get-intrinsic": "^1.1.1",
1024 | "has": "^1.0.3",
1025 | "has-symbols": "^1.0.2",
1026 | "is-callable": "^1.2.3",
1027 | "is-negative-zero": "^2.0.1",
1028 | "is-regex": "^1.1.3",
1029 | "is-string": "^1.0.6",
1030 | "object-inspect": "^1.10.3",
1031 | "object-keys": "^1.1.1",
1032 | "object.assign": "^4.1.2",
1033 | "string.prototype.trimend": "^1.0.4",
1034 | "string.prototype.trimstart": "^1.0.4",
1035 | "unbox-primitive": "^1.0.1"
1036 | }
1037 | },
1038 | "es-to-primitive": {
1039 | "version": "1.2.1",
1040 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
1041 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
1042 | "dev": true,
1043 | "requires": {
1044 | "is-callable": "^1.1.4",
1045 | "is-date-object": "^1.0.1",
1046 | "is-symbol": "^1.0.2"
1047 | }
1048 | },
1049 | "escalade": {
1050 | "version": "3.1.1",
1051 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1052 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1053 | "optional": true
1054 | },
1055 | "escape-html": {
1056 | "version": "1.0.3",
1057 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1058 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
1059 | },
1060 | "escape-string-regexp": {
1061 | "version": "4.0.0",
1062 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1063 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1064 | "dev": true
1065 | },
1066 | "eslint": {
1067 | "version": "7.28.0",
1068 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz",
1069 | "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==",
1070 | "dev": true,
1071 | "requires": {
1072 | "@babel/code-frame": "7.12.11",
1073 | "@eslint/eslintrc": "^0.4.2",
1074 | "ajv": "^6.10.0",
1075 | "chalk": "^4.0.0",
1076 | "cross-spawn": "^7.0.2",
1077 | "debug": "^4.0.1",
1078 | "doctrine": "^3.0.0",
1079 | "enquirer": "^2.3.5",
1080 | "escape-string-regexp": "^4.0.0",
1081 | "eslint-scope": "^5.1.1",
1082 | "eslint-utils": "^2.1.0",
1083 | "eslint-visitor-keys": "^2.0.0",
1084 | "espree": "^7.3.1",
1085 | "esquery": "^1.4.0",
1086 | "esutils": "^2.0.2",
1087 | "fast-deep-equal": "^3.1.3",
1088 | "file-entry-cache": "^6.0.1",
1089 | "functional-red-black-tree": "^1.0.1",
1090 | "glob-parent": "^5.1.2",
1091 | "globals": "^13.6.0",
1092 | "ignore": "^4.0.6",
1093 | "import-fresh": "^3.0.0",
1094 | "imurmurhash": "^0.1.4",
1095 | "is-glob": "^4.0.0",
1096 | "js-yaml": "^3.13.1",
1097 | "json-stable-stringify-without-jsonify": "^1.0.1",
1098 | "levn": "^0.4.1",
1099 | "lodash.merge": "^4.6.2",
1100 | "minimatch": "^3.0.4",
1101 | "natural-compare": "^1.4.0",
1102 | "optionator": "^0.9.1",
1103 | "progress": "^2.0.0",
1104 | "regexpp": "^3.1.0",
1105 | "semver": "^7.2.1",
1106 | "strip-ansi": "^6.0.0",
1107 | "strip-json-comments": "^3.1.0",
1108 | "table": "^6.0.9",
1109 | "text-table": "^0.2.0",
1110 | "v8-compile-cache": "^2.0.3"
1111 | },
1112 | "dependencies": {
1113 | "eslint-visitor-keys": {
1114 | "version": "2.1.0",
1115 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
1116 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
1117 | "dev": true
1118 | },
1119 | "semver": {
1120 | "version": "7.3.5",
1121 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
1122 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
1123 | "dev": true,
1124 | "requires": {
1125 | "lru-cache": "^6.0.0"
1126 | }
1127 | }
1128 | }
1129 | },
1130 | "eslint-import-resolver-node": {
1131 | "version": "0.3.4",
1132 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz",
1133 | "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==",
1134 | "dev": true,
1135 | "requires": {
1136 | "debug": "^2.6.9",
1137 | "resolve": "^1.13.1"
1138 | },
1139 | "dependencies": {
1140 | "debug": {
1141 | "version": "2.6.9",
1142 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1143 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1144 | "dev": true,
1145 | "requires": {
1146 | "ms": "2.0.0"
1147 | }
1148 | },
1149 | "ms": {
1150 | "version": "2.0.0",
1151 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1152 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1153 | "dev": true
1154 | }
1155 | }
1156 | },
1157 | "eslint-module-utils": {
1158 | "version": "2.6.1",
1159 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz",
1160 | "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==",
1161 | "dev": true,
1162 | "requires": {
1163 | "debug": "^3.2.7",
1164 | "pkg-dir": "^2.0.0"
1165 | },
1166 | "dependencies": {
1167 | "debug": {
1168 | "version": "3.2.7",
1169 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
1170 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
1171 | "dev": true,
1172 | "requires": {
1173 | "ms": "^2.1.1"
1174 | }
1175 | }
1176 | }
1177 | },
1178 | "eslint-plugin-import": {
1179 | "version": "2.23.4",
1180 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz",
1181 | "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==",
1182 | "dev": true,
1183 | "requires": {
1184 | "array-includes": "^3.1.3",
1185 | "array.prototype.flat": "^1.2.4",
1186 | "debug": "^2.6.9",
1187 | "doctrine": "^2.1.0",
1188 | "eslint-import-resolver-node": "^0.3.4",
1189 | "eslint-module-utils": "^2.6.1",
1190 | "find-up": "^2.0.0",
1191 | "has": "^1.0.3",
1192 | "is-core-module": "^2.4.0",
1193 | "minimatch": "^3.0.4",
1194 | "object.values": "^1.1.3",
1195 | "pkg-up": "^2.0.0",
1196 | "read-pkg-up": "^3.0.0",
1197 | "resolve": "^1.20.0",
1198 | "tsconfig-paths": "^3.9.0"
1199 | },
1200 | "dependencies": {
1201 | "debug": {
1202 | "version": "2.6.9",
1203 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1204 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1205 | "dev": true,
1206 | "requires": {
1207 | "ms": "2.0.0"
1208 | }
1209 | },
1210 | "doctrine": {
1211 | "version": "2.1.0",
1212 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
1213 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
1214 | "dev": true,
1215 | "requires": {
1216 | "esutils": "^2.0.2"
1217 | }
1218 | },
1219 | "ms": {
1220 | "version": "2.0.0",
1221 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1222 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1223 | "dev": true
1224 | }
1225 | }
1226 | },
1227 | "eslint-scope": {
1228 | "version": "5.1.1",
1229 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
1230 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
1231 | "dev": true,
1232 | "requires": {
1233 | "esrecurse": "^4.3.0",
1234 | "estraverse": "^4.1.1"
1235 | }
1236 | },
1237 | "eslint-utils": {
1238 | "version": "2.1.0",
1239 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
1240 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
1241 | "dev": true,
1242 | "requires": {
1243 | "eslint-visitor-keys": "^1.1.0"
1244 | }
1245 | },
1246 | "eslint-visitor-keys": {
1247 | "version": "1.3.0",
1248 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
1249 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
1250 | "dev": true
1251 | },
1252 | "espree": {
1253 | "version": "7.3.1",
1254 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
1255 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
1256 | "dev": true,
1257 | "requires": {
1258 | "acorn": "^7.4.0",
1259 | "acorn-jsx": "^5.3.1",
1260 | "eslint-visitor-keys": "^1.3.0"
1261 | }
1262 | },
1263 | "esprima": {
1264 | "version": "4.0.1",
1265 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1266 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1267 | "dev": true
1268 | },
1269 | "esquery": {
1270 | "version": "1.4.0",
1271 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
1272 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
1273 | "dev": true,
1274 | "requires": {
1275 | "estraverse": "^5.1.0"
1276 | },
1277 | "dependencies": {
1278 | "estraverse": {
1279 | "version": "5.2.0",
1280 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
1281 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
1282 | "dev": true
1283 | }
1284 | }
1285 | },
1286 | "esrecurse": {
1287 | "version": "4.3.0",
1288 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1289 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1290 | "dev": true,
1291 | "requires": {
1292 | "estraverse": "^5.2.0"
1293 | },
1294 | "dependencies": {
1295 | "estraverse": {
1296 | "version": "5.2.0",
1297 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
1298 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
1299 | "dev": true
1300 | }
1301 | }
1302 | },
1303 | "estraverse": {
1304 | "version": "4.3.0",
1305 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1306 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1307 | "dev": true
1308 | },
1309 | "esutils": {
1310 | "version": "2.0.3",
1311 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1312 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1313 | "dev": true
1314 | },
1315 | "etag": {
1316 | "version": "1.8.1",
1317 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1318 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
1319 | },
1320 | "event-target-shim": {
1321 | "version": "5.0.1",
1322 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
1323 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
1324 | "optional": true
1325 | },
1326 | "express": {
1327 | "version": "4.17.1",
1328 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
1329 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
1330 | "requires": {
1331 | "accepts": "~1.3.7",
1332 | "array-flatten": "1.1.1",
1333 | "body-parser": "1.19.0",
1334 | "content-disposition": "0.5.3",
1335 | "content-type": "~1.0.4",
1336 | "cookie": "0.4.0",
1337 | "cookie-signature": "1.0.6",
1338 | "debug": "2.6.9",
1339 | "depd": "~1.1.2",
1340 | "encodeurl": "~1.0.2",
1341 | "escape-html": "~1.0.3",
1342 | "etag": "~1.8.1",
1343 | "finalhandler": "~1.1.2",
1344 | "fresh": "0.5.2",
1345 | "merge-descriptors": "1.0.1",
1346 | "methods": "~1.1.2",
1347 | "on-finished": "~2.3.0",
1348 | "parseurl": "~1.3.3",
1349 | "path-to-regexp": "0.1.7",
1350 | "proxy-addr": "~2.0.5",
1351 | "qs": "6.7.0",
1352 | "range-parser": "~1.2.1",
1353 | "safe-buffer": "5.1.2",
1354 | "send": "0.17.1",
1355 | "serve-static": "1.14.1",
1356 | "setprototypeof": "1.1.1",
1357 | "statuses": "~1.5.0",
1358 | "type-is": "~1.6.18",
1359 | "utils-merge": "1.0.1",
1360 | "vary": "~1.1.2"
1361 | },
1362 | "dependencies": {
1363 | "debug": {
1364 | "version": "2.6.9",
1365 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1366 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1367 | "requires": {
1368 | "ms": "2.0.0"
1369 | }
1370 | },
1371 | "ms": {
1372 | "version": "2.0.0",
1373 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1374 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1375 | },
1376 | "safe-buffer": {
1377 | "version": "5.1.2",
1378 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1379 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1380 | }
1381 | }
1382 | },
1383 | "extend": {
1384 | "version": "3.0.2",
1385 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1386 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
1387 | "optional": true
1388 | },
1389 | "fast-deep-equal": {
1390 | "version": "3.1.3",
1391 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1392 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
1393 | },
1394 | "fast-json-stable-stringify": {
1395 | "version": "2.1.0",
1396 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1397 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1398 | "dev": true
1399 | },
1400 | "fast-levenshtein": {
1401 | "version": "2.0.6",
1402 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1403 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
1404 | "dev": true
1405 | },
1406 | "fast-text-encoding": {
1407 | "version": "1.0.3",
1408 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
1409 | "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==",
1410 | "optional": true
1411 | },
1412 | "faye-websocket": {
1413 | "version": "0.11.3",
1414 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
1415 | "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
1416 | "requires": {
1417 | "websocket-driver": ">=0.5.1"
1418 | }
1419 | },
1420 | "file-entry-cache": {
1421 | "version": "6.0.1",
1422 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
1423 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
1424 | "dev": true,
1425 | "requires": {
1426 | "flat-cache": "^3.0.4"
1427 | }
1428 | },
1429 | "finalhandler": {
1430 | "version": "1.1.2",
1431 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
1432 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
1433 | "requires": {
1434 | "debug": "2.6.9",
1435 | "encodeurl": "~1.0.2",
1436 | "escape-html": "~1.0.3",
1437 | "on-finished": "~2.3.0",
1438 | "parseurl": "~1.3.3",
1439 | "statuses": "~1.5.0",
1440 | "unpipe": "~1.0.0"
1441 | },
1442 | "dependencies": {
1443 | "debug": {
1444 | "version": "2.6.9",
1445 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1446 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1447 | "requires": {
1448 | "ms": "2.0.0"
1449 | }
1450 | },
1451 | "ms": {
1452 | "version": "2.0.0",
1453 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1454 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1455 | }
1456 | }
1457 | },
1458 | "find-up": {
1459 | "version": "2.1.0",
1460 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
1461 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
1462 | "dev": true,
1463 | "requires": {
1464 | "locate-path": "^2.0.0"
1465 | }
1466 | },
1467 | "firebase-admin": {
1468 | "version": "9.9.0",
1469 | "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-9.9.0.tgz",
1470 | "integrity": "sha512-04HT7JAAqcJYty95qf15IBD9CXf+vr7S8zNU6Zt1ayC1J05DLaCsUd19/sCNAjZ614KHexAYUtyLgZoJwu2wOQ==",
1471 | "requires": {
1472 | "@firebase/database": "^0.10.0",
1473 | "@firebase/database-types": "^0.7.2",
1474 | "@google-cloud/firestore": "^4.5.0",
1475 | "@google-cloud/storage": "^5.3.0",
1476 | "@types/node": ">=12.12.47",
1477 | "dicer": "^0.3.0",
1478 | "jsonwebtoken": "^8.5.1",
1479 | "jwks-rsa": "^2.0.2",
1480 | "node-forge": "^0.10.0"
1481 | }
1482 | },
1483 | "firebase-functions": {
1484 | "version": "3.14.1",
1485 | "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.14.1.tgz",
1486 | "integrity": "sha512-hL/qm+i5i1qKYmAFMlQ4mwRngDkP+3YT3F4E4Nd5Hj2QKeawBdZiMGgEt6zqTx08Zq04vHiSnSM0z75UJRSg6Q==",
1487 | "requires": {
1488 | "@types/express": "4.17.3",
1489 | "cors": "^2.8.5",
1490 | "express": "^4.17.1",
1491 | "lodash": "^4.17.14"
1492 | },
1493 | "dependencies": {
1494 | "@types/express": {
1495 | "version": "4.17.3",
1496 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz",
1497 | "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==",
1498 | "requires": {
1499 | "@types/body-parser": "*",
1500 | "@types/express-serve-static-core": "*",
1501 | "@types/serve-static": "*"
1502 | }
1503 | }
1504 | }
1505 | },
1506 | "firebase-functions-test": {
1507 | "version": "0.2.3",
1508 | "resolved": "https://registry.npmjs.org/firebase-functions-test/-/firebase-functions-test-0.2.3.tgz",
1509 | "integrity": "sha512-zYX0QTm53wCazuej7O0xqbHl90r/v1PTXt/hwa0jo1YF8nDM+iBKnLDlkIoW66MDd0R6aGg4BvKzTTdJpvigUA==",
1510 | "dev": true,
1511 | "requires": {
1512 | "@types/lodash": "^4.14.104",
1513 | "lodash": "^4.17.5"
1514 | }
1515 | },
1516 | "flat-cache": {
1517 | "version": "3.0.4",
1518 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
1519 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
1520 | "dev": true,
1521 | "requires": {
1522 | "flatted": "^3.1.0",
1523 | "rimraf": "^3.0.2"
1524 | }
1525 | },
1526 | "flatted": {
1527 | "version": "3.1.1",
1528 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
1529 | "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
1530 | "dev": true
1531 | },
1532 | "forwarded": {
1533 | "version": "0.2.0",
1534 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1535 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1536 | },
1537 | "fresh": {
1538 | "version": "0.5.2",
1539 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1540 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
1541 | },
1542 | "fs.realpath": {
1543 | "version": "1.0.0",
1544 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1545 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1546 | "dev": true
1547 | },
1548 | "function-bind": {
1549 | "version": "1.1.1",
1550 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1551 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1552 | "dev": true
1553 | },
1554 | "functional-red-black-tree": {
1555 | "version": "1.0.1",
1556 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
1557 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
1558 | },
1559 | "gaxios": {
1560 | "version": "4.3.0",
1561 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz",
1562 | "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==",
1563 | "optional": true,
1564 | "requires": {
1565 | "abort-controller": "^3.0.0",
1566 | "extend": "^3.0.2",
1567 | "https-proxy-agent": "^5.0.0",
1568 | "is-stream": "^2.0.0",
1569 | "node-fetch": "^2.3.0"
1570 | }
1571 | },
1572 | "gcp-metadata": {
1573 | "version": "4.3.0",
1574 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz",
1575 | "integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==",
1576 | "optional": true,
1577 | "requires": {
1578 | "gaxios": "^4.0.0",
1579 | "json-bigint": "^1.0.0"
1580 | }
1581 | },
1582 | "gcs-resumable-upload": {
1583 | "version": "3.2.0",
1584 | "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.2.0.tgz",
1585 | "integrity": "sha512-k6OAkrO0N1zgvwTRxgCC43K9BMvNUBhZkkFELsMSlgAVs7Sd9C1TA9pmDLBZmFBN8sdvrObsSbCfOOFnHULRvA==",
1586 | "optional": true,
1587 | "requires": {
1588 | "abort-controller": "^3.0.0",
1589 | "configstore": "^5.0.0",
1590 | "extend": "^3.0.2",
1591 | "gaxios": "^4.0.0",
1592 | "google-auth-library": "^7.0.0",
1593 | "pumpify": "^2.0.0",
1594 | "stream-events": "^1.0.4"
1595 | }
1596 | },
1597 | "get-caller-file": {
1598 | "version": "2.0.5",
1599 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1600 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1601 | "optional": true
1602 | },
1603 | "get-intrinsic": {
1604 | "version": "1.1.1",
1605 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
1606 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
1607 | "dev": true,
1608 | "requires": {
1609 | "function-bind": "^1.1.1",
1610 | "has": "^1.0.3",
1611 | "has-symbols": "^1.0.1"
1612 | }
1613 | },
1614 | "get-stream": {
1615 | "version": "6.0.1",
1616 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
1617 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
1618 | "optional": true
1619 | },
1620 | "glob": {
1621 | "version": "7.1.7",
1622 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
1623 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
1624 | "dev": true,
1625 | "requires": {
1626 | "fs.realpath": "^1.0.0",
1627 | "inflight": "^1.0.4",
1628 | "inherits": "2",
1629 | "minimatch": "^3.0.4",
1630 | "once": "^1.3.0",
1631 | "path-is-absolute": "^1.0.0"
1632 | }
1633 | },
1634 | "glob-parent": {
1635 | "version": "5.1.2",
1636 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1637 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1638 | "dev": true,
1639 | "requires": {
1640 | "is-glob": "^4.0.1"
1641 | }
1642 | },
1643 | "globals": {
1644 | "version": "13.9.0",
1645 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz",
1646 | "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==",
1647 | "dev": true,
1648 | "requires": {
1649 | "type-fest": "^0.20.2"
1650 | }
1651 | },
1652 | "google-auth-library": {
1653 | "version": "7.1.2",
1654 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.1.2.tgz",
1655 | "integrity": "sha512-FMipHgfe2u1LzWsf2n9zEB9KsJ8M3n8OYTHbHtlkzPCyo7IknXQR5X99nfvwUHGuX+iEpihUZxDuPm7+qBYeXg==",
1656 | "optional": true,
1657 | "requires": {
1658 | "arrify": "^2.0.0",
1659 | "base64-js": "^1.3.0",
1660 | "ecdsa-sig-formatter": "^1.0.11",
1661 | "fast-text-encoding": "^1.0.0",
1662 | "gaxios": "^4.0.0",
1663 | "gcp-metadata": "^4.2.0",
1664 | "gtoken": "^5.0.4",
1665 | "jws": "^4.0.0",
1666 | "lru-cache": "^6.0.0"
1667 | }
1668 | },
1669 | "google-gax": {
1670 | "version": "2.15.0",
1671 | "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.15.0.tgz",
1672 | "integrity": "sha512-jfShUgX1DVu+DiOeAcsT5JbWlLdUnb2FsdWRb+Q/pNz6kNAUbmq8sFLB2uaWjlTxoSGHZLfrt3vJ9lpArzzQPA==",
1673 | "optional": true,
1674 | "requires": {
1675 | "@grpc/grpc-js": "~1.3.0",
1676 | "@grpc/proto-loader": "^0.6.1",
1677 | "@types/long": "^4.0.0",
1678 | "abort-controller": "^3.0.0",
1679 | "duplexify": "^4.0.0",
1680 | "fast-text-encoding": "^1.0.3",
1681 | "google-auth-library": "^7.0.2",
1682 | "is-stream-ended": "^0.1.4",
1683 | "node-fetch": "^2.6.1",
1684 | "object-hash": "^2.1.1",
1685 | "protobufjs": "^6.10.2",
1686 | "retry-request": "^4.0.0"
1687 | }
1688 | },
1689 | "google-p12-pem": {
1690 | "version": "3.1.0",
1691 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.0.tgz",
1692 | "integrity": "sha512-JUtEHXL4DY/N+xhlm7TC3qL797RPAtk0ZGXNs3/gWyiDHYoA/8Rjes0pztkda+sZv4ej1EoO2KhWgW5V9KTrSQ==",
1693 | "optional": true,
1694 | "requires": {
1695 | "node-forge": "^0.10.0"
1696 | }
1697 | },
1698 | "graceful-fs": {
1699 | "version": "4.2.6",
1700 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
1701 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
1702 | },
1703 | "gtoken": {
1704 | "version": "5.3.0",
1705 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.0.tgz",
1706 | "integrity": "sha512-mCcISYiaRZrJpfqOs0QWa6lfEM/C1V9ASkzFmuz43XBb5s1Vynh+CZy1ECeeJXVGx2PRByjYzb4Y4/zr1byr0w==",
1707 | "optional": true,
1708 | "requires": {
1709 | "gaxios": "^4.0.0",
1710 | "google-p12-pem": "^3.0.3",
1711 | "jws": "^4.0.0"
1712 | }
1713 | },
1714 | "has": {
1715 | "version": "1.0.3",
1716 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1717 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1718 | "dev": true,
1719 | "requires": {
1720 | "function-bind": "^1.1.1"
1721 | }
1722 | },
1723 | "has-bigints": {
1724 | "version": "1.0.1",
1725 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
1726 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
1727 | "dev": true
1728 | },
1729 | "has-flag": {
1730 | "version": "3.0.0",
1731 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1732 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1733 | "dev": true
1734 | },
1735 | "has-symbols": {
1736 | "version": "1.0.2",
1737 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
1738 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
1739 | "dev": true
1740 | },
1741 | "hash-stream-validation": {
1742 | "version": "0.2.4",
1743 | "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz",
1744 | "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==",
1745 | "optional": true
1746 | },
1747 | "hosted-git-info": {
1748 | "version": "2.8.9",
1749 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
1750 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
1751 | "dev": true
1752 | },
1753 | "http-errors": {
1754 | "version": "1.7.2",
1755 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1756 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1757 | "requires": {
1758 | "depd": "~1.1.2",
1759 | "inherits": "2.0.3",
1760 | "setprototypeof": "1.1.1",
1761 | "statuses": ">= 1.5.0 < 2",
1762 | "toidentifier": "1.0.0"
1763 | },
1764 | "dependencies": {
1765 | "inherits": {
1766 | "version": "2.0.3",
1767 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1768 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1769 | }
1770 | }
1771 | },
1772 | "http-parser-js": {
1773 | "version": "0.5.3",
1774 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
1775 | "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg=="
1776 | },
1777 | "http-proxy-agent": {
1778 | "version": "4.0.1",
1779 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
1780 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
1781 | "optional": true,
1782 | "requires": {
1783 | "@tootallnate/once": "1",
1784 | "agent-base": "6",
1785 | "debug": "4"
1786 | }
1787 | },
1788 | "https-proxy-agent": {
1789 | "version": "5.0.0",
1790 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
1791 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
1792 | "optional": true,
1793 | "requires": {
1794 | "agent-base": "6",
1795 | "debug": "4"
1796 | }
1797 | },
1798 | "iconv-lite": {
1799 | "version": "0.4.24",
1800 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1801 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1802 | "requires": {
1803 | "safer-buffer": ">= 2.1.2 < 3"
1804 | }
1805 | },
1806 | "ignore": {
1807 | "version": "4.0.6",
1808 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
1809 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
1810 | "dev": true
1811 | },
1812 | "import-fresh": {
1813 | "version": "3.3.0",
1814 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1815 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1816 | "dev": true,
1817 | "requires": {
1818 | "parent-module": "^1.0.0",
1819 | "resolve-from": "^4.0.0"
1820 | }
1821 | },
1822 | "imurmurhash": {
1823 | "version": "0.1.4",
1824 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1825 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
1826 | },
1827 | "inflight": {
1828 | "version": "1.0.6",
1829 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1830 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1831 | "dev": true,
1832 | "requires": {
1833 | "once": "^1.3.0",
1834 | "wrappy": "1"
1835 | }
1836 | },
1837 | "inherits": {
1838 | "version": "2.0.4",
1839 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1840 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1841 | },
1842 | "ipaddr.js": {
1843 | "version": "1.9.1",
1844 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1845 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1846 | },
1847 | "is-arrayish": {
1848 | "version": "0.2.1",
1849 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1850 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1851 | "dev": true
1852 | },
1853 | "is-bigint": {
1854 | "version": "1.0.2",
1855 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
1856 | "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
1857 | "dev": true
1858 | },
1859 | "is-boolean-object": {
1860 | "version": "1.1.1",
1861 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
1862 | "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
1863 | "dev": true,
1864 | "requires": {
1865 | "call-bind": "^1.0.2"
1866 | }
1867 | },
1868 | "is-callable": {
1869 | "version": "1.2.3",
1870 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
1871 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
1872 | "dev": true
1873 | },
1874 | "is-core-module": {
1875 | "version": "2.4.0",
1876 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
1877 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
1878 | "dev": true,
1879 | "requires": {
1880 | "has": "^1.0.3"
1881 | }
1882 | },
1883 | "is-date-object": {
1884 | "version": "1.0.4",
1885 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
1886 | "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
1887 | "dev": true
1888 | },
1889 | "is-extglob": {
1890 | "version": "2.1.1",
1891 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1892 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1893 | "dev": true
1894 | },
1895 | "is-fullwidth-code-point": {
1896 | "version": "3.0.0",
1897 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1898 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
1899 | },
1900 | "is-glob": {
1901 | "version": "4.0.1",
1902 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1903 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1904 | "dev": true,
1905 | "requires": {
1906 | "is-extglob": "^2.1.1"
1907 | }
1908 | },
1909 | "is-negative-zero": {
1910 | "version": "2.0.1",
1911 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
1912 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
1913 | "dev": true
1914 | },
1915 | "is-number-object": {
1916 | "version": "1.0.5",
1917 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
1918 | "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
1919 | "dev": true
1920 | },
1921 | "is-obj": {
1922 | "version": "2.0.0",
1923 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
1924 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
1925 | "optional": true
1926 | },
1927 | "is-regex": {
1928 | "version": "1.1.3",
1929 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
1930 | "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
1931 | "dev": true,
1932 | "requires": {
1933 | "call-bind": "^1.0.2",
1934 | "has-symbols": "^1.0.2"
1935 | }
1936 | },
1937 | "is-stream": {
1938 | "version": "2.0.0",
1939 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
1940 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
1941 | "optional": true
1942 | },
1943 | "is-stream-ended": {
1944 | "version": "0.1.4",
1945 | "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz",
1946 | "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==",
1947 | "optional": true
1948 | },
1949 | "is-string": {
1950 | "version": "1.0.6",
1951 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
1952 | "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
1953 | "dev": true
1954 | },
1955 | "is-symbol": {
1956 | "version": "1.0.4",
1957 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
1958 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
1959 | "dev": true,
1960 | "requires": {
1961 | "has-symbols": "^1.0.2"
1962 | }
1963 | },
1964 | "is-typedarray": {
1965 | "version": "1.0.0",
1966 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1967 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1968 | "optional": true
1969 | },
1970 | "isexe": {
1971 | "version": "2.0.0",
1972 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1973 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1974 | "dev": true
1975 | },
1976 | "jose": {
1977 | "version": "2.0.5",
1978 | "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz",
1979 | "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==",
1980 | "requires": {
1981 | "@panva/asn1.js": "^1.0.0"
1982 | }
1983 | },
1984 | "js-tokens": {
1985 | "version": "4.0.0",
1986 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1987 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1988 | "dev": true
1989 | },
1990 | "js-yaml": {
1991 | "version": "3.14.1",
1992 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
1993 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
1994 | "dev": true,
1995 | "requires": {
1996 | "argparse": "^1.0.7",
1997 | "esprima": "^4.0.0"
1998 | }
1999 | },
2000 | "json-bigint": {
2001 | "version": "1.0.0",
2002 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
2003 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
2004 | "optional": true,
2005 | "requires": {
2006 | "bignumber.js": "^9.0.0"
2007 | }
2008 | },
2009 | "json-parse-better-errors": {
2010 | "version": "1.0.2",
2011 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
2012 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
2013 | "dev": true
2014 | },
2015 | "json-schema-traverse": {
2016 | "version": "0.4.1",
2017 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2018 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2019 | "dev": true
2020 | },
2021 | "json-stable-stringify-without-jsonify": {
2022 | "version": "1.0.1",
2023 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2024 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
2025 | "dev": true
2026 | },
2027 | "json5": {
2028 | "version": "1.0.1",
2029 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
2030 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
2031 | "dev": true,
2032 | "requires": {
2033 | "minimist": "^1.2.0"
2034 | }
2035 | },
2036 | "jsonwebtoken": {
2037 | "version": "8.5.1",
2038 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
2039 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
2040 | "requires": {
2041 | "jws": "^3.2.2",
2042 | "lodash.includes": "^4.3.0",
2043 | "lodash.isboolean": "^3.0.3",
2044 | "lodash.isinteger": "^4.0.4",
2045 | "lodash.isnumber": "^3.0.3",
2046 | "lodash.isplainobject": "^4.0.6",
2047 | "lodash.isstring": "^4.0.1",
2048 | "lodash.once": "^4.0.0",
2049 | "ms": "^2.1.1",
2050 | "semver": "^5.6.0"
2051 | },
2052 | "dependencies": {
2053 | "jwa": {
2054 | "version": "1.4.1",
2055 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
2056 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
2057 | "requires": {
2058 | "buffer-equal-constant-time": "1.0.1",
2059 | "ecdsa-sig-formatter": "1.0.11",
2060 | "safe-buffer": "^5.0.1"
2061 | }
2062 | },
2063 | "jws": {
2064 | "version": "3.2.2",
2065 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
2066 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
2067 | "requires": {
2068 | "jwa": "^1.4.1",
2069 | "safe-buffer": "^5.0.1"
2070 | }
2071 | },
2072 | "semver": {
2073 | "version": "5.7.1",
2074 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
2075 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
2076 | }
2077 | }
2078 | },
2079 | "jwa": {
2080 | "version": "2.0.0",
2081 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
2082 | "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
2083 | "optional": true,
2084 | "requires": {
2085 | "buffer-equal-constant-time": "1.0.1",
2086 | "ecdsa-sig-formatter": "1.0.11",
2087 | "safe-buffer": "^5.0.1"
2088 | }
2089 | },
2090 | "jwks-rsa": {
2091 | "version": "2.0.3",
2092 | "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.3.tgz",
2093 | "integrity": "sha512-/rkjXRWAp0cS00tunsHResw68P5iTQru8+jHufLNv3JHc4nObFEndfEUSuPugh09N+V9XYxKUqi7QrkmCHSSSg==",
2094 | "requires": {
2095 | "@types/express-jwt": "0.0.42",
2096 | "debug": "^4.1.0",
2097 | "jose": "^2.0.5",
2098 | "limiter": "^1.1.5",
2099 | "lru-memoizer": "^2.1.2"
2100 | }
2101 | },
2102 | "jws": {
2103 | "version": "4.0.0",
2104 | "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
2105 | "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
2106 | "optional": true,
2107 | "requires": {
2108 | "jwa": "^2.0.0",
2109 | "safe-buffer": "^5.0.1"
2110 | }
2111 | },
2112 | "levn": {
2113 | "version": "0.4.1",
2114 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2115 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2116 | "dev": true,
2117 | "requires": {
2118 | "prelude-ls": "^1.2.1",
2119 | "type-check": "~0.4.0"
2120 | }
2121 | },
2122 | "limiter": {
2123 | "version": "1.1.5",
2124 | "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
2125 | "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA=="
2126 | },
2127 | "load-json-file": {
2128 | "version": "4.0.0",
2129 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
2130 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
2131 | "dev": true,
2132 | "requires": {
2133 | "graceful-fs": "^4.1.2",
2134 | "parse-json": "^4.0.0",
2135 | "pify": "^3.0.0",
2136 | "strip-bom": "^3.0.0"
2137 | }
2138 | },
2139 | "locate-path": {
2140 | "version": "2.0.0",
2141 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
2142 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
2143 | "dev": true,
2144 | "requires": {
2145 | "p-locate": "^2.0.0",
2146 | "path-exists": "^3.0.0"
2147 | }
2148 | },
2149 | "lodash": {
2150 | "version": "4.17.21",
2151 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
2152 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
2153 | },
2154 | "lodash.camelcase": {
2155 | "version": "4.3.0",
2156 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
2157 | "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
2158 | "optional": true
2159 | },
2160 | "lodash.clonedeep": {
2161 | "version": "4.5.0",
2162 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
2163 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
2164 | },
2165 | "lodash.includes": {
2166 | "version": "4.3.0",
2167 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
2168 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
2169 | },
2170 | "lodash.isboolean": {
2171 | "version": "3.0.3",
2172 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
2173 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
2174 | },
2175 | "lodash.isinteger": {
2176 | "version": "4.0.4",
2177 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
2178 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
2179 | },
2180 | "lodash.isnumber": {
2181 | "version": "3.0.3",
2182 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
2183 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
2184 | },
2185 | "lodash.isplainobject": {
2186 | "version": "4.0.6",
2187 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
2188 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
2189 | },
2190 | "lodash.isstring": {
2191 | "version": "4.0.1",
2192 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
2193 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
2194 | },
2195 | "lodash.merge": {
2196 | "version": "4.6.2",
2197 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2198 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2199 | "dev": true
2200 | },
2201 | "lodash.once": {
2202 | "version": "4.1.1",
2203 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
2204 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
2205 | },
2206 | "lodash.truncate": {
2207 | "version": "4.4.2",
2208 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
2209 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
2210 | "dev": true
2211 | },
2212 | "long": {
2213 | "version": "4.0.0",
2214 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
2215 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
2216 | "optional": true
2217 | },
2218 | "lru-cache": {
2219 | "version": "6.0.0",
2220 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2221 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2222 | "requires": {
2223 | "yallist": "^4.0.0"
2224 | }
2225 | },
2226 | "lru-memoizer": {
2227 | "version": "2.1.4",
2228 | "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz",
2229 | "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==",
2230 | "requires": {
2231 | "lodash.clonedeep": "^4.5.0",
2232 | "lru-cache": "~4.0.0"
2233 | },
2234 | "dependencies": {
2235 | "lru-cache": {
2236 | "version": "4.0.2",
2237 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
2238 | "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=",
2239 | "requires": {
2240 | "pseudomap": "^1.0.1",
2241 | "yallist": "^2.0.0"
2242 | }
2243 | },
2244 | "yallist": {
2245 | "version": "2.1.2",
2246 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
2247 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
2248 | }
2249 | }
2250 | },
2251 | "make-dir": {
2252 | "version": "3.1.0",
2253 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
2254 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
2255 | "optional": true,
2256 | "requires": {
2257 | "semver": "^6.0.0"
2258 | }
2259 | },
2260 | "media-typer": {
2261 | "version": "0.3.0",
2262 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
2263 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
2264 | },
2265 | "merge-descriptors": {
2266 | "version": "1.0.1",
2267 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
2268 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
2269 | },
2270 | "methods": {
2271 | "version": "1.1.2",
2272 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
2273 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
2274 | },
2275 | "mime": {
2276 | "version": "2.5.2",
2277 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
2278 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
2279 | "optional": true
2280 | },
2281 | "mime-db": {
2282 | "version": "1.48.0",
2283 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
2284 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ=="
2285 | },
2286 | "mime-types": {
2287 | "version": "2.1.31",
2288 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
2289 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
2290 | "requires": {
2291 | "mime-db": "1.48.0"
2292 | }
2293 | },
2294 | "mimic-fn": {
2295 | "version": "2.1.0",
2296 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
2297 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
2298 | "optional": true
2299 | },
2300 | "minimatch": {
2301 | "version": "3.0.4",
2302 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2303 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2304 | "dev": true,
2305 | "requires": {
2306 | "brace-expansion": "^1.1.7"
2307 | }
2308 | },
2309 | "minimist": {
2310 | "version": "1.2.5",
2311 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
2312 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
2313 | "dev": true
2314 | },
2315 | "ms": {
2316 | "version": "2.1.2",
2317 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2318 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2319 | },
2320 | "natural-compare": {
2321 | "version": "1.4.0",
2322 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2323 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
2324 | "dev": true
2325 | },
2326 | "negotiator": {
2327 | "version": "0.6.2",
2328 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
2329 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
2330 | },
2331 | "node-fetch": {
2332 | "version": "2.6.1",
2333 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
2334 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
2335 | "optional": true
2336 | },
2337 | "node-forge": {
2338 | "version": "0.10.0",
2339 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
2340 | "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
2341 | },
2342 | "normalize-package-data": {
2343 | "version": "2.5.0",
2344 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
2345 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
2346 | "dev": true,
2347 | "requires": {
2348 | "hosted-git-info": "^2.1.4",
2349 | "resolve": "^1.10.0",
2350 | "semver": "2 || 3 || 4 || 5",
2351 | "validate-npm-package-license": "^3.0.1"
2352 | },
2353 | "dependencies": {
2354 | "semver": {
2355 | "version": "5.7.1",
2356 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
2357 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
2358 | "dev": true
2359 | }
2360 | }
2361 | },
2362 | "object-assign": {
2363 | "version": "4.1.1",
2364 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2365 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
2366 | },
2367 | "object-hash": {
2368 | "version": "2.2.0",
2369 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
2370 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
2371 | "optional": true
2372 | },
2373 | "object-inspect": {
2374 | "version": "1.10.3",
2375 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
2376 | "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==",
2377 | "dev": true
2378 | },
2379 | "object-keys": {
2380 | "version": "1.1.1",
2381 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
2382 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
2383 | "dev": true
2384 | },
2385 | "object.assign": {
2386 | "version": "4.1.2",
2387 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
2388 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
2389 | "dev": true,
2390 | "requires": {
2391 | "call-bind": "^1.0.0",
2392 | "define-properties": "^1.1.3",
2393 | "has-symbols": "^1.0.1",
2394 | "object-keys": "^1.1.1"
2395 | }
2396 | },
2397 | "object.values": {
2398 | "version": "1.1.4",
2399 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
2400 | "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
2401 | "dev": true,
2402 | "requires": {
2403 | "call-bind": "^1.0.2",
2404 | "define-properties": "^1.1.3",
2405 | "es-abstract": "^1.18.2"
2406 | }
2407 | },
2408 | "on-finished": {
2409 | "version": "2.3.0",
2410 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
2411 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
2412 | "requires": {
2413 | "ee-first": "1.1.1"
2414 | }
2415 | },
2416 | "once": {
2417 | "version": "1.4.0",
2418 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2419 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2420 | "requires": {
2421 | "wrappy": "1"
2422 | }
2423 | },
2424 | "onetime": {
2425 | "version": "5.1.2",
2426 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
2427 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
2428 | "optional": true,
2429 | "requires": {
2430 | "mimic-fn": "^2.1.0"
2431 | }
2432 | },
2433 | "optionator": {
2434 | "version": "0.9.1",
2435 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
2436 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
2437 | "dev": true,
2438 | "requires": {
2439 | "deep-is": "^0.1.3",
2440 | "fast-levenshtein": "^2.0.6",
2441 | "levn": "^0.4.1",
2442 | "prelude-ls": "^1.2.1",
2443 | "type-check": "^0.4.0",
2444 | "word-wrap": "^1.2.3"
2445 | }
2446 | },
2447 | "p-limit": {
2448 | "version": "3.1.0",
2449 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2450 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2451 | "optional": true,
2452 | "requires": {
2453 | "yocto-queue": "^0.1.0"
2454 | }
2455 | },
2456 | "p-locate": {
2457 | "version": "2.0.0",
2458 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
2459 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
2460 | "dev": true,
2461 | "requires": {
2462 | "p-limit": "^1.1.0"
2463 | },
2464 | "dependencies": {
2465 | "p-limit": {
2466 | "version": "1.3.0",
2467 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
2468 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
2469 | "dev": true,
2470 | "requires": {
2471 | "p-try": "^1.0.0"
2472 | }
2473 | }
2474 | }
2475 | },
2476 | "p-try": {
2477 | "version": "1.0.0",
2478 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
2479 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
2480 | "dev": true
2481 | },
2482 | "parent-module": {
2483 | "version": "1.0.1",
2484 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2485 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2486 | "dev": true,
2487 | "requires": {
2488 | "callsites": "^3.0.0"
2489 | }
2490 | },
2491 | "parse-json": {
2492 | "version": "4.0.0",
2493 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
2494 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
2495 | "dev": true,
2496 | "requires": {
2497 | "error-ex": "^1.3.1",
2498 | "json-parse-better-errors": "^1.0.1"
2499 | }
2500 | },
2501 | "parseurl": {
2502 | "version": "1.3.3",
2503 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
2504 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
2505 | },
2506 | "path-exists": {
2507 | "version": "3.0.0",
2508 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
2509 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
2510 | "dev": true
2511 | },
2512 | "path-is-absolute": {
2513 | "version": "1.0.1",
2514 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2515 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2516 | "dev": true
2517 | },
2518 | "path-key": {
2519 | "version": "3.1.1",
2520 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2521 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2522 | "dev": true
2523 | },
2524 | "path-parse": {
2525 | "version": "1.0.7",
2526 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2527 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2528 | "dev": true
2529 | },
2530 | "path-to-regexp": {
2531 | "version": "0.1.7",
2532 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
2533 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
2534 | },
2535 | "path-type": {
2536 | "version": "3.0.0",
2537 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
2538 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
2539 | "dev": true,
2540 | "requires": {
2541 | "pify": "^3.0.0"
2542 | }
2543 | },
2544 | "pify": {
2545 | "version": "3.0.0",
2546 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
2547 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
2548 | "dev": true
2549 | },
2550 | "pkg-dir": {
2551 | "version": "2.0.0",
2552 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
2553 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
2554 | "dev": true,
2555 | "requires": {
2556 | "find-up": "^2.1.0"
2557 | }
2558 | },
2559 | "pkg-up": {
2560 | "version": "2.0.0",
2561 | "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
2562 | "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
2563 | "dev": true,
2564 | "requires": {
2565 | "find-up": "^2.1.0"
2566 | }
2567 | },
2568 | "prelude-ls": {
2569 | "version": "1.2.1",
2570 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2571 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2572 | "dev": true
2573 | },
2574 | "progress": {
2575 | "version": "2.0.3",
2576 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
2577 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
2578 | "dev": true
2579 | },
2580 | "protobufjs": {
2581 | "version": "6.11.2",
2582 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz",
2583 | "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==",
2584 | "optional": true,
2585 | "requires": {
2586 | "@protobufjs/aspromise": "^1.1.2",
2587 | "@protobufjs/base64": "^1.1.2",
2588 | "@protobufjs/codegen": "^2.0.4",
2589 | "@protobufjs/eventemitter": "^1.1.0",
2590 | "@protobufjs/fetch": "^1.1.0",
2591 | "@protobufjs/float": "^1.0.2",
2592 | "@protobufjs/inquire": "^1.1.0",
2593 | "@protobufjs/path": "^1.1.2",
2594 | "@protobufjs/pool": "^1.1.0",
2595 | "@protobufjs/utf8": "^1.1.0",
2596 | "@types/long": "^4.0.1",
2597 | "@types/node": ">=13.7.0",
2598 | "long": "^4.0.0"
2599 | }
2600 | },
2601 | "proxy-addr": {
2602 | "version": "2.0.7",
2603 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
2604 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
2605 | "requires": {
2606 | "forwarded": "0.2.0",
2607 | "ipaddr.js": "1.9.1"
2608 | }
2609 | },
2610 | "pseudomap": {
2611 | "version": "1.0.2",
2612 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
2613 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
2614 | },
2615 | "pump": {
2616 | "version": "3.0.0",
2617 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2618 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2619 | "optional": true,
2620 | "requires": {
2621 | "end-of-stream": "^1.1.0",
2622 | "once": "^1.3.1"
2623 | }
2624 | },
2625 | "pumpify": {
2626 | "version": "2.0.1",
2627 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz",
2628 | "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==",
2629 | "optional": true,
2630 | "requires": {
2631 | "duplexify": "^4.1.1",
2632 | "inherits": "^2.0.3",
2633 | "pump": "^3.0.0"
2634 | }
2635 | },
2636 | "punycode": {
2637 | "version": "2.1.1",
2638 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2639 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2640 | "dev": true
2641 | },
2642 | "qs": {
2643 | "version": "6.7.0",
2644 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
2645 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
2646 | },
2647 | "range-parser": {
2648 | "version": "1.2.1",
2649 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
2650 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
2651 | },
2652 | "raw-body": {
2653 | "version": "2.4.0",
2654 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
2655 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
2656 | "requires": {
2657 | "bytes": "3.1.0",
2658 | "http-errors": "1.7.2",
2659 | "iconv-lite": "0.4.24",
2660 | "unpipe": "1.0.0"
2661 | }
2662 | },
2663 | "read-pkg": {
2664 | "version": "3.0.0",
2665 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
2666 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
2667 | "dev": true,
2668 | "requires": {
2669 | "load-json-file": "^4.0.0",
2670 | "normalize-package-data": "^2.3.2",
2671 | "path-type": "^3.0.0"
2672 | }
2673 | },
2674 | "read-pkg-up": {
2675 | "version": "3.0.0",
2676 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
2677 | "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
2678 | "dev": true,
2679 | "requires": {
2680 | "find-up": "^2.0.0",
2681 | "read-pkg": "^3.0.0"
2682 | }
2683 | },
2684 | "readable-stream": {
2685 | "version": "3.6.0",
2686 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
2687 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
2688 | "optional": true,
2689 | "requires": {
2690 | "inherits": "^2.0.3",
2691 | "string_decoder": "^1.1.1",
2692 | "util-deprecate": "^1.0.1"
2693 | }
2694 | },
2695 | "regexpp": {
2696 | "version": "3.1.0",
2697 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
2698 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
2699 | "dev": true
2700 | },
2701 | "require-directory": {
2702 | "version": "2.1.1",
2703 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2704 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
2705 | "optional": true
2706 | },
2707 | "require-from-string": {
2708 | "version": "2.0.2",
2709 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
2710 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
2711 | "dev": true
2712 | },
2713 | "resolve": {
2714 | "version": "1.20.0",
2715 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
2716 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
2717 | "dev": true,
2718 | "requires": {
2719 | "is-core-module": "^2.2.0",
2720 | "path-parse": "^1.0.6"
2721 | }
2722 | },
2723 | "resolve-from": {
2724 | "version": "4.0.0",
2725 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2726 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2727 | "dev": true
2728 | },
2729 | "retry": {
2730 | "version": "0.12.0",
2731 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
2732 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
2733 | "optional": true
2734 | },
2735 | "retry-request": {
2736 | "version": "4.1.3",
2737 | "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.3.tgz",
2738 | "integrity": "sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==",
2739 | "optional": true,
2740 | "requires": {
2741 | "debug": "^4.1.1"
2742 | }
2743 | },
2744 | "rimraf": {
2745 | "version": "3.0.2",
2746 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2747 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2748 | "dev": true,
2749 | "requires": {
2750 | "glob": "^7.1.3"
2751 | }
2752 | },
2753 | "safe-buffer": {
2754 | "version": "5.2.1",
2755 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2756 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
2757 | },
2758 | "safer-buffer": {
2759 | "version": "2.1.2",
2760 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2761 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2762 | },
2763 | "semver": {
2764 | "version": "6.3.0",
2765 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2766 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
2767 | "optional": true
2768 | },
2769 | "send": {
2770 | "version": "0.17.1",
2771 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
2772 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
2773 | "requires": {
2774 | "debug": "2.6.9",
2775 | "depd": "~1.1.2",
2776 | "destroy": "~1.0.4",
2777 | "encodeurl": "~1.0.2",
2778 | "escape-html": "~1.0.3",
2779 | "etag": "~1.8.1",
2780 | "fresh": "0.5.2",
2781 | "http-errors": "~1.7.2",
2782 | "mime": "1.6.0",
2783 | "ms": "2.1.1",
2784 | "on-finished": "~2.3.0",
2785 | "range-parser": "~1.2.1",
2786 | "statuses": "~1.5.0"
2787 | },
2788 | "dependencies": {
2789 | "debug": {
2790 | "version": "2.6.9",
2791 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2792 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2793 | "requires": {
2794 | "ms": "2.0.0"
2795 | },
2796 | "dependencies": {
2797 | "ms": {
2798 | "version": "2.0.0",
2799 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2800 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
2801 | }
2802 | }
2803 | },
2804 | "mime": {
2805 | "version": "1.6.0",
2806 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
2807 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
2808 | },
2809 | "ms": {
2810 | "version": "2.1.1",
2811 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
2812 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
2813 | }
2814 | }
2815 | },
2816 | "serve-static": {
2817 | "version": "1.14.1",
2818 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
2819 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
2820 | "requires": {
2821 | "encodeurl": "~1.0.2",
2822 | "escape-html": "~1.0.3",
2823 | "parseurl": "~1.3.3",
2824 | "send": "0.17.1"
2825 | }
2826 | },
2827 | "setprototypeof": {
2828 | "version": "1.1.1",
2829 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
2830 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
2831 | },
2832 | "shebang-command": {
2833 | "version": "2.0.0",
2834 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2835 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2836 | "dev": true,
2837 | "requires": {
2838 | "shebang-regex": "^3.0.0"
2839 | }
2840 | },
2841 | "shebang-regex": {
2842 | "version": "3.0.0",
2843 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2844 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2845 | "dev": true
2846 | },
2847 | "signal-exit": {
2848 | "version": "3.0.3",
2849 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
2850 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
2851 | "optional": true
2852 | },
2853 | "slice-ansi": {
2854 | "version": "4.0.0",
2855 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
2856 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
2857 | "dev": true,
2858 | "requires": {
2859 | "ansi-styles": "^4.0.0",
2860 | "astral-regex": "^2.0.0",
2861 | "is-fullwidth-code-point": "^3.0.0"
2862 | }
2863 | },
2864 | "snakeize": {
2865 | "version": "0.1.0",
2866 | "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz",
2867 | "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=",
2868 | "optional": true
2869 | },
2870 | "spdx-correct": {
2871 | "version": "3.1.1",
2872 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
2873 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
2874 | "dev": true,
2875 | "requires": {
2876 | "spdx-expression-parse": "^3.0.0",
2877 | "spdx-license-ids": "^3.0.0"
2878 | }
2879 | },
2880 | "spdx-exceptions": {
2881 | "version": "2.3.0",
2882 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
2883 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
2884 | "dev": true
2885 | },
2886 | "spdx-expression-parse": {
2887 | "version": "3.0.1",
2888 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
2889 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
2890 | "dev": true,
2891 | "requires": {
2892 | "spdx-exceptions": "^2.1.0",
2893 | "spdx-license-ids": "^3.0.0"
2894 | }
2895 | },
2896 | "spdx-license-ids": {
2897 | "version": "3.0.9",
2898 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz",
2899 | "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==",
2900 | "dev": true
2901 | },
2902 | "sprintf-js": {
2903 | "version": "1.0.3",
2904 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2905 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2906 | "dev": true
2907 | },
2908 | "statuses": {
2909 | "version": "1.5.0",
2910 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
2911 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
2912 | },
2913 | "stream-events": {
2914 | "version": "1.0.5",
2915 | "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
2916 | "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==",
2917 | "optional": true,
2918 | "requires": {
2919 | "stubs": "^3.0.0"
2920 | }
2921 | },
2922 | "stream-shift": {
2923 | "version": "1.0.1",
2924 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
2925 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
2926 | "optional": true
2927 | },
2928 | "streamsearch": {
2929 | "version": "0.1.2",
2930 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
2931 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
2932 | },
2933 | "string-width": {
2934 | "version": "4.2.2",
2935 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
2936 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
2937 | "requires": {
2938 | "emoji-regex": "^8.0.0",
2939 | "is-fullwidth-code-point": "^3.0.0",
2940 | "strip-ansi": "^6.0.0"
2941 | }
2942 | },
2943 | "string.prototype.trimend": {
2944 | "version": "1.0.4",
2945 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
2946 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
2947 | "dev": true,
2948 | "requires": {
2949 | "call-bind": "^1.0.2",
2950 | "define-properties": "^1.1.3"
2951 | }
2952 | },
2953 | "string.prototype.trimstart": {
2954 | "version": "1.0.4",
2955 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
2956 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
2957 | "dev": true,
2958 | "requires": {
2959 | "call-bind": "^1.0.2",
2960 | "define-properties": "^1.1.3"
2961 | }
2962 | },
2963 | "string_decoder": {
2964 | "version": "1.3.0",
2965 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
2966 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
2967 | "optional": true,
2968 | "requires": {
2969 | "safe-buffer": "~5.2.0"
2970 | }
2971 | },
2972 | "strip-ansi": {
2973 | "version": "6.0.0",
2974 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
2975 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
2976 | "requires": {
2977 | "ansi-regex": "^5.0.0"
2978 | }
2979 | },
2980 | "strip-bom": {
2981 | "version": "3.0.0",
2982 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
2983 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
2984 | "dev": true
2985 | },
2986 | "strip-json-comments": {
2987 | "version": "3.1.1",
2988 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2989 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2990 | "dev": true
2991 | },
2992 | "stubs": {
2993 | "version": "3.0.0",
2994 | "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
2995 | "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=",
2996 | "optional": true
2997 | },
2998 | "supports-color": {
2999 | "version": "5.5.0",
3000 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
3001 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
3002 | "dev": true,
3003 | "requires": {
3004 | "has-flag": "^3.0.0"
3005 | }
3006 | },
3007 | "table": {
3008 | "version": "6.7.1",
3009 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
3010 | "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
3011 | "dev": true,
3012 | "requires": {
3013 | "ajv": "^8.0.1",
3014 | "lodash.clonedeep": "^4.5.0",
3015 | "lodash.truncate": "^4.4.2",
3016 | "slice-ansi": "^4.0.0",
3017 | "string-width": "^4.2.0",
3018 | "strip-ansi": "^6.0.0"
3019 | },
3020 | "dependencies": {
3021 | "ajv": {
3022 | "version": "8.6.0",
3023 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz",
3024 | "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==",
3025 | "dev": true,
3026 | "requires": {
3027 | "fast-deep-equal": "^3.1.1",
3028 | "json-schema-traverse": "^1.0.0",
3029 | "require-from-string": "^2.0.2",
3030 | "uri-js": "^4.2.2"
3031 | }
3032 | },
3033 | "json-schema-traverse": {
3034 | "version": "1.0.0",
3035 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
3036 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
3037 | "dev": true
3038 | }
3039 | }
3040 | },
3041 | "teeny-request": {
3042 | "version": "7.1.0",
3043 | "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.0.tgz",
3044 | "integrity": "sha512-hPfSc05a7Mf3syqVhSkrVMb844sMiP60MrfGMts3ft6V6UlSkEIGQzgwf0dy1KjdE3FV2lJ5s7QCBFcaoQLA6g==",
3045 | "optional": true,
3046 | "requires": {
3047 | "http-proxy-agent": "^4.0.0",
3048 | "https-proxy-agent": "^5.0.0",
3049 | "node-fetch": "^2.6.1",
3050 | "stream-events": "^1.0.5",
3051 | "uuid": "^8.0.0"
3052 | }
3053 | },
3054 | "text-table": {
3055 | "version": "0.2.0",
3056 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
3057 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
3058 | "dev": true
3059 | },
3060 | "toidentifier": {
3061 | "version": "1.0.0",
3062 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
3063 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
3064 | },
3065 | "tsconfig-paths": {
3066 | "version": "3.9.0",
3067 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
3068 | "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
3069 | "dev": true,
3070 | "requires": {
3071 | "@types/json5": "^0.0.29",
3072 | "json5": "^1.0.1",
3073 | "minimist": "^1.2.0",
3074 | "strip-bom": "^3.0.0"
3075 | }
3076 | },
3077 | "tslib": {
3078 | "version": "2.3.0",
3079 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
3080 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
3081 | },
3082 | "tsutils": {
3083 | "version": "3.21.0",
3084 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
3085 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
3086 | "dev": true,
3087 | "requires": {
3088 | "tslib": "^1.8.1"
3089 | },
3090 | "dependencies": {
3091 | "tslib": {
3092 | "version": "1.14.1",
3093 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
3094 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
3095 | "dev": true
3096 | }
3097 | }
3098 | },
3099 | "type-check": {
3100 | "version": "0.4.0",
3101 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
3102 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
3103 | "dev": true,
3104 | "requires": {
3105 | "prelude-ls": "^1.2.1"
3106 | }
3107 | },
3108 | "type-fest": {
3109 | "version": "0.20.2",
3110 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
3111 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
3112 | "dev": true
3113 | },
3114 | "type-is": {
3115 | "version": "1.6.18",
3116 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
3117 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
3118 | "requires": {
3119 | "media-typer": "0.3.0",
3120 | "mime-types": "~2.1.24"
3121 | }
3122 | },
3123 | "typedarray-to-buffer": {
3124 | "version": "3.1.5",
3125 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
3126 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
3127 | "optional": true,
3128 | "requires": {
3129 | "is-typedarray": "^1.0.0"
3130 | }
3131 | },
3132 | "typescript": {
3133 | "version": "3.9.9",
3134 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
3135 | "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
3136 | "dev": true
3137 | },
3138 | "unbox-primitive": {
3139 | "version": "1.0.1",
3140 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
3141 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
3142 | "dev": true,
3143 | "requires": {
3144 | "function-bind": "^1.1.1",
3145 | "has-bigints": "^1.0.1",
3146 | "has-symbols": "^1.0.2",
3147 | "which-boxed-primitive": "^1.0.2"
3148 | }
3149 | },
3150 | "unique-string": {
3151 | "version": "2.0.0",
3152 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
3153 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
3154 | "optional": true,
3155 | "requires": {
3156 | "crypto-random-string": "^2.0.0"
3157 | }
3158 | },
3159 | "unpipe": {
3160 | "version": "1.0.0",
3161 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
3162 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
3163 | },
3164 | "uri-js": {
3165 | "version": "4.4.1",
3166 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
3167 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
3168 | "dev": true,
3169 | "requires": {
3170 | "punycode": "^2.1.0"
3171 | }
3172 | },
3173 | "util-deprecate": {
3174 | "version": "1.0.2",
3175 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3176 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
3177 | "optional": true
3178 | },
3179 | "utils-merge": {
3180 | "version": "1.0.1",
3181 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
3182 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
3183 | },
3184 | "uuid": {
3185 | "version": "8.3.2",
3186 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
3187 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
3188 | "optional": true
3189 | },
3190 | "v8-compile-cache": {
3191 | "version": "2.3.0",
3192 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
3193 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
3194 | "dev": true
3195 | },
3196 | "validate-npm-package-license": {
3197 | "version": "3.0.4",
3198 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
3199 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
3200 | "dev": true,
3201 | "requires": {
3202 | "spdx-correct": "^3.0.0",
3203 | "spdx-expression-parse": "^3.0.0"
3204 | }
3205 | },
3206 | "vary": {
3207 | "version": "1.1.2",
3208 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
3209 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
3210 | },
3211 | "websocket-driver": {
3212 | "version": "0.7.4",
3213 | "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
3214 | "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
3215 | "requires": {
3216 | "http-parser-js": ">=0.5.1",
3217 | "safe-buffer": ">=5.1.0",
3218 | "websocket-extensions": ">=0.1.1"
3219 | }
3220 | },
3221 | "websocket-extensions": {
3222 | "version": "0.1.4",
3223 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
3224 | "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
3225 | },
3226 | "which": {
3227 | "version": "2.0.2",
3228 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3229 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3230 | "dev": true,
3231 | "requires": {
3232 | "isexe": "^2.0.0"
3233 | }
3234 | },
3235 | "which-boxed-primitive": {
3236 | "version": "1.0.2",
3237 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
3238 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
3239 | "dev": true,
3240 | "requires": {
3241 | "is-bigint": "^1.0.1",
3242 | "is-boolean-object": "^1.1.0",
3243 | "is-number-object": "^1.0.4",
3244 | "is-string": "^1.0.5",
3245 | "is-symbol": "^1.0.3"
3246 | }
3247 | },
3248 | "word-wrap": {
3249 | "version": "1.2.3",
3250 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
3251 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
3252 | "dev": true
3253 | },
3254 | "wrap-ansi": {
3255 | "version": "7.0.0",
3256 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3257 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3258 | "optional": true,
3259 | "requires": {
3260 | "ansi-styles": "^4.0.0",
3261 | "string-width": "^4.1.0",
3262 | "strip-ansi": "^6.0.0"
3263 | }
3264 | },
3265 | "wrappy": {
3266 | "version": "1.0.2",
3267 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3268 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
3269 | },
3270 | "write-file-atomic": {
3271 | "version": "3.0.3",
3272 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
3273 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
3274 | "optional": true,
3275 | "requires": {
3276 | "imurmurhash": "^0.1.4",
3277 | "is-typedarray": "^1.0.0",
3278 | "signal-exit": "^3.0.2",
3279 | "typedarray-to-buffer": "^3.1.5"
3280 | }
3281 | },
3282 | "xdg-basedir": {
3283 | "version": "4.0.0",
3284 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
3285 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
3286 | "optional": true
3287 | },
3288 | "y18n": {
3289 | "version": "5.0.8",
3290 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
3291 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
3292 | "optional": true
3293 | },
3294 | "yallist": {
3295 | "version": "4.0.0",
3296 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3297 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
3298 | },
3299 | "yargs": {
3300 | "version": "16.2.0",
3301 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
3302 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
3303 | "optional": true,
3304 | "requires": {
3305 | "cliui": "^7.0.2",
3306 | "escalade": "^3.1.1",
3307 | "get-caller-file": "^2.0.5",
3308 | "require-directory": "^2.1.1",
3309 | "string-width": "^4.2.0",
3310 | "y18n": "^5.0.5",
3311 | "yargs-parser": "^20.2.2"
3312 | }
3313 | },
3314 | "yargs-parser": {
3315 | "version": "20.2.7",
3316 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
3317 | "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==",
3318 | "optional": true
3319 | },
3320 | "yocto-queue": {
3321 | "version": "0.1.0",
3322 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
3323 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
3324 | "optional": true
3325 | }
3326 | }
3327 | }
3328 |
--------------------------------------------------------------------------------
/functions/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "functions",
3 | "scripts": {
4 | "lint": "eslint \"src/**/*\"",
5 | "build": "tsc",
6 | "serve": "npm run build && firebase emulators:start --only functions",
7 | "shell": "npm run build && firebase functions:shell",
8 | "start": "npm run shell",
9 | "deploy": "firebase deploy --only functions",
10 | "logs": "firebase functions:log"
11 | },
12 | "engines": {
13 | "node": "12"
14 | },
15 | "main": "lib/index.js",
16 | "dependencies": {
17 | "firebase-admin": "^9.2.0",
18 | "firebase-functions": "^3.11.0"
19 | },
20 | "devDependencies": {
21 | "@typescript-eslint/eslint-plugin": "^3.9.1",
22 | "@typescript-eslint/parser": "^3.8.0",
23 | "eslint": "^7.6.0",
24 | "eslint-plugin-import": "^2.22.0",
25 | "typescript": "^3.8.0",
26 | "firebase-functions-test": "^0.2.0"
27 | },
28 | "private": true
29 | }
30 |
--------------------------------------------------------------------------------
/functions/src/index.ts:
--------------------------------------------------------------------------------
1 | import * as functions from 'firebase-functions'
2 | import * as admin from 'firebase-admin'
3 |
4 | admin.initializeApp()
5 |
6 | export const setCustomClaims = functions.auth.user().onCreate(async (user) => {
7 | const customClaims = {
8 | 'https://hasura.io/jwt/claims': {
9 | 'x-hasura-default-role': 'staff',
10 | 'x-hasura-allowed-roles': ['staff'],
11 | 'x-hasura-user-id': user.uid,
12 | },
13 | }
14 | try {
15 | await admin.auth().setCustomUserClaims(user.uid, customClaims)
16 | await admin.firestore().collection('user_meta').doc(user.uid).create({
17 | refreshTime: admin.firestore.FieldValue.serverTimestamp(),
18 | })
19 | } catch (e) {
20 | console.log(e)
21 | }
22 | })
23 |
--------------------------------------------------------------------------------
/functions/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "noImplicitReturns": true,
5 | "noUnusedLocals": true,
6 | "outDir": "lib",
7 | "sourceMap": true,
8 | "strict": true,
9 | "target": "es2017"
10 | },
11 | "compileOnSave": true,
12 | "include": [
13 | "src"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/hooks/useAppMutate.ts:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react'
2 | import { useQueryClient, useMutation } from 'react-query'
3 | import { GraphQLClient } from 'graphql-request'
4 | import Cookie from 'universal-cookie'
5 | import {
6 | CREATE_TASK,
7 | DELETE_TASK,
8 | UPDATE_TASK,
9 | CREATE_NEWS,
10 | DELETE_NEWS,
11 | UPDATE_NEWS,
12 | } from '../queries/queries'
13 | import { Task, EditTask, News, EditNews } from '../types/types'
14 | import { useDispatch } from 'react-redux'
15 | import { resetEditedTask, resetEditedNews } from '../slices/uiSlice'
16 |
17 | const cookie = new Cookie()
18 | const endpoint = process.env.NEXT_PUBLIC_HASURA_ENDPOINT
19 | let graphQLClient: GraphQLClient
20 |
21 | export const useAppMutate = () => {
22 | const dispatch = useDispatch()
23 | const queryClient = useQueryClient()
24 |
25 | useEffect(() => {
26 | graphQLClient = new GraphQLClient(endpoint, {
27 | headers: {
28 | Authorization: `Bearer ${cookie.get('token')}`,
29 | },
30 | })
31 | }, [cookie.get('token')])
32 | const createTaskMutation = useMutation(
33 | (title: string) => graphQLClient.request(CREATE_TASK, { title: title }),
34 | {
35 | onSuccess: (res) => {
36 | const previousTodos = queryClient.getQueryData('tasks')
37 | if (previousTodos) {
38 | queryClient.setQueryData('tasks', [
39 | ...previousTodos,
40 | res.insert_tasks_one,
41 | ])
42 | }
43 | dispatch(resetEditedTask())
44 | },
45 | onError: () => {
46 | dispatch(resetEditedTask())
47 | },
48 | }
49 | )
50 | const updateTaskMutation = useMutation(
51 | (task: EditTask) => graphQLClient.request(UPDATE_TASK, task),
52 | {
53 | onSuccess: (res, variables) => {
54 | const previousTodos = queryClient.getQueryData('tasks')
55 | if (previousTodos) {
56 | queryClient.setQueryData(
57 | 'tasks',
58 | previousTodos.map((task) =>
59 | task.id === variables.id ? res.update_tasks_by_pk : task
60 | )
61 | )
62 | }
63 | dispatch(resetEditedTask())
64 | },
65 | onError: () => {
66 | dispatch(resetEditedTask())
67 | },
68 | }
69 | )
70 | const deleteTaskMutation = useMutation(
71 | (id: string) => graphQLClient.request(DELETE_TASK, { id: id }),
72 | {
73 | onSuccess: (res, variables) => {
74 | const previousTodos = queryClient.getQueryData('tasks')
75 | if (previousTodos) {
76 | queryClient.setQueryData(
77 | 'tasks',
78 | previousTodos.filter((task) => task.id !== variables)
79 | )
80 | }
81 | dispatch(resetEditedTask())
82 | },
83 | }
84 | )
85 | const createNewsMutation = useMutation(
86 | (content: string) =>
87 | graphQLClient.request(CREATE_NEWS, { content: content }),
88 | {
89 | onSuccess: (res) => {
90 | const previousNews = queryClient.getQueryData('news')
91 | if (previousNews) {
92 | queryClient.setQueryData('news', [
93 | ...previousNews,
94 | res.insert_news_one,
95 | ])
96 | }
97 | dispatch(resetEditedNews())
98 | },
99 | onError: () => {
100 | dispatch(resetEditedNews())
101 | },
102 | }
103 | )
104 | const updateNewsMutation = useMutation(
105 | (news: EditNews) => graphQLClient.request(UPDATE_NEWS, news),
106 | {
107 | onSuccess: (res, variables) => {
108 | const previousNews = queryClient.getQueryData('news')
109 | if (previousNews) {
110 | queryClient.setQueryData(
111 | 'news',
112 | previousNews.map((news) =>
113 | news.id === variables.id ? res.update_news_by_pk : news
114 | )
115 | )
116 | }
117 | dispatch(resetEditedNews())
118 | },
119 | onError: () => {
120 | dispatch(resetEditedNews())
121 | },
122 | }
123 | )
124 | const deleteNewsMutation = useMutation(
125 | (id: string) => graphQLClient.request(DELETE_NEWS, { id: id }),
126 | {
127 | onSuccess: (res, variables) => {
128 | const previousNews = queryClient.getQueryData('news')
129 | if (previousNews) {
130 | queryClient.setQueryData(
131 | 'news',
132 | previousNews.filter((news) => news.id !== variables)
133 | )
134 | }
135 | dispatch(resetEditedNews())
136 | },
137 | }
138 | )
139 | return {
140 | createTaskMutation,
141 | updateTaskMutation,
142 | deleteTaskMutation,
143 | createNewsMutation,
144 | updateNewsMutation,
145 | deleteNewsMutation,
146 | }
147 | }
148 |
--------------------------------------------------------------------------------
/hooks/useFirebaseAuth.ts:
--------------------------------------------------------------------------------
1 | import { useState, useCallback, ChangeEvent, FormEvent } from 'react'
2 | import firebase from '../firebaseConfig'
3 |
4 | export const useFirebaseAuth = () => {
5 | const [email, setEmail] = useState('')
6 | const [password, setPassword] = useState('')
7 | const [isLogin, setIsLogin] = useState(true)
8 |
9 | const emailChange = useCallback((e: ChangeEvent) => {
10 | setEmail(e.target.value)
11 | }, [])
12 | const pwChange = useCallback((e: ChangeEvent) => {
13 | setPassword(e.target.value)
14 | }, [])
15 | const resetInput = useCallback(() => {
16 | setEmail('')
17 | setPassword('')
18 | }, [])
19 | const toggleMode = useCallback(() => {
20 | setIsLogin(!isLogin)
21 | }, [isLogin])
22 | const authUser = useCallback(
23 | async (e: FormEvent) => {
24 | e.preventDefault()
25 | if (isLogin) {
26 | try {
27 | await firebase.auth().signInWithEmailAndPassword(email, password)
28 | } catch (e) {
29 | alert(e.message)
30 | }
31 | resetInput()
32 | } else {
33 | try {
34 | await firebase.auth().createUserWithEmailAndPassword(email, password)
35 | } catch (e) {
36 | alert(e.message)
37 | }
38 | resetInput()
39 | }
40 | },
41 | [email, password, isLogin]
42 | )
43 |
44 | return {
45 | email,
46 | password,
47 | emailChange,
48 | pwChange,
49 | resetInput,
50 | isLogin,
51 | toggleMode,
52 | authUser,
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/hooks/useLogout.ts:
--------------------------------------------------------------------------------
1 | import Cookie from 'universal-cookie'
2 | import firebase from '../firebaseConfig'
3 | import { unSubMeta } from './useUserChanged'
4 | import { useQueryClient } from 'react-query'
5 | import { useDispatch } from 'react-redux'
6 | import { resetEditedTask, resetEditedNews } from '../slices/uiSlice'
7 |
8 | const cookie = new Cookie()
9 |
10 | export const useLogout = () => {
11 | const dispatch = useDispatch()
12 | const queryClient = useQueryClient()
13 | const logout = async () => {
14 | if (unSubMeta) {
15 | unSubMeta()
16 | }
17 | dispatch(resetEditedTask())
18 | dispatch(resetEditedNews())
19 | await firebase.auth().signOut()
20 | queryClient.removeQueries('tasks')
21 | queryClient.removeQueries('news')
22 | cookie.remove('token')
23 | }
24 |
25 | return { logout }
26 | }
27 |
--------------------------------------------------------------------------------
/hooks/useQueryNews.ts:
--------------------------------------------------------------------------------
1 | import { request } from 'graphql-request'
2 | import { useQuery } from 'react-query'
3 | import { News } from '../types/types'
4 | import { GET_NEWS } from '../queries/queries'
5 |
6 | interface NewsRes {
7 | news: News[]
8 | }
9 | export const fetchNews = async () => {
10 | const { news: data } = await request(
11 | process.env.NEXT_PUBLIC_HASURA_ENDPOINT,
12 | GET_NEWS
13 | )
14 | return data
15 | }
16 | export const useQueryNews = () => {
17 | return useQuery({
18 | queryKey: 'news',
19 | queryFn: fetchNews,
20 | staleTime: Infinity,
21 | })
22 | }
23 |
--------------------------------------------------------------------------------
/hooks/useQueryTasks.ts:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react'
2 | import { GraphQLClient } from 'graphql-request'
3 | import { useQuery } from 'react-query'
4 | import { Task } from '../types/types'
5 | import { GET_TASKS } from '../queries/queries'
6 | import Cookie from 'universal-cookie'
7 |
8 | const cookie = new Cookie()
9 | const endpoint = process.env.NEXT_PUBLIC_HASURA_ENDPOINT
10 | let graphQLClient: GraphQLClient
11 |
12 | interface TasksRes {
13 | tasks: Task[]
14 | }
15 |
16 | const fetchTasks = async () => {
17 | const { tasks: data } = await graphQLClient.request(GET_TASKS)
18 | return data
19 | }
20 |
21 | export const useQueryTasks = () => {
22 | useEffect(() => {
23 | graphQLClient = new GraphQLClient(endpoint, {
24 | headers: {
25 | Authorization: `Bearer ${cookie.get('token')}`,
26 | },
27 | })
28 | }, [cookie.get('token')])
29 | return useQuery({
30 | queryKey: 'tasks',
31 | queryFn: fetchTasks,
32 | staleTime: 0,
33 | })
34 | }
35 |
--------------------------------------------------------------------------------
/hooks/useUserChanged.ts:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react'
2 | import firebase from '../firebaseConfig'
3 | import { useRouter } from 'next/router'
4 | import Cookie from 'universal-cookie'
5 |
6 | export let unSubMeta: () => void
7 |
8 | export const useUserChanged = () => {
9 | const cookie = new Cookie()
10 | const router = useRouter()
11 | const HASURA_TOKEN_KEY = 'https://hasura.io/jwt/claims'
12 | useEffect(() => {
13 | const unSubUser = firebase.auth().onAuthStateChanged(async (user) => {
14 | if (user) {
15 | const token = await user.getIdToken(true)
16 | const idTokenResult = await user.getIdTokenResult()
17 | const hasuraClaims = idTokenResult.claims[HASURA_TOKEN_KEY]
18 | if (hasuraClaims) {
19 | cookie.set('token', token, { path: '/' })
20 | router.push('/tasks')
21 | } else {
22 | const userRef = firebase
23 | .firestore()
24 | .collection('user_meta')
25 | .doc(user.uid)
26 | unSubMeta = userRef.onSnapshot(async () => {
27 | const tokenSnap = await user.getIdToken(true)
28 | const idTokenResultSnap = await user.getIdTokenResult()
29 | const hasuraClaimsSnap = idTokenResultSnap.claims[HASURA_TOKEN_KEY]
30 | if (hasuraClaimsSnap) {
31 | cookie.set('token', tokenSnap, { path: '/' })
32 | router.push('/tasks')
33 | }
34 | })
35 | }
36 | }
37 | })
38 | return () => {
39 | unSubUser()
40 | }
41 | }, [])
42 | return {}
43 | }
44 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nextjs_hasura_firebase_lesson",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start"
9 | },
10 | "dependencies": {
11 | "@heroicons/react": "^1.0.1",
12 | "@reduxjs/toolkit": "^1.6.0",
13 | "firebase": "^8.6.7",
14 | "graphql": "^15.5.0",
15 | "graphql-request": "^3.4.0",
16 | "next": "10.2.3",
17 | "react": "17.0.2",
18 | "react-dom": "17.0.2",
19 | "react-query": "^3.17.0",
20 | "react-query-devtools": "^2.6.3",
21 | "react-redux": "^7.2.4",
22 | "universal-cookie": "^4.0.4"
23 | },
24 | "devDependencies": {
25 | "@types/node": "^15.12.2",
26 | "@types/react": "^17.0.11",
27 | "@types/react-redux": "^7.1.16",
28 | "autoprefixer": "^10.2.6",
29 | "postcss": "^8.3.2",
30 | "tailwindcss": "^2.1.4",
31 | "typescript": "^4.3.2"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import '../styles/globals.css'
2 | import { useState } from 'react'
3 | import { QueryClient, QueryClientProvider } from 'react-query'
4 | import { ReactQueryDevtools } from 'react-query/devtools'
5 | import { AppProps } from 'next/app'
6 | import { useUserChanged } from '../hooks/useUserChanged'
7 | import { Provider } from 'react-redux'
8 | import { store } from '../app/store'
9 | import { Hydrate } from 'react-query/hydration'
10 |
11 | function MyApp({ Component, pageProps }: AppProps) {
12 | const {} = useUserChanged()
13 | const [queryClient] = useState(
14 | () =>
15 | new QueryClient({
16 | defaultOptions: {
17 | queries: {
18 | retry: false,
19 | refetchOnWindowFocus: false,
20 | },
21 | },
22 | })
23 | )
24 | return (
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | )
34 | }
35 |
36 | export default MyApp
37 |
--------------------------------------------------------------------------------
/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import { Auth } from '../components/Auth'
2 | import { Layout } from '../components/Layout'
3 | import { GetStaticProps } from 'next'
4 | import { dehydrate } from 'react-query/hydration'
5 | import { fetchNews } from '../hooks/useQueryNews'
6 | import { News } from '../types/types'
7 | import { QueryClient, useQueryClient } from 'react-query'
8 |
9 | export default function Home() {
10 | const queryClient = useQueryClient()
11 | const data = queryClient.getQueryData('news')
12 | return (
13 |
14 | News list by SSG
15 | {data?.map((news) => (
16 |
17 | {news.content}
18 |
19 | ))}
20 |
21 |
22 | )
23 | }
24 |
25 | export const getStaticProps: GetStaticProps = async () => {
26 | const queryClient = new QueryClient()
27 | await queryClient.prefetchQuery('news', fetchNews)
28 | return {
29 | props: {
30 | dehydratedState: dehydrate(queryClient),
31 | },
32 | revalidate: 3,
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/pages/tasks.tsx:
--------------------------------------------------------------------------------
1 | import { VFC } from 'react'
2 | import { useRouter } from 'next/router'
3 | import Link from 'next/link'
4 | import { useLogout } from '../hooks/useLogout'
5 | import { Layout } from '../components/Layout'
6 | import { ChevronDoubleLeftIcon, LogoutIcon } from '@heroicons/react/solid'
7 | import firebase from '../firebaseConfig'
8 | import { NewsListMemo } from '../components/NewsList'
9 | import { NewsEditMemo } from '../components/NewsEdit'
10 | import { TaskListMemo } from '../components/TaskList'
11 | import { TaskEditMemo } from '../components/TaskEdit'
12 |
13 | const Tasks: VFC = () => {
14 | const router = useRouter()
15 | const { logout } = useLogout()
16 | const user = firebase.auth().currentUser
17 |
18 | return (
19 |
20 | {user?.email}
21 | {
24 | logout()
25 | router.push('/')
26 | }}
27 | />
28 | News Edit
29 |
30 |
31 |
32 |
33 | Tasks Edit
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Back to main page
43 |
44 |
45 |
46 | )
47 | }
48 |
49 | export default Tasks
50 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GomaGoma676/nextjs-hasura-firebase-react-query/6587bfd7c2cde6228c2abcb8d183b02a94c07ff9/public/favicon.ico
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/queries/queries.ts:
--------------------------------------------------------------------------------
1 | import { gql } from 'graphql-request'
2 |
3 | export const GET_NEWS = gql`
4 | query GetNews {
5 | news {
6 | id
7 | content
8 | created_at
9 | }
10 | }
11 | `
12 | export const CREATE_NEWS = gql`
13 | mutation CreateNews($content: String!) {
14 | insert_news_one(object: { content: $content }) {
15 | id
16 | content
17 | created_at
18 | }
19 | }
20 | `
21 | export const UPDATE_NEWS = gql`
22 | mutation UpdateNews($id: uuid!, $content: String!) {
23 | update_news_by_pk(pk_columns: { id: $id }, _set: { content: $content }) {
24 | id
25 | content
26 | created_at
27 | }
28 | }
29 | `
30 | export const DELETE_NEWS = gql`
31 | mutation DeleteNews($id: uuid!) {
32 | delete_news_by_pk(id: $id) {
33 | id
34 | content
35 | }
36 | }
37 | `
38 | export const GET_TASKS = gql`
39 | query GetTasks {
40 | tasks {
41 | id
42 | title
43 | created_at
44 | user_id
45 | }
46 | }
47 | `
48 | export const CREATE_TASK = gql`
49 | mutation CreateTask($title: String!) {
50 | insert_tasks_one(object: { title: $title }) {
51 | id
52 | title
53 | created_at
54 | user_id
55 | }
56 | }
57 | `
58 | export const UPDATE_TASK = gql`
59 | mutation UpdateTask($id: uuid!, $title: String!) {
60 | update_tasks_by_pk(pk_columns: { id: $id }, _set: { title: $title }) {
61 | id
62 | title
63 | created_at
64 | user_id
65 | }
66 | }
67 | `
68 | export const DELETE_TASK = gql`
69 | mutation DeleteTask($id: uuid!) {
70 | delete_tasks_by_pk(id: $id) {
71 | id
72 | title
73 | }
74 | }
75 | `
76 |
--------------------------------------------------------------------------------
/slices/uiSlice.ts:
--------------------------------------------------------------------------------
1 | import { createSlice, PayloadAction } from '@reduxjs/toolkit'
2 | import { EditNews, EditTask } from '../types/types'
3 | import { RootState } from '../app/store'
4 |
5 | export interface uiState {
6 | editedTask: EditTask
7 | editedNews: EditNews
8 | }
9 | const initialState: uiState = {
10 | editedTask: {
11 | id: '',
12 | title: '',
13 | },
14 | editedNews: {
15 | id: '',
16 | content: '',
17 | },
18 | }
19 | export const uiSlice = createSlice({
20 | name: 'ui',
21 | initialState,
22 | reducers: {
23 | setEditedTask: (state, action: PayloadAction) => {
24 | state.editedTask = action.payload
25 | },
26 | resetEditedTask: (state) => {
27 | state.editedTask = initialState.editedTask
28 | },
29 | setEditedNews: (state, action: PayloadAction) => {
30 | state.editedNews = action.payload
31 | },
32 | resetEditedNews: (state) => {
33 | state.editedNews = initialState.editedNews
34 | },
35 | },
36 | })
37 | export const {
38 | setEditedTask,
39 | resetEditedTask,
40 | setEditedNews,
41 | resetEditedNews,
42 | } = uiSlice.actions
43 |
44 | export const selectTask = (state: RootState) => state.ui.editedTask
45 | export const selectNews = (state: RootState) => state.ui.editedNews
46 |
47 | export default uiSlice.reducer
48 |
--------------------------------------------------------------------------------
/styles/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'],
3 | darkMode: false, // or 'media' or 'class'
4 | theme: {
5 | extend: {},
6 | },
7 | variants: {
8 | extend: { opacity: ['disabled'] },
9 | },
10 | plugins: [],
11 | }
12 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "strict": false,
12 | "forceConsistentCasingInFileNames": true,
13 | "noEmit": true,
14 | "esModuleInterop": true,
15 | "module": "esnext",
16 | "moduleResolution": "node",
17 | "resolveJsonModule": true,
18 | "isolatedModules": true,
19 | "jsx": "preserve"
20 | },
21 | "include": [
22 | "next-env.d.ts",
23 | "**/*.ts",
24 | "**/*.tsx"
25 | ],
26 | "exclude": [
27 | "node_modules"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/types/types.ts:
--------------------------------------------------------------------------------
1 | export interface News {
2 | id: string
3 | content: string
4 | created_at: string
5 | }
6 | export interface EditNews {
7 | id: string
8 | content: string
9 | }
10 | export interface Task {
11 | id: string
12 | title: string
13 | created_at: string
14 | user_id: string
15 | }
16 | export interface EditTask {
17 | id: string
18 | title: string
19 | }
20 |
--------------------------------------------------------------------------------