diff --git a/package-lock.json b/package-lock.json index 99e6093..435883c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "prisma": "^5.17.0", "sharp": "^0.33.4", "socket.io": "^4.7.5", - "ts-node": "^10.9.2", "typescript": "^5.5.3", "zod": "^3.23.8" }, @@ -30,13 +29,15 @@ "@types/node": "^20.14.11", "@types/nodemailer": "^6.4.16", "nodemon": "^3.1.4", - "prettier": "^3.3.3" + "prettier": "^3.3.3", + "ts-node": "^10.9.2" } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -426,6 +427,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -435,12 +437,14 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -598,24 +602,28 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, "license": "MIT" }, "node_modules/@types/bcryptjs": { @@ -793,6 +801,7 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -805,6 +814,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -831,6 +841,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, "license": "MIT" }, "node_modules/array-flatten": { @@ -1115,6 +1126,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, "license": "MIT" }, "node_modules/cron-parser": { @@ -1196,6 +1208,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -1825,6 +1838,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, "license": "ISC" }, "node_modules/media-typer": { @@ -2700,6 +2714,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -2819,6 +2834,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, "license": "MIT" }, "node_modules/vary": { @@ -2855,6 +2871,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/package.json b/package.json index b1ddb7a..9c36db9 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,6 @@ "prisma": "^5.17.0", "sharp": "^0.33.4", "socket.io": "^4.7.5", - "ts-node": "^10.9.2", "typescript": "^5.5.3", "zod": "^3.23.8" }, @@ -30,6 +29,7 @@ "@types/jsonwebtoken": "^9.0.6", "@types/node": "^20.14.11", "@types/nodemailer": "^6.4.16", + "ts-node": "^10.9.2", "nodemon": "^3.1.4", "prettier": "^3.3.3" } diff --git a/src/services/userService.ts b/src/services/userService.ts index e5af8dc..226e71b 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -63,17 +63,15 @@ class UserService { * @param email */ async resetPassword(email: string): Promise { - const user = await UserRepository.getByEmail(email) - if ( !user ) return false + if (!user) return false const token = await bcrypt.hash(new Date().getTime().toString(), 10) const latestToken = await PasswordResetTokenRepository.getByUserId(user.id) //Check if password reset has been requested recently if (latestToken) { - - const tokenExpiryDate = new Date(Date.now() - 24 * 60 * 60 * 1000); + const tokenExpiryDate = new Date(Date.now() - 24 * 60 * 60 * 1000) const isTokenExpired = latestToken.createdAt < tokenExpiryDate if (!isTokenExpired) return false @@ -88,9 +86,9 @@ class UserService { await prisma.passwordResetToken.create({ data: { userId: user.id, - token: token, + token: token } - }); + }) const transporter = NodeMailer.createTransport({ host: config.SMTP_HOST, @@ -98,18 +96,18 @@ class UserService { secure: false, auth: { user: config.SMTP_USER, - pass: config.SMTP_PASSWORD, - }, - }); + pass: config.SMTP_PASSWORD + } + }) try { await transporter.sendMail({ from: config.SMTP_USER, to: email, - subject: "Reset your password", - text: "A password reset has been requested, reset your password here: " + config.CLIENT_URL + "#" + token, // Plain text body - html: "

A password reset has been requested, reset your password here: " + config.CLIENT_URL + "#" + token + "

", // Html body - }); + subject: 'Reset your password', + text: 'A password reset has been requested, reset your password here: ' + config.CLIENT_URL + '#' + token, // Plain text body + html: "

A password reset has been requested, reset your password here: " + config.CLIENT_URL + '#' + token + '

' // Html body + }) return true } catch (error: any) { diff --git a/src/socketEvents/zone/characterMove.ts b/src/socketEvents/zone/characterMove.ts index ba4a642..2a98463 100644 --- a/src/socketEvents/zone/characterMove.ts +++ b/src/socketEvents/zone/characterMove.ts @@ -68,10 +68,6 @@ export default class CharacterMove { const start = path[i] const end = path[i + 1] - // if (!(await this.movementValidator.isValidMove(character, end))) { - // break - // } - if (CharacterManager.hasResetMovement(character)) { break } diff --git a/src/utilities/http.ts b/src/utilities/http.ts index 33b0dbf..6b662b2 100644 --- a/src/utilities/http.ts +++ b/src/utilities/http.ts @@ -76,7 +76,7 @@ async function addHttpRoutes(app: Application) { } const userService = new UserService() - const sentEmail = await userService.resetPassword( email ) + const sentEmail = await userService.resetPassword(email) if (sentEmail) { return res.status(200).json({ message: 'Email has been sent' }) @@ -100,7 +100,7 @@ async function addHttpRoutes(app: Application) { } const userService = new UserService() - const resetPassword = await userService.newPassword( urlToken, password ) + const resetPassword = await userService.newPassword(urlToken, password) if (resetPassword) { return res.status(200).json({ message: 'Password has been reset' }) diff --git a/src/utilities/zodTypes.ts b/src/utilities/zodTypes.ts index 7e3aa36..7db62fe 100644 --- a/src/utilities/zodTypes.ts +++ b/src/utilities/zodTypes.ts @@ -35,10 +35,10 @@ export const registerAccountSchema = z.object({ export const resetPasswordSchema = z.object({ email: z - .string() - .min(3, { message: 'Email must be at least 3 characters long' }) - .max(255, { message: 'Email must be at most 255 characters long' }) - .regex(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/, { message: 'Email must be valid' }) + .string() + .min(3, { message: 'Email must be at least 3 characters long' }) + .max(255, { message: 'Email must be at most 255 characters long' }) + .regex(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/, { message: 'Email must be valid' }) }) export const newPasswordSchema = z.object({