From 69b3aa215d23e762b06d4fc506d58516140de00e Mon Sep 17 00:00:00 2001 From: Kacper Maj <60718448+kapisolec@users.noreply.github.com> Date: Mon, 25 Jan 2021 14:50:08 +0100 Subject: [PATCH] Initial comit ver2 --- .gitignore | 3 + Kacper-Maj-Karta-projekt.pdf | Bin 0 -> 112566 bytes README.md | 2 + package-lock.json | 1526 ++++++++++++++++++++++++++++++++++ package.json | 21 + public/chat.html | 42 + public/css/.DS_Store | Bin 0 -> 6148 bytes public/css/styles.css | 196 +++++ public/css/styles.min.css | 147 ++++ public/img/favicon.png | Bin 0 -> 1477 bytes public/index.html | 33 + public/js/chat.js | 152 ++++ src/index.js | 86 ++ src/utils/messages.js | 11 + src/utils/users.js | 54 ++ 15 files changed, 2273 insertions(+) create mode 100644 .gitignore create mode 100644 Kacper-Maj-Karta-projekt.pdf create mode 100644 README.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/chat.html create mode 100644 public/css/.DS_Store create mode 100644 public/css/styles.css create mode 100644 public/css/styles.min.css create mode 100644 public/img/favicon.png create mode 100644 public/index.html create mode 100644 public/js/chat.js create mode 100644 src/index.js create mode 100644 src/utils/messages.js create mode 100644 src/utils/users.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4bc5642 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +src/utils/roomsIDs.json +src/utils/roomsIDs.json diff --git a/Kacper-Maj-Karta-projekt.pdf b/Kacper-Maj-Karta-projekt.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5bdb5ee4d86f356414c8aaf28393748f0fe32714 GIT binary patch literal 112566 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

