From ceb9eca8620cd36f9af927999035dd1e21544f29 Mon Sep 17 00:00:00 2001 From: Jonas Zohren <jonas.zohren@adesso.de> Date: Thu, 10 Sep 2020 22:24:08 +0200 Subject: [PATCH] Added docker support --- .dockerignore | 3 + .gitkeep | 1 - Dockerfile | 19 + client/src/stores.js | 2 +- package-lock.json | 838 +---------------- Screenshot_01.png => server/Screenshot_01.png | Bin index..js => server/index..js | 0 server/package-lock.json | 843 ++++++++++++++++++ package.json => server/package.json | 0 {public => server/public}/index.html | 0 room.png => server/room.png | Bin room_attacher.js => server/room_attacher.js | 0 server/room_previews/jon-t07-6p6-jiy.jpeg | Bin 0 -> 9672 bytes server/room_previews/jon-zcn-oui-zyj.jpeg | Bin 0 -> 16342 bytes server.js => server/server.js | 14 +- 15 files changed, 877 insertions(+), 843 deletions(-) create mode 100644 .dockerignore delete mode 100644 .gitkeep create mode 100644 Dockerfile rename Screenshot_01.png => server/Screenshot_01.png (100%) rename index..js => server/index..js (100%) create mode 100644 server/package-lock.json rename package.json => server/package.json (100%) rename {public => server/public}/index.html (100%) rename room.png => server/room.png (100%) rename room_attacher.js => server/room_attacher.js (100%) create mode 100644 server/room_previews/jon-t07-6p6-jiy.jpeg create mode 100644 server/room_previews/jon-zcn-oui-zyj.jpeg rename server.js => server/server.js (92%) diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9a3983b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +**/node_modules/ +client/public/build/ +**.md \ No newline at end of file diff --git a/.gitkeep b/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..80c4b78 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +# Build client app +FROM node:12-alpine AS build-env-webapp +COPY client /build +WORKDIR /build +RUN npm install +RUN npm run build + +# Build server image +FROM node:12-alpine AS build-env-server +COPY server /build +WORKDIR /build +RUN npm ci --only=production + +# Create hardened runtime image +FROM gcr.io/distroless/nodejs:12 +COPY --from=build-env-server /build /app +COPY --from=build-env-webapp /build/public /app/public +WORKDIR /app +CMD ["server.js"] \ No newline at end of file diff --git a/client/src/stores.js b/client/src/stores.js index cff4661..011700f 100644 --- a/client/src/stores.js +++ b/client/src/stores.js @@ -1,6 +1,6 @@ import { readable, writable } from "svelte/store"; -export const API_BASE_URL = "http://localhost:3000/api"; +export const API_BASE_URL = "api"; const POLL_FOR_UPDATES = true; const POLL_INTERVAL = 2500; const REFRESH_QUERY_STRING_INTERVAL = 5000; diff --git a/package-lock.json b/package-lock.json index 0fa10eb..48e341a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,839 +1,3 @@ { - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@types/node": { - "version": "14.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.2.tgz", - "integrity": "sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A==" - }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", - "requires": { - "@types/node": "*" - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "devtools-protocol": { - "version": "0.0.781568", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.781568.tgz", - "integrity": "sha512-9Uqnzy6m6zEStluH9iyJ3iHyaQziFnMnLeC8vK0eN6smiJmIx7+yB64d67C2lH/LZra+5cGscJAJsNXO+MdPMg==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "puppeteer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.2.1.tgz", - "integrity": "sha512-PZoZG7u+T6N1GFWBQmGVG162Ak5MAy8nYSVpeeQrwJK2oYUlDWpHEJPcd/zopyuEMTv7DiztS1blgny1txR2qw==", - "requires": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.781568", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sleep-promise": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/sleep-promise/-/sleep-promise-8.0.1.tgz", - "integrity": "sha1-jXlaJ+ojlT32tSuRCB5eImZZk8U=" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } + "lockfileVersion": 1 } diff --git a/Screenshot_01.png b/server/Screenshot_01.png similarity index 100% rename from Screenshot_01.png rename to server/Screenshot_01.png diff --git a/index..js b/server/index..js similarity index 100% rename from index..js rename to server/index..js diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 0000000..6a82247 --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,843 @@ +{ + "name": "bbb-puppeteer", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "14.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.2.tgz", + "integrity": "sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A==", + "optional": true + }, + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "devtools-protocol": { + "version": "0.0.781568", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.781568.tgz", + "integrity": "sha512-9Uqnzy6m6zEStluH9iyJ3iHyaQziFnMnLeC8vK0eN6smiJmIx7+yB64d67C2lH/LZra+5cGscJAJsNXO+MdPMg==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "puppeteer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.2.1.tgz", + "integrity": "sha512-PZoZG7u+T6N1GFWBQmGVG162Ak5MAy8nYSVpeeQrwJK2oYUlDWpHEJPcd/zopyuEMTv7DiztS1blgny1txR2qw==", + "requires": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.781568", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sleep-promise": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/sleep-promise/-/sleep-promise-8.0.1.tgz", + "integrity": "sha1-jXlaJ+ojlT32tSuRCB5eImZZk8U=" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "tar-fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", + "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/server/package.json similarity index 100% rename from package.json rename to server/package.json diff --git a/public/index.html b/server/public/index.html similarity index 100% rename from public/index.html rename to server/public/index.html diff --git a/room.png b/server/room.png similarity index 100% rename from room.png rename to server/room.png diff --git a/room_attacher.js b/server/room_attacher.js similarity index 100% rename from room_attacher.js rename to server/room_attacher.js diff --git a/server/room_previews/jon-t07-6p6-jiy.jpeg b/server/room_previews/jon-t07-6p6-jiy.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0c53fa59a2c7d2a00ee948f59c15f23372edb04c GIT binary patch literal 9672 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 Nj~}{!t3*P`{cjXdM|S`K literal 0 HcmV?d00001 diff --git a/server/room_previews/jon-zcn-oui-zyj.jpeg b/server/room_previews/jon-zcn-oui-zyj.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4085006c5a6b0440419972794ac7e35bc7d1f675 GIT binary patch literal 16342 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 literal 0 HcmV?d00001 diff --git a/server.js b/server/server.js similarity index 92% rename from server.js rename to server/server.js index c4dea99..f6a0078 100644 --- a/server.js +++ b/server/server.js @@ -6,9 +6,15 @@ const cp = require("child_process"); const fs = require("fs"); const sleep = require("sleep-promise"); -const PORT = 3000; -const BOT_USERNAME = process.env.BOT_USERNAME; -const BOT_PASSWORD = process.env.BOT_PASSWORD; +const PORT = process.env.PORT || 3000; +const BOT_USERNAME = + process.env.BOT_USERNAME || + console.error("Missing env BOT_USERNAME") || + process.exit(1); +const BOT_PASSWORD = + process.env.BOT_PASSWORD || + console.error("Missing env BOT_PASSWORD") || + process.exit(1); const BOT_DISPLAY_NAME = process.env.BOT_DISPLAY_NAME || "Puppet"; // Global state: @@ -151,5 +157,5 @@ app.post("/api/bulkcreate", async (req, res) => { }); app.listen(PORT, () => { - console.log(`Example app listening at http://localhost:${PORT}`); + console.log(`Listening on port ${PORT}`); }); -- GitLab