use camelcase file names from now on...

This commit is contained in:
Dennis Postma 2024-08-21 20:55:58 +02:00
parent acc9eaae9e
commit 6b97e7d9cb
55 changed files with 396 additions and 116 deletions

251
package-lock.json generated
View File

@ -11,6 +11,7 @@
"dotenv": "^16.4.5",
"express": "^4.19.2",
"jsonwebtoken": "^9.0.2",
"pino": "^9.3.2",
"prisma": "^5.17.0",
"sharp": "^0.33.4",
"socket.io": "^4.7.5",
@ -667,6 +668,18 @@
"@types/send": "*"
}
},
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"license": "MIT",
"dependencies": {
"event-target-shim": "^5.0.0"
},
"engines": {
"node": ">=6.5"
}
},
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@ -730,6 +743,15 @@
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"license": "MIT"
},
"node_modules/atomic-sleep": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
"integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
"license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@ -737,6 +759,26 @@
"dev": true,
"license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT"
},
"node_modules/base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@ -813,6 +855,30 @@
"node": ">=8"
}
},
"node_modules/buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
@ -1172,6 +1238,24 @@
"node": ">= 0.6"
}
},
"node_modules/event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"license": "MIT",
"engines": {
"node": ">=0.8.x"
}
},
"node_modules/express": {
"version": "4.19.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
@ -1214,6 +1298,15 @@
"node": ">= 0.10.0"
}
},
"node_modules/fast-redact": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
"integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@ -1417,6 +1510,26 @@
"node": ">=0.10.0"
}
},
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "BSD-3-Clause"
},
"node_modules/ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@ -1758,6 +1871,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/on-exit-leak-free": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
"integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
"license": "MIT",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@ -1798,6 +1920,44 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/pino": {
"version": "9.3.2",
"resolved": "https://registry.npmjs.org/pino/-/pino-9.3.2.tgz",
"integrity": "sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==",
"license": "MIT",
"dependencies": {
"atomic-sleep": "^1.0.0",
"fast-redact": "^3.1.1",
"on-exit-leak-free": "^2.1.0",
"pino-abstract-transport": "^1.2.0",
"pino-std-serializers": "^7.0.0",
"process-warning": "^4.0.0",
"quick-format-unescaped": "^4.0.3",
"real-require": "^0.2.0",
"safe-stable-stringify": "^2.3.1",
"sonic-boom": "^4.0.1",
"thread-stream": "^3.0.0"
},
"bin": {
"pino": "bin.js"
}
},
"node_modules/pino-abstract-transport": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz",
"integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
"license": "MIT",
"dependencies": {
"readable-stream": "^4.0.0",
"split2": "^4.0.0"
}
},
"node_modules/pino-std-serializers": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
"integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
"license": "MIT"
},
"node_modules/prettier": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
@ -1830,6 +1990,21 @@
"node": ">=16.13"
}
},
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/process-warning": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz",
"integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==",
"license": "MIT"
},
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@ -1865,6 +2040,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/quick-format-unescaped": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
"integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
"license": "MIT"
},
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@ -1889,6 +2070,22 @@
"node": ">= 0.8"
}
},
"node_modules/readable-stream": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
"integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
"license": "MIT",
"dependencies": {
"abort-controller": "^3.0.0",
"buffer": "^6.0.3",
"events": "^3.3.0",
"process": "^0.11.10",
"string_decoder": "^1.3.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@ -1902,6 +2099,15 @@
"node": ">=8.10.0"
}
},
"node_modules/real-require": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
"integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
"license": "MIT",
"engines": {
"node": ">= 12.13.0"
}
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -1922,6 +2128,15 @@
],
"license": "MIT"
},
"node_modules/safe-stable-stringify": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
"integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@ -2197,6 +2412,24 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"license": "MIT"
},
"node_modules/sonic-boom": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz",
"integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==",
"license": "MIT",
"dependencies": {
"atomic-sleep": "^1.0.0"
}
},
"node_modules/split2": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
"license": "ISC",
"engines": {
"node": ">= 10.x"
}
},
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@ -2206,6 +2439,15 @@
"node": ">= 0.8"
}
},
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@ -2219,6 +2461,15 @@
"node": ">=4"
}
},
"node_modules/thread-stream": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
"integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
"license": "MIT",
"dependencies": {
"real-require": "^0.2.0"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",

View File

@ -12,6 +12,7 @@
"dotenv": "^16.4.5",
"express": "^4.19.2",
"jsonwebtoken": "^9.0.2",
"pino": "^9.3.2",
"prisma": "^5.17.0",
"sharp": "^0.33.4",
"socket.io": "^4.7.5",

View File

@ -1,5 +1,5 @@
import { Server } from 'socket.io'
import ZoneManager from '../managers/ZoneManager'
import ZoneManager from '../managers/zoneManager'
type CommandInput = string[]

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket, ExtendedCharacter } from '../../utilities/Types'
import CharacterRepository from '../../repositories/CharacterRepository'
import { TSocket, ExtendedCharacter } from '../../utilities/types'
import CharacterRepository from '../../repositories/characterRepository'
type SocketResponseT = {
character_id: number

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import { TSocket } from '../../utilities/types'
import { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/CharacterRepository'
import { ZCharacterCreate } from '../../utilities/ZodTypes'
import prisma from '../../utilities/Prisma'
import CharacterRepository from '../../repositories/characterRepository'
import { ZCharacterCreate } from '../../utilities/zodTypes'
import prisma from '../../utilities/prisma'
import logger from '../../utilities/logger'
export default function (socket: TSocket, io: Server) {
socket.on('character:create', async (data: any) => {
@ -30,7 +31,7 @@ export default function (socket: TSocket, io: Server) {
data: {
name: data.name,
userId: user_id,
characterTypeId: 1 // @TODO set to chosen character type
// characterTypeId: 1 // @TODO set to chosen character type
}
})
@ -38,8 +39,10 @@ export default function (socket: TSocket, io: Server) {
socket.emit('character:create:success')
socket.emit('character:list', characters)
logger.info('character:create success')
} catch (error: any) {
console.log('character:create error', error)
logger.error('character:create error', error)
return socket.emit('notification', { message: 'Could not create character. Please try again (later).' })
}
})

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import { TSocket } from '../../utilities/types'
import { Character, Zone } from '@prisma/client'
import CharacterRepository from '../../repositories/CharacterRepository'
import CharacterRepository from '../../repositories/characterRepository'
type TypePayload = {
character_id: number

View File

@ -1,7 +1,7 @@
import { Socket, Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import { TSocket } from '../../utilities/types'
import { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/CharacterRepository'
import CharacterRepository from '../../repositories/characterRepository'
export default function CharacterList(socket: TSocket, io: Server) {
socket.on('character:list', async (data: any) => {

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket, ExtendedCharacter } from '../../utilities/Types'
import ZoneManager from '../../managers/ZoneManager'
import prisma from '../../utilities/Prisma'
import { AStar } from '../../utilities/Player/AStar'
import Rotation from '../../utilities/Player/Rotation'
import { TSocket, ExtendedCharacter } from '../../utilities/types'
import ZoneManager from '../../managers/zoneManager'
import prisma from '../../utilities/prisma'
import { AStar } from '../../utilities/player/aStar'
import Rotation from '../../utilities/player/rotation'
const moveTokens = new Map<number, symbol>()

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import ZoneRepository from '../../repositories/ZoneRepository'
import ZoneManager from '../../managers/ZoneManager'
import { TSocket } from '../../utilities/types'
import ZoneRepository from '../../repositories/zoneRepository'
import ZoneManager from '../../managers/zoneManager'
import { Character, Zone } from '@prisma/client'
/**

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import ZoneRepository from '../../repositories/ZoneRepository'
import ZoneManager from '../../managers/ZoneManager'
import { TSocket } from '../../utilities/types'
import ZoneRepository from '../../repositories/zoneRepository'
import ZoneManager from '../../managers/zoneManager'
import { Character, Zone } from '@prisma/client'
interface IPayload {

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { getArgs, isCommand } from '../../../utilities/Chat'
import CharacterRepository from '../../../repositories/CharacterRepository'
import { TSocket } from '../../../utilities/types'
import { getArgs, isCommand } from '../../../utilities/chat'
import CharacterRepository from '../../../repositories/characterRepository'
type TypePayload = {
message: string

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import CharacterRepository from '../../repositories/CharacterRepository'
import ZoneRepository from '../../repositories/ZoneRepository'
import { isCommand } from '../../utilities/Chat'
import { TSocket } from '../../utilities/types'
import CharacterRepository from '../../repositories/characterRepository'
import ZoneRepository from '../../repositories/zoneRepository'
import { isCommand } from '../../utilities/chat'
type TypePayload = {
message: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../utilities/Types'
import ZoneManager from '../managers/ZoneManager'
import { TSocket } from '../utilities/types'
import ZoneManager from '../managers/zoneManager'
export default function (socket: TSocket, io: Server) {
socket.on('disconnect', (data: any) => {

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Object } from '@prisma/client'
import ObjectRepository from '../../../repositories/ObjectRepository'
import ObjectRepository from '../../../repositories/objectRepository'
interface IPayload {}

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import path from 'path'
import fs from 'fs'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
interface IPayload {
object: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { writeFile } from 'node:fs/promises'
import path from 'path'
import fs from 'fs/promises'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
interface IObjectData {
[key: string]: Buffer

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import path from 'path'
import fs from 'fs/promises'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
/**
* Handle game master new sprite event

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Sprite } from '@prisma/client'
import SpriteRepository from '../../../repositories/SpriteRepository'
import SpriteRepository from '../../../repositories/spriteRepository'
interface IPayload {}

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import fs from 'fs'
import path from 'path'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import prisma from '../../../utilities/prisma'
import type { Prisma, SpriteAction } from '@prisma/client'
import path from 'path'
import { writeFile, mkdir } from 'node:fs/promises'

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Tile } from '@prisma/client'
import TileRepository from '../../../repositories/TileRepository'
import TileRepository from '../../../repositories/tileRepository'
interface IPayload {}

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import path from 'path'
import fs from 'fs'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { writeFile } from 'node:fs/promises'
import path from 'path'
import fs from 'fs/promises'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
interface ITileData {
[key: string]: Buffer

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import { Zone } from '@prisma/client'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
type Payload = {
name: string

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import prisma from '../../../utilities/prisma'
type Payload = {
zoneId: number

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Zone } from '@prisma/client'
import ZoneRepository from '../../../repositories/ZoneRepository'
import ZoneRepository from '../../../repositories/zoneRepository'
interface IPayload {}

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import { Zone } from '@prisma/client'
interface IPayload {

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import { ZoneEventTile, ZoneObject } from '@prisma/client'
import prisma from '../../../utilities/Prisma'
import zoneManager from '../../../managers/ZoneManager'
import prisma from '../../../utilities/prisma'
import zoneManager from '../../../managers/zoneManager'
interface IPayload {
zoneId: number

View File

@ -1,5 +1,5 @@
import { Server } from 'socket.io'
import { TSocket } from '../utilities/Types'
import { TSocket } from '../utilities/types'
export default function (socket: TSocket, io: Server) {
socket.on('login', () => {

View File

@ -1,4 +1,5 @@
import { User } from '@prisma/client'
import logger from '../utilities/logger'
type TLoggedInUsers = {
users: User[]
@ -9,7 +10,7 @@ class UserManager {
// Method to initialize user manager
public async boot() {
console.log('[✅] User manager loaded')
logger.info('User manager loaded')
}
// Function that adds user to logged in users

View File

@ -1,7 +1,8 @@
import { Character, Zone } from '@prisma/client'
import ZoneRepository from '../repositories/ZoneRepository'
import ZoneService from '../services/ZoneService'
import zoneRepository from '../repositories/ZoneRepository'
import ZoneRepository from '../repositories/zoneRepository'
import ZoneService from '../services/zoneService'
import zoneRepository from '../repositories/zoneRepository'
import logger from '../utilities/logger'
type TLoadedZone = {
zone: Zone
@ -25,7 +26,7 @@ class ZoneManager {
await this.loadZone(zone)
}
console.log('[✅] Zone manager loaded')
logger.info('Zone manager loaded')
}
// Method to handle individual zone loading
@ -36,7 +37,7 @@ class ZoneManager {
characters: [],
grid
})
console.log(`[✅] Zone ID ${zone.id} loaded`)
logger.info(`Zone ID ${zone.id} loaded`)
}
// Method to handle individual zone unloading
@ -44,7 +45,7 @@ class ZoneManager {
this.loadedZones = this.loadedZones.filter((loadedZone) => {
return loadedZone.zone.id !== zoneId
})
console.log(`[❌] Zone ID ${zoneId} unloaded`)
logger.info(`Zone ID ${zoneId} unloaded`)
}
// Getter for loaded zones

View File

@ -1,8 +1,8 @@
// socket io jwt auth middleware
import { verify } from 'jsonwebtoken'
import { TSocket } from '../utilities/Types'
import config from '../utilities/Config'
import UserRepository from '../repositories/UserRepository'
import { TSocket } from '../utilities/types'
import config from '../utilities/config'
import UserRepository from '../repositories/userRepository'
import { User } from '@prisma/client'
export async function Authentication(socket: TSocket, next: any) {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Character } from '@prisma/client'
class CharacterRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Object } from '@prisma/client'
class ObjectRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Sprite, SpriteAction } from '@prisma/client'
class SpriteRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Tile } from '@prisma/client'
class TileRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { User } from '@prisma/client'
class UserRepository {

View File

@ -1,5 +1,5 @@
import { Zone } from '@prisma/client'
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
class ZoneRepository {
async getFirst(): Promise<Zone | null> {

View File

@ -1,22 +1,24 @@
import fs from 'fs'
import path from 'path'
import express, { Application } from 'express'
import { createServer as httpServer } from 'http'
import { addHttpRoutes } from './utilities/Http'
import { createServer as httpServer, Server as HTTPServer } from 'http'
import { addHttpRoutes } from './utilities/http'
import cors from 'cors'
import { Server as SocketServer } from 'socket.io'
import { TSocket } from './utilities/Types'
import config from './utilities/Config'
import prisma from './utilities/Prisma'
import ZoneManager from './managers/ZoneManager'
import UserManager from './managers/UserManager'
import { Authentication } from './middleware/Authentication'
import CommandManager from './managers/CommandManager'
import { TSocket } from './utilities/types'
import config from './utilities/config'
import prisma from './utilities/prisma'
import ZoneManager from './managers/zoneManager'
import UserManager from './managers/userManager'
import { Authentication } from './middleware/authentication'
// import CommandManager from './managers/CommandManager'
import { Dirent } from 'node:fs'
import logger from './utilities/logger'
export class Server {
private readonly app: Application
private readonly http: any
private readonly http: HTTPServer
private readonly io: SocketServer
/**
@ -39,17 +41,17 @@ export class Server {
// Check prisma connection
try {
await prisma.$connect()
console.log('[✅] Database connected')
logger.info('Database connected')
} catch (error: any) {
throw new Error(`[❌] Database connection failed: ${error.message}`)
logger.error(`Database connection failed: ${error.message}`)
}
// Start the server
try {
await this.http.listen(config.PORT, config.HOST)
console.log('[✅] Socket.IO running on port', config.PORT)
logger.info(`Socket.IO running on port ${config.PORT}`)
} catch (error: any) {
throw new Error(`[❌] Socket.IO failed to start: ${error.message}`)
logger.error(`Socket.IO failed to start: ${error.message}`)
}
// Add http API routes
@ -78,7 +80,7 @@ export class Server {
try {
await this.loadEventHandlers(eventsPath, socket)
} catch (error: any) {
throw new Error('[❌] Failed to load event handlers: ' + error.message)
logger.error(`Failed to load event handlers: ${error.message}`)
}
}
@ -101,3 +103,5 @@ export class Server {
// Start the server
const server = new Server()
server.start()
console.log('Server started')

View File

@ -1,6 +1,6 @@
import bcrypt from 'bcryptjs'
import UserRepository from '../repositories/UserRepository'
import prisma from '../utilities/Prisma'
import UserRepository from '../repositories/userRepository'
import prisma from '../utilities/prisma'
import { User } from '@prisma/client'
class UserService {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma'
import prisma from '../utilities/prisma'
class ZoneService {
async createDemoZone(): Promise<boolean> {

View File

@ -1,14 +1,15 @@
import { Application, Request, Response } from 'express'
import UserService from '../services/UserService'
import UserService from '../services/userService'
import jwt from 'jsonwebtoken'
import config from './Config'
import { loginAccountSchema, registerAccountSchema } from './ZodTypes'
import config from './config'
import { loginAccountSchema, registerAccountSchema } from './zodTypes'
import path from 'path'
import { TAsset } from './Types'
import tileRepository from '../repositories/TileRepository'
import objectRepository from '../repositories/ObjectRepository'
import spriteRepository from '../repositories/SpriteRepository'
import { TAsset } from './types'
import tileRepository from '../repositories/tileRepository'
import objectRepository from '../repositories/objectRepository'
import spriteRepository from '../repositories/spriteRepository'
import fs from 'fs'
import logger from './logger'
async function addHttpRoutes(app: Application) {
app.get('/assets', async (req: Request, res: Response) => {
@ -60,8 +61,6 @@ async function addHttpRoutes(app: Application) {
assetPath = path.join(process.cwd(), 'public', assetType, fileName)
}
console.log(`Attempting to serve: ${assetPath}`)
if (!fs.existsSync(assetPath)) {
console.error(`File not found: ${assetPath}`)
return res.status(404).send('Asset not found')
@ -114,7 +113,7 @@ async function addHttpRoutes(app: Application) {
return res.status(400).json({ message: 'Failed to register user' })
})
console.log('[✅] Web routes added')
logger.info('Web routes added')
}
export { addHttpRoutes }

20
src/utilities/logger.ts Normal file
View File

@ -0,0 +1,20 @@
import pino from 'pino'
const logger = pino({
level: process.env.LOG_LEVEL || 'debug',
transport: {
target: 'pino/file',
options: {
destination: './logs/app.log',
mkdir: true
}
},
formatters: {
level: (label) => {
return { level: label.toUpperCase() }
},
},
timestamp: pino.stdTimeFunctions.isoTime
})
export default logger