o2OaZ4eyn2YD9tzm^|z!rfw`4p9*?4Z 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 z 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e585f38 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# Watch With Friends +**Watch with friends** to projekt, który ma za zadanie umożliwić „spotkanie” się znajomych na wspólnym oglądaniu filmów w dobie pandemii. Postawiłem sobie za zadanie umożliwić połączenie możliwie wielu przyjaciół jednocześnie w jednym, generowanym losowo pokoju do którego dostęp otrzymują osoby, które dostaną unikatowy link. W pokoju tym użytkownicy poproszeni zostaną o ustawienie swojej nazwy a następnie mogą zarządzać puszczanym aktualnie filmem z YouTube, wkleić link do wybranego przez siebie filmu, dowolnie zatrzymywać i puszczać film. Jako dodatkowy element pokoju dodany zostanie chat, który będzie pozwalał na komunikację pomiędzy użytkownikami serwisu w czasie rzeczywistym. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b22c27a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1526 @@ +{ + "name": "chat-app", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + }, + "@types/cors": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.9.tgz", + "integrity": "sha512-zurD1ibz21BRlAOIKP8yhrxlqKx6L9VCwkB5kMiP6nZAhoF5MvC7qS1qPA7nRcr1GJolfkQC7/EAL4hdYejLtg==" + }, + "@types/node": { + "version": "14.14.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", + "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" + }, + "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", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "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", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "bad-words": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/bad-words/-/bad-words-3.0.4.tgz", + "integrity": "sha512-v/Q9uRPH4+yzDVLL4vR1+S9KoFgOEUl5s4axd6NIAq8SV2mradgi4E8lma/Y0cw1ltVdvyegCQQKffCPRCp8fg==", + "requires": { + "badwords-list": "^1.0.0" + } + }, + "badwords-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/badwords-list/-/badwords-list-1.0.0.tgz", + "integrity": "sha1-XphW2/E0gqKVw7CzBK+51M/FxXk=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "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 + }, + "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": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } + } + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + } + }, + "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" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "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" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "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=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.0.tgz", + "integrity": "sha512-vW7EAtn0HDQ4MtT5QbmCHF17TaYLONv2/JwdYsq9USPRZVM4zG7WB3k0Nc321z8EuSOlhGokrYlYx4176QhD0A==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "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": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } + } + }, + "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", + "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" + } + }, + "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=" + }, + "fsevents": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "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==" + }, + "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-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "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-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "requires": { + "mime-db": "1.45.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "nodemon": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "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": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "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 + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "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=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "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" + } + }, + "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 + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "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" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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": { + "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==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "socket.io": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.0.tgz", + "integrity": "sha512-Aqg2dlRh6xSJvRYK31ksG65q4kmBOqU4g+1ukhPcoT6wNGYoIwSYPlCPuRwOO9pgLUajojGFztl6+V2opmKcww==", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": "^14.14.10", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==" + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "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" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "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.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "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" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "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" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "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=" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==" + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c2ebfa2 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "chat-app", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node src/index.js", + "dev": "nodemon src/index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "bad-words": "^3.0.4", + "express": "^4.17.1", + "socket.io": "^3.1.0" + }, + "devDependencies": { + "nodemon": "^2.0.7" + } +} diff --git a/public/chat.html b/public/chat.html new file mode 100644 index 0000000..0b2a88b --- /dev/null +++ b/public/chat.html @@ -0,0 +1,42 @@ + + + + + + + Chat + + + + + + + + + + + + + + +

+
+ +
+
+
+ +
+
+ + +
+ +
+ +
+
+ + + + \ No newline at end of file diff --git a/public/css/.DS_Store b/public/css/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0hPP)I6-8OeK^M1dbc{BUw2{C+z2n-PzBG5+!u3SO4kLm^VLix;*>*JfaSw$322mz0h z(jBCCJ0jjkzb*jW7AV#c#BU&QMIfx8gWs3#-?k(_n*6()Hg*kwsYBNu2dLLjzyWgf zp_EQ|WZ*Ig_}sax{Dr*m^q(o^7}+uhV5+vX7tuc@1Wp>YrWha)Hi_-L3nTB!+1m|SeFIe+AcAgQS zmowq5-M%cP-Hv1h0B?0cw9iApvzQMQoA&vuiyv5!3M&A3pYP{ZXXA)UCFcKIEv3MQCGP#Lj|P0D|Lf&ey&9W#Ht=LreS3tA-uyT zrlR%JEO?TGxz27g03cq{F%-4WH~6CkfOB|+TG}*LE-^wMp3@no1%MNnI^u%&?UJwl zbdTzT7Jx?fRwXTVn~uk2@6Nvysux-SICZTO4n!OMkY8E==ycS#6jxV))}-#V08juN z>#8Ar6AmH2v;dHO_x8=kE-FUh^G#IS69S-lSJ&73x;6_lZ9rKS7XskmLGb7k>5fV` z2yMDl*--rm0l)-+@Q+G32yH+N`K1MbZ)pd?Vbur95{CTJ0uWqLtK0+725?qXH?#oo z{k%#z2yMsnLVjrh;NpZqaJbC}fLrg(R#w~ksG$XbD>G=!Q;Cb*ro`?7rN`*@zWvbx zz_%)N9A0iGEq05XzpC><3jh;xS&ELKkbQKnaa{i^o$W>dxF)ArmZIY;R3G^fqg1#l@Ep?NV*SYE~{Zq*%t11COt_EwxtRsgUNE=3bmjTI*_591X0-kAQZ zvS4Ei(b_+QO-jo$&aO z!~49=R<~uR?l%(vwghuQ5`zC8m!)j=W&2C{YC7BV@iy*+XR9|;09dJ%3#CR)4j$#o z3|m7Y>F9f&*7`hu)kS^SM9MG>W)48B9xhAa%8X`l!Y;m|ZXJ*OPdU718tW=2Gfdy} zkuod>y9z+7elAW3?&tZ6I=H2UvBq5;l + + + + + + Chat + + + + + + + + + +
+
+

Join

+
+ + + + + +
+

or

+ +
+ +
+ + \ No newline at end of file diff --git a/public/js/chat.js b/public/js/chat.js new file mode 100644 index 0000000..abc362b --- /dev/null +++ b/public/js/chat.js @@ -0,0 +1,152 @@ +'use strict'; +const socket = io(); +const buttonLocation = document.querySelector('#sendLocation'); +const form = document.querySelector('#sendMessForm'); +const formButton = document.querySelector('#formButton'); +const input = form.childNodes[1]; +const button = form.childNodes[3]; +const messageContainer = document.querySelector('#messages-container'); +const sidebarContainer = document.querySelector('.chat__sidebar'); + +// TEMPLATES +const sidebarTemplate = `

{{room}}

+

Users

+
    + {{#users}} +
  • {{username}}
  • + {{/users}} +
`; + +const htmlTemplate = [ + `
+

+ {{user}} + {{createdAt}} +

+

{{string}}

+
`, + `
+

+ {{user}} + {{createdAt}} +

+

Link

+
`, + `
+

{{string}}

+
`, +]; + +let message = ''; +// let user = window.prompt('Please state your username', 'User'); + +const autoscroll = () => { + // New message elemnt + const newMessage = messageContainer.lastElementChild; + + // Height of the new message + const newMessageStyles = getComputedStyle(newMessage); + const newMessageMargin = parseInt(newMessageStyles.marginBottom); + const newMessageHeight = newMessage.offsetHeight + newMessageMargin; + + // Visible height + const visibleHeight = messageContainer.offsetHeight; + + // Height of messages container + const containerHeight = messageContainer.scrollHeight; + + // scrolloffset + const scrolloffset = messageContainer.scrollTop + visibleHeight + 15; + + if (containerHeight - newMessageHeight <= scrolloffset) { + console.log('should scroll down'); + messageContainer.scrollTop = messageContainer.scrollHeight; + } +}; + +const { username, room } = Qs.parse(location.search, { + ignoreQueryPrefix: true, +}); +console.log(username, room); + +socket.on('message', (object) => { + console.log(object); + const string = object.text; + const user = object.username; + const createdAt = moment(object.createdAt).format('HH:mm:ss'); + + if (string.includes('https') || string.includes('http')) { + const html = Mustache.render(htmlTemplate[1], { + user, + string, + createdAt, + }); + messageContainer.insertAdjacentHTML('beforeend', html); + autoscroll(); + + console.log('not includes'); + } else if (string.includes('Welcome to the server')) { + const html = Mustache.render(htmlTemplate[2], { + string, + }); + messageContainer.insertAdjacentHTML('beforeend', html); + autoscroll(); + } else { + const html = Mustache.render(htmlTemplate[0], { + string, + user, + createdAt, + }); + messageContainer.insertAdjacentHTML('beforeend', html); + autoscroll(); + } +}); + +form.addEventListener('submit', (e) => { + e.preventDefault(); + input.focus(); + + // Disable form + + if (input.value === '') return; + button.setAttribute('disabled', 'disabled'); + + socket.emit('message', input.value, (error) => { + // Re-enable form + button.removeAttribute('disabled'); + if (error) return console.log(error); + console.log('Message delivered'); + input.value = ''; + input.focus(); + }); +}); + +// Send location +buttonLocation.addEventListener('click', (e) => { + e.preventDefault(); + + if (!navigator.geolocation) return alert('No geolocation'); + buttonLocation.setAttribute('disabled', 'disabled'); + + navigator.geolocation.getCurrentPosition((position) => { + const { latitude, longitude } = position.coords; + const coordsObj = `https://www.google.com/maps/?q=${latitude},${longitude}`; + + socket.emit('message', coordsObj, () => { + console.log('Location delivered'); + buttonLocation.removeAttribute('disabled'); + }); + }); +}); + +socket.on('roomData', ({ room, users }) => { + const html = Mustache.render(sidebarTemplate, { room, users }); + sidebarContainer.innerHTML = html; +}); + +socket.emit('join', { username, room }, (error) => { + if (error) { + alert(error); + location.href = '/'; + } +}); diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..7960bf9 --- /dev/null +++ b/src/index.js @@ -0,0 +1,86 @@ +const express = require('express'); +const http = require('http'); +const path = require('path'); +const socketio = require('socket.io'); +const Filter = require('bad-words'); +const { generateMessage } = require('./utils/messages'); +const { + addUser, + removeUser, + getUser, + getUsersInRoom, +} = require('./utils/users'); + +const app = express(); +const server = http.createServer(app); +const io = socketio(server); + +const port = process.env.PORT || 3000; +const publicDirectoryPath = path.join(__dirname, '../public'); + +app.use(express.static(publicDirectoryPath)); + +io.on('connection', (socket) => { + // Welcome message + + socket.on('join', ({ username, room }, callback) => { + const { error, user } = addUser({ id: socket.id, username, room }); + if (error) return callback(error); + + socket.join(user.room); //Join the room + + // emit the message to() specific room + socket.emit( + 'message', + generateMessage(`Welcome to the server, ${username}!`) + ); + socket.broadcast + .to(user.room) + .emit('message', generateMessage(`${user.username} has joined`)); + io.to(user.room).emit('roomData', { + room: user.room, + users: getUsersInRoom(user.room), + }); + callback(); + }); + + // On recv message + socket.on('message', (message, callback) => { + const user = getUser(socket.id); + const filter = new Filter(); + + if (filter.isProfane(message)) message = filter.clean(message); + //callback('Profanity is not allowed'); + console.log(user); + try { + io.to(user.room).emit( + 'message', + generateMessage(message, user.username) + ); + } catch (error) { + console.log(error); + } + + callback(); + }); + + socket.on('disconnect', () => { + const user = removeUser(socket.id); + if (user) + io.to(user.room).emit( + 'message', + generateMessage(`${user.username} has left!`) + ); + io.to(user.room).emit('roomData', { + room: user.room, + users: getUsersInRoom(user.room), + }); + }); + + socket.on('sendLocation', (object, callback) => { + callback('Location shared'); + socket.broadcast.emit('recvObject', generateMessage(object)); + }); +}); + +server.listen(port, () => console.log(`Server is listening at ${port}`)); diff --git a/src/utils/messages.js b/src/utils/messages.js new file mode 100644 index 0000000..d081ccc --- /dev/null +++ b/src/utils/messages.js @@ -0,0 +1,11 @@ +const generateMessage = (text, username) => { + return { + text, + username, + createdAt: new Date().getTime(), + }; +}; + +module.exports = { + generateMessage, +}; diff --git a/src/utils/users.js b/src/utils/users.js new file mode 100644 index 0000000..895e011 --- /dev/null +++ b/src/utils/users.js @@ -0,0 +1,54 @@ +const users = []; + +// addUser, removeUser, getUser, getUsersInRoom + +const addUser = ({ id, username, room }) => { + // Clean the data + // username = username.trim().toLowerCase(); + // room = room.trim().toLowerCase(); + if (!room || !username) + return { + error: 'Username and room are required', + }; + // Check for existing user + const existingUser = users.find((user) => { + return user.room === room && user.username === username; + }); + // Validate username + if (existingUser) + return { + error: 'Username is in use!', + }; + + // Store user + const user = { id, username, room }; + users.push(user); + return { user }; +}; + +const removeUser = (id) => { + const index = users.findIndex((user) => user.id === id); + if (index !== -1) { + // console.log(users[id]) + return users.splice(index, 1)[0]; + } +}; + +const getUser = (id) => { + const foundUser = users.find((user) => user.id === id); + if (!foundUser) return undefined; + return foundUser; +}; + +const getUsersInRoom = (room) => { + const usersInRoom = users.filter((user) => user.room === room); + if (!usersInRoom) return []; + return usersInRoom; +}; + +module.exports = { + addUser, + removeUser, + getUser, + getUsersInRoom, +};