diff --git a/database/backend.log b/database/backend.log index 2ad4602..8748a19 100644 --- a/database/backend.log +++ b/database/backend.log @@ -10857,3 +10857,100 @@ Connected to MongoDB [2025-08-20T13:12:25.130Z] DB: getSession - start edf7968f63afdbfc89f447ddbc60e189ae2bde46b7bf85c29763008eb18145fc [2025-08-20T13:12:25.131Z] DB: getSession - ok edf7968f63afdbfc89f447ddbc60e189ae2bde46b7bf85c29763008eb18145fc [2025-08-20T13:12:25.131Z] SESSION: Validate success edf7968f63afdbfc89f447ddbc60e189ae2bde46b7bf85c29763008eb18145fc gm +[2025-08-20T14:44:46.206Z] DB: getSession - start f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-20T14:44:46.207Z] DB: getSession - not found f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-20T14:44:46.207Z] SESSION: Validate not found f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-20T15:25:01.300Z] DB: getSession - start f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-20T15:25:01.308Z] DB: getSession - not found f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-20T15:25:01.309Z] SESSION: Validate not found f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-21T20:39:28.068Z] SESSION: GM bypass accepted DELETE /api/players/testplayer +[2025-08-21T20:39:28.074Z] SESSION: GM bypass accepted DELETE /api/players/testplayer +[2025-08-21T20:39:28.075Z] DB: deletePlayer - start testplayer +[2025-08-21T20:39:28.081Z] DB: deletePlayer - changes 0 testplayer +[2025-08-21T20:39:28.120Z] SESSION: GM bypass accepted POST /api/players +[2025-08-21T20:39:28.124Z] DB: getPlayerByName - start testplayer +[2025-08-21T20:39:28.126Z] DB: getPlayerByName - not found testplayer +[2025-08-21T20:39:28.378Z] DB: createPlayer - start testplayer +[2025-08-21T20:39:28.425Z] DB: createPlayer - done testplayer rowid 175 +[2025-08-21T20:39:28.426Z] API: Created player testplayer +[2025-08-21T20:39:28.444Z] DB: getPlayerByName - start testplayer +[2025-08-21T20:39:28.444Z] DB: getPlayerByName - found testplayer +[2025-08-21T20:39:28.527Z] DB: createSession - start 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 expiresAt 2025-08-22T20:39:28.527Z +[2025-08-21T20:39:28.530Z] DB: createSession - done 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.530Z] API: Player login testplayer 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.551Z] DB: getSession - start 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.552Z] DB: getSession - ok 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.553Z] SESSION: Valid 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 testplayer PUT /api/players/testplayer +[2025-08-21T20:39:28.553Z] DB: getSession - start 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.553Z] DB: getSession - ok 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.553Z] SESSION: Valid 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 testplayer PUT /api/players/testplayer +[2025-08-21T20:39:28.553Z] DB: getPlayerByName - start testplayer +[2025-08-21T20:39:28.553Z] DB: getPlayerByName - found testplayer +[2025-08-21T20:39:28.554Z] DB: updatePlayer - start testplayer +[2025-08-21T20:39:28.555Z] DB: updatePlayer - changes 1 testplayer +[2025-08-21T20:39:28.555Z] DB: getPlayerByName - start testplayer +[2025-08-21T20:39:28.555Z] DB: getPlayerByName - found testplayer +[2025-08-21T20:39:28.555Z] API: Updated player testplayer +[2025-08-21T20:39:28.571Z] DB: getSession - start 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.571Z] DB: getSession - ok 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.571Z] SESSION: Valid 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 testplayer PUT /api/players/testplayer +[2025-08-21T20:39:28.571Z] DB: getSession - start 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.571Z] DB: getSession - ok 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 +[2025-08-21T20:39:28.571Z] SESSION: Valid 378f8f8722a1a037bc8dfa8985b12b43b0d93cb9da8cca2a5825720eb39847f4 testplayer PUT /api/players/testplayer +[2025-08-21T20:39:28.571Z] DB: getPlayerByName - start testplayer +[2025-08-21T20:39:28.571Z] DB: getPlayerByName - found testplayer +[2025-08-21T20:39:28.572Z] DB: updatePlayer - start testplayer +[2025-08-21T20:39:28.572Z] DB: updatePlayer - changes 1 testplayer +[2025-08-21T20:39:28.572Z] DB: getPlayerByName - start testplayer +[2025-08-21T20:39:28.573Z] DB: getPlayerByName - found testplayer +[2025-08-21T20:39:28.573Z] API: Updated player testplayer +[2025-08-21T20:39:28.588Z] SESSION: GM bypass accepted DELETE /api/players/testplayer +[2025-08-21T20:39:28.588Z] SESSION: GM bypass accepted DELETE /api/players/testplayer +[2025-08-21T20:39:28.588Z] DB: deletePlayer - start testplayer +[2025-08-21T20:39:28.590Z] DB: deletePlayer - changes 1 testplayer +[2025-08-21T20:39:28.590Z] API: Deleted player testplayer +[2025-08-21T20:39:28.945Z] SESSION: GM bypass accepted DELETE /api/players/gmtest +[2025-08-21T20:39:28.945Z] SESSION: GM bypass accepted DELETE /api/players/gmtest +[2025-08-21T20:39:28.945Z] DB: deletePlayer - start gmtest +[2025-08-21T20:39:28.945Z] DB: deletePlayer - changes 0 gmtest +[2025-08-21T20:39:28.962Z] SESSION: GM bypass accepted POST /api/players +[2025-08-21T20:39:28.963Z] DB: getPlayerByName - start gmtest +[2025-08-21T20:39:28.963Z] DB: getPlayerByName - not found gmtest +[2025-08-21T20:39:29.043Z] DB: createPlayer - start gmtest +[2025-08-21T20:39:29.043Z] DB: createPlayer - done gmtest rowid 176 +[2025-08-21T20:39:29.043Z] API: Created player gmtest +[2025-08-21T20:39:29.060Z] SESSION: GM bypass accepted PUT /api/players/gmtest +[2025-08-21T20:39:29.060Z] SESSION: GM bypass accepted PUT /api/players/gmtest +[2025-08-21T20:39:29.060Z] DB: getPlayerByName - start gmtest +[2025-08-21T20:39:29.061Z] DB: getPlayerByName - found gmtest +[2025-08-21T20:39:29.061Z] DB: updatePlayer - start gmtest +[2025-08-21T20:39:29.061Z] DB: updatePlayer - changes 1 gmtest +[2025-08-21T20:39:29.061Z] DB: getPlayerByName - start gmtest +[2025-08-21T20:39:29.061Z] DB: getPlayerByName - found gmtest +[2025-08-21T20:39:29.061Z] API: Updated player gmtest +[2025-08-21T20:39:29.076Z] SESSION: GM bypass accepted PUT /api/players/gmtest +[2025-08-21T20:39:29.076Z] SESSION: GM bypass accepted PUT /api/players/gmtest +[2025-08-21T20:39:29.076Z] DB: getPlayerByName - start gmtest +[2025-08-21T20:39:29.077Z] DB: getPlayerByName - found gmtest +[2025-08-21T20:39:29.157Z] DB: updatePlayer - start gmtest +[2025-08-21T20:39:29.157Z] DB: updatePlayer - changes 1 gmtest +[2025-08-21T20:39:29.157Z] DB: getPlayerByName - start gmtest +[2025-08-21T20:39:29.157Z] DB: getPlayerByName - found gmtest +[2025-08-21T20:39:29.157Z] API: Updated player gmtest +[2025-08-21T20:39:29.173Z] DB: getPlayerByName - start gmtest +[2025-08-21T20:39:29.173Z] DB: getPlayerByName - found gmtest +[2025-08-21T20:39:29.254Z] DB: createSession - start 36b8da5beec2b1bde76b211d4d06ec909830fb04984546cd79eb56004e76125c expiresAt 2025-08-22T20:39:29.254Z +[2025-08-21T20:39:29.254Z] DB: createSession - done 36b8da5beec2b1bde76b211d4d06ec909830fb04984546cd79eb56004e76125c +[2025-08-21T20:39:29.255Z] API: Player login gmtest 36b8da5beec2b1bde76b211d4d06ec909830fb04984546cd79eb56004e76125c +[2025-08-21T20:39:29.273Z] SESSION: GM bypass accepted DELETE /api/players/gmtest +[2025-08-21T20:39:29.273Z] SESSION: GM bypass accepted DELETE /api/players/gmtest +[2025-08-21T20:39:29.273Z] DB: deletePlayer - start gmtest +[2025-08-21T20:39:29.273Z] DB: deletePlayer - changes 1 gmtest +[2025-08-21T20:39:29.273Z] API: Deleted player gmtest +[2025-08-21T20:39:29.289Z] SESSION: GM bypass accepted GET /api/players +[2025-08-21T20:39:29.289Z] DB: getAllPlayers - start +[2025-08-21T20:39:29.296Z] DB: getAllPlayers - resultCount 7 +[2025-08-21T20:39:29.296Z] API: Fetch all players (public) Found 7 players +[2025-08-21T20:43:12.560Z] DB: getSession - start f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-21T20:43:12.561Z] DB: getSession - not found f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 +[2025-08-21T20:43:12.561Z] SESSION: Validate not found f83b1f4fd61f1130ce534415b32166f106c9ba524e25b9123a9b249e2ed11ac7 diff --git a/database/sqlite/deathwatch.db b/database/sqlite/deathwatch.db index 49e6090..89bf37f 100644 Binary files a/database/sqlite/deathwatch.db and b/database/sqlite/deathwatch.db differ diff --git a/package-lock.json b/package-lock.json index 8d870ee..887fad5 100755 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "autoprefixer": "^10.4.14", "axios": "^1.11.0", "babel-loader": "^10.0.0", + "canvas": "^2.11.2", "cheerio": "^1.1.2", "eslint-config-prettier": "^10.1.8", "html-webpack-plugin": "^5.6.4", @@ -36,6 +37,7 @@ "prettier-eslint": "^16.4.2", "react-scripts": "^5.0.1", "tailwindcss": "^3.3.2", + "tesseract.js": "^4.1.1", "webpack-dev-server": "^5.2.2" } }, @@ -7217,6 +7219,13 @@ "dev": true, "license": "MIT" }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", + "dev": true, + "license": "MIT" + }, "node_modules/bodec": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz", @@ -7609,8 +7618,8 @@ "version": "2.11.2", "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "devOptional": true, "hasInstallScript": true, - "optional": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.0", "nan": "^2.17.0", @@ -7624,7 +7633,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "optional": true, + "devOptional": true, "dependencies": { "mimic-response": "^2.0.0" }, @@ -7636,7 +7645,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "optional": true, + "devOptional": true, "engines": { "node": ">=8" }, @@ -7648,7 +7657,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "optional": true, + "devOptional": true, "dependencies": { "decompress-response": "^4.2.0", "once": "^1.3.1", @@ -12234,6 +12243,13 @@ "dev": true, "license": "ISC" }, + "node_modules/idb-keyval": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", @@ -12597,6 +12613,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", + "dev": true, + "license": "MIT" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -12964,6 +12987,13 @@ "dev": true, "license": "MIT" }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true, + "license": "MIT" + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -17116,7 +17146,7 @@ "version": "2.23.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", - "optional": true + "devOptional": true }, "node_modules/nanoid": { "version": "3.3.11", @@ -17268,6 +17298,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -17762,6 +17793,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "license": "MIT", + "bin": { + "opencollective-postinstall": "index.js" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -23945,6 +23986,33 @@ "dev": true, "license": "MIT" }, + "node_modules/tesseract.js": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tesseract.js/-/tesseract.js-4.1.4.tgz", + "integrity": "sha512-iLjJjLWVNV4PApofEsd54Y1MbjhzpPxEzF8EjYmC2CLN4hrUqO5aTNTSbGA7/QjycKtAWHhn2YmDR+6GFwi2Zg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bmp-js": "^0.1.0", + "idb-keyval": "^6.2.0", + "is-electron": "^2.2.2", + "is-url": "^1.2.4", + "node-fetch": "^2.6.9", + "opencollective-postinstall": "^2.0.3", + "regenerator-runtime": "^0.13.3", + "tesseract.js-core": "^4.0.4", + "wasm-feature-detect": "^1.2.11", + "zlibjs": "^0.3.1" + } + }, + "node_modules/tesseract.js-core": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tesseract.js-core/-/tesseract.js-core-4.0.4.tgz", + "integrity": "sha512-MJ+vtktjAaT0681uPl6TDUPhbRbpD/S9emko5rtorgHRZpQo7R3BG7h+3pVHgn1KjfNf1bvnx4B7KxEK8YKqpg==", + "dev": true, + "license": "Apache License 2.0" + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -24773,6 +24841,13 @@ "makeerror": "1.0.12" } }, + "node_modules/wasm-feature-detect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz", + "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/watchpack": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", @@ -26105,6 +26180,16 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zlibjs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/zlibjs/-/zlibjs-0.3.1.tgz", + "integrity": "sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } } } } diff --git a/package.json b/package.json index d9ed95d..7f1d92d 100755 --- a/package.json +++ b/package.json @@ -18,8 +18,9 @@ "web-vitals": "^2.1.4" }, "scripts": { - "start": "npm test && react-scripts start", - "dev": "npm test && react-scripts start", + "start": "react-scripts start", + "start:with-tests": "npm test && react-scripts start", + "dev": "react-scripts start", "build": "npm run test:unit && npm run test:integration && react-scripts build && npm run pm2:start", "build:fast": "react-scripts build && npm run pm2:reload", "test-build-test": "npm run test:unit && npm run test:integration && npm run build && npm run test:unit", @@ -36,7 +37,7 @@ "pm2:start": "cd database && pm2 start pm2.config.js --env production --update-env", "pm2:stop": "pm2 stop deathwatch-server || true", "pm2:reload": "cd database && pm2 reload pm2.config.js --env production --update-env", - "sanitize:openai": "node scripts/sanitize-rules-openai.js", + "sanitize:openai": "node scripts/sanitize-rules-openai.js", "prestart": "", "preserver": "" }, @@ -60,12 +61,11 @@ ] }, "devDependencies": { - "canvas": "^2.11.2", - "tesseract.js": "^4.1.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.6.1", "autoprefixer": "^10.4.14", "axios": "^1.11.0", "babel-loader": "^10.0.0", + "canvas": "^2.11.2", "cheerio": "^1.1.2", "eslint-config-prettier": "^10.1.8", "html-webpack-plugin": "^5.6.4", @@ -75,6 +75,7 @@ "prettier-eslint": "^16.4.2", "react-scripts": "^5.0.1", "tailwindcss": "^3.3.2", + "tesseract.js": "^4.1.1", "webpack-dev-server": "^5.2.2" } } diff --git a/src/components/GMKit_new.jsx b/src/components/GMKit_new.jsx new file mode 100644 index 0000000..e69de29 diff --git a/src/setupTests.js b/src/setupTests.js index 8f2609b..a9cf2c9 100755 --- a/src/setupTests.js +++ b/src/setupTests.js @@ -3,3 +3,7 @@ // expect(element).toHaveTextContent(/react/i) // learn more: https://github.com/testing-library/jest-dom import '@testing-library/jest-dom'; + +// Polyfill fetch for testing environment +import fetch from 'node-fetch'; +global.fetch = fetch;