mirror of
https://github.com/Terncode/pixel.horse.git
synced 2026-09-24 13:55:04 +02:00
Update moongo
This commit is contained in:
Generated
+279
-200
@@ -46,8 +46,6 @@
|
||||
"@types/howler": "^2.2.12",
|
||||
"@types/lodash": "^4.17.24",
|
||||
"@types/mocha": "^10.0.10",
|
||||
"@types/mongodb": "^3.3.1",
|
||||
"@types/mongoose": "^5.5.15",
|
||||
"@types/morgan": "^1.9.10",
|
||||
"@types/node": "^25.5.0",
|
||||
"@types/node-ipc": "^9.2.3",
|
||||
@@ -79,7 +77,7 @@
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chalk": "^2.4.2",
|
||||
"color-convert": "^2.0.1",
|
||||
"connect-mongo": "^3.0.0",
|
||||
"connect-mongo": "^6.0.0",
|
||||
"cookie-parser": "^1.4.4",
|
||||
"core-js": "^3.2.1",
|
||||
"del": "^5.1.0",
|
||||
@@ -123,7 +121,7 @@
|
||||
"merge2": "^1.2.4",
|
||||
"mocha": "^6.2.0",
|
||||
"moment": "^2.24.0",
|
||||
"mongoose": "^5.6.11",
|
||||
"mongoose": "^9.3.2",
|
||||
"morgan": "^1.9.1",
|
||||
"ngx-bootstrap": "^18.0.1",
|
||||
"passport": "^0.4.0",
|
||||
@@ -5422,6 +5420,15 @@
|
||||
"win32"
|
||||
]
|
||||
},
|
||||
"node_modules/@mongodb-js/saslprep": {
|
||||
"version": "1.4.6",
|
||||
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz",
|
||||
"integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"sparse-bitfield": "^3.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz",
|
||||
@@ -6080,15 +6087,6 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/bson": {
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz",
|
||||
"integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/caseless": {
|
||||
"version": "0.12.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
|
||||
@@ -6354,26 +6352,6 @@
|
||||
"integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/mongodb": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.3.1.tgz",
|
||||
"integrity": "sha512-Va7o1fN3zeabmIJSQ6yuAWkqPvrT38HSTIi4YbVOb2UL7FJ4diXrWt+OUuuEFWAVPtF9VZV5h+7LDYdzgXWgQA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/bson": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/mongoose": {
|
||||
"version": "5.5.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.5.15.tgz",
|
||||
"integrity": "sha512-LgUHpGl6mmcyzjZR/afUZ7mDPjDd38mA0HCf8vL11otVKiNGyu7ug8z3ePx2QAqcPrxbtfaJVgirdBeNXYG54Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/mongodb": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/morgan": {
|
||||
"version": "1.9.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz",
|
||||
@@ -6654,6 +6632,21 @@
|
||||
"integrity": "sha512-42qYzEoJ1yQlDNWSwtJmQKUKAoYv25mjsxKXhwn4/1qlG3Xlr8t8EK/2771dVi5ytw/KX5XwwG5L8lNxLf6qSQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/webidl-conversions": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
|
||||
"integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/whatwg-url": {
|
||||
"version": "13.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-13.0.0.tgz",
|
||||
"integrity": "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/webidl-conversions": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/wrap-ansi": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",
|
||||
@@ -9426,6 +9419,18 @@
|
||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
|
||||
"integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
|
||||
},
|
||||
"node_modules/asn1.js": {
|
||||
"version": "5.4.1",
|
||||
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
|
||||
"integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"bn.js": "^4.0.0",
|
||||
"inherits": "^2.0.1",
|
||||
"minimalistic-assert": "^1.0.0",
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/asn1js": {
|
||||
"version": "3.0.7",
|
||||
"resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz",
|
||||
@@ -9478,14 +9483,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/async": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
|
||||
"integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.11"
|
||||
}
|
||||
},
|
||||
"node_modules/async-done": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz",
|
||||
@@ -10293,6 +10290,12 @@
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
|
||||
"integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w=="
|
||||
},
|
||||
"node_modules/bn.js": {
|
||||
"version": "4.12.3",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz",
|
||||
"integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/body": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
|
||||
@@ -10591,12 +10594,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/bson": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz",
|
||||
"integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==",
|
||||
"deprecated": "Fixed a critical issue with BSON serialization documented in CVE-2019-2391, see https://bit.ly/2KcpXdo for more details",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-7.2.0.tgz",
|
||||
"integrity": "sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=0.6.19"
|
||||
"node": ">=20.19.0"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer": {
|
||||
@@ -12045,13 +12048,45 @@
|
||||
}
|
||||
},
|
||||
"node_modules/connect-mongo": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-3.0.0.tgz",
|
||||
"integrity": "sha512-Y95urWNGrAoKY2w31s7Q9Gs/W3qdMCshUIeDTgulssHi6KueYtz4XrbV3kcnQaR8EcBQvooNNX7aOaAJDgudag==",
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-6.0.0.tgz",
|
||||
"integrity": "sha512-mHxfnTiWk7ZtxmHdcrFBKlr7fCtgGoFpx/oe9jFW0yb2NinagsxEeuol78nUWMpnWyYK0nnuXMlU9wrgUjTE6g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"mongodb": "^3.1.0"
|
||||
"debug": "^4.4.3",
|
||||
"kruptein": "3.0.8"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.8.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"express-session": "^1.17.1",
|
||||
"mongodb": ">=5.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/connect-mongo/node_modules/debug": {
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "^2.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"supports-color": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/connect-mongo/node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/connect/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
@@ -15148,35 +15183,71 @@
|
||||
}
|
||||
},
|
||||
"node_modules/express-session": {
|
||||
"version": "1.16.2",
|
||||
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.16.2.tgz",
|
||||
"integrity": "sha512-oy0sRsdw6n93E9wpCNWKRnSsxYnSDX9Dnr9mhZgqUEEorzcq5nshGYSZ4ZReHFhKQ80WI5iVUUSPW7u3GaKauw==",
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.19.0.tgz",
|
||||
"integrity": "sha512-0csaMkGq+vaiZTmSMMGkfdCOabYv192VbytFypcvI0MANrp+4i/7yEkJ0sbAEhycQjntaKGzYfjfXQyVb7BHMA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cookie": "0.3.1",
|
||||
"cookie-signature": "1.0.6",
|
||||
"debug": "2.6.9",
|
||||
"cookie": "~0.7.2",
|
||||
"cookie-signature": "~1.0.7",
|
||||
"debug": "~2.6.9",
|
||||
"depd": "~2.0.0",
|
||||
"on-headers": "~1.0.2",
|
||||
"on-headers": "~1.1.0",
|
||||
"parseurl": "~1.3.3",
|
||||
"safe-buffer": "5.1.2",
|
||||
"safe-buffer": "~5.2.1",
|
||||
"uid-safe": "~2.1.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/express"
|
||||
}
|
||||
},
|
||||
"node_modules/express-session/node_modules/cookie": {
|
||||
"version": "0.7.2",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
|
||||
"integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/express-session/node_modules/cookie-signature": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
|
||||
"integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/express-session/node_modules/on-headers": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
|
||||
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
|
||||
"integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/express-session/node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"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/express/node_modules/cookie": {
|
||||
"version": "0.7.2",
|
||||
@@ -21660,9 +21731,13 @@
|
||||
"integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw=="
|
||||
},
|
||||
"node_modules/kareem": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
|
||||
"integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw=="
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/kareem/-/kareem-3.2.0.tgz",
|
||||
"integrity": "sha512-VS8MWZz/cT+SqBCpVfNN4zoVz5VskR3N4+sTmUXme55e9avQHntpwpNq0yjnosISXqwJ3AQVjlbI4Dyzv//JtA==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/karma-source-map-support": {
|
||||
"version": "1.4.0",
|
||||
@@ -21692,6 +21767,18 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/kruptein": {
|
||||
"version": "3.0.8",
|
||||
"resolved": "https://registry.npmjs.org/kruptein/-/kruptein-3.0.8.tgz",
|
||||
"integrity": "sha512-0CyalFA0Cjp3jnziMp0u1uLZW2/ouhQ0mEMfYlroBXNe86na1RwAuwBcdRAegeWZNMfQy/G5fN47g/Axjtqrfw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"asn1.js": "^5.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">8"
|
||||
}
|
||||
},
|
||||
"node_modules/last-run": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
|
||||
@@ -23092,7 +23179,7 @@
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
||||
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
|
||||
"optional": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/meow": {
|
||||
"version": "3.7.0",
|
||||
@@ -23766,80 +23853,90 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz",
|
||||
"integrity": "sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw==",
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.1.1.tgz",
|
||||
"integrity": "sha512-067DXiMjcpYQl6bGjWQoTUEE9UoRViTtKFcoqX7z08I+iDZv/emH1g8XEFiO3qiDfXAheT5ozl1VffDTKhIW/w==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"mongodb-core": "3.2.7",
|
||||
"safe-buffer": "^5.1.2"
|
||||
"@mongodb-js/saslprep": "^1.3.0",
|
||||
"bson": "^7.1.1",
|
||||
"mongodb-connection-string-url": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
"node": ">=20.19.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@aws-sdk/credential-providers": "^3.806.0",
|
||||
"@mongodb-js/zstd": "^7.0.0",
|
||||
"gcp-metadata": "^7.0.1",
|
||||
"kerberos": "^7.0.0",
|
||||
"mongodb-client-encryption": ">=7.0.0 <7.1.0",
|
||||
"snappy": "^7.3.2",
|
||||
"socks": "^2.8.6"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@aws-sdk/credential-providers": {
|
||||
"optional": true
|
||||
},
|
||||
"@mongodb-js/zstd": {
|
||||
"optional": true
|
||||
},
|
||||
"gcp-metadata": {
|
||||
"optional": true
|
||||
},
|
||||
"kerberos": {
|
||||
"optional": true
|
||||
},
|
||||
"mongodb-client-encryption": {
|
||||
"optional": true
|
||||
},
|
||||
"snappy": {
|
||||
"optional": true
|
||||
},
|
||||
"socks": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb-core": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz",
|
||||
"integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==",
|
||||
"node_modules/mongodb-connection-string-url": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.1.tgz",
|
||||
"integrity": "sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"bson": "^1.1.1",
|
||||
"require_optional": "^1.0.1",
|
||||
"safe-buffer": "^5.1.2"
|
||||
"@types/whatwg-url": "^13.0.0",
|
||||
"whatwg-url": "^14.1.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"saslprep": "^1.0.0"
|
||||
"engines": {
|
||||
"node": ">=20.19.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb-core/node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"node_modules/mongodb/node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"node_modules/mongoose": {
|
||||
"version": "5.6.11",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.6.11.tgz",
|
||||
"integrity": "sha512-+Mxfmu2Jcspmdqk1111BLUj5mzSLHWKVovImkjzO9GMymTwkHshsuSFmUN7ou4dWy2WR8DPSJcwU52HhnnNk8Q==",
|
||||
"version": "9.3.2",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.3.2.tgz",
|
||||
"integrity": "sha512-4hMJA4vLAeNG6LnDwJImPYM+uJMVw+sFs7jtS/91OKOT7rzv19ytAAeswtAdWoinVBUVrzmClL/ZoPhcU5RL8w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"async": "2.6.2",
|
||||
"bson": "~1.1.1",
|
||||
"kareem": "2.3.1",
|
||||
"mongodb": "3.2.7",
|
||||
"mongodb-core": "3.2.7",
|
||||
"mongoose-legacy-pluralize": "1.0.2",
|
||||
"mpath": "0.6.0",
|
||||
"mquery": "3.2.1",
|
||||
"ms": "2.1.2",
|
||||
"regexp-clone": "1.0.0",
|
||||
"safe-buffer": "5.1.2",
|
||||
"sift": "7.0.1",
|
||||
"sliced": "1.0.1"
|
||||
"kareem": "3.2.0",
|
||||
"mongodb": "~7.1",
|
||||
"mpath": "0.9.0",
|
||||
"mquery": "6.0.0",
|
||||
"ms": "2.1.3",
|
||||
"sift": "17.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
"node": ">=20.19.0"
|
||||
},
|
||||
"node_modules/mongoose-legacy-pluralize": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
|
||||
"integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==",
|
||||
"peerDependencies": {
|
||||
"mongoose": "*"
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mongoose"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose/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=="
|
||||
},
|
||||
"node_modules/mongoose/node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/morgan": {
|
||||
"version": "1.9.1",
|
||||
@@ -23865,46 +23962,23 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mpath": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz",
|
||||
"integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==",
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
|
||||
"integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mquery": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.1.tgz",
|
||||
"integrity": "sha512-kY/K8QToZWTTocm0U+r8rqcJCp5PRl6e8tPmoDs5OeSO3DInZE2rAL6AYH+V406JTo8305LdASOQcxRDqHojyw==",
|
||||
"dependencies": {
|
||||
"bluebird": "3.5.1",
|
||||
"debug": "3.1.0",
|
||||
"regexp-clone": "^1.0.0",
|
||||
"safe-buffer": "5.1.2",
|
||||
"sliced": "1.0.1"
|
||||
},
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mquery/-/mquery-6.0.0.tgz",
|
||||
"integrity": "sha512-b2KQNsmgtkscfeDgkYMcWGn9vZI9YoXh802VDEwE6qc50zxBFQ0Oo8ROkawbPAsXCY1/Z1yp0MagqsZStPWJjw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
"node": ">=20.19.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mquery/node_modules/bluebird": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
|
||||
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
|
||||
},
|
||||
"node_modules/mquery/node_modules/debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mquery/node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"node_modules/mrmime": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
|
||||
@@ -29799,11 +29873,6 @@
|
||||
"resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz",
|
||||
"integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ=="
|
||||
},
|
||||
"node_modules/regexp-clone": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
|
||||
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
|
||||
},
|
||||
"node_modules/regexp.prototype.flags": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
|
||||
@@ -30236,15 +30305,6 @@
|
||||
"uuid": "bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/require_optional": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
|
||||
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
|
||||
"dependencies": {
|
||||
"resolve-from": "^2.0.0",
|
||||
"semver": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||
@@ -30327,14 +30387,6 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/resolve-from": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
|
||||
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/resolve-options": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
|
||||
@@ -30787,18 +30839,6 @@
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"node_modules/saslprep": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
|
||||
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"sparse-bitfield": "^3.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.77.6",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz",
|
||||
@@ -31365,9 +31405,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/sift": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
|
||||
"integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
|
||||
"version": "17.1.3",
|
||||
"resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz",
|
||||
"integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/signal-exit": {
|
||||
"version": "3.0.7",
|
||||
@@ -31531,11 +31572,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/sliced": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
|
||||
"integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA=="
|
||||
},
|
||||
"node_modules/snapdragon": {
|
||||
"version": "0.8.2",
|
||||
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
||||
@@ -31820,7 +31856,7 @@
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
||||
"integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
|
||||
"optional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"memory-pager": "^1.0.2"
|
||||
}
|
||||
@@ -33511,6 +33547,27 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
|
||||
"integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"punycode": "^2.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46/node_modules/punycode": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/tracer": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/tracer/-/tracer-1.0.1.tgz",
|
||||
@@ -35125,6 +35182,15 @@
|
||||
"resolved": "https://registry.npmjs.org/webgl-debug/-/webgl-debug-2.0.1.tgz",
|
||||
"integrity": "sha512-G7BOpMmqdc31X1nb3eqwVxw/v1MNV/ulgw7Bs+7+a/sn+fC0d0OiMkerA55C6+3BL2vULyJ3kZLPcEL5GbXzhw=="
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack": {
|
||||
"version": "5.105.4",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz",
|
||||
@@ -35659,6 +35725,19 @@
|
||||
"node": ">=0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "14.2.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
|
||||
"integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tr46": "^5.1.0",
|
||||
"webidl-conversions": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/whet.extend": {
|
||||
"version": "0.9.9",
|
||||
"resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
|
||||
|
||||
+2
-4
@@ -88,8 +88,6 @@
|
||||
"@types/howler": "^2.2.12",
|
||||
"@types/lodash": "^4.17.24",
|
||||
"@types/mocha": "^10.0.10",
|
||||
"@types/mongodb": "^3.3.1",
|
||||
"@types/mongoose": "^5.5.15",
|
||||
"@types/morgan": "^1.9.10",
|
||||
"@types/node": "^25.5.0",
|
||||
"@types/node-ipc": "^9.2.3",
|
||||
@@ -121,7 +119,7 @@
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chalk": "^2.4.2",
|
||||
"color-convert": "^2.0.1",
|
||||
"connect-mongo": "^3.0.0",
|
||||
"connect-mongo": "^6.0.0",
|
||||
"cookie-parser": "^1.4.4",
|
||||
"core-js": "^3.2.1",
|
||||
"del": "^5.1.0",
|
||||
@@ -165,7 +163,7 @@
|
||||
"merge2": "^1.2.4",
|
||||
"mocha": "^6.2.0",
|
||||
"moment": "^2.24.0",
|
||||
"mongoose": "^5.6.11",
|
||||
"mongoose": "^9.3.2",
|
||||
"morgan": "^1.9.1",
|
||||
"ngx-bootstrap": "^18.0.1",
|
||||
"passport": "^0.4.0",
|
||||
|
||||
@@ -229,7 +229,7 @@ export async function removeFriend(accountId: string, friendId: string) {
|
||||
const existing = await findFriendRequest(accountId, friendId);
|
||||
|
||||
if (existing) {
|
||||
existing.remove();
|
||||
existing.deleteOne();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -289,12 +289,12 @@ export class AdminServerActions implements IAdminServerActions, SocketServer {
|
||||
}
|
||||
@Method({ promise: true })
|
||||
async getPoniesCreators(account: string) {
|
||||
const items: ICharacter[] = await Character.find({ account }, '_id name creator').lean().exec();
|
||||
return items.map(({ _id, name, creator }) => <PonyCreator>{ _id, name, creator });
|
||||
const items = await Character.find({ account }, '_id name creator').lean<ICharacter[]>().exec();
|
||||
return items.map(({ _id, name, creator }) => <PonyCreator>{ _id: _id.toString(), name, creator });
|
||||
}
|
||||
@Method({ promise: true })
|
||||
async getPoniesForAccount(account: string) {
|
||||
return await Character.find({ account }).lean().exec();
|
||||
return await Character.find({ account }).lean().exec() as any;
|
||||
}
|
||||
@Method({ promise: true })
|
||||
async getDetailsForAccount(accountId: string) {
|
||||
|
||||
@@ -183,7 +183,7 @@ export async function removeAccount(service: AdminService, accountId: string) {
|
||||
if (account) {
|
||||
checkIfNotAdmin(account, `remove account: ${accountId}`);
|
||||
|
||||
await account.remove();
|
||||
await account.deleteOne();
|
||||
|
||||
service.removedItem('accounts', accountId);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
} from '../../common/adminInterfaces';
|
||||
import { execAsync } from '../serverUtils';
|
||||
import {
|
||||
IAccount, Account, Origin, Event, iterate, ISession, Session, SupporterInvite as DBSupporterInvite,
|
||||
Account, Origin, Event, iterate, ISession, Session, SupporterInvite as DBSupporterInvite,
|
||||
findAccount, ISupporterInvite, ID
|
||||
} from '../db';
|
||||
import { servers, serverStatus, loginServers } from '../internal';
|
||||
@@ -157,7 +157,7 @@ export async function getChat(search: string, date: string, caseInsensitive: boo
|
||||
}
|
||||
|
||||
export async function getChatForAccounts(accountIds: string[], date: string) {
|
||||
const accounts: Partial<IAccount>[] = await Account.find({ _id: { $in: accountIds } }, '_id merges').lean().exec();
|
||||
const accounts = await Account.find({ _id: { $in: accountIds } }, '_id merges').lean().exec();
|
||||
const map = new Map<string, string>();
|
||||
const ids = flatten(accounts.map(a => [a._id.toString(), ...(a.merges || []).map(a => a.id)]));
|
||||
|
||||
@@ -174,6 +174,7 @@ export async function getChatForAccounts(accountIds: string[], date: string) {
|
||||
const fixed = chat.replace(/^([0-9:]+) \[([a-f0-9]{24})\]/gmu, (_, date, id) =>
|
||||
`${date} ${map.has(id) ? map.get(id) : `[${id}]`}`);
|
||||
|
||||
|
||||
return fixed;
|
||||
}
|
||||
|
||||
@@ -187,11 +188,11 @@ export async function clearSessions(accountId: string) {
|
||||
const user = data && data.passport && data.passport.user;
|
||||
|
||||
if (user === accountId) {
|
||||
clearIds.push(session._id);
|
||||
clearIds.push(session._id.toString());
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error('Error when claring session', e, session._id, session.session);
|
||||
logger.error('Error when clearing session', e, session._id, session.session);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -137,19 +137,19 @@ async function merge(
|
||||
Promise.all([
|
||||
SupporterInvite.updateMany({ source: merge._id }, { source: account._id }).exec(),
|
||||
SupporterInvite.updateMany({ target: merge._id }, { target: account._id }).exec(),
|
||||
]).then(() => SupporterInvite.remove({ target: account._id, source: account._id }).exec()),
|
||||
]).then(() => SupporterInvite.deleteOne({ target: account._id, source: account._id }).exec()),
|
||||
Promise.all([
|
||||
FriendRequest.updateMany({ source: merge._id }, { source: account._id }).exec(),
|
||||
FriendRequest.updateMany({ target: merge._id }, { target: account._id }).exec(),
|
||||
]).then(() => FriendRequest.remove({ target: account._id, source: account._id }).exec()),
|
||||
]).then(() => FriendRequest.deleteOne({ target: account._id, source: account._id }).exec()),
|
||||
Promise.all([
|
||||
HideRequest.updateMany({ source: merge._id }, { source: account._id }).exec(),
|
||||
HideRequest.updateMany({ target: merge._id }, { target: account._id }).exec(),
|
||||
]).then(() => HideRequest.remove({ target: account._id, source: account._id }).exec()),
|
||||
]).then(() => HideRequest.deleteOne({ target: account._id, source: account._id }).exec()),
|
||||
]);
|
||||
|
||||
await removeDuplicateFriendRequests(id);
|
||||
await merge.remove();
|
||||
await merge.deleteOne();
|
||||
await kickFromAllServers(withId);
|
||||
await removedDocument('accounts', withId);
|
||||
await updateCharacterCount(id);
|
||||
@@ -175,7 +175,7 @@ async function removeDuplicateFriendRequests(id: string) {
|
||||
}
|
||||
|
||||
if (removeRequests.length) {
|
||||
await FriendRequest.remove({ _id: { $in: removeRequests } }).exec();
|
||||
await FriendRequest.deleteOne({ _id: { $in: removeRequests } }).exec();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ export async function split(
|
||||
|
||||
const friendsToRemove = [...(keep.friends || []), ...(split.friends || [])];
|
||||
|
||||
await FriendRequest.deleteMany({
|
||||
await FriendRequest.deleteOne({
|
||||
$or: [
|
||||
{ target: account._id, source: { $in: friendsToRemove } },
|
||||
{ source: account._id, target: { $in: friendsToRemove } },
|
||||
@@ -243,7 +243,7 @@ export async function split(
|
||||
|
||||
const hidesToRemove = [...(keep.hides || []), ...(split.hides || [])].map(hide => hide.id);
|
||||
|
||||
await HideRequest.deleteMany({
|
||||
await HideRequest.deleteOne({
|
||||
$or: [
|
||||
{ source: account._id, target: { $in: hidesToRemove } },
|
||||
],
|
||||
|
||||
@@ -75,7 +75,7 @@ export async function removeCharacter(service: AdminService, characterId: string
|
||||
return;
|
||||
|
||||
await kickFromAllServersByCharacter(characterId);
|
||||
await character.remove();
|
||||
await character.deleteOne();
|
||||
await updateCharacterCount(character.account);
|
||||
logRemovedCharacter(character);
|
||||
service.ponies.removed(characterId);
|
||||
@@ -83,7 +83,7 @@ export async function removeCharacter(service: AdminService, characterId: string
|
||||
|
||||
async function removeCharacters(character: ICharacter[], accountId: string, removedDocument: RemovedDocument) {
|
||||
await Bluebird.map(character, async c => {
|
||||
await c.remove();
|
||||
await c.deleteOne();
|
||||
await removedDocument('ponies', c._id.toString());
|
||||
logRemovedCharacter(c);
|
||||
}, { concurrency: 4 });
|
||||
|
||||
@@ -88,7 +88,7 @@ export const createSavePony =
|
||||
character.desc = typeof data.desc === 'string' ? data.desc.substr(0, PLAYER_DESC_MAX_LENGTH) : '';
|
||||
character.name = data.name;
|
||||
character.tag = data.tag;
|
||||
character.site = auth ? auth._id : null;
|
||||
character.site = auth?._id;
|
||||
character.info = info;
|
||||
character.flags = flags;
|
||||
character.lastUsed = new Date();
|
||||
@@ -115,9 +115,9 @@ export const createSavePony =
|
||||
}
|
||||
|
||||
if (created) {
|
||||
log(account._id, `created pony "${character.name}"`);
|
||||
log(account._id.toString(), `created pony "${character.name}"`);
|
||||
} else if (nameChanged) {
|
||||
log(account._id, `renamed pony "${oldName}" => "${character.name}"`);
|
||||
log(account._id.toString(), `renamed pony "${oldName}" => "${character.name}"`);
|
||||
}
|
||||
|
||||
return toPonyObject(character);
|
||||
|
||||
@@ -65,7 +65,7 @@ export async function updateAuthInfo(
|
||||
}
|
||||
|
||||
if (!auth.account && accountId) {
|
||||
changes.account = Types.ObjectId(accountId);
|
||||
changes.account = new Types.ObjectId(accountId);
|
||||
}
|
||||
|
||||
if (Object.keys(changes).length > 0) {
|
||||
|
||||
@@ -4,7 +4,7 @@ require('source-map-support').install();
|
||||
|
||||
import 'core-js/stable/promise/finally';
|
||||
import 'reflect-metadata';
|
||||
import * as Promise from 'bluebird';
|
||||
import * as Bluebird from 'bluebird';
|
||||
import * as fs from 'fs';
|
||||
import { argv } from 'yargs';
|
||||
|
||||
@@ -16,4 +16,4 @@ import { argv } from 'yargs';
|
||||
(global as any).TESTS = false;
|
||||
(global as any).performance = Date;
|
||||
|
||||
Promise.promisifyAll(fs);
|
||||
Bluebird.promisifyAll(fs);
|
||||
|
||||
@@ -2,7 +2,7 @@ import { repeat } from 'lodash';
|
||||
import { toByteArray } from 'base64-js';
|
||||
import { encodeString } from 'ag-sockets/dist/utf8';
|
||||
import { PonyOptions, EntityState, UpdateFlags } from '../common/interfaces';
|
||||
import { ICharacter, IAccount, Character, MongoQuery, queryCharacter } from './db';
|
||||
import { ICharacter, IAccount, Character, queryCharacter } from './db';
|
||||
import { isForbiddenName } from '../common/security';
|
||||
import { supporterLevel } from '../common/adminUtils';
|
||||
import { CharacterFlags, CharacterState, ServerConfig, CharacterStateFlags } from '../common/adminInterfaces';
|
||||
@@ -22,6 +22,7 @@ import { saySystem } from './chat';
|
||||
import { isPonyFlying } from '../common/entityUtils';
|
||||
import { createCharacterState, updateClientCharacter } from './playerUtils';
|
||||
import { encodeExpression } from '../common/encoders/expressionEncoder';
|
||||
import { QueryFilter } from 'mongoose';
|
||||
|
||||
export const defaultCharacterState: CharacterState = { x: 0, y: 0 };
|
||||
|
||||
@@ -177,7 +178,7 @@ export function logRemovedCharacter({ _id, account, name, info }: ICharacter) {
|
||||
log(systemMessage(`${account}`, `removed pony [${_id}] "${name}" ${info}`));
|
||||
}
|
||||
|
||||
export async function swapCharacter(client: IClient, { server }: World, query: MongoQuery<ICharacter>) {
|
||||
export async function swapCharacter(client: IClient, { server }: World, query: QueryFilter<ICharacter>) {
|
||||
if (client.isSwitchingMap)
|
||||
return;
|
||||
|
||||
|
||||
+26
-27
@@ -1,4 +1,4 @@
|
||||
import { model, Schema, Types, Document, Query } from 'mongoose';
|
||||
import { model, Schema, Types, Document, Query, QueryFilter, UpdateQuery } from 'mongoose';
|
||||
import {
|
||||
TimestampsBase, EventBase, CharacterBase, AccountBase, AuthBase, OriginBase, OriginInfoBase, CharacterState,
|
||||
SupporterInviteBase, FriendRequestBase, HideRequestBase, MergeHideData
|
||||
@@ -9,6 +9,7 @@ import { FriendData } from '../common/interfaces';
|
||||
import { replaceEmojis } from '../common/emoji';
|
||||
import { filterForbidden } from './characterUtils';
|
||||
import { filterName } from '../common/swears';
|
||||
import { compact, noop } from 'lodash';
|
||||
|
||||
//set('debug', true); // debug mongoose
|
||||
|
||||
@@ -205,13 +206,13 @@ export const Origin = model<IOrigin>('Origin', originSchema);
|
||||
export const Session = model<ISession>('session', sessionSchema);
|
||||
export const Character = model<ICharacter>('Character', characterSchema);
|
||||
|
||||
accountSchema.post('remove', function (doc: Document) {
|
||||
accountSchema.post('deleteOne', function (doc: Document) {
|
||||
Promise.all([
|
||||
Character.deleteMany({ account: doc._id }).exec(),
|
||||
Event.deleteMany({ account: doc._id }).exec(),
|
||||
Auth.deleteMany({ account: doc._id }).exec(),
|
||||
FriendRequest.deleteMany({ $or: [{ target: doc._id }, { source: doc._id }] }).exec(),
|
||||
HideRequest.deleteMany({ $or: [{ target: doc._id }, { source: doc._id }] }).exec(),
|
||||
Character.deleteOne({ account: doc._id }).exec(),
|
||||
Event.deleteOne({ account: doc._id }).exec(),
|
||||
Auth.deleteOne({ account: doc._id }).exec(),
|
||||
FriendRequest.deleteOne({ $or: [{ target: doc._id }, { source: doc._id }] }).exec(),
|
||||
HideRequest.deleteOne({ $or: [{ target: doc._id }, { source: doc._id }] }).exec(),
|
||||
]).catch(logger.error);
|
||||
});
|
||||
|
||||
@@ -249,15 +250,11 @@ export interface MongoUpdateExpr<T> extends MongoUpdateExprField<T> {
|
||||
$addToSet?: any;
|
||||
}
|
||||
|
||||
export type MongoQuery<T> = {
|
||||
[P in keyof T]?: T[P] | MongoQueryExpr<T[P]>;
|
||||
};
|
||||
|
||||
export type MongoUpdate<T> = {
|
||||
[P in keyof T]?: T[P] | MongoUpdateExprField<T[P]>;
|
||||
} & MongoUpdateExpr<T>;
|
||||
|
||||
export function iterate<T>(query: Query<T>, onData: (doc: T) => void) {
|
||||
export function iterate<T>(query: Query<T, T>, onData: (doc: T) => void) {
|
||||
return new Promise<void>(resolve => {
|
||||
query.cursor()
|
||||
.on('data', onData)
|
||||
@@ -290,7 +287,7 @@ export type FindCharacter = (characterId: ID, accountId: ID) => Promise<ICharact
|
||||
export type FindCharacterSafe = (characterId: ID, accountId: ID) => Promise<ICharacter>;
|
||||
export type FindCharacters = (accountId: ID, fields?: string) => Promise<ICharacter[]>;
|
||||
export type UpdateCharacterState = (characterId: ID, serverName: string, state: CharacterState) => Promise<void>;
|
||||
export type QueryCharacter = (query: MongoQuery<ICharacter>, fields?: string) => Promise<ICharacter | undefined>;
|
||||
export type QueryCharacter = (query: QueryFilter<ICharacter>, fields?: string) => Promise<ICharacter | undefined>;
|
||||
|
||||
export function createCharacter(account: IAccount) {
|
||||
return new Character({ account: account._id, creator: `${account.name} [${account._id}]` });
|
||||
@@ -323,12 +320,13 @@ export function findLatestCharacters(account: ID, count: number): Promise<IChara
|
||||
.exec();
|
||||
}
|
||||
|
||||
export function removeCharacter(id: ID, account: ID): Promise<ICharacter | undefined> {
|
||||
return Character.findOneAndRemove({ _id: id, account }).exec().then(nullToUndefined);
|
||||
export async function removeCharacter(id: ID, account: ID): Promise<ICharacter | undefined> {
|
||||
const doc = await Character.findOneAndDelete({ _id: id, account }).exec();
|
||||
return doc ?? undefined;
|
||||
}
|
||||
|
||||
export const updateCharacterState: UpdateCharacterState = (characterId, serverName, state) =>
|
||||
Character.updateOne({ _id: characterId }, { [`state.${serverName}`]: state }).exec().then(nullToUndefined);
|
||||
Character.updateOne({ _id: characterId }, { [`state.${serverName}`]: state }).exec().then(noop);
|
||||
|
||||
export const queryCharacter: QueryCharacter = (query, fields) =>
|
||||
Character.findOne(query, fields).exec() as any;
|
||||
@@ -338,8 +336,8 @@ export const queryCharacter: QueryCharacter = (query, fields) =>
|
||||
export type FindAuth = (authId: ID, accountId: ID, fields?: string) => Promise<IAuth | undefined>;
|
||||
export type FindAuths = (accountId: ID, fields?: string) => Promise<IAuth[]>;
|
||||
export type CountAuths = (accountId: ID) => Promise<number>;
|
||||
export type QueryAuths = (query: MongoQuery<IAuth>, fields?: string) => Promise<IAuth[]>;
|
||||
export type UpdateAuth = (authId: ID, update: MongoUpdate<IAuth>) => Promise<void>;
|
||||
export type QueryAuths = (query: QueryFilter<IAuth>, fields?: string) => Promise<IAuth[]>;
|
||||
export type UpdateAuth = (authId: ID, update: UpdateQuery<IAuth>) => Promise<void>;
|
||||
|
||||
export const findAuthByOpenId = (openId: string, provider: string): Promise<IAuth | undefined> =>
|
||||
Auth.findOne({ openId, provider }).exec().then(nullToUndefined);
|
||||
@@ -363,22 +361,23 @@ export const queryAuths: QueryAuths = (query, fields) =>
|
||||
Auth.find(query, fields).lean().exec();
|
||||
|
||||
export const updateAuth: UpdateAuth = (id, update) =>
|
||||
Auth.updateOne({ _id: id }, update).exec();
|
||||
Auth.updateOne({ _id: id }, update).exec().then(noop);
|
||||
|
||||
|
||||
// accounts
|
||||
|
||||
export type FindAccountSafe = (accountId: ID, projection?: string) => Promise<IAccount>;
|
||||
export type UpdateAccount = (accountId: ID, update: MongoUpdate<IAccount>) => Promise<void>;
|
||||
export type UpdateAccounts = (query: MongoQuery<IAccount>, update: MongoUpdate<IAccount>) => Promise<void>;
|
||||
export type QueryAccounts = (query: MongoQuery<IAccount>, fields?: string) => Promise<IAccount[]>;
|
||||
export type QueryAccount = (query: MongoQuery<IAccount>, fields?: string) => Promise<IAccount | undefined>;
|
||||
export type UpdateAccounts = (query: QueryFilter<IAccount>, update: MongoUpdate<IAccount>) => Promise<void>;
|
||||
export type QueryAccounts = (query: QueryFilter<IAccount>, fields?: string) => Promise<IAccount[]>;
|
||||
export type QueryAccount = (query: QueryFilter<IAccount>, fields?: string) => Promise<IAccount | undefined>;
|
||||
|
||||
export const findAccount = (account: ID, projection?: string): Promise<IAccount | undefined> =>
|
||||
Account.findById(account, projection).exec().then(nullToUndefined);
|
||||
|
||||
export function checkIfAdmin(account: ID): Promise<boolean> {
|
||||
return Account.findOne({ _id: account }, 'roles').lean().exec()
|
||||
.then(a => a && isAdmin(a));
|
||||
.then(a => a && isAdmin(a)).then(r => !!r);
|
||||
}
|
||||
|
||||
export function findAccountSafe(account: ID, projection?: string): Promise<IAccount> {
|
||||
@@ -387,10 +386,10 @@ export function findAccountSafe(account: ID, projection?: string): Promise<IAcco
|
||||
}
|
||||
|
||||
export const updateAccount: UpdateAccount = (accountId, update) =>
|
||||
Account.updateOne({ _id: accountId }, update).exec();
|
||||
Account.updateOne({ _id: accountId }, update).exec().then(noop);
|
||||
|
||||
export const updateAccounts: UpdateAccounts = (query, update) =>
|
||||
Account.updateMany(query, update).exec();
|
||||
Account.updateMany(query, update).exec().then(noop);
|
||||
|
||||
export const queryAccounts: QueryAccounts = (query, fields) =>
|
||||
Account.find(query, fields).lean().exec();
|
||||
@@ -428,8 +427,8 @@ export async function findFriends(accountId: ID, withCharacters: boolean): Promi
|
||||
let characters: ICharacter[] = [];
|
||||
|
||||
if (withCharacters) {
|
||||
const characterIds = accounts.map(a => a.lastCharacter).filter(id => id);
|
||||
characters = await Character.find({ _id: { $in: characterIds } }, '_id name info').lean().exec();
|
||||
const characterIds = compact(accounts.map(a => a.lastCharacter?.toString()));
|
||||
characters = await Character.find({ _id: { $in: characterIds } }, '_id name info').lean<ICharacter[]>().exec();
|
||||
}
|
||||
|
||||
return accounts.map(a => {
|
||||
|
||||
@@ -49,7 +49,7 @@ export function createLiveEndPoint<T extends Doc>(
|
||||
.tap(item => {
|
||||
if (item) {
|
||||
removedItem(item._id.toString());
|
||||
return item.remove() as any;
|
||||
return item.deleteOne() as any;
|
||||
}
|
||||
})
|
||||
.tap(item => item && afterDelete && afterDelete(item))
|
||||
@@ -86,12 +86,12 @@ export function createLiveEndPoint<T extends Doc>(
|
||||
|
||||
function findItemsExact(date: Date): Promise<T[]> {
|
||||
return Promise.resolve(model.find({ updatedAt: date }, fields.join(' '))
|
||||
.lean()
|
||||
.lean<T[]>()
|
||||
.exec());
|
||||
}
|
||||
|
||||
function hasItem(items: T[], id: string) {
|
||||
return items.some(i => i._id === id);
|
||||
return items.some(i => i._id.toString() === id);
|
||||
}
|
||||
|
||||
function addTailItems(items: T[]): Promise<{ items: T[]; more: boolean; }> {
|
||||
@@ -108,7 +108,7 @@ export function createLiveEndPoint<T extends Doc>(
|
||||
}
|
||||
|
||||
return findItemsExact(items[items.length - 1].updatedAt)
|
||||
.then(other => other.filter(i => !hasItem(items, i._id)))
|
||||
.then(other => other.filter(i => !hasItem(items, i?._id.toString())))
|
||||
.then(other => [...items, ...other])
|
||||
.then(items => ({ items, more: true }));
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ const cleanupStrayAuths = (removedDocument: RemovedDocument) =>
|
||||
const date = fromNow(-1 * DAY);
|
||||
const query = { account: { $exists: false }, updatedAt: { $lt: date }, createdAt: { $lt: date } };
|
||||
const items = await queryAuths(query, '_id');
|
||||
await Auth.deleteMany(query).exec();
|
||||
await Auth.deleteOne(query).exec();
|
||||
await Bluebird.map(items, item => removedDocument('auths', item._id.toString()), { concurrency: 4 });
|
||||
logPerformance(`[async] cleanupAccountAlerts (${Date.now() - start}ms)`);
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Request } from 'express';
|
||||
import { truncate } from 'lodash';
|
||||
import { Reporter } from './serverInterfaces';
|
||||
import { Event, IEvent, IOriginInfo, ID, IAccount } from './db';
|
||||
import { Event, IOriginInfo, ID, IAccount } from './db';
|
||||
import { logger, system } from './logger';
|
||||
import { ServerConfig } from '../common/adminInterfaces';
|
||||
import { getOrigin } from './originUtils';
|
||||
@@ -32,7 +32,7 @@ const createLogEvent =
|
||||
|
||||
return Event.updateOne({ _id: event._id }, { desc: event.desc, count: event.count + 1 }).exec();
|
||||
} else {
|
||||
return Event.create(<IEvent>{ server, account, pony, type, message, origin, desc });
|
||||
return Event.create({ server, account, pony, type, message, origin, desc }) as any;
|
||||
}
|
||||
})
|
||||
.catch(logger.error);
|
||||
@@ -97,7 +97,7 @@ export function create(server: ServerConfig, account?: ID, pony?: ID, originInfo
|
||||
/* istanbul ignore next */
|
||||
export function createFromRequest(server: ServerConfig, req: Request, pony?: any) {
|
||||
const user = req && req.user as IAccount | undefined;
|
||||
const account = user ? user.id : undefined;
|
||||
const account = user?._id?.toString();
|
||||
const origin = req ? getOrigin(req) : undefined;
|
||||
return create(server, account, pony, origin);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ export const validAccount = (server: ServerConfig): RequestHandler => (req, res,
|
||||
const accountId = req.body.accountId as string;
|
||||
const accountName = req.body.accountName as string;
|
||||
|
||||
if (!account || account.id !== accountId) {
|
||||
if (!account || account._id.toString() !== accountId) {
|
||||
if (!/#$/.test(accountId)) {
|
||||
createFromRequest(server, req).warn(ACCOUNT_ERROR, `${accountName} [${accountId}] (${req.path})`);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ export default function (server: ServerConfig, settings: Settings, removedDocume
|
||||
savePonyHandler(req.user as IAccount, req.body.pony, createFromRequest(server, req))));
|
||||
|
||||
app.post('/pony/remove', offline, hash, validAccount, wrap(server, req =>
|
||||
removePonyHandler(req.body.id, (req.user as IAccount).id)));
|
||||
removePonyHandler(req.body.id, (req.user as IAccount)?._id.toString())));
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Router } from 'express';
|
||||
import { noop } from 'lodash';
|
||||
import { findAllCharacters, findAllVisibleAuths, IAccount, Account } from '../db';
|
||||
import { offline, hash, handleJSON } from '../requestUtils';
|
||||
import { createGetAccountData } from '../api/account';
|
||||
@@ -27,7 +26,7 @@ export default function (server: ServerConfig, settings: Settings) {
|
||||
(lastBrowserId && account.lastBrowserId !== lastBrowserId)) {
|
||||
account.lastUserAgent = lastUserAgent;
|
||||
account.lastBrowserId = lastBrowserId;
|
||||
Account.updateOne({ _id: account._id }, { lastUserAgent, lastBrowserId }, noop);
|
||||
Account.updateOne({ _id: account._id }, { lastUserAgent, lastBrowserId });
|
||||
}
|
||||
|
||||
return await getAccountData(account);
|
||||
|
||||
@@ -84,8 +84,8 @@ const ignoreErrors = [
|
||||
function kickCurrentUser(req: Request) {
|
||||
const user = req.user as IAccount | undefined;
|
||||
|
||||
if (user) {
|
||||
kickFromAllServers(user.id)
|
||||
if (user?._id) {
|
||||
kickFromAllServers(user._id?.toString())
|
||||
.catch(e => logger.error(e));
|
||||
}
|
||||
}
|
||||
@@ -97,7 +97,7 @@ function logIn(req: Request, account: IAccount) {
|
||||
});
|
||||
}
|
||||
|
||||
function isMerge(accountId: string) {
|
||||
function isMerge(accountId: string | undefined) {
|
||||
const minTime = fromNow(-10 * MINUTE).getTime();
|
||||
remove(mergeRequests, r => r.time < minTime);
|
||||
return mergeRequests.some(r => r.accountId === accountId);
|
||||
@@ -186,7 +186,7 @@ async function handleAuth(
|
||||
req: Request, res: Response, error: Error | null, account: IAccount | null,
|
||||
) {
|
||||
const user = req.user as IAccount | undefined;
|
||||
const merge = isMerge(user && user.id);
|
||||
const merge = isMerge(user?._id?.toString());
|
||||
|
||||
try {
|
||||
if (error) {
|
||||
@@ -359,7 +359,12 @@ export function authRoutes(
|
||||
return [account._id.toString(), account.name];
|
||||
}));
|
||||
|
||||
passport.use(new LocalStrategy((login, _pass, done) => Account.findById(login, done)));
|
||||
passport.use(new LocalStrategy((login, _pass, done) =>
|
||||
Account.findById(login)
|
||||
.then(data => done(undefined, data as any))
|
||||
.catch(e => done(e)))
|
||||
);
|
||||
|
||||
app.get('/local', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/failed-login' }));
|
||||
}
|
||||
|
||||
|
||||
+14
-11
@@ -9,7 +9,7 @@ import * as expressSession from 'express-session';
|
||||
import * as serveFavicon from 'serve-favicon';
|
||||
import * as Rollbar from 'rollbar';
|
||||
import { Passport } from 'passport';
|
||||
import * as connectMongo from 'connect-mongo';
|
||||
import MongoStore from 'connect-mongo';
|
||||
import * as express from 'express';
|
||||
import { WebSocketServer } from '@encharm/cws';
|
||||
import { compact, once } from 'lodash';
|
||||
@@ -67,14 +67,11 @@ function getServiceWorker() {
|
||||
}
|
||||
}
|
||||
|
||||
mongoose.connect(config.db, {
|
||||
reconnectTries: Number.MAX_VALUE,
|
||||
useNewUrlParser: true,
|
||||
useCreateIndex: true,
|
||||
useFindAndModify: false,
|
||||
});
|
||||
const clientP = mongoose.connect(config.db, {
|
||||
autoIndex: true,
|
||||
serverSelectionTimeoutMS: 5000,
|
||||
}).then(m => m.connection.getClient());
|
||||
|
||||
const MongoStore = connectMongo(expressSession);
|
||||
const app = express();
|
||||
const production = app.get('env') === 'production';
|
||||
const maxAge = production ? YEAR : 0;
|
||||
@@ -163,8 +160,14 @@ app.use(require('cookie-parser')());
|
||||
|
||||
if (args.login || args.admin) {
|
||||
passport.serializeUser<string>((account, done) => done(null, (account as IAccount)._id.toString()));
|
||||
passport.deserializeUser<string>((id, done) =>
|
||||
Account.findById(id, (err, a) => done(err, a && !isBanned(a) ? a : false)));
|
||||
passport.deserializeUser<string>(async (id, done) => {
|
||||
try {
|
||||
const account = await Account.findById(id).exec();
|
||||
done(undefined, account && !isBanned(account) ? account : false);
|
||||
} catch (error) {
|
||||
done(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const ignore = [
|
||||
@@ -198,7 +201,7 @@ const createSession = () => expressSession({
|
||||
cookie: {
|
||||
maxAge: WEEK * 2,
|
||||
},
|
||||
store: new MongoStore({ mongooseConnection: mongoose.connection }),
|
||||
store: new MongoStore({ client: clientP }),
|
||||
});
|
||||
|
||||
const statsPath = pathTo('logs', `stats-${server.id}.csv`);
|
||||
|
||||
@@ -96,12 +96,12 @@ export class SupporterInvitesService {
|
||||
type LeanInvite = ISupporterInvite & { source: IAccount };
|
||||
|
||||
export async function updateSupporterInvites(model: Model<ISupporterInvite>) {
|
||||
const invites: LeanInvite[] = await model.find({}, '_id active')
|
||||
const invites = await model.find({}, '_id active')
|
||||
.populate('source', '_id supporter patreon roles')
|
||||
.lean()
|
||||
.lean<LeanInvite[]>()
|
||||
.exec();
|
||||
|
||||
const itemsBySource = toPairs(groupBy(invites, i => i.source._id as string));
|
||||
const itemsBySource = toPairs(groupBy(invites, i => i.source._id));
|
||||
const itemsToUpdate = itemsBySource
|
||||
.map(([_, items]) => {
|
||||
const source = items[0].source;
|
||||
@@ -123,5 +123,5 @@ export async function updateSupporterInvites(model: Model<ISupporterInvite>) {
|
||||
return model.updateMany({ _id: { $in: ids } }, { active }).exec();
|
||||
}));
|
||||
|
||||
await model.deleteMany({ active: false, updatedAt: { $lt: fromNow(-100 * DAY) } }).exec();
|
||||
await model.deleteOne({ active: false, updatedAt: { $lt: fromNow(-100 * DAY) } }).exec();
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ export function genId() {
|
||||
}
|
||||
|
||||
export function genObjectId() {
|
||||
return Types.ObjectId(genId());
|
||||
return new Types.ObjectId(genId());
|
||||
}
|
||||
|
||||
export function mockClient(fields: any = {}): IClient {
|
||||
@@ -81,8 +81,8 @@ export function mockClient(fields: any = {}): IClient {
|
||||
friends: new Set<string>(),
|
||||
accountSettings: {},
|
||||
originalRequest: { headers: {} },
|
||||
account: { id: accountId, _id: Types.ObjectId(accountId), ignores: [] },
|
||||
character: { id: characterId, _id: Types.ObjectId(characterId) },
|
||||
account: { id: accountId, _id: new Types.ObjectId(accountId), ignores: [] },
|
||||
character: { id: characterId, _id: new Types.ObjectId(characterId) },
|
||||
isMod: false,
|
||||
pony,
|
||||
map: createServerMap('', 0, 1, 1),
|
||||
|
||||
@@ -54,7 +54,7 @@ describe('api pony', () => {
|
||||
|
||||
describe('for existing character', () => {
|
||||
const characterId = genId();
|
||||
const characterObjectId = Types.ObjectId(characterId);
|
||||
const characterObjectId = new Types.ObjectId(characterId);
|
||||
let character: ICharacter;
|
||||
let account = { _id: 'accid' } as any;
|
||||
|
||||
@@ -212,7 +212,7 @@ describe('api pony', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
character = {
|
||||
_id: Types.ObjectId(characterId),
|
||||
_id: new Types.ObjectId(characterId),
|
||||
save() { return this; }
|
||||
} as any;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ describe('authUtils', () => {
|
||||
describe('updateAuthInfo()', () => {
|
||||
it('updates url and name fields', async () => {
|
||||
const updateAuth = stub();
|
||||
const a = auth({ _id: 'bar' });
|
||||
const a = auth({ _id: new Types.ObjectId('bar') });
|
||||
|
||||
await updateAuthInfo(updateAuth, a, profile({ username: 'foo', url: 'bar' }), undefined);
|
||||
|
||||
@@ -33,7 +33,7 @@ describe('authUtils', () => {
|
||||
|
||||
it('updates email field (from empty)', async () => {
|
||||
const updateAuth = stub();
|
||||
const a = auth({ _id: 'bar' });
|
||||
const a = auth({ _id: new Types.ObjectId('bar') });
|
||||
|
||||
await updateAuthInfo(updateAuth, a, profile({ emails: ['b', 'c'] }), undefined);
|
||||
|
||||
@@ -44,7 +44,7 @@ describe('authUtils', () => {
|
||||
it('saves updated auth', async () => {
|
||||
const updateAuth = stub();
|
||||
|
||||
await updateAuthInfo(updateAuth, auth({ _id: 'bar' }), profile({ username: 'foo' }), undefined);
|
||||
await updateAuthInfo(updateAuth, auth({ _id: new Types.ObjectId('bar') }), profile({ username: 'foo' }), undefined);
|
||||
|
||||
assert.calledWith(updateAuth, 'bar', { name: 'foo' });
|
||||
});
|
||||
@@ -55,20 +55,20 @@ describe('authUtils', () => {
|
||||
|
||||
await updateAuthInfo(stub(), a, profile({ username: 'foo', url: 'bar' }), accountId);
|
||||
|
||||
expect(a.account).eql(Types.ObjectId(accountId));
|
||||
expect(a.account).eql(new Types.ObjectId(accountId));
|
||||
});
|
||||
|
||||
it('does not save auth if nothing changed', async () => {
|
||||
const updateAuth = stub();
|
||||
|
||||
await updateAuthInfo(updateAuth, auth({ _id: 'bar', name: 'foo' }), profile({ username: 'foo' }), undefined);
|
||||
await updateAuthInfo(updateAuth, auth({ _id: new Types.ObjectId('bar'), name: 'foo' }), profile({ username: 'foo' }), undefined);
|
||||
|
||||
assert.notCalled(updateAuth);
|
||||
});
|
||||
|
||||
it('does nothing if email list is the same', async () => {
|
||||
const updateAuth = stub();
|
||||
const a = auth({ _id: 'bar', emails: ['a', 'b'] });
|
||||
const a = auth({ _id: new Types.ObjectId('bar'), emails: ['a', 'b'] });
|
||||
|
||||
await updateAuthInfo(updateAuth, a, profile({ emails: ['b', 'a'] }), undefined);
|
||||
|
||||
|
||||
@@ -12,13 +12,14 @@ import { createServerMap } from '../../server/serverMap';
|
||||
import { CounterService } from '../../server/services/counter';
|
||||
import { createCharacterState } from '../../server/playerUtils';
|
||||
import { hasFlag } from '../../common/utils';
|
||||
import { Types } from 'mongoose';
|
||||
|
||||
describe('characterUtils', () => {
|
||||
describe('createPony()', () => {
|
||||
const defaultState: CharacterState = { x: 0, y: 0, flags: 0 };
|
||||
|
||||
it('creates pony entity', () => {
|
||||
const pony = createPony(account({ _id: '' }), character({ name: 'foo' }), defaultState);
|
||||
const pony = createPony(account({ _id: new Types.ObjectId('') }), character({ name: 'foo' }), defaultState);
|
||||
|
||||
expect(pony).not.undefined;
|
||||
expect(pony.type).equal(entities.pony.type);
|
||||
@@ -27,7 +28,7 @@ describe('characterUtils', () => {
|
||||
it('sets initial position for character from state', () => {
|
||||
const main: CharacterState = { ...defaultState, x: 1, y: 2 };
|
||||
|
||||
const pony = createPony(account({ _id: '' }), character({ name: 'foo' }), main);
|
||||
const pony = createPony(account({ _id: new Types.ObjectId('') }), character({ name: 'foo' }), main);
|
||||
|
||||
expect(pony.x).eql(1, 'x');
|
||||
expect(pony.y).eql(2, 'y');
|
||||
@@ -36,7 +37,7 @@ describe('characterUtils', () => {
|
||||
it('sets facing from state', () => {
|
||||
const main: CharacterState = { ...defaultState, flags: CharacterStateFlags.Right };
|
||||
|
||||
const pony = createPony(account({ _id: '' }), character({ name: 'foo' }), main);
|
||||
const pony = createPony(account({ _id: new Types.ObjectId('') }), character({ name: 'foo' }), main);
|
||||
|
||||
expect(pony.state).equal(EntityState.FacingRight);
|
||||
});
|
||||
@@ -44,7 +45,7 @@ describe('characterUtils', () => {
|
||||
it('sets extra flag from state', () => {
|
||||
const main: CharacterState = { ...defaultState, flags: CharacterStateFlags.Extra };
|
||||
|
||||
const pony = createPony(account({ _id: '' }), character({ name: 'foo' }), main);
|
||||
const pony = createPony(account({ _id: new Types.ObjectId('') }), character({ name: 'foo' }), main);
|
||||
|
||||
expect(pony.options!.extra).true;
|
||||
});
|
||||
@@ -52,7 +53,7 @@ describe('characterUtils', () => {
|
||||
it('sets held item from state', () => {
|
||||
const main: CharacterState = { ...defaultState, hold: 'apple' };
|
||||
|
||||
const pony = createPony(account({ _id: '' }), character({ name: 'foo' }), main);
|
||||
const pony = createPony(account({ _id: new Types.ObjectId('') }), character({ name: 'foo' }), main);
|
||||
|
||||
expect(pony.options!.hold).equal(entities.apple.type);
|
||||
});
|
||||
@@ -60,7 +61,9 @@ describe('characterUtils', () => {
|
||||
it('ignores held item from state if type is invalid', () => {
|
||||
const main: CharacterState = { ...defaultState, hold: 'does_not_exist' };
|
||||
|
||||
const pony = createPony(account({ _id: '' }), character({ name: 'foo' }), main);
|
||||
const pony = createPony(account({ _id: new Types.ObjectId('')
|
||||
|
||||
}), character({ name: 'foo' }), main);
|
||||
|
||||
expect(pony.options!.hold).undefined;
|
||||
});
|
||||
@@ -143,7 +146,7 @@ describe('characterUtils', () => {
|
||||
|
||||
updatePony(entity1, account({ _id: genObjectId() }), character({ name: 'Foo', info: OFFLINE_PONY }));
|
||||
updatePony(
|
||||
entity2, account({ _id: '' }), character({ name: 'Bar', info: 'DAT/AADapSD/1wC7Li42QAJkJEAT8ADAAxADhAYQFGAQAA==' }));
|
||||
entity2, account({ _id: new Types.ObjectId('') }), character({ name: 'Bar', info: 'DAT/AADapSD/1wC7Li42QAJkJEAT8ADAAxADhAYQFGAQAA==' }));
|
||||
|
||||
expect(entity1.canFly).false;
|
||||
expect(entity2.canFly).true;
|
||||
|
||||
@@ -99,7 +99,7 @@ describe('liveEndPoint', () => {
|
||||
const find = stubFind([{ _id: 'aaa' }, { _id: 'bbb' }]);
|
||||
|
||||
return liveEndPoint.getAll()
|
||||
.then(() => assert.calledWithMatch(find, { updatedAt: { $gt: new Date(0) } }, '_id name desc'));
|
||||
.then(() => assert.calledWithMatch(find as any, { updatedAt: { $gt: new Date(0) } }, '_id name desc'));
|
||||
});
|
||||
|
||||
it('passes given timestamp to find method', () => {
|
||||
@@ -107,7 +107,7 @@ describe('liveEndPoint', () => {
|
||||
const find = stubFind([{ _id: 'aaa' }, { _id: 'bbb' }]);
|
||||
|
||||
return liveEndPoint.getAll(timestamp)
|
||||
.then(() => assert.calledWithMatch(find, { updatedAt: { $gt: new Date(timestamp) } }, '_id name desc'));
|
||||
.then(() => assert.calledWithMatch(find as any, { updatedAt: { $gt: new Date(timestamp) } }, '_id name desc'));
|
||||
});
|
||||
|
||||
describe('if items exceed limit', () => {
|
||||
|
||||
@@ -12,7 +12,7 @@ describe('originUtils', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
clock = useFakeTimers();
|
||||
update = stub(Account, 'update').returns({ exec: () => Promise.resolve() } as any);
|
||||
update = stub(Account as any, 'update').returns({ exec: () => Promise.resolve() } as any);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -55,11 +55,11 @@ describe('serverUtils', () => {
|
||||
const id = genId();
|
||||
|
||||
expect(toPonyObject(character({
|
||||
_id: Types.ObjectId(id),
|
||||
_id: new Types.ObjectId(id),
|
||||
name: 'foo',
|
||||
desc: 'aaa',
|
||||
info: 'info',
|
||||
site: Types.ObjectId('000000000000000000000002'),
|
||||
site: new Types.ObjectId('000000000000000000000002'),
|
||||
tag: 'tag',
|
||||
lastUsed: new Date(123),
|
||||
}))).eql({
|
||||
@@ -79,7 +79,7 @@ describe('serverUtils', () => {
|
||||
const id = genId();
|
||||
|
||||
expect(toPonyObject(character({
|
||||
_id: Types.ObjectId(id),
|
||||
_id: new Types.ObjectId(id),
|
||||
name: 'foo',
|
||||
}))).eql({
|
||||
id: id,
|
||||
@@ -96,7 +96,7 @@ describe('serverUtils', () => {
|
||||
|
||||
it('sets hide support field', () => {
|
||||
const output = toPonyObject(character({
|
||||
_id: Types.ObjectId(genId()),
|
||||
_id: new Types.ObjectId(genId()),
|
||||
name: 'foo',
|
||||
flags: CharacterFlags.HideSupport,
|
||||
}));
|
||||
@@ -106,7 +106,7 @@ describe('serverUtils', () => {
|
||||
|
||||
it('sets respawn at spawn field', () => {
|
||||
const output = toPonyObject(character({
|
||||
_id: Types.ObjectId(genId()),
|
||||
_id: new Types.ObjectId(genId()),
|
||||
name: 'foo',
|
||||
flags: CharacterFlags.RespawnAtSpawn,
|
||||
}));
|
||||
@@ -124,11 +124,11 @@ describe('serverUtils', () => {
|
||||
const id = genId();
|
||||
|
||||
expect(toPonyObjectAdmin(character({
|
||||
_id: Types.ObjectId(id),
|
||||
_id: new Types.ObjectId(id),
|
||||
name: 'foo',
|
||||
desc: 'aaa',
|
||||
info: 'info',
|
||||
site: Types.ObjectId('000000000000000000000001'),
|
||||
site: new Types.ObjectId('000000000000000000000001'),
|
||||
tag: 'tag',
|
||||
lastUsed: new Date(123),
|
||||
creator: 'foo bar',
|
||||
@@ -156,7 +156,7 @@ describe('serverUtils', () => {
|
||||
const id = genId();
|
||||
|
||||
expect(toSocialSite(auth({
|
||||
_id: Types.ObjectId(id),
|
||||
_id: new Types.ObjectId(id),
|
||||
name: 'foo',
|
||||
provider: 'github',
|
||||
url: 'foo.com',
|
||||
|
||||
@@ -29,7 +29,6 @@ describe('SupporterInvitesService', () => {
|
||||
countDocuments: stub(),
|
||||
create: stub(),
|
||||
deleteOne: stub(),
|
||||
deleteMany: stub(),
|
||||
updateMany: stub(),
|
||||
} as any;
|
||||
log = stub();
|
||||
@@ -43,7 +42,7 @@ describe('SupporterInvitesService', () => {
|
||||
describe('getInvites()', () => {
|
||||
it('returns all invites from given client', async () => {
|
||||
const client = mockClient();
|
||||
model.find.withArgs({ source: client.account._id }).returns({
|
||||
model.find.withArgs({ source: client.account._id } as any).returns({
|
||||
exec: stub().resolves([
|
||||
{ _id: 'foo', name: 'Foo', info: 'info', active: true, anotherField: 'xyz' },
|
||||
])
|
||||
@@ -292,7 +291,7 @@ describe('SupporterInvitesService', () => {
|
||||
|
||||
await service.uninvite(requester, 'foobar');
|
||||
|
||||
assert.calledWithMatch(model.deleteOne, { _id: 'foobar', source: requester.account._id });
|
||||
assert.calledWithMatch(model.deleteOne as any, { _id: 'foobar', source: requester.account._id });
|
||||
});
|
||||
});
|
||||
|
||||
@@ -312,12 +311,12 @@ describe('SupporterInvitesService', () => {
|
||||
{ _id: 'aaa', active: false, source: { supporter: SupporterFlags.Supporter1 } },
|
||||
{ _id: 'bbb', active: true, source: { supporter: SupporterFlags.Supporter1 } },
|
||||
];
|
||||
model.find.withArgs({}, '_id active')
|
||||
model.find.withArgs({} as any, '_id active')
|
||||
.returns({
|
||||
populate: stub().withArgs('source', '_id supporter patreon roles')
|
||||
.returns({ lean: stub().returns(exec(data)) })
|
||||
} as any);
|
||||
model.deleteMany.returns({ exec: stub() } as any);
|
||||
model.deleteOne.returns({ exec: stub() } as any);
|
||||
model.updateMany.returns({ exec: stub() } as any);
|
||||
|
||||
await updateSupporterInvites(model as any);
|
||||
@@ -331,7 +330,7 @@ describe('SupporterInvitesService', () => {
|
||||
{ _id: 'bbb', active: true, source: {} },
|
||||
];
|
||||
model.find.returns({ populate: stub().returns({ lean: stub().returns(exec(data)) }) } as any);
|
||||
model.deleteMany.returns({ exec: stub() } as any);
|
||||
model.deleteOne.returns({ exec: stub() } as any);
|
||||
model.updateMany.returns({ exec: stub() } as any);
|
||||
|
||||
await updateSupporterInvites(model as any);
|
||||
@@ -345,7 +344,7 @@ describe('SupporterInvitesService', () => {
|
||||
{ _id: 'bbb', active: true, source: {} },
|
||||
];
|
||||
model.find.returns({ populate: stub().returns({ lean: stub().returns(exec(data)) }) } as any);
|
||||
model.deleteMany.returns({ exec: stub() } as any);
|
||||
model.deleteOne.returns({ exec: stub() } as any);
|
||||
model.updateMany.returns({ exec: stub() } as any);
|
||||
|
||||
await updateSupporterInvites(model as any);
|
||||
@@ -360,7 +359,7 @@ describe('SupporterInvitesService', () => {
|
||||
{ _id: 'bbb', active: false, source: {} },
|
||||
];
|
||||
model.find.returns({ populate: stub().returns({ lean: stub().returns(exec(data)) }) } as any);
|
||||
model.deleteMany.returns({ exec: stub() } as any);
|
||||
model.deleteOne.returns({ exec: stub() } as any);
|
||||
model.updateMany.returns({ exec: stub() } as any);
|
||||
|
||||
await updateSupporterInvites(model as any);
|
||||
@@ -370,12 +369,12 @@ describe('SupporterInvitesService', () => {
|
||||
|
||||
it('removes old inactive entries', async () => {
|
||||
model.find.returns({ populate: stub().returns({ lean: stub().returns({ exec: stub() }) }) } as any);
|
||||
model.deleteMany.returns({ exec: stub() } as any);
|
||||
model.deleteOne.returns({ exec: stub() } as any);
|
||||
clock.setSystemTime(123 * DAY);
|
||||
|
||||
await updateSupporterInvites(model as any);
|
||||
|
||||
assert.calledWithMatch(model.deleteMany, { active: false, updatedAt: { $lt: new Date(23 * DAY) } });
|
||||
assert.calledWithMatch(model.deleteOne as any, { active: false, updatedAt: { $lt: new Date(23 * DAY) } });
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user