From 9f063c80f79fdb1caf25eabfd6413b6fe749cea2 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 25 Apr 2024 14:15:41 +0100 Subject: [PATCH 01/22] level 1 finished --- chat-server/package.json | 7 +- chat-server/server.js | 34 ++++++- package-lock.json | 195 ++++++++++++++++++++------------------- package.json | 4 +- 4 files changed, 138 insertions(+), 102 deletions(-) diff --git a/chat-server/package.json b/chat-server/package.json index b0f8d44..d466146 100644 --- a/chat-server/package.json +++ b/chat-server/package.json @@ -8,10 +8,13 @@ "type": "module", "main": "server.js", "scripts": { - "start": "node server.js" + "start": "nodemon server.js" }, "dependencies": { - "cors": "^2.8.5" + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "express": "^4.19.2", + "nodemon": "^3.1.0" }, "repository": { "url": "https://glitch.com/edit/#!/hello-express" diff --git a/chat-server/server.js b/chat-server/server.js index 3a9636c..7a3edbb 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -1,12 +1,14 @@ -process.env.PORT = process.env.PORT || 9090; -import express from "express"; +process.env.PORT = process.env.PORT || 3001; +import express, { response } from "express"; import cors from "cors"; import path from "path"; +import bodyParser from "body-parser"; import { fileURLToPath } from "url"; const app = express(); app.use(cors()); +app.use(bodyParser.json()); // Get __dirname in ES module const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -21,8 +23,32 @@ const welcomeMessage = { //We will start with one message in the array. const messages = [welcomeMessage]; -app.get("/", (request, response) => { - response.sendFile(__dirname + "/index.html"); +app.get("/", (req, res) => { + res.sendFile(__dirname + "/index.html"); +}); + +app.post("/messages", (req, res) => { + const newMessage = req.body; + newMessage["id"] = messages[messages.length - 1].id + 1; + messages.push(newMessage); + res.json(messages); +}); + +app.get("/messages", (req, res) => { + res.json(messages); +}); + +app.get("/messages/:id", (req, res) => { + const messageId = req.params.id; + const searchedMessage = messages.find((message) => message.id == messageId); + res.json(searchedMessage); +}); + +app.delete("/messages/:id", (req, res) => { + const messageId = req.params.id; + const deleteId = messages.find((message) => message.id == messageId); + messages.splice(messages.indexOf(deleteId), 1); + res.json(messages); }); app.listen(process.env.PORT, () => { diff --git a/package-lock.json b/package-lock.json index a600e80..a614977 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ ], "dependencies": { "cors": "^2.8.5", - "express": "^4.18.2" + "express": "^4.19.2" } }, "chat-server": { @@ -24,7 +24,10 @@ "version": "0.0.1", "license": "MIT", "dependencies": { - "cors": "^2.8.5" + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "express": "^4.19.2", + "nodemon": "^3.1.0" } }, "hotel-bookings-api": { @@ -1188,8 +1191,7 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/accepts": { "version": "1.3.8", @@ -1323,7 +1325,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1561,18 +1562,17 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -1580,7 +1580,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1602,7 +1602,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1692,13 +1691,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1782,7 +1786,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -1965,9 +1968,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -2092,16 +2095,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-property": { @@ -2252,6 +2258,25 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2455,16 +2480,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -2606,7 +2631,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2705,7 +2729,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -2742,15 +2765,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2812,7 +2839,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2862,20 +2888,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -3103,8 +3129,7 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" }, "node_modules/import-local": { "version": "3.1.0", @@ -3179,7 +3204,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -3274,7 +3298,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3301,7 +3324,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3313,7 +3335,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -4539,10 +4560,9 @@ "dev": true }, "node_modules/nodemon": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz", - "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", @@ -4570,7 +4590,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -4587,7 +4606,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -4596,7 +4614,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4607,14 +4624,12 @@ "node_modules/nodemon/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nodemon/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4629,7 +4644,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -4640,14 +4654,12 @@ "node_modules/nodemon/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, "dependencies": { "abbrev": "1" }, @@ -4683,7 +4695,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4978,7 +4989,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -5065,8 +5075,7 @@ "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, "node_modules/pump": { "version": "3.0.0", @@ -5116,9 +5125,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -5189,7 +5198,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -5730,14 +5738,16 @@ "dev": true }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5813,13 +5823,17 @@ "optional": true }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5835,7 +5849,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, "dependencies": { "semver": "^7.5.3" }, @@ -5847,7 +5860,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5859,7 +5871,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5873,8 +5884,7 @@ "node_modules/simple-update-notifier/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/sisteransi": { "version": "1.0.5", @@ -6365,7 +6375,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6385,7 +6394,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, "dependencies": { "nopt": "~1.0.10" }, @@ -6465,8 +6473,7 @@ "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" }, "node_modules/undici-types": { "version": "5.26.5", diff --git a/package.json b/package.json index 3db0bb1..86310f0 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/CodeYourFuture/Module-Node#readme", "dependencies": { - "express": "^4.18.2", - "cors": "^2.8.5" + "cors": "^2.8.5", + "express": "^4.19.2" } } From 560e1781a6a7f49693d62531cee6e7a43fb09d68 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 25 Apr 2024 14:53:07 +0100 Subject: [PATCH 02/22] yarn installed --- chat-server/package.json | 5 ++++- package-lock.json | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/chat-server/package.json b/chat-server/package.json index d466146..d5bb558 100644 --- a/chat-server/package.json +++ b/chat-server/package.json @@ -24,5 +24,8 @@ "node", "glitch", "express" - ] + ], + "devDependencies": { + "yarn": "^1.22.22" + } } diff --git a/package-lock.json b/package-lock.json index a614977..5d62c8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,9 @@ "cors": "^2.8.5", "express": "^4.19.2", "nodemon": "^3.1.0" + }, + "devDependencies": { + "yarn": "^1.22.22" } }, "hotel-bookings-api": { @@ -6887,6 +6890,20 @@ "node": ">=6" } }, + "node_modules/yarn": { + "version": "1.22.22", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", + "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "quote-server": { "name": "@module-node/quote-server", "version": "0.0.1", From 494e826f0888aa1fb42b1f6f28c1a25e352b42ae Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 25 Apr 2024 15:37:47 +0100 Subject: [PATCH 03/22] validation added --- chat-server/server.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/chat-server/server.js b/chat-server/server.js index 7a3edbb..228828d 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -29,6 +29,16 @@ app.get("/", (req, res) => { app.post("/messages", (req, res) => { const newMessage = req.body; + if ( + !newMessage.hasOwnProperty("text") || + !newMessage.hasOwnProperty("from") || + newMessage.from === "" || + newMessage.text === "" || + typeof newMessage.text != "string" || + typeof newMessage.from != "string" + ) { + res.sendStatus(400).send("wrong input"); + } newMessage["id"] = messages[messages.length - 1].id + 1; messages.push(newMessage); res.json(messages); From ab44be58744de0d81ab7fc6af4ef8927a337c3a3 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 25 Apr 2024 16:19:14 +0100 Subject: [PATCH 04/22] level 300 - search and latest routes added --- chat-server/server.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index 228828d..840b7e7 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -1,4 +1,4 @@ -process.env.PORT = process.env.PORT || 3001; +process.env.PORT = process.env.PORT || 9090; import express, { response } from "express"; import cors from "cors"; import path from "path"; @@ -48,19 +48,32 @@ app.get("/messages", (req, res) => { res.json(messages); }); -app.get("/messages/:id", (req, res) => { +app.get("/messages/id/:id", (req, res) => { const messageId = req.params.id; const searchedMessage = messages.find((message) => message.id == messageId); res.json(searchedMessage); }); -app.delete("/messages/:id", (req, res) => { +app.delete("/messages/id/:id", (req, res) => { const messageId = req.params.id; const deleteId = messages.find((message) => message.id == messageId); messages.splice(messages.indexOf(deleteId), 1); res.json(messages); }); +app.get("/messages/search", (req, res) => { + const searchInput = req.query.text.toLowerCase(); + const filteredMessages = messages.filter((message) => + message.text.toLowerCase().includes(searchInput) + ); + res.json(filteredMessages); +}); + +app.get("/messages/latest", (req, res) => { + const latestMessages = messages.slice(-10); + res.json(latestMessages); +}); + app.listen(process.env.PORT, () => { console.log(`listening on PORT ${process.env.PORT}...`); }); From c2e00a37b1e316ba8818a639dadea7b251c68fe2 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 25 Apr 2024 16:33:11 +0100 Subject: [PATCH 05/22] level 400 added timestamp --- chat-server/server.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/chat-server/server.js b/chat-server/server.js index 840b7e7..1a6a006 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -1,5 +1,5 @@ process.env.PORT = process.env.PORT || 9090; -import express, { response } from "express"; +import express from "express"; import cors from "cors"; import path from "path"; import bodyParser from "body-parser"; @@ -40,6 +40,7 @@ app.post("/messages", (req, res) => { res.sendStatus(400).send("wrong input"); } newMessage["id"] = messages[messages.length - 1].id + 1; + newMessage["timeSent"] = new Date(); messages.push(newMessage); res.json(messages); }); From 56c10c8c4c7aa399376ad999c023437123dc4df4 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 25 Apr 2024 17:02:59 +0100 Subject: [PATCH 06/22] level 500 - message update functionality --- chat-server/server.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index 1a6a006..fe7e4e8 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -57,8 +57,8 @@ app.get("/messages/id/:id", (req, res) => { app.delete("/messages/id/:id", (req, res) => { const messageId = req.params.id; - const deleteId = messages.find((message) => message.id == messageId); - messages.splice(messages.indexOf(deleteId), 1); + const deleteMessage = messages.find((message) => message.id == messageId); + messages.splice(messages.indexOf(deleteMessage), 1); res.json(messages); }); @@ -75,6 +75,18 @@ app.get("/messages/latest", (req, res) => { res.json(latestMessages); }); +app.patch("/messages/id/:id", (req, res) => { + console.log(req.params.id); + const messageId = req.params.id; + const updatedInfo = req.body; + const patchMessage = messages.find((message) => message.id == messageId); + messages[messages.indexOf(patchMessage)] = { + ...messages[messages.indexOf(patchMessage)], + ...updatedInfo, + }; + res.json(messages); +}); + app.listen(process.env.PORT, () => { console.log(`listening on PORT ${process.env.PORT}...`); }); From 466b948ab5176aae6170cd2120d0b57529baa291 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Sun, 5 May 2024 17:45:49 +0100 Subject: [PATCH 07/22] validation function added, if statement added to return when validation fails (other wise failing message was getting added too) --- chat-server/server.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index fe7e4e8..c7cb070 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -19,6 +19,17 @@ const welcomeMessage = { text: "Welcome to CYF chat system!", }; +function validateMessage(newMessage) { + return !( + !newMessage.hasOwnProperty("text") || + !newMessage.hasOwnProperty("from") || + newMessage.from === "" || + newMessage.text === "" || + typeof newMessage.text != "string" || + typeof newMessage.from != "string" + ); +} + //This array is our "data store". //We will start with one message in the array. const messages = [welcomeMessage]; @@ -29,16 +40,9 @@ app.get("/", (req, res) => { app.post("/messages", (req, res) => { const newMessage = req.body; - if ( - !newMessage.hasOwnProperty("text") || - !newMessage.hasOwnProperty("from") || - newMessage.from === "" || - newMessage.text === "" || - typeof newMessage.text != "string" || - typeof newMessage.from != "string" - ) { - res.sendStatus(400).send("wrong input"); - } + + if (!validateMessage(newMessage)) return res.status(400).send("wrong input"); + newMessage["id"] = messages[messages.length - 1].id + 1; newMessage["timeSent"] = new Date(); messages.push(newMessage); From f028124658d03de1a189d5f8d0ca07e4ee3d7c42 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Sun, 5 May 2024 18:16:41 +0100 Subject: [PATCH 08/22] latest message route have been made dynamic with requested message counts --- chat-server/server.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index c7cb070..761d345 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -74,8 +74,9 @@ app.get("/messages/search", (req, res) => { res.json(filteredMessages); }); -app.get("/messages/latest", (req, res) => { - const latestMessages = messages.slice(-10); +app.get("/messages/latest/:length", (req, res) => { + const length = req.params.length; + const latestMessages = messages.slice(-length); res.json(latestMessages); }); From d0596c353e36b8fe6eebba5c4acc2c09ec699084 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Sun, 5 May 2024 18:25:28 +0100 Subject: [PATCH 09/22] routes with /:id dynamic path moved to bottom of the page(dynamic paths are blocking static ones) --- chat-server/server.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index 761d345..d5dc412 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -53,19 +53,6 @@ app.get("/messages", (req, res) => { res.json(messages); }); -app.get("/messages/id/:id", (req, res) => { - const messageId = req.params.id; - const searchedMessage = messages.find((message) => message.id == messageId); - res.json(searchedMessage); -}); - -app.delete("/messages/id/:id", (req, res) => { - const messageId = req.params.id; - const deleteMessage = messages.find((message) => message.id == messageId); - messages.splice(messages.indexOf(deleteMessage), 1); - res.json(messages); -}); - app.get("/messages/search", (req, res) => { const searchInput = req.query.text.toLowerCase(); const filteredMessages = messages.filter((message) => @@ -80,7 +67,20 @@ app.get("/messages/latest/:length", (req, res) => { res.json(latestMessages); }); -app.patch("/messages/id/:id", (req, res) => { +app.get("/messages/:id", (req, res) => { + const messageId = req.params.id; + const searchedMessage = messages.find((message) => message.id == messageId); + res.json(searchedMessage); +}); + +app.delete("/messages/:id", (req, res) => { + const messageId = req.params.id; + const deleteMessage = messages.find((message) => message.id == messageId); + messages.splice(messages.indexOf(deleteMessage), 1); + res.json(messages); +}); + +app.patch("/messages/:id", (req, res) => { console.log(req.params.id); const messageId = req.params.id; const updatedInfo = req.body; From 272fb47baa4f3697599e662ec613bb2df78d9874 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 15:11:27 +0100 Subject: [PATCH 10/22] websocket added to server, server updated by websocket --- chat-server/package.json | 3 +- chat-server/server.js | 40 +++++++++- package-lock.json | 155 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 190 insertions(+), 8 deletions(-) diff --git a/chat-server/package.json b/chat-server/package.json index d5bb558..a5c4d70 100644 --- a/chat-server/package.json +++ b/chat-server/package.json @@ -14,7 +14,8 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "express": "^4.19.2", - "nodemon": "^3.1.0" + "nodemon": "^3.1.0", + "websocket": "^1.0.34" }, "repository": { "url": "https://glitch.com/edit/#!/hello-express" diff --git a/chat-server/server.js b/chat-server/server.js index d5dc412..dd361bb 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -4,6 +4,7 @@ import cors from "cors"; import path from "path"; import bodyParser from "body-parser"; import { fileURLToPath } from "url"; +import WebSocket from "ws"; const app = express(); @@ -15,8 +16,8 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const welcomeMessage = { id: 0, - from: "Bart", - text: "Welcome to CYF chat system!", + from: "user", + text: "send your first message!", }; function validateMessage(newMessage) { @@ -38,6 +39,32 @@ app.get("/", (req, res) => { res.sendFile(__dirname + "/index.html"); }); +//websocket + +const wServer = new WebSocket.Server({ noServer: true }); + +wServer.on("connection", (ws) => { + console.log("New WebSocket Connection"); + + messages.forEach((message) => ws.send(JSON.stringify(message))); + + ws.on("message", (message) => { + console.log("Received message form client:", message); + + const parsedMessage = JSON.parse(message); + + messages.push(parsedMessage); + + wServer.clients.forEach((client) => { + if (client.readyState === WebSocket.OPEN) { + client.send(message); + } + }); + }); +}); + +//route methods + app.post("/messages", (req, res) => { const newMessage = req.body; @@ -92,6 +119,13 @@ app.patch("/messages/:id", (req, res) => { res.json(messages); }); -app.listen(process.env.PORT, () => { +// upgrade https server to websocket server +const server = app.listen(process.env.PORT, () => { console.log(`listening on PORT ${process.env.PORT}...`); }); + +server.on("upgrade", (request, socket, head) => { + wss.handleUpgrade(request, socket, head, (ws) => { + wss.emit("connection", ws, request); + }); +}); diff --git a/package-lock.json b/package-lock.json index 5d62c8f..b3adb23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,8 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "express": "^4.19.2", - "nodemon": "^3.1.0" + "nodemon": "^3.1.0", + "websocket": "^1.0.34" }, "devDependencies": { "yarn": "^1.22.22" @@ -1665,6 +1666,18 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2042,6 +2055,18 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -2280,6 +2305,43 @@ "node": ">= 0.4" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2324,6 +2386,20 @@ "source-map": "~0.6.1" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -2363,6 +2439,15 @@ "node": ">= 0.6" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/exec-sh": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", @@ -2523,6 +2608,14 @@ "node": ">= 0.10.0" } }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -3375,8 +3468,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-windows": { "version": "1.0.2", @@ -4493,12 +4585,27 @@ "node": ">= 0.6" } }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -6431,6 +6538,11 @@ "node": ">=8" } }, + "node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -6468,7 +6580,6 @@ "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, "dependencies": { "is-typedarray": "^1.0.0" } @@ -6629,6 +6740,18 @@ "node": ">=0.10.0" } }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -6728,6 +6851,22 @@ "node": ">=10.4" } }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -6849,6 +6988,14 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", From 859c1fb6d3ab2cd1a6ae71ed8bd860a9838a0e0b Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 15:30:45 +0100 Subject: [PATCH 11/22] typo fixed --- chat-server/server.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index dd361bb..47e9b59 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -41,9 +41,9 @@ app.get("/", (req, res) => { //websocket -const wServer = new WebSocket.Server({ noServer: true }); +const wsServer = new WebSocket.Server({ noServer: true }); -wServer.on("connection", (ws) => { +wsServer.on("connection", (ws) => { console.log("New WebSocket Connection"); messages.forEach((message) => ws.send(JSON.stringify(message))); @@ -55,7 +55,7 @@ wServer.on("connection", (ws) => { messages.push(parsedMessage); - wServer.clients.forEach((client) => { + wsServer.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(message); } @@ -125,7 +125,7 @@ const server = app.listen(process.env.PORT, () => { }); server.on("upgrade", (request, socket, head) => { - wss.handleUpgrade(request, socket, head, (ws) => { - wss.emit("connection", ws, request); + wsServer.handleUpgrade(request, socket, head, (ws) => { + wsServer.emit("connection", ws, request); }); }); From db21a7fc8a6c7b595ac3211eb4be383696461805 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 15:42:02 +0100 Subject: [PATCH 12/22] fixed server instance name --- chat-server/server.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index 47e9b59..394f45f 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -41,9 +41,9 @@ app.get("/", (req, res) => { //websocket -const wsServer = new WebSocket.Server({ noServer: true }); +const wss = new WebSocket.Server({ noServer: true }); -wsServer.on("connection", (ws) => { +wss.on("connection", (ws) => { console.log("New WebSocket Connection"); messages.forEach((message) => ws.send(JSON.stringify(message))); @@ -55,7 +55,7 @@ wsServer.on("connection", (ws) => { messages.push(parsedMessage); - wsServer.clients.forEach((client) => { + wss.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(message); } @@ -125,7 +125,7 @@ const server = app.listen(process.env.PORT, () => { }); server.on("upgrade", (request, socket, head) => { - wsServer.handleUpgrade(request, socket, head, (ws) => { - wsServer.emit("connection", ws, request); + wss.handleUpgrade(request, socket, head, (ws) => { + wss.emit("connection", ws, request); }); }); From b210f54cf8054169c6d24b45f1a9bcc1edd58b11 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 15:52:02 +0100 Subject: [PATCH 13/22] ws added to package.json --- chat-server/package.json | 3 ++- package-lock.json | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/chat-server/package.json b/chat-server/package.json index a5c4d70..3ce9f25 100644 --- a/chat-server/package.json +++ b/chat-server/package.json @@ -15,7 +15,8 @@ "cors": "^2.8.5", "express": "^4.19.2", "nodemon": "^3.1.0", - "websocket": "^1.0.34" + "websocket": "^1.0.34", + "ws": "^8.17.0" }, "repository": { "url": "https://glitch.com/edit/#!/hello-express" diff --git a/package-lock.json b/package-lock.json index b3adb23..862b03e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,12 +28,33 @@ "cors": "^2.8.5", "express": "^4.19.2", "nodemon": "^3.1.0", - "websocket": "^1.0.34" + "websocket": "^1.0.34", + "ws": "^8.17.0" }, "devDependencies": { "yarn": "^1.22.22" } }, + "chat-server/node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "hotel-bookings-api": { "name": "@module-node/hotel-bookings-api", "version": "0.0.1", From ecfc28cd0fe2c72f182ce265fec91109db381cc7 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 15:59:15 +0100 Subject: [PATCH 14/22] trying to fix the bug --- chat-server/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat-server/server.js b/chat-server/server.js index 394f45f..8e02ad0 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -41,7 +41,7 @@ app.get("/", (req, res) => { //websocket -const wss = new WebSocket.Server({ noServer: true }); +const wss = new WebSocketServer({ noServer: true }); wss.on("connection", (ws) => { console.log("New WebSocket Connection"); From d046958adae8b1b996a9a8a6a1068f4b89b6f762 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 16:04:15 +0100 Subject: [PATCH 15/22] still trying --- chat-server/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat-server/server.js b/chat-server/server.js index 8e02ad0..394f45f 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -41,7 +41,7 @@ app.get("/", (req, res) => { //websocket -const wss = new WebSocketServer({ noServer: true }); +const wss = new WebSocket.Server({ noServer: true }); wss.on("connection", (ws) => { console.log("New WebSocket Connection"); From 3741208069d98af23d2474453d53ecf6c8d7c81b Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 16:11:07 +0100 Subject: [PATCH 16/22] stilll... --- chat-server/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/chat-server/package.json b/chat-server/package.json index 3ce9f25..f246448 100644 --- a/chat-server/package.json +++ b/chat-server/package.json @@ -15,7 +15,6 @@ "cors": "^2.8.5", "express": "^4.19.2", "nodemon": "^3.1.0", - "websocket": "^1.0.34", "ws": "^8.17.0" }, "repository": { From e0fd7322cc8d2cbbc94dac491866913a611de658 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 16:17:28 +0100 Subject: [PATCH 17/22] still but I think will be last --- chat-server/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index 394f45f..dce7b18 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -4,7 +4,7 @@ import cors from "cors"; import path from "path"; import bodyParser from "body-parser"; import { fileURLToPath } from "url"; -import WebSocket from "ws"; +import { WebSocketServer } from "ws"; const app = express(); @@ -41,7 +41,7 @@ app.get("/", (req, res) => { //websocket -const wss = new WebSocket.Server({ noServer: true }); +const wss = new WebSocketServer({ noServer: true }); wss.on("connection", (ws) => { console.log("New WebSocket Connection"); From 9de7d7c86653c74e5af936e8038f72a6893ec883 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 17:31:05 +0100 Subject: [PATCH 18/22] removed websocket open sheck before send messages to clients --- chat-server/server.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index dce7b18..ef3430f 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -56,9 +56,10 @@ wss.on("connection", (ws) => { messages.push(parsedMessage); wss.clients.forEach((client) => { - if (client.readyState === WebSocket.OPEN) { - client.send(message); - } + // if (client.readyState === WebSocket.OPEN) { + // client.send(message); + // } + client.send(message); }); }); }); From e9a6afeb5bbeb35bef28227e1d7f9ab641076acc Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 17:54:13 +0100 Subject: [PATCH 19/22] fixinggggg --- chat-server/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat-server/server.js b/chat-server/server.js index ef3430f..4cd00df 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -59,7 +59,7 @@ wss.on("connection", (ws) => { // if (client.readyState === WebSocket.OPEN) { // client.send(message); // } - client.send(message); + client.send(JSON.stringify(message)); }); }); }); From ac48efba38431e002d43a3c43cf2b99dc697db44 Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 18:21:57 +0100 Subject: [PATCH 20/22] stringified incomming message --- chat-server/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index 4cd00df..b64cae6 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -51,7 +51,7 @@ wss.on("connection", (ws) => { ws.on("message", (message) => { console.log("Received message form client:", message); - const parsedMessage = JSON.parse(message); + const parsedMessage = JSON.parse(message.toString()); messages.push(parsedMessage); @@ -59,7 +59,7 @@ wss.on("connection", (ws) => { // if (client.readyState === WebSocket.OPEN) { // client.send(message); // } - client.send(JSON.stringify(message)); + client.send(JSON.stringify(message.toString())); }); }); }); From e8eab425f33b7c522d0601122b768f4693750c8d Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 20:45:37 +0100 Subject: [PATCH 21/22] bug fixed for good I hope Co-authored-by: Jay Mayer --- chat-server/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat-server/server.js b/chat-server/server.js index b64cae6..276261b 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -59,7 +59,7 @@ wss.on("connection", (ws) => { // if (client.readyState === WebSocket.OPEN) { // client.send(message); // } - client.send(JSON.stringify(message.toString())); + client.send(JSON.stringify(message)); }); }); }); From 79e6e5909ad521d9ffa2bbcb23168d295615ddac Mon Sep 17 00:00:00 2001 From: fikretellek Date: Thu, 9 May 2024 21:00:15 +0100 Subject: [PATCH 22/22] please be the last commit --- chat-server/server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chat-server/server.js b/chat-server/server.js index 276261b..c271976 100644 --- a/chat-server/server.js +++ b/chat-server/server.js @@ -48,10 +48,10 @@ wss.on("connection", (ws) => { messages.forEach((message) => ws.send(JSON.stringify(message))); - ws.on("message", (message) => { - console.log("Received message form client:", message); + ws.on("message", (messageBuffer) => { + console.log("Received message form client:", messageBuffer); - const parsedMessage = JSON.parse(message.toString()); + const parsedMessage = JSON.parse(messageBuffer.toString()); messages.push(parsedMessage); @@ -59,7 +59,7 @@ wss.on("connection", (ws) => { // if (client.readyState === WebSocket.OPEN) { // client.send(message); // } - client.send(JSON.stringify(message)); + client.send(JSON.stringify(parsedMessage)); }); }); });