Updated backend to use nodemon for development, removed minio integration and made other changes
This commit is contained in:
		| @@ -13,4 +13,4 @@ RUN npm install | ||||
| COPY . /app | ||||
|  | ||||
| # launch node server | ||||
| ENTRYPOINT node server.js | ||||
| ENTRYPOINT npm run start | ||||
							
								
								
									
										640
									
								
								backend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										640
									
								
								backend/package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -13,6 +13,9 @@ | ||||
|         "express": "^4.17.2", | ||||
|         "minio": "^7.0.26", | ||||
|         "mongodb": "^4.3.1" | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "nodemon": "^2.0.20" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@types/node": { | ||||
| @@ -40,6 +43,12 @@ | ||||
|       "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", | ||||
|       "optional": true | ||||
|     }, | ||||
|     "node_modules/abbrev": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", | ||||
|       "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/accepts": { | ||||
|       "version": "1.3.7", | ||||
|       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", | ||||
| @@ -52,6 +61,19 @@ | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/anymatch": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", | ||||
|       "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "normalize-path": "^3.0.0", | ||||
|         "picomatch": "^2.0.4" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/array-flatten": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | ||||
| @@ -89,6 +111,12 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/balanced-match": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | ||||
|       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/base64-js": { | ||||
|       "version": "1.5.1", | ||||
|       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||||
| @@ -108,6 +136,15 @@ | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/binary-extensions": { | ||||
|       "version": "2.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", | ||||
|       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/block-stream2": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", | ||||
| @@ -141,6 +178,28 @@ | ||||
|         "node": ">= 0.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/brace-expansion": { | ||||
|       "version": "1.1.11", | ||||
|       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||||
|       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "balanced-match": "^1.0.0", | ||||
|         "concat-map": "0.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/braces": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", | ||||
|       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "fill-range": "^7.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/brorand": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", | ||||
| @@ -269,6 +328,33 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/chokidar": { | ||||
|       "version": "3.5.3", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | ||||
|       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", | ||||
|       "dev": true, | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "individual", | ||||
|           "url": "https://paulmillr.com/funding/" | ||||
|         } | ||||
|       ], | ||||
|       "dependencies": { | ||||
|         "anymatch": "~3.1.2", | ||||
|         "braces": "~3.0.2", | ||||
|         "glob-parent": "~5.1.2", | ||||
|         "is-binary-path": "~2.1.0", | ||||
|         "is-glob": "~4.0.1", | ||||
|         "normalize-path": "~3.0.0", | ||||
|         "readdirp": "~3.6.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 8.10.0" | ||||
|       }, | ||||
|       "optionalDependencies": { | ||||
|         "fsevents": "~2.3.2" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/cipher-base": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", | ||||
| @@ -278,6 +364,12 @@ | ||||
|         "safe-buffer": "^5.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/concat-map": { | ||||
|       "version": "0.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", | ||||
|       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/content-disposition": { | ||||
|       "version": "0.5.4", | ||||
|       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", | ||||
| @@ -609,6 +701,18 @@ | ||||
|         "url": "https://paypal.me/naturalintelligence" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fill-range": { | ||||
|       "version": "7.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", | ||||
|       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "to-regex-range": "^5.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/finalhandler": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", | ||||
| @@ -647,6 +751,20 @@ | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fsevents": { | ||||
|       "version": "2.3.2", | ||||
|       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", | ||||
|       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", | ||||
|       "dev": true, | ||||
|       "hasInstallScript": true, | ||||
|       "optional": true, | ||||
|       "os": [ | ||||
|         "darwin" | ||||
|       ], | ||||
|       "engines": { | ||||
|         "node": "^8.16.0 || ^10.6.0 || >=11.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/function-bind": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", | ||||
| @@ -680,6 +798,18 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/glob-parent": { | ||||
|       "version": "5.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", | ||||
|       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "is-glob": "^4.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/has": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", | ||||
| @@ -699,6 +829,15 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/has-flag": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", | ||||
|       "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/has-symbols": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", | ||||
| @@ -801,6 +940,12 @@ | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/ignore-by-default": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", | ||||
|       "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/inherits": { | ||||
|       "version": "2.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||||
| @@ -858,6 +1003,18 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-binary-path": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | ||||
|       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "binary-extensions": "^2.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-boolean-object": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", | ||||
| @@ -898,6 +1055,15 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-extglob": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", | ||||
|       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-generator-function": { | ||||
|       "version": "1.0.10", | ||||
|       "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", | ||||
| @@ -912,6 +1078,18 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-glob": { | ||||
|       "version": "4.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", | ||||
|       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "is-extglob": "^2.1.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-negative-zero": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", | ||||
| @@ -923,6 +1101,15 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-number": { | ||||
|       "version": "7.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", | ||||
|       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=0.12.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/is-number-object": { | ||||
|       "version": "1.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", | ||||
| @@ -1121,6 +1308,18 @@ | ||||
|       "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", | ||||
|       "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" | ||||
|     }, | ||||
|     "node_modules/minimatch": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", | ||||
|       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "brace-expansion": "^1.1.7" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": "*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minimist": { | ||||
|       "version": "1.2.5", | ||||
|       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", | ||||
| @@ -1210,6 +1409,73 @@ | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/nodemon": { | ||||
|       "version": "2.0.20", | ||||
|       "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", | ||||
|       "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "chokidar": "^3.5.2", | ||||
|         "debug": "^3.2.7", | ||||
|         "ignore-by-default": "^1.0.1", | ||||
|         "minimatch": "^3.1.2", | ||||
|         "pstree.remy": "^1.1.8", | ||||
|         "semver": "^5.7.1", | ||||
|         "simple-update-notifier": "^1.0.7", | ||||
|         "supports-color": "^5.5.0", | ||||
|         "touch": "^3.1.0", | ||||
|         "undefsafe": "^2.0.5" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "nodemon": "bin/nodemon.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8.10.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "type": "opencollective", | ||||
|         "url": "https://opencollective.com/nodemon" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/nodemon/node_modules/debug": { | ||||
|       "version": "3.2.7", | ||||
|       "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", | ||||
|       "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "ms": "^2.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/nodemon/node_modules/ms": { | ||||
|       "version": "2.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | ||||
|       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/nopt": { | ||||
|       "version": "1.0.10", | ||||
|       "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", | ||||
|       "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "abbrev": "1" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "nopt": "bin/nopt.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": "*" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/normalize-path": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||||
|       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/object-assign": { | ||||
|       "version": "4.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", | ||||
| @@ -1302,6 +1568,18 @@ | ||||
|         "node": ">=0.12" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/picomatch": { | ||||
|       "version": "2.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", | ||||
|       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=8.6" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/jonschlinkert" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/proxy-addr": { | ||||
|       "version": "2.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", | ||||
| @@ -1314,6 +1592,12 @@ | ||||
|         "node": ">= 0.10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/pstree.remy": { | ||||
|       "version": "1.1.8", | ||||
|       "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", | ||||
|       "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/public-encrypt": { | ||||
|       "version": "4.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", | ||||
| @@ -1412,6 +1696,18 @@ | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/readdirp": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", | ||||
|       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "picomatch": "^2.2.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ripemd160": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", | ||||
| @@ -1462,6 +1758,15 @@ | ||||
|       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", | ||||
|       "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" | ||||
|     }, | ||||
|     "node_modules/semver": { | ||||
|       "version": "5.7.1", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||||
|       "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||||
|       "dev": true, | ||||
|       "bin": { | ||||
|         "semver": "bin/semver" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/send": { | ||||
|       "version": "0.17.2", | ||||
|       "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", | ||||
| @@ -1534,6 +1839,27 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/simple-update-notifier": { | ||||
|       "version": "1.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", | ||||
|       "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "semver": "~7.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/simple-update-notifier/node_modules/semver": { | ||||
|       "version": "7.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", | ||||
|       "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", | ||||
|       "dev": true, | ||||
|       "bin": { | ||||
|         "semver": "bin/semver.js" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/smart-buffer": { | ||||
|       "version": "4.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", | ||||
| @@ -1610,6 +1936,18 @@ | ||||
|       "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", | ||||
|       "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" | ||||
|     }, | ||||
|     "node_modules/supports-color": { | ||||
|       "version": "5.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | ||||
|       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "has-flag": "^3.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/through2": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", | ||||
| @@ -1619,6 +1957,18 @@ | ||||
|         "readable-stream": "2 || 3" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/to-regex-range": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", | ||||
|       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "is-number": "^7.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/toidentifier": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", | ||||
| @@ -1627,6 +1977,18 @@ | ||||
|         "node": ">=0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/touch": { | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", | ||||
|       "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "nopt": "~1.0.10" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "nodetouch": "bin/nodetouch.js" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tr46": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", | ||||
| @@ -1664,6 +2026,12 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/undefsafe": { | ||||
|       "version": "2.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", | ||||
|       "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/unpipe": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | ||||
| @@ -1823,6 +2191,12 @@ | ||||
|       "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", | ||||
|       "optional": true | ||||
|     }, | ||||
|     "abbrev": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", | ||||
|       "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "accepts": { | ||||
|       "version": "1.3.7", | ||||
|       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", | ||||
| @@ -1832,6 +2206,16 @@ | ||||
|         "negotiator": "0.6.2" | ||||
|       } | ||||
|     }, | ||||
|     "anymatch": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", | ||||
|       "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "normalize-path": "^3.0.0", | ||||
|         "picomatch": "^2.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "array-flatten": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | ||||
| @@ -1865,11 +2249,23 @@ | ||||
|       "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", | ||||
|       "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" | ||||
|     }, | ||||
|     "balanced-match": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | ||||
|       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "base64-js": { | ||||
|       "version": "1.5.1", | ||||
|       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||||
|       "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" | ||||
|     }, | ||||
|     "binary-extensions": { | ||||
|       "version": "2.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", | ||||
|       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "block-stream2": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", | ||||
| @@ -1900,6 +2296,25 @@ | ||||
|         "type-is": "~1.6.18" | ||||
|       } | ||||
|     }, | ||||
|     "brace-expansion": { | ||||
|       "version": "1.1.11", | ||||
|       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||||
|       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "balanced-match": "^1.0.0", | ||||
|         "concat-map": "0.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "braces": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", | ||||
|       "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "fill-range": "^7.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "brorand": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", | ||||
| @@ -2005,6 +2420,22 @@ | ||||
|         "get-intrinsic": "^1.0.2" | ||||
|       } | ||||
|     }, | ||||
|     "chokidar": { | ||||
|       "version": "3.5.3", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | ||||
|       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "anymatch": "~3.1.2", | ||||
|         "braces": "~3.0.2", | ||||
|         "fsevents": "~2.3.2", | ||||
|         "glob-parent": "~5.1.2", | ||||
|         "is-binary-path": "~2.1.0", | ||||
|         "is-glob": "~4.0.1", | ||||
|         "normalize-path": "~3.0.0", | ||||
|         "readdirp": "~3.6.0" | ||||
|       } | ||||
|     }, | ||||
|     "cipher-base": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", | ||||
| @@ -2014,6 +2445,12 @@ | ||||
|         "safe-buffer": "^5.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "concat-map": { | ||||
|       "version": "0.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", | ||||
|       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "content-disposition": { | ||||
|       "version": "0.5.4", | ||||
|       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", | ||||
| @@ -2299,6 +2736,15 @@ | ||||
|         "strnum": "^1.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "fill-range": { | ||||
|       "version": "7.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", | ||||
|       "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "to-regex-range": "^5.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "finalhandler": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", | ||||
| @@ -2328,6 +2774,13 @@ | ||||
|       "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", | ||||
|       "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" | ||||
|     }, | ||||
|     "fsevents": { | ||||
|       "version": "2.3.2", | ||||
|       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", | ||||
|       "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", | ||||
|       "dev": true, | ||||
|       "optional": true | ||||
|     }, | ||||
|     "function-bind": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", | ||||
| @@ -2352,6 +2805,15 @@ | ||||
|         "get-intrinsic": "^1.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "glob-parent": { | ||||
|       "version": "5.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", | ||||
|       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "is-glob": "^4.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "has": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", | ||||
| @@ -2365,6 +2827,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", | ||||
|       "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" | ||||
|     }, | ||||
|     "has-flag": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", | ||||
|       "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "has-symbols": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", | ||||
| @@ -2432,6 +2900,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", | ||||
|       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" | ||||
|     }, | ||||
|     "ignore-by-default": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", | ||||
|       "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "inherits": { | ||||
|       "version": "2.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||||
| @@ -2474,6 +2948,15 @@ | ||||
|         "has-bigints": "^1.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "is-binary-path": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | ||||
|       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "binary-extensions": "^2.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "is-boolean-object": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", | ||||
| @@ -2496,6 +2979,12 @@ | ||||
|         "has-tostringtag": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "is-extglob": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", | ||||
|       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "is-generator-function": { | ||||
|       "version": "1.0.10", | ||||
|       "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", | ||||
| @@ -2504,11 +2993,26 @@ | ||||
|         "has-tostringtag": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "is-glob": { | ||||
|       "version": "4.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", | ||||
|       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "is-extglob": "^2.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "is-negative-zero": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", | ||||
|       "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" | ||||
|     }, | ||||
|     "is-number": { | ||||
|       "version": "7.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", | ||||
|       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "is-number-object": { | ||||
|       "version": "1.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", | ||||
| @@ -2652,6 +3156,15 @@ | ||||
|       "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", | ||||
|       "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" | ||||
|     }, | ||||
|     "minimatch": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", | ||||
|       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "brace-expansion": "^1.1.7" | ||||
|       } | ||||
|     }, | ||||
|     "minimist": { | ||||
|       "version": "1.2.5", | ||||
|       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", | ||||
| @@ -2726,6 +3239,56 @@ | ||||
|       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", | ||||
|       "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" | ||||
|     }, | ||||
|     "nodemon": { | ||||
|       "version": "2.0.20", | ||||
|       "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", | ||||
|       "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "chokidar": "^3.5.2", | ||||
|         "debug": "^3.2.7", | ||||
|         "ignore-by-default": "^1.0.1", | ||||
|         "minimatch": "^3.1.2", | ||||
|         "pstree.remy": "^1.1.8", | ||||
|         "semver": "^5.7.1", | ||||
|         "simple-update-notifier": "^1.0.7", | ||||
|         "supports-color": "^5.5.0", | ||||
|         "touch": "^3.1.0", | ||||
|         "undefsafe": "^2.0.5" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "debug": { | ||||
|           "version": "3.2.7", | ||||
|           "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", | ||||
|           "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ms": "^2.1.1" | ||||
|           } | ||||
|         }, | ||||
|         "ms": { | ||||
|           "version": "2.1.3", | ||||
|           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | ||||
|           "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", | ||||
|           "dev": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "nopt": { | ||||
|       "version": "1.0.10", | ||||
|       "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", | ||||
|       "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "abbrev": "1" | ||||
|       } | ||||
|     }, | ||||
|     "normalize-path": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||||
|       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "object-assign": { | ||||
|       "version": "4.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", | ||||
| @@ -2794,6 +3357,12 @@ | ||||
|         "sha.js": "^2.4.8" | ||||
|       } | ||||
|     }, | ||||
|     "picomatch": { | ||||
|       "version": "2.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", | ||||
|       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "proxy-addr": { | ||||
|       "version": "2.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", | ||||
| @@ -2803,6 +3372,12 @@ | ||||
|         "ipaddr.js": "1.9.1" | ||||
|       } | ||||
|     }, | ||||
|     "pstree.remy": { | ||||
|       "version": "1.1.8", | ||||
|       "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", | ||||
|       "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "public-encrypt": { | ||||
|       "version": "4.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", | ||||
| @@ -2881,6 +3456,15 @@ | ||||
|         "util-deprecate": "^1.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "readdirp": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", | ||||
|       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "picomatch": "^2.2.1" | ||||
|       } | ||||
|     }, | ||||
|     "ripemd160": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", | ||||
| @@ -2914,6 +3498,12 @@ | ||||
|       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", | ||||
|       "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" | ||||
|     }, | ||||
|     "semver": { | ||||
|       "version": "5.7.1", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||||
|       "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "send": { | ||||
|       "version": "0.17.2", | ||||
|       "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", | ||||
| @@ -2976,6 +3566,23 @@ | ||||
|         "object-inspect": "^1.9.0" | ||||
|       } | ||||
|     }, | ||||
|     "simple-update-notifier": { | ||||
|       "version": "1.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", | ||||
|       "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "semver": "~7.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "semver": { | ||||
|           "version": "7.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", | ||||
|           "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", | ||||
|           "dev": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "smart-buffer": { | ||||
|       "version": "4.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", | ||||
| @@ -3035,6 +3642,15 @@ | ||||
|       "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", | ||||
|       "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" | ||||
|     }, | ||||
|     "supports-color": { | ||||
|       "version": "5.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | ||||
|       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "has-flag": "^3.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "through2": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", | ||||
| @@ -3044,11 +3660,29 @@ | ||||
|         "readable-stream": "2 || 3" | ||||
|       } | ||||
|     }, | ||||
|     "to-regex-range": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", | ||||
|       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "is-number": "^7.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "toidentifier": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", | ||||
|       "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" | ||||
|     }, | ||||
|     "touch": { | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", | ||||
|       "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "nopt": "~1.0.10" | ||||
|       } | ||||
|     }, | ||||
|     "tr46": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", | ||||
| @@ -3077,6 +3711,12 @@ | ||||
|         "which-boxed-primitive": "^1.0.2" | ||||
|       } | ||||
|     }, | ||||
|     "undefsafe": { | ||||
|       "version": "2.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", | ||||
|       "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "unpipe": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|   "main": "server.js", | ||||
|   "scripts": { | ||||
|     "test": "echo \"Error: no test specified\" && exit 1", | ||||
|     "start": "node server.js", | ||||
|     "start": "nodemon server.js -e ejs,js,css,html,jpg,png,scss", | ||||
|     "build": "cd frontend && npm install && npm run build" | ||||
|   }, | ||||
|   "keywords": [], | ||||
| @@ -16,5 +16,8 @@ | ||||
|     "express": "^4.17.2", | ||||
|     "minio": "^7.0.26", | ||||
|     "mongodb": "^4.3.1" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "nodemon": "^2.0.20" | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -1,21 +1,12 @@ | ||||
| const { MongoClient } = require("mongodb"); | ||||
| const express = require('express'); | ||||
| const minio = require('minio'); | ||||
|  | ||||
| /*============== VARIABLE DECLARATION ==============*/ | ||||
| // Mongo set-up variables | ||||
| const mongoCollection = process.env.MONGO_COLLECTION || 'eventlog'; | ||||
| const mongoUri = process.env.MONGO_URI || 'mongodb://127.0.0.1:27017/default?replicaSet=rs0'; | ||||
| const mongoCollection = process.env.MONGO_COLLECTION || 'log'; | ||||
| const mongoUri = process.env.MONGODB_HOST || 'mongodb://127.0.0.1:27017/default?replicaSet=rs0'; | ||||
|  | ||||
| // Minio set-up variables | ||||
| const minioAccessKey = process.env.MINIO_ACCESS_KEY || 'kspace-mugshot'; | ||||
| const minioSecretKey = process.env.MINIO_SECRET_KEY || '2mSI6HdbJ8'; | ||||
| const minioHostname = process.env.MINIO_HOSTNAME || '127.0.0.1'; | ||||
| const minioPort = process.env.MINIO_PORT || 9000; | ||||
| const minioScheme = process.env.MINIO_SCHEME || 'http'; | ||||
| const minioBucket = process.env.MINIO_BUCKET || 'kspace-mugshot'; | ||||
| console.info("Using bucket:", minioBucket); | ||||
| const historyNumber = parseInt(process.env.HISTORY_AMOUNT) || 10; | ||||
| const historyNumber = parseInt(process.env.HISTORY_AMOUNT) || 50; | ||||
|  | ||||
| // Stream set-up variables | ||||
| let changeStream; | ||||
| @@ -38,63 +29,34 @@ async function run() { | ||||
|  | ||||
|   changeStream = collection.watch(pipeline, options); | ||||
|   console.log("Started watching changes in database"); | ||||
|   console.log("Minio hostname:", minioHostname); | ||||
|   console.log("Minio port:", minioPort); | ||||
|   console.log("Minio protocol:", minioScheme); | ||||
|  | ||||
|   const writeMessage = (response, blob) => { | ||||
|     const message = `id: ${blob._id}\nevent: message\ndata: ${JSON.stringify(blob)}\n\n` | ||||
|     response.write(message) | ||||
|   } | ||||
|  | ||||
|   // Triggers on GET at /event route | ||||
|   app.get('/events', async function (request, response) { | ||||
|     let minioClient = new minio.Client({ | ||||
|       endPoint: minioHostname, | ||||
|       port: parseInt(minioPort), | ||||
|       useSSL: minioScheme == 'https', | ||||
|       accessKey: minioAccessKey, | ||||
|       secretKey: minioSecretKey | ||||
|     }); | ||||
|  | ||||
|     async function wrapEvent(doc) { | ||||
|       let arr = []; | ||||
|       let blob; | ||||
|       if (doc && doc.screenshot_count) { | ||||
|         for (let i = 1; i <= doc.screenshot_count ; i++) { | ||||
|           arr.push({ | ||||
|             url: await minioClient.presignedUrl('GET', minioBucket, | ||||
|               `${doc.camera}/${doc._id}/${i}.jpg`, 60 * 60) | ||||
|           }); | ||||
|         } | ||||
|       } else if (doc && doc.screenshots) { | ||||
|         for (let j = 0; j < doc.screenshots.length; j++) { | ||||
|           let path = doc.screenshots[j]; | ||||
|           arr.push({ | ||||
|             url: await minioClient.presignedUrl('GET', minioBucket, | ||||
|               `thumb/${path}`, 60 * 60), | ||||
|             orig: await minioClient.presignedUrl('GET', minioBucket, | ||||
|               `${path}`, 60 * 60) | ||||
|           }); | ||||
|         } | ||||
|       }; | ||||
|  | ||||
|       if (arr.length > 0) { | ||||
|         blob = JSON.stringify({...doc, screenshots: [...arr]}); | ||||
|       } else { | ||||
|         blob = JSON.stringify({...doc}); | ||||
|       } | ||||
|       return `event: log-entry\ndata: ${blob}\n\n` | ||||
|     } | ||||
|  | ||||
|     // Notify SSE to React | ||||
|       // Notify SSE to React | ||||
|     const header = { 'Content-Type': 'text/event-stream', 'Connection': 'keep-alive' }; | ||||
|     response.writeHead(200, "OK", header); | ||||
|  | ||||
|     const historyCursor = collection.find().sort({$natural:-1}).limit(historyNumber); | ||||
|     const historyCursor = collection.find() | ||||
|         .sort({$natural:-1}) | ||||
|         .limit(historyNumber).toArray().then((res) => { | ||||
|           res.reverse().forEach((document) => { | ||||
|             writeMessage(response, document) | ||||
|           }) | ||||
|         }); | ||||
|  | ||||
|     historyCursor.forEach(async (document) => { | ||||
|       response.write(await wrapEvent(document)); | ||||
|     const changeListener = async (change) => { | ||||
|       writeMessage(response, change.fullDocument) | ||||
|     } | ||||
|     changeStream.on("change", changeListener); | ||||
|     response.on('close', () => { | ||||
|       changeStream.removeListener("change", changeListener) | ||||
|     }) | ||||
|  | ||||
|     changeStream.on("change", async(data) => { | ||||
|       response.write(await wrapEvent(data.fullDocument)); | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   app.listen(PORT); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user