forked from OpenWF/SpaceNinjaServer
merge upstream
This commit is contained in:
commit
d47fd344e6
@ -3,3 +3,6 @@
|
|||||||
Dockerfile*
|
Dockerfile*
|
||||||
.*
|
.*
|
||||||
docker-data/
|
docker-data/
|
||||||
|
node_modules/
|
||||||
|
static/data/
|
||||||
|
logs/
|
||||||
|
|||||||
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
@ -12,14 +12,13 @@ jobs:
|
|||||||
- name: Setup Node.js environment
|
- name: Setup Node.js environment
|
||||||
uses: actions/setup-node@v4.0.2
|
uses: actions/setup-node@v4.0.2
|
||||||
with:
|
with:
|
||||||
node-version: ">=20.6.0"
|
node-version: ">=20.18.1"
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: cp config-vanilla.json config.json
|
- run: cp config-vanilla.json config.json
|
||||||
- run: npm run verify
|
- run: npm run verify
|
||||||
- run: npm run lint:ci
|
- run: npm run lint:ci
|
||||||
- run: npm run prettier
|
- run: npm run prettier
|
||||||
- run: npm run update-translations
|
- run: npm run update-translations
|
||||||
- run: npm run fix-imports
|
|
||||||
- name: Fail if there are uncommitted changes
|
- name: Fail if there are uncommitted changes
|
||||||
run: |
|
run: |
|
||||||
if [[ -n "$(git status --porcelain)" ]]; then
|
if [[ -n "$(git status --porcelain)" ]]; then
|
||||||
|
|||||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"typescript.preferences.preferTypeOnlyAutoImports": true
|
||||||
|
}
|
||||||
@ -5,8 +5,7 @@ RUN apk add --no-cache bash jq
|
|||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN npm i --omit=dev
|
RUN npm i --omit=dev --omit=optional
|
||||||
RUN npm run build
|
|
||||||
RUN date '+%d %B %Y' > BUILD_DATE
|
RUN date '+%d %B %Y' > BUILD_DATE
|
||||||
|
|
||||||
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
||||||
|
|||||||
@ -2,24 +2,27 @@
|
|||||||
|
|
||||||
echo Updating SpaceNinjaServer...
|
echo Updating SpaceNinjaServer...
|
||||||
git fetch --prune
|
git fetch --prune
|
||||||
git stash
|
|
||||||
git checkout -f origin/main
|
|
||||||
|
|
||||||
if exist static\data\0\ (
|
|
||||||
echo Updating stripped assets...
|
|
||||||
cd static\data\0\
|
|
||||||
git pull
|
|
||||||
cd ..\..\..\
|
|
||||||
)
|
|
||||||
|
|
||||||
echo Updating dependencies...
|
|
||||||
call npm i --omit=dev
|
|
||||||
|
|
||||||
call npm run build
|
|
||||||
if %errorlevel% == 0 (
|
if %errorlevel% == 0 (
|
||||||
call npm run start
|
git stash
|
||||||
echo SpaceNinjaServer seems to have crashed.
|
git checkout -f origin/main
|
||||||
|
|
||||||
|
if exist static\data\0\ (
|
||||||
|
echo Updating stripped assets...
|
||||||
|
cd static\data\0\
|
||||||
|
git pull
|
||||||
|
cd ..\..\..\
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Updating dependencies...
|
||||||
|
call npm i --omit=dev
|
||||||
|
|
||||||
|
call npm run build
|
||||||
|
if %errorlevel% == 0 (
|
||||||
|
call npm run start
|
||||||
|
echo SpaceNinjaServer seems to have crashed.
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
:a
|
:a
|
||||||
pause > nul
|
pause > nul
|
||||||
goto a
|
goto a
|
||||||
|
|||||||
@ -2,22 +2,23 @@
|
|||||||
|
|
||||||
echo "Updating SpaceNinjaServer..."
|
echo "Updating SpaceNinjaServer..."
|
||||||
git fetch --prune
|
git fetch --prune
|
||||||
git stash
|
|
||||||
git checkout -f origin/main
|
|
||||||
|
|
||||||
if [ -d "static/data/0/" ]; then
|
|
||||||
echo "Updating stripped assets..."
|
|
||||||
cd static/data/0/
|
|
||||||
git pull
|
|
||||||
cd ../../../
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Updating dependencies..."
|
|
||||||
npm i --omit=dev
|
|
||||||
|
|
||||||
npm run build
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
npm run start
|
git stash
|
||||||
echo "SpaceNinjaServer seems to have crashed."
|
git checkout -f origin/main
|
||||||
fi
|
|
||||||
|
|
||||||
|
if [ -d "static/data/0/" ]; then
|
||||||
|
echo "Updating stripped assets..."
|
||||||
|
cd static/data/0/
|
||||||
|
git pull
|
||||||
|
cd ../../../
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Updating dependencies..."
|
||||||
|
npm i --omit=dev
|
||||||
|
|
||||||
|
npm run build
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
npm run start
|
||||||
|
echo "SpaceNinjaServer seems to have crashed."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|||||||
@ -11,7 +11,6 @@
|
|||||||
"administratorNames": [],
|
"administratorNames": [],
|
||||||
"autoCreateAccount": true,
|
"autoCreateAccount": true,
|
||||||
"skipTutorial": false,
|
"skipTutorial": false,
|
||||||
"skipAllDialogue": false,
|
|
||||||
"unlockAllScans": false,
|
"unlockAllScans": false,
|
||||||
"unlockAllShipFeatures": false,
|
"unlockAllShipFeatures": false,
|
||||||
"unlockAllShipDecorations": false,
|
"unlockAllShipDecorations": false,
|
||||||
@ -19,8 +18,6 @@
|
|||||||
"unlockAllSkins": false,
|
"unlockAllSkins": false,
|
||||||
"unlockAllCapturaScenes": false,
|
"unlockAllCapturaScenes": false,
|
||||||
"fullyStockedVendors": false,
|
"fullyStockedVendors": false,
|
||||||
"baroAlwaysAvailable": false,
|
|
||||||
"baroFullyStocked": false,
|
|
||||||
"unlockAllProfitTakerStages": false,
|
"unlockAllProfitTakerStages": false,
|
||||||
"skipClanKeyCrafting": false,
|
"skipClanKeyCrafting": false,
|
||||||
"noDojoRoomBuildStage": false,
|
"noDojoRoomBuildStage": false,
|
||||||
@ -29,9 +26,7 @@
|
|||||||
"noDojoResearchCosts": false,
|
"noDojoResearchCosts": false,
|
||||||
"noDojoResearchTime": false,
|
"noDojoResearchTime": false,
|
||||||
"fastClanAscension": false,
|
"fastClanAscension": false,
|
||||||
"missionsCanGiveAllRelics": false,
|
|
||||||
"unlockAllSimarisResearchEntries": false,
|
"unlockAllSimarisResearchEntries": false,
|
||||||
"disableDailyTribute": false,
|
|
||||||
"spoofMasteryRank": -1,
|
"spoofMasteryRank": -1,
|
||||||
"relicRewardItemCountMultiplier": 1,
|
"relicRewardItemCountMultiplier": 1,
|
||||||
"nightwaveStandingMultiplier": 1,
|
"nightwaveStandingMultiplier": 1,
|
||||||
@ -45,6 +40,10 @@
|
|||||||
"affinityBoost": false,
|
"affinityBoost": false,
|
||||||
"resourceBoost": false,
|
"resourceBoost": false,
|
||||||
"tennoLiveRelay": false,
|
"tennoLiveRelay": false,
|
||||||
|
"baroTennoConRelay": false,
|
||||||
|
"baroAlwaysAvailable": false,
|
||||||
|
"baroFullyStocked": false,
|
||||||
|
"varziaFullyStocked": false,
|
||||||
"wolfHunt": false,
|
"wolfHunt": false,
|
||||||
"orphixVenom": false,
|
"orphixVenom": false,
|
||||||
"longShadow": false,
|
"longShadow": false,
|
||||||
@ -71,10 +70,9 @@
|
|||||||
"duviriOverride": "",
|
"duviriOverride": "",
|
||||||
"nightwaveOverride": "",
|
"nightwaveOverride": "",
|
||||||
"allTheFissures": "",
|
"allTheFissures": "",
|
||||||
"circuitGameModes": null,
|
|
||||||
"darvoStockMultiplier": 1,
|
|
||||||
"varziaOverride": "",
|
"varziaOverride": "",
|
||||||
"varziaFullyStocked": false
|
"circuitGameModes": null,
|
||||||
|
"darvoStockMultiplier": 1
|
||||||
},
|
},
|
||||||
"dev": {
|
"dev": {
|
||||||
"keepVendorsExpired": false
|
"keepVendorsExpired": false
|
||||||
|
|||||||
@ -5,4 +5,4 @@ if [ ! -f conf/config.json ]; then
|
|||||||
jq --arg value "mongodb://openwfagent:spaceninjaserver@mongodb:27017/" '.mongodbUrl = $value' /app/config-vanilla.json > /app/conf/config.json
|
jq --arg value "mongodb://openwfagent:spaceninjaserver@mongodb:27017/" '.mongodbUrl = $value' /app/config-vanilla.json > /app/conf/config.json
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec npm run start -- --configPath conf/config.json
|
exec npm run raw -- --configPath conf/config.json
|
||||||
|
|||||||
294
package-lock.json
generated
294
package-lock.json
generated
@ -9,11 +9,6 @@
|
|||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"license": "GNU",
|
"license": "GNU",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^5",
|
|
||||||
"@types/morgan": "^1.9.9",
|
|
||||||
"@types/websocket": "^1.0.10",
|
|
||||||
"@types/ws": "^8.18.1",
|
|
||||||
"@typescript/native-preview": "^7.0.0-dev.20250625.1",
|
|
||||||
"chokidar": "^4.0.3",
|
"chokidar": "^4.0.3",
|
||||||
"crc-32": "^1.2.2",
|
"crc-32": "^1.2.2",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
@ -21,9 +16,8 @@
|
|||||||
"mongoose": "^8.11.0",
|
"mongoose": "^8.11.0",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"ncp": "^2.0.0",
|
"ncp": "^2.0.0",
|
||||||
"typescript": "^5.5",
|
|
||||||
"undici": "^7.10.0",
|
"undici": "^7.10.0",
|
||||||
"warframe-public-export-plus": "^0.5.82",
|
"warframe-public-export-plus": "^0.5.83",
|
||||||
"warframe-riven-info": "^0.1.2",
|
"warframe-riven-info": "^0.1.2",
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
"winston-daily-rotate-file": "^5.0.0",
|
"winston-daily-rotate-file": "^5.0.0",
|
||||||
@ -38,6 +32,14 @@
|
|||||||
"eslint-plugin-prettier": "^5.2.5",
|
"eslint-plugin-prettier": "^5.2.5",
|
||||||
"prettier": "^3.5.3",
|
"prettier": "^3.5.3",
|
||||||
"tree-kill": "^1.2.2"
|
"tree-kill": "^1.2.2"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@types/express": "^5",
|
||||||
|
"@types/morgan": "^1.9.9",
|
||||||
|
"@types/websocket": "^1.0.10",
|
||||||
|
"@types/ws": "^8.18.1",
|
||||||
|
"@typescript/native-preview": "^7.0.0-dev.20250625.1",
|
||||||
|
"typescript": "^5.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@colors/colors": {
|
"node_modules/@colors/colors": {
|
||||||
@ -349,6 +351,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz",
|
||||||
"integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==",
|
"integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/connect": "*",
|
"@types/connect": "*",
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
@ -359,6 +362,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
|
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
|
||||||
"integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
|
"integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
@ -368,6 +372,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz",
|
||||||
"integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==",
|
"integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/body-parser": "*",
|
"@types/body-parser": "*",
|
||||||
"@types/express-serve-static-core": "^5.0.0",
|
"@types/express-serve-static-core": "^5.0.0",
|
||||||
@ -379,6 +384,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz",
|
||||||
"integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==",
|
"integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "*",
|
"@types/node": "*",
|
||||||
"@types/qs": "*",
|
"@types/qs": "*",
|
||||||
@ -390,7 +396,8 @@
|
|||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz",
|
||||||
"integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",
|
"integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/json5": {
|
"node_modules/@types/json5": {
|
||||||
"version": "0.0.29",
|
"version": "0.0.29",
|
||||||
@ -403,43 +410,49 @@
|
|||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
|
||||||
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
|
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/morgan": {
|
"node_modules/@types/morgan": {
|
||||||
"version": "1.9.10",
|
"version": "1.9.10",
|
||||||
"resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz",
|
"resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz",
|
||||||
"integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==",
|
"integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "24.0.15",
|
"version": "24.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.15.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz",
|
||||||
"integrity": "sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==",
|
"integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~7.8.0"
|
"undici-types": "~7.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/qs": {
|
"node_modules/@types/qs": {
|
||||||
"version": "6.14.0",
|
"version": "6.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
|
||||||
"integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
|
"integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/range-parser": {
|
"node_modules/@types/range-parser": {
|
||||||
"version": "1.2.7",
|
"version": "1.2.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
|
||||||
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
|
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/send": {
|
"node_modules/@types/send": {
|
||||||
"version": "0.17.5",
|
"version": "0.17.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz",
|
||||||
"integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==",
|
"integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/mime": "^1",
|
"@types/mime": "^1",
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
@ -450,6 +463,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz",
|
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz",
|
||||||
"integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==",
|
"integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/http-errors": "*",
|
"@types/http-errors": "*",
|
||||||
"@types/node": "*",
|
"@types/node": "*",
|
||||||
@ -473,6 +487,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.10.tgz",
|
"resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.10.tgz",
|
||||||
"integrity": "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==",
|
"integrity": "sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
@ -491,22 +506,23 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
|
||||||
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
|
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz",
|
||||||
"integrity": "sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==",
|
"integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.10.0",
|
"@eslint-community/regexpp": "^4.10.0",
|
||||||
"@typescript-eslint/scope-manager": "8.37.0",
|
"@typescript-eslint/scope-manager": "8.41.0",
|
||||||
"@typescript-eslint/type-utils": "8.37.0",
|
"@typescript-eslint/type-utils": "8.41.0",
|
||||||
"@typescript-eslint/utils": "8.37.0",
|
"@typescript-eslint/utils": "8.41.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.37.0",
|
"@typescript-eslint/visitor-keys": "8.41.0",
|
||||||
"graphemer": "^1.4.0",
|
"graphemer": "^1.4.0",
|
||||||
"ignore": "^7.0.0",
|
"ignore": "^7.0.0",
|
||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
@ -520,22 +536,22 @@
|
|||||||
"url": "https://opencollective.com/typescript-eslint"
|
"url": "https://opencollective.com/typescript-eslint"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@typescript-eslint/parser": "^8.37.0",
|
"@typescript-eslint/parser": "^8.41.0",
|
||||||
"eslint": "^8.57.0 || ^9.0.0",
|
"eslint": "^8.57.0 || ^9.0.0",
|
||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.41.0.tgz",
|
||||||
"integrity": "sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==",
|
"integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "8.37.0",
|
"@typescript-eslint/scope-manager": "8.41.0",
|
||||||
"@typescript-eslint/types": "8.37.0",
|
"@typescript-eslint/types": "8.41.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.37.0",
|
"@typescript-eslint/typescript-estree": "8.41.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.37.0",
|
"@typescript-eslint/visitor-keys": "8.41.0",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -547,18 +563,18 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": "^8.57.0 || ^9.0.0",
|
"eslint": "^8.57.0 || ^9.0.0",
|
||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/project-service": {
|
"node_modules/@typescript-eslint/project-service": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz",
|
||||||
"integrity": "sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==",
|
"integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/tsconfig-utils": "^8.37.0",
|
"@typescript-eslint/tsconfig-utils": "^8.41.0",
|
||||||
"@typescript-eslint/types": "^8.37.0",
|
"@typescript-eslint/types": "^8.41.0",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -569,18 +585,18 @@
|
|||||||
"url": "https://opencollective.com/typescript-eslint"
|
"url": "https://opencollective.com/typescript-eslint"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz",
|
||||||
"integrity": "sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==",
|
"integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.37.0",
|
"@typescript-eslint/types": "8.41.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.37.0"
|
"@typescript-eslint/visitor-keys": "8.41.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@ -591,9 +607,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/tsconfig-utils": {
|
"node_modules/@typescript-eslint/tsconfig-utils": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz",
|
||||||
"integrity": "sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==",
|
"integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -604,19 +620,19 @@
|
|||||||
"url": "https://opencollective.com/typescript-eslint"
|
"url": "https://opencollective.com/typescript-eslint"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz",
|
||||||
"integrity": "sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==",
|
"integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.37.0",
|
"@typescript-eslint/types": "8.41.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.37.0",
|
"@typescript-eslint/typescript-estree": "8.41.0",
|
||||||
"@typescript-eslint/utils": "8.37.0",
|
"@typescript-eslint/utils": "8.41.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"ts-api-utils": "^2.1.0"
|
"ts-api-utils": "^2.1.0"
|
||||||
},
|
},
|
||||||
@ -629,13 +645,13 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": "^8.57.0 || ^9.0.0",
|
"eslint": "^8.57.0 || ^9.0.0",
|
||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz",
|
||||||
"integrity": "sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==",
|
"integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -647,16 +663,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz",
|
||||||
"integrity": "sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==",
|
"integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/project-service": "8.37.0",
|
"@typescript-eslint/project-service": "8.41.0",
|
||||||
"@typescript-eslint/tsconfig-utils": "8.37.0",
|
"@typescript-eslint/tsconfig-utils": "8.41.0",
|
||||||
"@typescript-eslint/types": "8.37.0",
|
"@typescript-eslint/types": "8.41.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.37.0",
|
"@typescript-eslint/visitor-keys": "8.41.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
@ -672,20 +688,20 @@
|
|||||||
"url": "https://opencollective.com/typescript-eslint"
|
"url": "https://opencollective.com/typescript-eslint"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz",
|
||||||
"integrity": "sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==",
|
"integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.7.0",
|
"@eslint-community/eslint-utils": "^4.7.0",
|
||||||
"@typescript-eslint/scope-manager": "8.37.0",
|
"@typescript-eslint/scope-manager": "8.41.0",
|
||||||
"@typescript-eslint/types": "8.37.0",
|
"@typescript-eslint/types": "8.41.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.37.0"
|
"@typescript-eslint/typescript-estree": "8.41.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@ -696,17 +712,17 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": "^8.57.0 || ^9.0.0",
|
"eslint": "^8.57.0 || ^9.0.0",
|
||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "8.37.0",
|
"version": "8.41.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.37.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz",
|
||||||
"integrity": "sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==",
|
"integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.37.0",
|
"@typescript-eslint/types": "8.41.0",
|
||||||
"eslint-visitor-keys": "^4.2.1"
|
"eslint-visitor-keys": "^4.2.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -731,10 +747,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview": {
|
"node_modules/@typescript/native-preview": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview/-/native-preview-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview/-/native-preview-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-23wUnyj+BfVMSty9nsgTcVSlmI1ToS8P8qKS2g7ss0DUrnXN2tiJtbffDpmafMLEKEtfY42mVjmHPrZXHPdaOg==",
|
"integrity": "sha512-+NuzOfk/lu6pLYSCio+R7uzJ9pfOasc1fshxVmLp6wgcB8yuUYYvBaT7CoHapUnNBYZXkJ9u0UOECnq3dbzgSQ==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
"optional": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsgo": "bin/tsgo.js"
|
"tsgo": "bin/tsgo.js"
|
||||||
},
|
},
|
||||||
@ -742,19 +759,19 @@
|
|||||||
"node": ">=20.6.0"
|
"node": ">=20.6.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@typescript/native-preview-darwin-arm64": "7.0.0-dev.20250719.1",
|
"@typescript/native-preview-darwin-arm64": "7.0.0-dev.20250826.1",
|
||||||
"@typescript/native-preview-darwin-x64": "7.0.0-dev.20250719.1",
|
"@typescript/native-preview-darwin-x64": "7.0.0-dev.20250826.1",
|
||||||
"@typescript/native-preview-linux-arm": "7.0.0-dev.20250719.1",
|
"@typescript/native-preview-linux-arm": "7.0.0-dev.20250826.1",
|
||||||
"@typescript/native-preview-linux-arm64": "7.0.0-dev.20250719.1",
|
"@typescript/native-preview-linux-arm64": "7.0.0-dev.20250826.1",
|
||||||
"@typescript/native-preview-linux-x64": "7.0.0-dev.20250719.1",
|
"@typescript/native-preview-linux-x64": "7.0.0-dev.20250826.1",
|
||||||
"@typescript/native-preview-win32-arm64": "7.0.0-dev.20250719.1",
|
"@typescript/native-preview-win32-arm64": "7.0.0-dev.20250826.1",
|
||||||
"@typescript/native-preview-win32-x64": "7.0.0-dev.20250719.1"
|
"@typescript/native-preview-win32-x64": "7.0.0-dev.20250826.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview-darwin-arm64": {
|
"node_modules/@typescript/native-preview-darwin-arm64": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-8BOaK/9MJx6qN8DSj7ooDQ56j1HTdGCgs5gzT+rOfv1dJZuhy96rFe1DDd3RwX3ufrNpuLE969GM1tmhaHGLag==",
|
"integrity": "sha512-UTkmzj0+NpraW4GcgG5PECJZ25SASkiK7TP90lUx9/RZRidrClhHqyf/A3NPpI+1pqoKqGXxIt3+jV+BY15KyQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -768,9 +785,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview-darwin-x64": {
|
"node_modules/@typescript/native-preview-darwin-x64": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-cs+/yOFQlkbT5Z5SY8gr5TOk+mporqYAHgRBMXeWWOOStIA1gH3iLKO3aLw85GclgmFBEoFaOTm61RI/ugwD3w==",
|
"integrity": "sha512-9UyLnKkJMW2T118FmS8Jj1djWDXgXGz2d9gUA/d+AdTAOaTBc1TmWhiUVcyKgIzG3+OAFIY+pVLeBWxNpFQu4Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -784,9 +801,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview-linux-arm": {
|
"node_modules/@typescript/native-preview-linux-arm": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-KDRPvXXgks6JLf1zO4KCI4Zw1ZjAS3jM+YxF5EdTnw2v6+Hff+ritUo4FQHbgQOo2OLnmqity3Qsxxb5i4DaRg==",
|
"integrity": "sha512-CRH103rrFme+V917lftxtcttiT69fDNZPcnNzHeuj1z6/G3eIY6Hmon4xQb/Q4CjgblcO/BIEz6zDVphlas3dA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -800,9 +817,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview-linux-arm64": {
|
"node_modules/@typescript/native-preview-linux-arm64": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-Yv8xeongAOJRy8UQaPH6TVbje+IXpu24KgIffjNW90ygMAJSrCNZXjnkRSXAelydD8RPCEas4O+qJR0Z2vElUQ==",
|
"integrity": "sha512-GFcWo//t482UhZW+K1Nqlp/eOO2NS1uAIR77UyPn1FK/NOQBaxg8w4AZk0OG5ZHzvut4iZwQa2Gp+8zbNnfAIA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -816,9 +833,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview-linux-x64": {
|
"node_modules/@typescript/native-preview-linux-x64": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-GsGCL8KubbCOXfD9CyhHkMgZQVBLVXfeCnRID5UIgessmDBnd3Q158wbKIEZSLHVK2PffP9wKdfWMBGnU1X5BQ==",
|
"integrity": "sha512-ePQiUwa9YpUUc5g8lu77kCOgZyAseJn14B+5Uwz7n7CFPJn48L0mcKvjr3jVP8sER0r6rFmndEr2uyHnc+Qj2w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -832,9 +849,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview-win32-arm64": {
|
"node_modules/@typescript/native-preview-win32-arm64": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-TP7ulNmZdAd2jgVLrIsmUoxwvQnpzsdWlRnTr0R6wEj+4Ob4Moyl75/1DrIkXO7yC6zaklhzLqgbHPz+H37ffg==",
|
"integrity": "sha512-kL3qH6CeOPdtAgZw1cuFgwpyup3VSkAM+ayZGk08SM42Zd90VMTDf736kXm/xxAcpvmCQ0YrH1FDIG0dPiRCAw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -848,9 +865,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript/native-preview-win32-x64": {
|
"node_modules/@typescript/native-preview-win32-x64": {
|
||||||
"version": "7.0.0-dev.20250719.1",
|
"version": "7.0.0-dev.20250826.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20250719.1.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20250826.1.tgz",
|
||||||
"integrity": "sha512-QIQAbcojUatTTxPriscWi7PBem5GsSKHS4lc1tosLXeC1o3jYITu0MHjFRtXyyO91I0xhJKE899Oh3Y/lqmn4A==",
|
"integrity": "sha512-WPiCnQDz64ZtwUEZ/ezXLHjhZTOetdfZI16ZbjZGkeZ5O3DNMaHrwzvvqqIq7gPxICEOK+6pM9eQ92I6wDq0qQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -2287,9 +2304,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-prettier": {
|
"node_modules/eslint-plugin-prettier": {
|
||||||
"version": "5.5.3",
|
"version": "5.5.4",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz",
|
||||||
"integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==",
|
"integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -3833,9 +3850,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mongodb": {
|
"node_modules/mongodb": {
|
||||||
"version": "6.17.0",
|
"version": "6.18.0",
|
||||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.18.0.tgz",
|
||||||
"integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==",
|
"integrity": "sha512-fO5ttN9VC8P0F5fqtQmclAkgXZxbIkYRTUi1j8JO6IYwvamkhtYDilJr35jOPELR49zqCJgXZWwCtW7B+TM8vQ==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mongodb-js/saslprep": "^1.1.9",
|
"@mongodb-js/saslprep": "^1.1.9",
|
||||||
@ -3889,14 +3906,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mongoose": {
|
"node_modules/mongoose": {
|
||||||
"version": "8.16.4",
|
"version": "8.18.0",
|
||||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.16.4.tgz",
|
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.18.0.tgz",
|
||||||
"integrity": "sha512-jslgdQ8pY2vcNSKPv3Dbi5ogo/NT8zcvf6kPDyD8Sdsjsa1at3AFAF0F5PT+jySPGSPbvlNaQ49nT9h+Kx2UDA==",
|
"integrity": "sha512-3TixPihQKBdyaYDeJqRjzgb86KbilEH07JmzV8SoSjgoskNTpa6oTBmDxeoF9p8YnWQoz7shnCyPkSV/48y3yw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bson": "^6.10.4",
|
"bson": "^6.10.4",
|
||||||
"kareem": "2.6.3",
|
"kareem": "2.6.3",
|
||||||
"mongodb": "~6.17.0",
|
"mongodb": "~6.18.0",
|
||||||
"mpath": "0.9.0",
|
"mpath": "0.9.0",
|
||||||
"mquery": "5.0.0",
|
"mquery": "5.0.0",
|
||||||
"ms": "2.1.3",
|
"ms": "2.1.3",
|
||||||
@ -3981,9 +3998,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/napi-postinstall": {
|
"node_modules/napi-postinstall": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz",
|
||||||
"integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==",
|
"integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
@ -5158,11 +5175,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tinyglobby/node_modules/fdir": {
|
"node_modules/tinyglobby/node_modules/fdir": {
|
||||||
"version": "6.4.6",
|
"version": "6.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
|
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
|
||||||
"integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
|
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"picomatch": "^3 || ^4"
|
"picomatch": "^3 || ^4"
|
||||||
},
|
},
|
||||||
@ -5391,9 +5411,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "5.8.3",
|
"version": "5.9.2",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
|
||||||
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
|
||||||
|
"devOptional": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
@ -5423,19 +5444,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici": {
|
"node_modules/undici": {
|
||||||
"version": "7.12.0",
|
"version": "7.15.0",
|
||||||
"resolved": "https://registry.npmjs.org/undici/-/undici-7.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/undici/-/undici-7.15.0.tgz",
|
||||||
"integrity": "sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==",
|
"integrity": "sha512-7oZJCPvvMvTd0OlqWsIxTuItTpJBpU1tcbVl24FMn3xt3+VSunwUasmfPJRE57oNO1KsZ4PgA1xTdAX4hq8NyQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=20.18.1"
|
"node": ">=20.18.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici-types": {
|
"node_modules/undici-types": {
|
||||||
"version": "7.8.0",
|
"version": "7.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
|
||||||
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/unpipe": {
|
"node_modules/unpipe": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -5507,9 +5529,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/warframe-public-export-plus": {
|
"node_modules/warframe-public-export-plus": {
|
||||||
"version": "0.5.82",
|
"version": "0.5.84",
|
||||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.82.tgz",
|
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.84.tgz",
|
||||||
"integrity": "sha512-hZa9KpMDA2wy0Hn03y9Nfyzbjxer1I6Rvb52b363uzrqS0cvDO56rhiDo71JbraeV34qF6yo+Vca1zwFmw2srA=="
|
"integrity": "sha512-ZpI1Y5CgWDmCwM4/oQpv9u0GD6KFvsJ9f1vJVXYhm5VD9DdOJcFzXgXgg98HXJ5JHbO16ZGIj83117qdpd0RQA=="
|
||||||
},
|
},
|
||||||
"node_modules/warframe-riven-info": {
|
"node_modules/warframe-riven-info": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
|
|||||||
34
package.json
34
package.json
@ -4,33 +4,29 @@
|
|||||||
"description": "WF Emulator",
|
"description": "WF Emulator",
|
||||||
"main": "index.ts",
|
"main": "index.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node --enable-source-maps --import ./build/src/pathman.js build/src/index.js",
|
"start": "node --enable-source-maps build/src/index.js",
|
||||||
"build": "tsgo --sourceMap && ncp static/webui build/static/webui",
|
"build": "tsgo --sourceMap && ncp static/webui build/static/webui",
|
||||||
"build:tsc": "tsc --incremental --sourceMap && ncp static/webui build/static/webui",
|
"build:tsc": "tsc --incremental --sourceMap && ncp static/webui build/static/webui",
|
||||||
"build:dev": "tsgo --sourceMap",
|
"build:dev": "tsgo --sourceMap",
|
||||||
"build:dev:tsc": "tsc --incremental --sourceMap",
|
"build:dev:tsc": "tsc --incremental --sourceMap",
|
||||||
"build-and-start": "npm run build && npm run start",
|
"build-and-start": "npm run build && npm run start",
|
||||||
"build-and-start:bun": "npm run verify && npm run bun-run",
|
"build-and-start:bun": "npm run verify && npm run bun-run",
|
||||||
"dev": "node scripts/dev.js",
|
"dev": "node scripts/dev.cjs",
|
||||||
"dev:bun": "bun scripts/dev.js",
|
"dev:bun": "bun scripts/dev.cjs",
|
||||||
"verify": "tsgo --noEmit",
|
"verify": "tsgo --noEmit",
|
||||||
"verify:tsc": "tsc --noEmit",
|
"verify:tsc": "tsc --noEmit",
|
||||||
"bun-run": "bun src/index.ts",
|
"raw": "node --experimental-transform-types src/index.ts",
|
||||||
|
"raw:bun": "bun src/index.ts",
|
||||||
"lint": "eslint --ext .ts .",
|
"lint": "eslint --ext .ts .",
|
||||||
"lint:ci": "eslint --ext .ts --rule \"prettier/prettier: off\" .",
|
"lint:ci": "eslint --ext .ts --rule \"prettier/prettier: off\" .",
|
||||||
"lint:fix": "eslint --fix --ext .ts .",
|
"lint:fix": "eslint --fix --ext .ts .",
|
||||||
"prettier": "prettier --write .",
|
"prettier": "prettier --write .",
|
||||||
"update-translations": "cd scripts && node update-translations.js",
|
"update-translations": "cd scripts && node update-translations.cjs",
|
||||||
"fix-imports": "cd scripts && node fix-imports.js",
|
"fix": "npm run update-translations && npm run lint:fix"
|
||||||
"fix": "npm run update-translations && npm run fix-imports && npm run prettier"
|
|
||||||
},
|
},
|
||||||
"license": "GNU",
|
"license": "GNU",
|
||||||
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^5",
|
|
||||||
"@types/morgan": "^1.9.9",
|
|
||||||
"@types/websocket": "^1.0.10",
|
|
||||||
"@types/ws": "^8.18.1",
|
|
||||||
"@typescript/native-preview": "^7.0.0-dev.20250625.1",
|
|
||||||
"chokidar": "^4.0.3",
|
"chokidar": "^4.0.3",
|
||||||
"crc-32": "^1.2.2",
|
"crc-32": "^1.2.2",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
@ -38,14 +34,21 @@
|
|||||||
"mongoose": "^8.11.0",
|
"mongoose": "^8.11.0",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"ncp": "^2.0.0",
|
"ncp": "^2.0.0",
|
||||||
"typescript": "^5.5",
|
|
||||||
"undici": "^7.10.0",
|
"undici": "^7.10.0",
|
||||||
"warframe-public-export-plus": "^0.5.82",
|
"warframe-public-export-plus": "^0.5.83",
|
||||||
"warframe-riven-info": "^0.1.2",
|
"warframe-riven-info": "^0.1.2",
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
"winston-daily-rotate-file": "^5.0.0",
|
"winston-daily-rotate-file": "^5.0.0",
|
||||||
"ws": "^8.18.2"
|
"ws": "^8.18.2"
|
||||||
},
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@types/express": "^5",
|
||||||
|
"@types/morgan": "^1.9.9",
|
||||||
|
"@types/websocket": "^1.0.10",
|
||||||
|
"@types/ws": "^8.18.1",
|
||||||
|
"@typescript/native-preview": "^7.0.0-dev.20250625.1",
|
||||||
|
"typescript": "^5.7"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "^8.28.0",
|
"@typescript-eslint/eslint-plugin": "^8.28.0",
|
||||||
"@typescript-eslint/parser": "^8.28.0",
|
"@typescript-eslint/parser": "^8.28.0",
|
||||||
@ -55,5 +58,8 @@
|
|||||||
"eslint-plugin-prettier": "^5.2.5",
|
"eslint-plugin-prettier": "^5.2.5",
|
||||||
"prettier": "^3.5.3",
|
"prettier": "^3.5.3",
|
||||||
"tree-kill": "^1.2.2"
|
"tree-kill": "^1.2.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.18.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,7 +39,7 @@ function run(changedFile) {
|
|||||||
buildproc = undefined;
|
buildproc = undefined;
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
console.log(`${process.versions.bun ? "Verified" : "Built"} in ${Date.now() - thisbuildstart} ms`);
|
console.log(`${process.versions.bun ? "Verified" : "Built"} in ${Date.now() - thisbuildstart} ms`);
|
||||||
runproc = spawn("npm", ["run", process.versions.bun ? "bun-run" : "start", "--", ...args], spawnopts);
|
runproc = spawn("npm", ["run", process.versions.bun ? "raw:bun" : "start", "--", ...args], spawnopts);
|
||||||
runproc.on("exit", () => {
|
runproc.on("exit", () => {
|
||||||
runproc = undefined;
|
runproc = undefined;
|
||||||
});
|
});
|
||||||
@ -1,46 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
const fs = require("fs");
|
|
||||||
const path = require("path");
|
|
||||||
|
|
||||||
const root = path.join(process.cwd(), "..");
|
|
||||||
|
|
||||||
function listFiles(dir) {
|
|
||||||
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
||||||
let results = [];
|
|
||||||
for (const entry of entries) {
|
|
||||||
const fullPath = path.join(dir, entry.name);
|
|
||||||
if (entry.isDirectory()) {
|
|
||||||
results = results.concat(listFiles(fullPath));
|
|
||||||
} else {
|
|
||||||
results.push(fullPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
const files = listFiles(path.join(root, "src"));
|
|
||||||
|
|
||||||
for (const file of files) {
|
|
||||||
let content;
|
|
||||||
try {
|
|
||||||
content = fs.readFileSync(file, "utf8");
|
|
||||||
} catch (e) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const dir = path.dirname(file);
|
|
||||||
const fixedContent = content.replaceAll(/} from "([^"]+)";/g, (sub, importPath) => {
|
|
||||||
if (!importPath.startsWith("@/")) {
|
|
||||||
const fullImportPath = path.resolve(dir, importPath);
|
|
||||||
if (fs.existsSync(fullImportPath + ".ts")) {
|
|
||||||
const relative = path.relative(root, fullImportPath).replace(/\\/g, "/");
|
|
||||||
const fixedPath = "@/" + relative;
|
|
||||||
console.log(`${importPath} -> ${fixedPath}`);
|
|
||||||
return sub.split(importPath).join(fixedPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sub;
|
|
||||||
});
|
|
||||||
if (content != fixedContent) {
|
|
||||||
fs.writeFileSync(file, fixedContent, "utf8");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
20
src/app.ts
20
src/app.ts
@ -1,17 +1,17 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
|
|
||||||
import bodyParser from "body-parser";
|
import bodyParser from "body-parser";
|
||||||
import { unknownEndpointHandler } from "@/src/middleware/middleware";
|
import { unknownEndpointHandler } from "./middleware/middleware.ts";
|
||||||
import { requestLogger } from "@/src/middleware/morgenMiddleware";
|
import { requestLogger } from "./middleware/morgenMiddleware.ts";
|
||||||
import { errorHandler } from "@/src/middleware/errorHandler";
|
import { errorHandler } from "./middleware/errorHandler.ts";
|
||||||
|
|
||||||
import { apiRouter } from "@/src/routes/api";
|
import { apiRouter } from "./routes/api.ts";
|
||||||
import { cacheRouter } from "@/src/routes/cache";
|
import { cacheRouter } from "./routes/cache.ts";
|
||||||
import { customRouter } from "@/src/routes/custom";
|
import { customRouter } from "./routes/custom.ts";
|
||||||
import { dynamicController } from "@/src/routes/dynamic";
|
import { dynamicController } from "./routes/dynamic.ts";
|
||||||
import { payRouter } from "@/src/routes/pay";
|
import { payRouter } from "./routes/pay.ts";
|
||||||
import { statsRouter } from "@/src/routes/stats";
|
import { statsRouter } from "./routes/stats.ts";
|
||||||
import { webuiRouter } from "@/src/routes/webui";
|
import { webuiRouter } from "./routes/webui.ts";
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const abandonLibraryDailyTaskController: RequestHandler = async (req, res) => {
|
export const abandonLibraryDailyTaskController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -5,10 +5,10 @@ import {
|
|||||||
hasGuildPermission,
|
hasGuildPermission,
|
||||||
removeDojoDeco,
|
removeDojoDeco,
|
||||||
removeDojoRoom
|
removeDojoRoom
|
||||||
} from "@/src/services/guildService";
|
} from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const abortDojoComponentController: RequestHandler = async (req, res) => {
|
export const abortDojoComponentController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,7 +1,12 @@
|
|||||||
import { getDojoClient, getGuildForRequestEx, hasAccessToDojo, hasGuildPermission } from "@/src/services/guildService";
|
import {
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
getDojoClient,
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
getGuildForRequestEx,
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
hasAccessToDojo,
|
||||||
|
hasGuildPermission
|
||||||
|
} from "../../services/guildService.ts";
|
||||||
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const abortDojoComponentDestructionController: RequestHandler = async (req, res) => {
|
export const abortDojoComponentDestructionController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import { toOid } from "@/src/helpers/inventoryHelpers";
|
import { toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import {
|
import {
|
||||||
createVeiledRivenFingerprint,
|
createVeiledRivenFingerprint,
|
||||||
createUnveiledRivenFingerprint,
|
createUnveiledRivenFingerprint,
|
||||||
rivenRawToRealWeighted
|
rivenRawToRealWeighted
|
||||||
} from "@/src/helpers/rivenHelper";
|
} from "../../helpers/rivenHelper.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addMods, getInventory } from "@/src/services/inventoryService";
|
import { addMods, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getRandomElement } from "@/src/services/rngService";
|
import { getRandomElement } from "../../services/rngService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportUpgrades } from "warframe-public-export-plus";
|
import { ExportUpgrades } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import { toOid } from "@/src/helpers/inventoryHelpers";
|
import { toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Friendship } from "@/src/models/friendModel";
|
import { Friendship } from "../../models/friendModel.ts";
|
||||||
import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "@/src/services/friendService";
|
import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "../../services/friendService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IFriendInfo } from "@/src/types/friendTypes";
|
import type { IFriendInfo } from "../../types/friendTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const addFriendController: RequestHandler = async (req, res) => {
|
export const addFriendController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
|
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
|
|
||||||
export const addFriendImageController: RequestHandler = async (req, res) => {
|
export const addFriendImageController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { toOid } from "@/src/helpers/inventoryHelpers";
|
import { toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Account, Ignore } from "@/src/models/loginModel";
|
import { Account, Ignore } from "../../models/loginModel.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IFriendInfo } from "@/src/types/friendTypes";
|
import type { IFriendInfo } from "../../types/friendTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const addIgnoredUserController: RequestHandler = async (req, res) => {
|
export const addIgnoredUserController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate, toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Friendship } from "@/src/models/friendModel";
|
import { Friendship } from "../../models/friendModel.ts";
|
||||||
import { Account } from "@/src/models/loginModel";
|
import { Account } from "../../models/loginModel.ts";
|
||||||
import { addInventoryDataToFriendInfo, areFriendsOfFriends } from "@/src/services/friendService";
|
import { addInventoryDataToFriendInfo, areFriendsOfFriends } from "../../services/friendService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IFriendInfo } from "@/src/types/friendTypes";
|
import type { IFriendInfo } from "../../types/friendTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const addPendingFriendController: RequestHandler = async (req, res) => {
|
export const addPendingFriendController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { getJSONfromString, regexEscape } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString, regexEscape } from "../../helpers/stringHelpers.ts";
|
||||||
import { Alliance, AllianceMember, Guild, GuildMember } from "@/src/models/guildModel";
|
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { createMessage } from "@/src/services/inboxService";
|
import { createMessage } from "../../services/inboxService.ts";
|
||||||
import { getEffectiveAvatarImageType, getInventory } from "@/src/services/inventoryService";
|
import { getEffectiveAvatarImageType, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountForRequest, getSuffixedName } from "@/src/services/loginService";
|
import { getAccountForRequest, getSuffixedName } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportFlavour } from "warframe-public-export-plus";
|
import { ExportFlavour } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { Guild, GuildMember } from "@/src/models/guildModel";
|
import { Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { Account } from "@/src/models/loginModel";
|
import { Account } from "../../models/loginModel.ts";
|
||||||
import { addInventoryDataToFriendInfo, areFriends } from "@/src/services/friendService";
|
import { addInventoryDataToFriendInfo, areFriends } from "../../services/friendService.ts";
|
||||||
import { hasGuildPermission } from "@/src/services/guildService";
|
import { hasGuildPermission } from "../../services/guildService.ts";
|
||||||
import { createMessage } from "@/src/services/inboxService";
|
import { createMessage } from "../../services/inboxService.ts";
|
||||||
import { getEffectiveAvatarImageType, getInventory } from "@/src/services/inventoryService";
|
import { getEffectiveAvatarImageType, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountForRequest, getAccountIdForRequest, getSuffixedName } from "@/src/services/loginService";
|
import { getAccountForRequest, getAccountIdForRequest, getSuffixedName } from "../../services/loginService.ts";
|
||||||
import type { IOid } from "@/src/types/commonTypes";
|
import type { IOid } from "../../types/commonTypes.ts";
|
||||||
import type { IGuildMemberClient } from "@/src/types/guildTypes";
|
import type { IGuildMemberClient } from "../../types/guildTypes.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportFlavour } from "warframe-public-export-plus";
|
import { ExportFlavour } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const adoptPetController: RequestHandler = async (req, res) => {
|
export const adoptPetController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getPersonalRooms } from "@/src/services/personalRoomsService";
|
import { getPersonalRooms } from "../../services/personalRoomsService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const apartmentController: RequestHandler = async (req, res) => {
|
export const apartmentController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory, addMods } from "@/src/services/inventoryService";
|
import { getInventory, addMods } from "../../services/inventoryService.ts";
|
||||||
import type { IOid } from "@/src/types/commonTypes";
|
import type { IOid } from "../../types/commonTypes.ts";
|
||||||
|
|
||||||
export const arcaneCommonController: RequestHandler = async (req, res) => {
|
export const arcaneCommonController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory } from "../../services/inventoryService.ts";
|
||||||
import type { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { colorToShard, combineColors, shardToColor } from "@/src/helpers/shardHelper";
|
import { colorToShard, combineColors, shardToColor } from "../../helpers/shardHelper.ts";
|
||||||
|
|
||||||
export const archonFusionController: RequestHandler = async (req, res) => {
|
export const archonFusionController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import { fromOid, toOid } from "@/src/helpers/inventoryHelpers";
|
import { fromOid, toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { createVeiledRivenFingerprint, rivenRawToRealWeighted } from "@/src/helpers/rivenHelper";
|
import { createVeiledRivenFingerprint, rivenRawToRealWeighted } from "../../helpers/rivenHelper.ts";
|
||||||
import { addMiscItems, addMods, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, addMods, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getRandomElement, getRandomWeightedReward, getRandomWeightedRewardUc } from "@/src/services/rngService";
|
import { getRandomElement, getRandomWeightedReward, getRandomWeightedRewardUc } from "../../services/rngService.ts";
|
||||||
import type { IUpgradeFromClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IUpgradeFromClient } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import type { TRarity } from "warframe-public-export-plus";
|
import type { TRarity } from "warframe-public-export-plus";
|
||||||
import { ExportBoosterPacks, ExportUpgrades } from "warframe-public-export-plus";
|
import { ExportBoosterPacks, ExportUpgrades } from "warframe-public-export-plus";
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import type { IInventoryClient, IUpgradeClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IInventoryClient, IUpgradeClient } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { addMods, getInventory } from "@/src/services/inventoryService";
|
import { addMods, getInventory } from "../../services/inventoryService.ts";
|
||||||
|
|
||||||
export const artifactsController: RequestHandler = async (req, res) => {
|
export const artifactsController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { GuildAd } from "@/src/models/guildModel";
|
import { GuildAd } from "../../models/guildModel.ts";
|
||||||
import { getGuildForRequestEx, hasGuildPermission } from "@/src/services/guildService";
|
import { getGuildForRequestEx, hasGuildPermission } from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const cancelGuildAdvertisementController: RequestHandler = async (req, res) => {
|
export const cancelGuildAdvertisementController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,11 +1,16 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getDojoClient, getGuildForRequestEx, hasAccessToDojo, hasGuildPermission } from "@/src/services/guildService";
|
import {
|
||||||
import { logger } from "@/src/utils/logger";
|
getDojoClient,
|
||||||
import type { IDojoComponentDatabase } from "@/src/types/guildTypes";
|
getGuildForRequestEx,
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
hasAccessToDojo,
|
||||||
|
hasGuildPermission
|
||||||
|
} from "../../services/guildService.ts";
|
||||||
|
import { logger } from "../../utils/logger.ts";
|
||||||
|
import type { IDojoComponentDatabase } from "../../types/guildTypes.ts";
|
||||||
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
|
|
||||||
export const changeDojoRootController: RequestHandler = async (req, res) => {
|
export const changeDojoRootController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { GuildMember } from "@/src/models/guildModel";
|
import { GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getGuildForRequest, hasGuildPermissionEx } from "@/src/services/guildService";
|
import { getGuildForRequest, hasGuildPermissionEx } from "../../services/guildService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const changeGuildRankController: RequestHandler = async (req, res) => {
|
export const changeGuildRankController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const checkDailyMissionBonusController: RequestHandler = async (req, res) => {
|
export const checkDailyMissionBonusController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -2,11 +2,12 @@
|
|||||||
//it will claim a recipe for the user
|
//it will claim a recipe for the user
|
||||||
|
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { getRecipe } from "@/src/services/itemDataService";
|
import { getRecipe } from "../../services/itemDataService.ts";
|
||||||
import type { IOid, IOidWithLegacySupport } from "@/src/types/commonTypes";
|
import type { IOidWithLegacySupport } from "../../types/commonTypes.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import type { TAccountDocument } from "../../services/loginService.ts";
|
||||||
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import {
|
import {
|
||||||
getInventory,
|
getInventory,
|
||||||
updateCurrency,
|
updateCurrency,
|
||||||
@ -17,244 +18,258 @@ import {
|
|||||||
addKubrowPetPrint,
|
addKubrowPetPrint,
|
||||||
addPowerSuit,
|
addPowerSuit,
|
||||||
addEquipment
|
addEquipment
|
||||||
} from "@/src/services/inventoryService";
|
} from "../../services/inventoryService.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { IPendingRecipeDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IPendingRecipeDatabase } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { toOid2 } from "@/src/helpers/inventoryHelpers";
|
import { fromOid, toOid2 } from "../../helpers/inventoryHelpers.ts";
|
||||||
import type { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
import type { IRecipe } from "warframe-public-export-plus";
|
import type { IRecipe } from "warframe-public-export-plus";
|
||||||
import type { IEquipmentClient } from "@/src/types/equipmentTypes";
|
import type { IEquipmentClient } from "../../types/equipmentTypes.ts";
|
||||||
import { EquipmentFeatures, Status } from "@/src/types/equipmentTypes";
|
import { EquipmentFeatures, Status } from "../../types/equipmentTypes.ts";
|
||||||
|
|
||||||
interface IClaimCompletedRecipeRequest {
|
interface IClaimCompletedRecipeRequest {
|
||||||
RecipeIds: IOid[];
|
RecipeIds: IOidWithLegacySupport[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IClaimCompletedRecipeResponse {
|
||||||
|
InventoryChanges: IInventoryChanges;
|
||||||
|
BrandedSuits?: IOidWithLegacySupport[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export const claimCompletedRecipeController: RequestHandler = async (req, res) => {
|
export const claimCompletedRecipeController: RequestHandler = async (req, res) => {
|
||||||
const claimCompletedRecipeRequest = getJSONfromString<IClaimCompletedRecipeRequest>(String(req.body));
|
const claimCompletedRecipeRequest = getJSONfromString<IClaimCompletedRecipeRequest>(String(req.body));
|
||||||
const account = await getAccountForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
const inventory = await getInventory(account._id.toString());
|
const inventory = await getInventory(account._id.toString());
|
||||||
const pendingRecipe = inventory.PendingRecipes.id(claimCompletedRecipeRequest.RecipeIds[0].$oid);
|
const resp: IClaimCompletedRecipeResponse = {
|
||||||
if (!pendingRecipe) {
|
InventoryChanges: {}
|
||||||
throw new Error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`);
|
};
|
||||||
}
|
for (const recipeId of claimCompletedRecipeRequest.RecipeIds) {
|
||||||
|
const pendingRecipe = inventory.PendingRecipes.id(fromOid(recipeId));
|
||||||
//check recipe is indeed ready to be completed
|
if (!pendingRecipe) {
|
||||||
// if (pendingRecipe.CompletionDate > new Date()) {
|
throw new Error(`no pending recipe found with id ${fromOid(recipeId)}`);
|
||||||
// throw new Error(`recipe ${pendingRecipe._id} is not ready to be completed`);
|
|
||||||
// }
|
|
||||||
|
|
||||||
inventory.PendingRecipes.pull(pendingRecipe._id);
|
|
||||||
|
|
||||||
const recipe = getRecipe(pendingRecipe.ItemType);
|
|
||||||
if (!recipe) {
|
|
||||||
throw new Error(`no completed item found for recipe ${pendingRecipe._id.toString()}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (req.query.cancel) {
|
|
||||||
const inventoryChanges: IInventoryChanges = {};
|
|
||||||
await refundRecipeIngredients(inventory, inventoryChanges, recipe, pendingRecipe);
|
|
||||||
await inventory.save();
|
|
||||||
res.json(inventoryChanges); // Not a bug: In the specific case of cancelling a recipe, InventoryChanges are expected to be the root.
|
|
||||||
} else {
|
|
||||||
logger.debug("Claiming Recipe", { recipe, pendingRecipe });
|
|
||||||
|
|
||||||
let BrandedSuits: undefined | IOidWithLegacySupport[];
|
|
||||||
if (recipe.secretIngredientAction == "SIA_SPECTRE_LOADOUT_COPY") {
|
|
||||||
inventory.PendingSpectreLoadouts ??= [];
|
|
||||||
inventory.SpectreLoadouts ??= [];
|
|
||||||
|
|
||||||
const pendingLoadoutIndex = inventory.PendingSpectreLoadouts.findIndex(
|
|
||||||
x => x.ItemType == recipe.resultType
|
|
||||||
);
|
|
||||||
if (pendingLoadoutIndex != -1) {
|
|
||||||
const loadoutIndex = inventory.SpectreLoadouts.findIndex(x => x.ItemType == recipe.resultType);
|
|
||||||
if (loadoutIndex != -1) {
|
|
||||||
inventory.SpectreLoadouts.splice(loadoutIndex, 1);
|
|
||||||
}
|
|
||||||
logger.debug(
|
|
||||||
"moving spectre loadout from pending to active",
|
|
||||||
inventory.toJSON().PendingSpectreLoadouts![pendingLoadoutIndex]
|
|
||||||
);
|
|
||||||
inventory.SpectreLoadouts.push(inventory.PendingSpectreLoadouts[pendingLoadoutIndex]);
|
|
||||||
inventory.PendingSpectreLoadouts.splice(pendingLoadoutIndex, 1);
|
|
||||||
}
|
|
||||||
} else if (recipe.secretIngredientAction == "SIA_UNBRAND") {
|
|
||||||
inventory.BrandedSuits!.splice(
|
|
||||||
inventory.BrandedSuits!.findIndex(x => x.equals(pendingRecipe.SuitToUnbrand)),
|
|
||||||
1
|
|
||||||
);
|
|
||||||
BrandedSuits = [toOid2(pendingRecipe.SuitToUnbrand!, account.BuildLabel)];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let InventoryChanges: IInventoryChanges = {};
|
//check recipe is indeed ready to be completed
|
||||||
if (recipe.consumeOnUse) {
|
// if (pendingRecipe.CompletionDate > new Date()) {
|
||||||
addRecipes(inventory, [
|
// throw new Error(`recipe ${pendingRecipe._id} is not ready to be completed`);
|
||||||
|
// }
|
||||||
|
|
||||||
|
inventory.PendingRecipes.pull(pendingRecipe._id);
|
||||||
|
|
||||||
|
const recipe = getRecipe(pendingRecipe.ItemType);
|
||||||
|
if (!recipe) {
|
||||||
|
throw new Error(`no completed item found for recipe ${pendingRecipe._id.toString()}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.query.cancel) {
|
||||||
|
const inventoryChanges: IInventoryChanges = {};
|
||||||
|
await refundRecipeIngredients(inventory, inventoryChanges, recipe, pendingRecipe);
|
||||||
|
await inventory.save();
|
||||||
|
res.json(inventoryChanges); // Not a bug: In the specific case of cancelling a recipe, InventoryChanges are expected to be the root.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await claimCompletedRecipe(account, inventory, recipe, pendingRecipe, resp, req.query.rush);
|
||||||
|
}
|
||||||
|
await inventory.save();
|
||||||
|
res.json(resp);
|
||||||
|
};
|
||||||
|
|
||||||
|
const claimCompletedRecipe = async (
|
||||||
|
account: TAccountDocument,
|
||||||
|
inventory: TInventoryDatabaseDocument,
|
||||||
|
recipe: IRecipe,
|
||||||
|
pendingRecipe: IPendingRecipeDatabase,
|
||||||
|
resp: IClaimCompletedRecipeResponse,
|
||||||
|
rush: any
|
||||||
|
): Promise<void> => {
|
||||||
|
logger.debug("Claiming Recipe", { recipe, pendingRecipe });
|
||||||
|
|
||||||
|
if (recipe.secretIngredientAction == "SIA_SPECTRE_LOADOUT_COPY") {
|
||||||
|
inventory.PendingSpectreLoadouts ??= [];
|
||||||
|
inventory.SpectreLoadouts ??= [];
|
||||||
|
|
||||||
|
const pendingLoadoutIndex = inventory.PendingSpectreLoadouts.findIndex(x => x.ItemType == recipe.resultType);
|
||||||
|
if (pendingLoadoutIndex != -1) {
|
||||||
|
const loadoutIndex = inventory.SpectreLoadouts.findIndex(x => x.ItemType == recipe.resultType);
|
||||||
|
if (loadoutIndex != -1) {
|
||||||
|
inventory.SpectreLoadouts.splice(loadoutIndex, 1);
|
||||||
|
}
|
||||||
|
logger.debug(
|
||||||
|
"moving spectre loadout from pending to active",
|
||||||
|
inventory.toJSON().PendingSpectreLoadouts![pendingLoadoutIndex]
|
||||||
|
);
|
||||||
|
inventory.SpectreLoadouts.push(inventory.PendingSpectreLoadouts[pendingLoadoutIndex]);
|
||||||
|
inventory.PendingSpectreLoadouts.splice(pendingLoadoutIndex, 1);
|
||||||
|
}
|
||||||
|
} else if (recipe.secretIngredientAction == "SIA_UNBRAND") {
|
||||||
|
inventory.BrandedSuits!.splice(
|
||||||
|
inventory.BrandedSuits!.findIndex(x => x.equals(pendingRecipe.SuitToUnbrand)),
|
||||||
|
1
|
||||||
|
);
|
||||||
|
resp.BrandedSuits = [toOid2(pendingRecipe.SuitToUnbrand!, account.BuildLabel)];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recipe.consumeOnUse) {
|
||||||
|
addRecipes(inventory, [
|
||||||
|
{
|
||||||
|
ItemType: pendingRecipe.ItemType,
|
||||||
|
ItemCount: -1
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rush) {
|
||||||
|
const end = Math.trunc(pendingRecipe.CompletionDate.getTime() / 1000);
|
||||||
|
const start = end - recipe.buildTime;
|
||||||
|
const secondsElapsed = Math.trunc(Date.now() / 1000) - start;
|
||||||
|
const progress = secondsElapsed / recipe.buildTime;
|
||||||
|
logger.debug(`rushing recipe at ${Math.trunc(progress * 100)}% completion`);
|
||||||
|
const cost =
|
||||||
|
progress > 0.5 ? Math.round(recipe.skipBuildTimePrice * (1 - (progress - 0.5))) : recipe.skipBuildTimePrice;
|
||||||
|
combineInventoryChanges(resp.InventoryChanges, updateCurrency(inventory, cost, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recipe.secretIngredientAction == "SIA_CREATE_KUBROW") {
|
||||||
|
const pet = inventory.KubrowPets.id(pendingRecipe.KubrowPet!)!;
|
||||||
|
if (pet.Details!.HatchDate!.getTime() > Date.now()) {
|
||||||
|
pet.Details!.HatchDate = new Date();
|
||||||
|
}
|
||||||
|
let canSetActive = true;
|
||||||
|
for (const pet of inventory.KubrowPets) {
|
||||||
|
if (pet.Details!.Status == Status.StatusAvailable) {
|
||||||
|
canSetActive = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pet.Details!.Status = canSetActive ? Status.StatusAvailable : Status.StatusStasis;
|
||||||
|
} else if (recipe.secretIngredientAction == "SIA_DISTILL_PRINT") {
|
||||||
|
const pet = inventory.KubrowPets.id(pendingRecipe.KubrowPet!)!;
|
||||||
|
addKubrowPetPrint(inventory, pet, resp.InventoryChanges);
|
||||||
|
} else if (recipe.secretIngredientAction != "SIA_UNBRAND") {
|
||||||
|
if (recipe.resultType == "/Lotus/Powersuits/Excalibur/ExcaliburUmbra") {
|
||||||
|
// Quite the special case here...
|
||||||
|
// We don't just get Umbra, but also Skiajati and Umbra Mods. Both items are max rank, potatoed, and with the mods are pre-installed.
|
||||||
|
// Source: https://wiki.warframe.com/w/The_Sacrifice, https://wiki.warframe.com/w/Excalibur/Umbra, https://wiki.warframe.com/w/Skiajati
|
||||||
|
|
||||||
|
const umbraModA = (
|
||||||
|
await addItem(
|
||||||
|
inventory,
|
||||||
|
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModA",
|
||||||
|
1,
|
||||||
|
false,
|
||||||
|
undefined,
|
||||||
|
`{"lvl":5}`
|
||||||
|
)
|
||||||
|
).Upgrades![0];
|
||||||
|
const umbraModB = (
|
||||||
|
await addItem(
|
||||||
|
inventory,
|
||||||
|
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModB",
|
||||||
|
1,
|
||||||
|
false,
|
||||||
|
undefined,
|
||||||
|
`{"lvl":5}`
|
||||||
|
)
|
||||||
|
).Upgrades![0];
|
||||||
|
const umbraModC = (
|
||||||
|
await addItem(
|
||||||
|
inventory,
|
||||||
|
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModC",
|
||||||
|
1,
|
||||||
|
false,
|
||||||
|
undefined,
|
||||||
|
`{"lvl":5}`
|
||||||
|
)
|
||||||
|
).Upgrades![0];
|
||||||
|
const sacrificeModA = (
|
||||||
|
await addItem(
|
||||||
|
inventory,
|
||||||
|
"/Lotus/Upgrades/Mods/Sets/Sacrifice/MeleeSacrificeModA",
|
||||||
|
1,
|
||||||
|
false,
|
||||||
|
undefined,
|
||||||
|
`{"lvl":5}`
|
||||||
|
)
|
||||||
|
).Upgrades![0];
|
||||||
|
const sacrificeModB = (
|
||||||
|
await addItem(
|
||||||
|
inventory,
|
||||||
|
"/Lotus/Upgrades/Mods/Sets/Sacrifice/MeleeSacrificeModB",
|
||||||
|
1,
|
||||||
|
false,
|
||||||
|
undefined,
|
||||||
|
`{"lvl":5}`
|
||||||
|
)
|
||||||
|
).Upgrades![0];
|
||||||
|
resp.InventoryChanges.Upgrades ??= [];
|
||||||
|
resp.InventoryChanges.Upgrades.push(umbraModA, umbraModB, umbraModC, sacrificeModA, sacrificeModB);
|
||||||
|
|
||||||
|
await addPowerSuit(
|
||||||
|
inventory,
|
||||||
|
"/Lotus/Powersuits/Excalibur/ExcaliburUmbra",
|
||||||
{
|
{
|
||||||
ItemType: pendingRecipe.ItemType,
|
Configs: [
|
||||||
ItemCount: -1
|
{
|
||||||
}
|
Upgrades: [
|
||||||
]);
|
"",
|
||||||
}
|
"",
|
||||||
if (req.query.rush) {
|
"",
|
||||||
const end = Math.trunc(pendingRecipe.CompletionDate.getTime() / 1000);
|
"",
|
||||||
const start = end - recipe.buildTime;
|
"",
|
||||||
const secondsElapsed = Math.trunc(Date.now() / 1000) - start;
|
umbraModA.ItemId.$oid,
|
||||||
const progress = secondsElapsed / recipe.buildTime;
|
umbraModB.ItemId.$oid,
|
||||||
logger.debug(`rushing recipe at ${Math.trunc(progress * 100)}% completion`);
|
umbraModC.ItemId.$oid
|
||||||
const cost =
|
]
|
||||||
progress > 0.5
|
}
|
||||||
? Math.round(recipe.skipBuildTimePrice * (1 - (progress - 0.5)))
|
],
|
||||||
: recipe.skipBuildTimePrice;
|
XP: 900_000,
|
||||||
InventoryChanges = {
|
Features: EquipmentFeatures.DOUBLE_CAPACITY
|
||||||
...InventoryChanges,
|
},
|
||||||
...updateCurrency(inventory, cost, true)
|
resp.InventoryChanges
|
||||||
};
|
);
|
||||||
}
|
inventory.XPInfo.push({
|
||||||
|
ItemType: "/Lotus/Powersuits/Excalibur/ExcaliburUmbra",
|
||||||
|
XP: 900_000
|
||||||
|
});
|
||||||
|
|
||||||
if (recipe.secretIngredientAction == "SIA_CREATE_KUBROW") {
|
addEquipment(
|
||||||
const pet = inventory.KubrowPets.id(pendingRecipe.KubrowPet!)!;
|
inventory,
|
||||||
if (pet.Details!.HatchDate!.getTime() > Date.now()) {
|
"Melee",
|
||||||
pet.Details!.HatchDate = new Date();
|
"/Lotus/Weapons/Tenno/Melee/Swords/UmbraKatana/UmbraKatana",
|
||||||
}
|
{
|
||||||
let canSetActive = true;
|
Configs: [
|
||||||
for (const pet of inventory.KubrowPets) {
|
{ Upgrades: ["", "", "", "", "", "", sacrificeModA.ItemId.$oid, sacrificeModB.ItemId.$oid] }
|
||||||
if (pet.Details!.Status == Status.StatusAvailable) {
|
],
|
||||||
canSetActive = false;
|
XP: 450_000,
|
||||||
break;
|
Features: EquipmentFeatures.DOUBLE_CAPACITY
|
||||||
}
|
},
|
||||||
}
|
resp.InventoryChanges
|
||||||
pet.Details!.Status = canSetActive ? Status.StatusAvailable : Status.StatusStasis;
|
);
|
||||||
} else if (recipe.secretIngredientAction == "SIA_DISTILL_PRINT") {
|
inventory.XPInfo.push({
|
||||||
const pet = inventory.KubrowPets.id(pendingRecipe.KubrowPet!)!;
|
ItemType: "/Lotus/Weapons/Tenno/Melee/Swords/UmbraKatana/UmbraKatana",
|
||||||
addKubrowPetPrint(inventory, pet, InventoryChanges);
|
XP: 450_000
|
||||||
} else if (recipe.secretIngredientAction != "SIA_UNBRAND") {
|
});
|
||||||
if (recipe.resultType == "/Lotus/Powersuits/Excalibur/ExcaliburUmbra") {
|
} else {
|
||||||
// Quite the special case here...
|
combineInventoryChanges(
|
||||||
// We don't just get Umbra, but also Skiajati and Umbra Mods. Both items are max rank, potatoed, and with the mods are pre-installed.
|
resp.InventoryChanges,
|
||||||
// Source: https://wiki.warframe.com/w/The_Sacrifice, https://wiki.warframe.com/w/Excalibur/Umbra, https://wiki.warframe.com/w/Skiajati
|
await addItem(
|
||||||
|
|
||||||
const umbraModA = (
|
|
||||||
await addItem(
|
|
||||||
inventory,
|
|
||||||
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModA",
|
|
||||||
1,
|
|
||||||
false,
|
|
||||||
undefined,
|
|
||||||
`{"lvl":5}`
|
|
||||||
)
|
|
||||||
).Upgrades![0];
|
|
||||||
const umbraModB = (
|
|
||||||
await addItem(
|
|
||||||
inventory,
|
|
||||||
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModB",
|
|
||||||
1,
|
|
||||||
false,
|
|
||||||
undefined,
|
|
||||||
`{"lvl":5}`
|
|
||||||
)
|
|
||||||
).Upgrades![0];
|
|
||||||
const umbraModC = (
|
|
||||||
await addItem(
|
|
||||||
inventory,
|
|
||||||
"/Lotus/Upgrades/Mods/Sets/Umbra/WarframeUmbraModC",
|
|
||||||
1,
|
|
||||||
false,
|
|
||||||
undefined,
|
|
||||||
`{"lvl":5}`
|
|
||||||
)
|
|
||||||
).Upgrades![0];
|
|
||||||
const sacrificeModA = (
|
|
||||||
await addItem(
|
|
||||||
inventory,
|
|
||||||
"/Lotus/Upgrades/Mods/Sets/Sacrifice/MeleeSacrificeModA",
|
|
||||||
1,
|
|
||||||
false,
|
|
||||||
undefined,
|
|
||||||
`{"lvl":5}`
|
|
||||||
)
|
|
||||||
).Upgrades![0];
|
|
||||||
const sacrificeModB = (
|
|
||||||
await addItem(
|
|
||||||
inventory,
|
|
||||||
"/Lotus/Upgrades/Mods/Sets/Sacrifice/MeleeSacrificeModB",
|
|
||||||
1,
|
|
||||||
false,
|
|
||||||
undefined,
|
|
||||||
`{"lvl":5}`
|
|
||||||
)
|
|
||||||
).Upgrades![0];
|
|
||||||
InventoryChanges.Upgrades ??= [];
|
|
||||||
InventoryChanges.Upgrades.push(umbraModA, umbraModB, umbraModC, sacrificeModA, sacrificeModB);
|
|
||||||
|
|
||||||
await addPowerSuit(
|
|
||||||
inventory,
|
inventory,
|
||||||
"/Lotus/Powersuits/Excalibur/ExcaliburUmbra",
|
recipe.resultType,
|
||||||
{
|
recipe.num,
|
||||||
Configs: [
|
false,
|
||||||
{
|
undefined,
|
||||||
Upgrades: [
|
pendingRecipe.TargetFingerprint
|
||||||
"",
|
)
|
||||||
"",
|
);
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
umbraModA.ItemId.$oid,
|
|
||||||
umbraModB.ItemId.$oid,
|
|
||||||
umbraModC.ItemId.$oid
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
XP: 900_000,
|
|
||||||
Features: EquipmentFeatures.DOUBLE_CAPACITY
|
|
||||||
},
|
|
||||||
InventoryChanges
|
|
||||||
);
|
|
||||||
inventory.XPInfo.push({
|
|
||||||
ItemType: "/Lotus/Powersuits/Excalibur/ExcaliburUmbra",
|
|
||||||
XP: 900_000
|
|
||||||
});
|
|
||||||
|
|
||||||
addEquipment(
|
|
||||||
inventory,
|
|
||||||
"Melee",
|
|
||||||
"/Lotus/Weapons/Tenno/Melee/Swords/UmbraKatana/UmbraKatana",
|
|
||||||
{
|
|
||||||
Configs: [
|
|
||||||
{ Upgrades: ["", "", "", "", "", "", sacrificeModA.ItemId.$oid, sacrificeModB.ItemId.$oid] }
|
|
||||||
],
|
|
||||||
XP: 450_000,
|
|
||||||
Features: EquipmentFeatures.DOUBLE_CAPACITY
|
|
||||||
},
|
|
||||||
InventoryChanges
|
|
||||||
);
|
|
||||||
inventory.XPInfo.push({
|
|
||||||
ItemType: "/Lotus/Weapons/Tenno/Melee/Swords/UmbraKatana/UmbraKatana",
|
|
||||||
XP: 450_000
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
InventoryChanges = {
|
|
||||||
...InventoryChanges,
|
|
||||||
...(await addItem(
|
|
||||||
inventory,
|
|
||||||
recipe.resultType,
|
|
||||||
recipe.num,
|
|
||||||
false,
|
|
||||||
undefined,
|
|
||||||
pendingRecipe.TargetFingerprint
|
|
||||||
))
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (
|
}
|
||||||
inventory.claimingBlueprintRefundsIngredients &&
|
if (
|
||||||
recipe.secretIngredientAction != "SIA_CREATE_KUBROW" // Can't refund the egg
|
inventory.claimingBlueprintRefundsIngredients &&
|
||||||
) {
|
recipe.secretIngredientAction != "SIA_CREATE_KUBROW" // Can't refund the egg
|
||||||
await refundRecipeIngredients(inventory, InventoryChanges, recipe, pendingRecipe);
|
) {
|
||||||
}
|
await refundRecipeIngredients(inventory, resp.InventoryChanges, recipe, pendingRecipe);
|
||||||
await inventory.save();
|
|
||||||
res.json({ InventoryChanges, BrandedSuits });
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { combineInventoryChanges, getInventory } from "@/src/services/inventoryService";
|
import { combineInventoryChanges, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
import { handleStoreItemAcquisition } from "../../services/purchaseService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportChallenges } from "warframe-public-export-plus";
|
import { ExportChallenges } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { addFusionPoints, getInventory } from "@/src/services/inventoryService";
|
import { addFusionPoints, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const claimLibraryDailyTaskRewardController: RequestHandler = async (req, res) => {
|
export const claimLibraryDailyTaskRewardController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const clearDialogueHistoryController: RequestHandler = async (req, res) => {
|
export const clearDialogueHistoryController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { checkCalendarAutoAdvance, getCalendarProgress, getInventory } from "@/src/services/inventoryService";
|
import { checkCalendarAutoAdvance, getCalendarProgress, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
import { handleStoreItemAcquisition } from "../../services/purchaseService.ts";
|
||||||
import { getWorldState } from "@/src/services/worldStateService";
|
import { getWorldState } from "../../services/worldStateService.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
// GET request; query parameters: CompletedEventIdx=0&Iteration=4&Version=19&Season=CST_SUMMER
|
// GET request; query parameters: CompletedEventIdx=0&Iteration=4&Version=19&Season=CST_SUMMER
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory, updateCurrency } from "../../services/inventoryService.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import type { IVeiledRivenFingerprint } from "@/src/helpers/rivenHelper";
|
import type { IVeiledRivenFingerprint } from "../../helpers/rivenHelper.ts";
|
||||||
|
|
||||||
export const completeRandomModChallengeController: RequestHandler = async (req, res) => {
|
export const completeRandomModChallengeController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Alliance, AllianceMember, Guild, GuildMember } from "@/src/models/guildModel";
|
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getAllianceClient } from "@/src/services/guildService";
|
import { getAllianceClient } from "../../services/guildService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const confirmAllianceInvitationController: RequestHandler = async (req, res) => {
|
export const confirmAllianceInvitationController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Guild, GuildMember } from "@/src/models/guildModel";
|
import { Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { Account } from "@/src/models/loginModel";
|
import { Account } from "../../models/loginModel.ts";
|
||||||
import {
|
import {
|
||||||
deleteGuild,
|
deleteGuild,
|
||||||
getGuildClient,
|
getGuildClient,
|
||||||
giveClanKey,
|
giveClanKey,
|
||||||
hasGuildPermission,
|
hasGuildPermission,
|
||||||
removeDojoKeyItems
|
removeDojoKeyItems
|
||||||
} from "@/src/services/guildService";
|
} from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountForRequest, getAccountIdForRequest, getSuffixedName } from "@/src/services/loginService";
|
import { getAccountForRequest, getAccountIdForRequest, getSuffixedName } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "../../models/guildModel.ts";
|
||||||
import { checkClanAscensionHasRequiredContributors } from "@/src/services/guildService";
|
import { checkClanAscensionHasRequiredContributors } from "../../services/guildService.ts";
|
||||||
import { addFusionPoints, getInventory } from "@/src/services/inventoryService";
|
import { addFusionPoints, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import type { TGuildDatabaseDocument } from "@/src/models/guildModel";
|
import type { TGuildDatabaseDocument } from "../../models/guildModel.ts";
|
||||||
import { GuildMember } from "@/src/models/guildModel";
|
import { GuildMember } from "../../models/guildModel.ts";
|
||||||
import type { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
import {
|
import {
|
||||||
addGuildMemberMiscItemContribution,
|
addGuildMemberMiscItemContribution,
|
||||||
getDojoClient,
|
getDojoClient,
|
||||||
@ -9,12 +9,12 @@ import {
|
|||||||
processDojoBuildMaterialsGathered,
|
processDojoBuildMaterialsGathered,
|
||||||
scaleRequiredCount,
|
scaleRequiredCount,
|
||||||
setDojoRoomLogFunded
|
setDojoRoomLogFunded
|
||||||
} from "@/src/services/guildService";
|
} from "../../services/guildService.ts";
|
||||||
import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory, updateCurrency } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IDojoContributable, IGuildMemberDatabase } from "@/src/types/guildTypes";
|
import type { IDojoContributable, IGuildMemberDatabase } from "../../types/guildTypes.ts";
|
||||||
import type { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import type { IDojoBuild } from "warframe-public-export-plus";
|
import type { IDojoBuild } from "warframe-public-export-plus";
|
||||||
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import type { TGuildDatabaseDocument, TGuildMemberDatabaseDocument } from "@/src/models/guildModel";
|
import type { TGuildDatabaseDocument, TGuildMemberDatabaseDocument } from "../../models/guildModel.ts";
|
||||||
import { Alliance, Guild, GuildMember } from "@/src/models/guildModel";
|
import { Alliance, Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import {
|
import {
|
||||||
addGuildMemberMiscItemContribution,
|
addGuildMemberMiscItemContribution,
|
||||||
addGuildMemberShipDecoContribution,
|
addGuildMemberShipDecoContribution,
|
||||||
@ -7,17 +7,17 @@ import {
|
|||||||
addVaultMiscItems,
|
addVaultMiscItems,
|
||||||
addVaultShipDecos,
|
addVaultShipDecos,
|
||||||
getGuildForRequestEx
|
getGuildForRequestEx
|
||||||
} from "@/src/services/guildService";
|
} from "../../services/guildService.ts";
|
||||||
import {
|
import {
|
||||||
addFusionTreasures,
|
addFusionTreasures,
|
||||||
addMiscItems,
|
addMiscItems,
|
||||||
addShipDecorations,
|
addShipDecorations,
|
||||||
getInventory,
|
getInventory,
|
||||||
updateCurrency
|
updateCurrency
|
||||||
} from "@/src/services/inventoryService";
|
} from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { ITypeCount } from "@/src/types/commonTypes";
|
import type { ITypeCount } from "../../types/commonTypes.ts";
|
||||||
import type { IFusionTreasure, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IFusionTreasure, IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const contributeToVaultController: RequestHandler = async (req, res) => {
|
export const contributeToVaultController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Alliance, AllianceMember, Guild, GuildMember } from "@/src/models/guildModel";
|
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getAllianceClient } from "@/src/services/guildService";
|
import { getAllianceClient } from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const createAllianceController: RequestHandler = async (req, res) => {
|
export const createAllianceController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Guild, GuildMember } from "@/src/models/guildModel";
|
import { Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { createUniqueClanName, getGuildClient, giveClanKey } from "@/src/services/guildService";
|
import { createUniqueClanName, getGuildClient, giveClanKey } from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
|
|
||||||
export const createGuildController: RequestHandler = async (req, res) => {
|
export const createGuildController: RequestHandler = async (req, res) => {
|
||||||
const account = await getAccountForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
|
|
||||||
export const creditsController: RequestHandler = async (req, res) => {
|
export const creditsController: RequestHandler = async (req, res) => {
|
||||||
const inventory = (
|
const inventory = (
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import type { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { ICrewMemberClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { ICrewMemberClient } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addMiscItems, freeUpSlot, getInventory, updateCurrency } from "@/src/services/inventoryService";
|
import { addMiscItems, freeUpSlot, getInventory, updateCurrency } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IOid } from "@/src/types/commonTypes";
|
import type { IOid } from "../../types/commonTypes.ts";
|
||||||
import type { ICrewShipComponentFingerprint } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { ICrewShipComponentFingerprint } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportCustoms, ExportDojoRecipes } from "warframe-public-export-plus";
|
import { ExportCustoms, ExportDojoRecipes } from "warframe-public-export-plus";
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ export const crewShipFusionController: RequestHandler = async (req, res) => {
|
|||||||
const newFval = (newPerc - rangeA[0]) / (rangeA[1] - rangeA[0]);
|
const newFval = (newPerc - rangeA[0]) / (rangeA[1] - rangeA[0]);
|
||||||
buffA.Value = Math.trunc(newFval * 0x3fffffff);
|
buffA.Value = Math.trunc(newFval * 0x3fffffff);
|
||||||
}
|
}
|
||||||
if (inferiorFingerprint.SubroutineIndex) {
|
if (inferiorFingerprint.SubroutineIndex !== undefined) {
|
||||||
const useSuperiorSubroutine = tierA < tierB ? !payload.UseSubroutineA : payload.UseSubroutineA;
|
const useSuperiorSubroutine = tierA < tierB ? !payload.UseSubroutineA : payload.UseSubroutineA;
|
||||||
if (!useSuperiorSubroutine) {
|
if (!useSuperiorSubroutine) {
|
||||||
fingerprint.SubroutineIndex = inferiorFingerprint.SubroutineIndex;
|
fingerprint.SubroutineIndex = inferiorFingerprint.SubroutineIndex;
|
||||||
|
|||||||
@ -3,19 +3,19 @@ import {
|
|||||||
addCrewShipRawSalvage,
|
addCrewShipRawSalvage,
|
||||||
getInventory,
|
getInventory,
|
||||||
addEquipment
|
addEquipment
|
||||||
} from "@/src/services/inventoryService";
|
} from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import type {
|
import type {
|
||||||
ICrewShipComponentFingerprint,
|
ICrewShipComponentFingerprint,
|
||||||
IInnateDamageFingerprint
|
IInnateDamageFingerprint
|
||||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
} from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { ExportCustoms, ExportRailjackWeapons, ExportUpgrades } from "warframe-public-export-plus";
|
import { ExportCustoms, ExportRailjackWeapons, ExportUpgrades } from "warframe-public-export-plus";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import { getRandomInt } from "@/src/services/rngService";
|
import { getRandomInt } from "../../services/rngService.ts";
|
||||||
import type { IFingerprintStat } from "@/src/helpers/rivenHelper";
|
import type { IFingerprintStat } from "../../helpers/rivenHelper.ts";
|
||||||
import type { IEquipmentDatabase } from "@/src/types/equipmentTypes";
|
import type { IEquipmentDatabase } from "../../types/equipmentTypes.ts";
|
||||||
|
|
||||||
export const crewShipIdentifySalvageController: RequestHandler = async (req, res) => {
|
export const crewShipIdentifySalvageController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "../../models/guildModel.ts";
|
||||||
import { hasAccessToDojo, hasGuildPermission } from "@/src/services/guildService";
|
import { hasAccessToDojo, hasGuildPermission } from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountForRequest, getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest, getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const customObstacleCourseLeaderboardController: RequestHandler = async (req, res) => {
|
export const customObstacleCourseLeaderboardController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { getGuildForRequest, hasGuildPermission } from "@/src/services/guildService";
|
import { getGuildForRequest, hasGuildPermission } from "../../services/guildService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IGuildRank } from "@/src/types/guildTypes";
|
import type { IGuildRank } from "../../types/guildTypes.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const customizeGuildRanksController: RequestHandler = async (req, res) => {
|
export const customizeGuildRanksController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { AllianceMember, GuildMember } from "@/src/models/guildModel";
|
import { AllianceMember, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const declineAllianceInviteController: RequestHandler = async (req, res) => {
|
export const declineAllianceInviteController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { GuildMember } from "@/src/models/guildModel";
|
import { GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const declineGuildInviteController: RequestHandler = async (req, res) => {
|
export const declineGuildInviteController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { deleteSession } from "@/src/managers/sessionManager";
|
import { deleteSession } from "../../managers/sessionManager.ts";
|
||||||
|
|
||||||
const deleteSessionController: RequestHandler = (_req, res) => {
|
const deleteSessionController: RequestHandler = (_req, res) => {
|
||||||
deleteSession(_req.query.sessionId as string);
|
deleteSession(_req.query.sessionId as string);
|
||||||
|
|||||||
@ -5,11 +5,11 @@ import {
|
|||||||
hasGuildPermission,
|
hasGuildPermission,
|
||||||
refundDojoDeco,
|
refundDojoDeco,
|
||||||
removeDojoDeco
|
removeDojoDeco
|
||||||
} from "@/src/services/guildService";
|
} from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const destroyDojoDecoController: RequestHandler = async (req, res) => {
|
export const destroyDojoDecoController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { Alliance, AllianceMember, Guild, GuildMember } from "@/src/models/guildModel";
|
import { Alliance, AllianceMember, Guild, GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import { parallelForeach } from "@/src/utils/async-utils";
|
import { parallelForeach } from "../../utils/async-utils.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const divvyAllianceVaultController: RequestHandler = async (req, res) => {
|
export const divvyAllianceVaultController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
import type { TGuildDatabaseDocument } from "@/src/models/guildModel";
|
import type { TGuildDatabaseDocument } from "../../models/guildModel.ts";
|
||||||
import { GuildMember } from "@/src/models/guildModel";
|
import { GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getDojoClient, getGuildForRequestEx, hasAccessToDojo, scaleRequiredCount } from "@/src/services/guildService";
|
import {
|
||||||
import { getInventory, updateCurrency } from "@/src/services/inventoryService";
|
getDojoClient,
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
getGuildForRequestEx,
|
||||||
import type { IDojoContributable } from "@/src/types/guildTypes";
|
hasAccessToDojo,
|
||||||
|
scaleRequiredCount
|
||||||
|
} from "../../services/guildService.ts";
|
||||||
|
import { getInventory, updateCurrency } from "../../services/inventoryService.ts";
|
||||||
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
|
import type { IDojoContributable } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import type { IDojoBuild } from "warframe-public-export-plus";
|
import type { IDojoBuild } from "warframe-public-export-plus";
|
||||||
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate, toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { fromStoreItem } from "@/src/services/itemDataService";
|
import { fromStoreItem } from "../../services/itemDataService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getRandomInt, getRandomWeightedRewardUc } from "@/src/services/rngService";
|
import { getRandomInt, getRandomWeightedRewardUc } from "../../services/rngService.ts";
|
||||||
import type { IMongoDate, IOid } from "@/src/types/commonTypes";
|
import type { IMongoDate, IOid } from "../../types/commonTypes.ts";
|
||||||
import type { IDroneClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IDroneClient } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportDrones, ExportResources, ExportSystems } from "warframe-public-export-plus";
|
import { ExportDrones, ExportResources, ExportSystems } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,18 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { combineInventoryChanges, getInventory } from "@/src/services/inventoryService";
|
import { combineInventoryChanges, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import type { IEndlessXpReward, IInventoryClient, TEndlessXpCategory } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type {
|
||||||
import { logger } from "@/src/utils/logger";
|
IEndlessXpReward,
|
||||||
|
IInventoryClient,
|
||||||
|
TEndlessXpCategory
|
||||||
|
} from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { ICountedStoreItem } from "warframe-public-export-plus";
|
import type { ICountedStoreItem } from "warframe-public-export-plus";
|
||||||
import { ExportRewards } from "warframe-public-export-plus";
|
import { ExportRewards } from "warframe-public-export-plus";
|
||||||
import { getRandomElement } from "@/src/services/rngService";
|
import { getRandomElement } from "../../services/rngService.ts";
|
||||||
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
import { handleStoreItemAcquisition } from "../../services/purchaseService.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
|
|
||||||
export const endlessXpController: RequestHandler = async (req, res) => {
|
export const endlessXpController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getInventory, updateEntratiVault } from "@/src/services/inventoryService";
|
import { getInventory, updateEntratiVault } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const entratiLabConquestModeController: RequestHandler = async (req, res) => {
|
export const entratiLabConquestModeController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import type { WeaponTypeInternal } from "@/src/services/itemDataService";
|
import type { WeaponTypeInternal } from "../../services/itemDataService.ts";
|
||||||
import { getRecipe } from "@/src/services/itemDataService";
|
import { getRecipe } from "../../services/itemDataService.ts";
|
||||||
import { EquipmentFeatures } from "@/src/types/equipmentTypes";
|
import { EquipmentFeatures } from "../../types/equipmentTypes.ts";
|
||||||
|
|
||||||
export const evolveWeaponController: RequestHandler = async (req, res) => {
|
export const evolveWeaponController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getSession } from "@/src/managers/sessionManager";
|
import { getSession } from "../../managers/sessionManager.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { IFindSessionRequest } from "@/src/types/session";
|
import type { IFindSessionRequest } from "../../types/session.ts";
|
||||||
|
|
||||||
export const findSessionsController: RequestHandler = (_req, res) => {
|
export const findSessionsController: RequestHandler = (_req, res) => {
|
||||||
const req = JSON.parse(String(_req.body)) as IFindSessionRequest;
|
const req = JSON.parse(String(_req.body)) as IFindSessionRequest;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addMiscItems, addStanding, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, addStanding, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportResources } from "warframe-public-export-plus";
|
import { ExportResources } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory, addMiscItems, addEquipment, occupySlot } from "@/src/services/inventoryService";
|
import { getInventory, addMiscItems, addEquipment, occupySlot } from "../../services/inventoryService.ts";
|
||||||
import type { IMiscItem, TFocusPolarity, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IMiscItem, TFocusPolarity, TEquipmentKey } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { ExportFocusUpgrades } from "warframe-public-export-plus";
|
import { ExportFocusUpgrades } from "warframe-public-export-plus";
|
||||||
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
|
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
|
|
||||||
export const focusController: RequestHandler = async (req, res) => {
|
export const focusController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportResources } from "warframe-public-export-plus";
|
import { ExportResources } from "warframe-public-export-plus";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { addFusionTreasures, addMiscItems, getInventory } from "@/src/services/inventoryService";
|
import { addFusionTreasures, addMiscItems, getInventory } from "../../services/inventoryService.ts";
|
||||||
import type { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { parseFusionTreasure } from "@/src/helpers/inventoryHelpers";
|
import { parseFusionTreasure } from "../../helpers/inventoryHelpers.ts";
|
||||||
|
|
||||||
interface IFusionTreasureRequest {
|
interface IFusionTreasureRequest {
|
||||||
oldTreasureName: string;
|
oldTreasureName: string;
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addMiscItem, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItem, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { toStoreItem } from "@/src/services/itemDataService";
|
import { toStoreItem } from "../../services/itemDataService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { createGarden, getPersonalRooms } from "@/src/services/personalRoomsService";
|
import { createGarden, getPersonalRooms } from "../../services/personalRoomsService.ts";
|
||||||
import type { IMongoDate } from "@/src/types/commonTypes";
|
import type { IMongoDate } from "../../types/commonTypes.ts";
|
||||||
import type { IMissionReward } from "@/src/types/missionTypes";
|
import type { IMissionReward } from "../../types/missionTypes.ts";
|
||||||
import type { IGardeningClient, IPersonalRoomsClient } from "@/src/types/personalRoomsTypes";
|
import type { IGardeningClient, IPersonalRoomsClient } from "../../types/personalRoomsTypes.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { dict_en, ExportResources } from "warframe-public-export-plus";
|
import { dict_en, ExportResources } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { updateGeneric } from "@/src/services/inventoryService";
|
import { updateGeneric } from "../../services/inventoryService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import type { IGenericUpdate } from "@/src/types/genericUpdate";
|
import type { IGenericUpdate } from "../../types/genericUpdate.ts";
|
||||||
|
|
||||||
// This endpoint used to be /api/genericUpdate.php, but sometime around the Jade Shadows update, it was changed to /api/updateNodeIntros.php.
|
// This endpoint used to be /api/genericUpdate.php, but sometime around the Jade Shadows update, it was changed to /api/updateNodeIntros.php.
|
||||||
// SpaceNinjaServer supports both endpoints right now.
|
// SpaceNinjaServer supports both endpoints right now.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { Alliance, Guild } from "@/src/models/guildModel";
|
import { Alliance, Guild } from "../../models/guildModel.ts";
|
||||||
import { getAllianceClient } from "@/src/services/guildService";
|
import { getAllianceClient } from "../../services/guildService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const getAllianceController: RequestHandler = async (req, res) => {
|
export const getAllianceController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { DailyDeal } from "@/src/models/worldStateModel";
|
import { DailyDeal } from "../../models/worldStateModel.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const getDailyDealStockLevelsController: RequestHandler = async (req, res) => {
|
export const getDailyDealStockLevelsController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { toOid } from "@/src/helpers/inventoryHelpers";
|
import { toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { Friendship } from "@/src/models/friendModel";
|
import { Friendship } from "../../models/friendModel.ts";
|
||||||
import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "@/src/services/friendService";
|
import { addAccountDataToFriendInfo, addInventoryDataToFriendInfo } from "../../services/friendService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IFriendInfo } from "@/src/types/friendTypes";
|
import type { IFriendInfo } from "../../types/friendTypes.ts";
|
||||||
import type { Request, RequestHandler, Response } from "express";
|
import type { Request, RequestHandler, Response } from "express";
|
||||||
|
|
||||||
// POST with {} instead of GET as of 38.5.0
|
// POST with {} instead of GET as of 38.5.0
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { GuildMember } from "@/src/models/guildModel";
|
import { GuildMember } from "../../models/guildModel.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IGuildMemberClient } from "@/src/types/guildTypes";
|
import type { IGuildMemberClient } from "../../types/guildTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const getGuildContributionsController: RequestHandler = async (req, res) => {
|
export const getGuildContributionsController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "../../models/guildModel.ts";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { createUniqueClanName, getGuildClient } from "@/src/services/guildService";
|
import { createUniqueClanName, getGuildClient } from "../../services/guildService.ts";
|
||||||
|
|
||||||
export const getGuildController: RequestHandler = async (req, res) => {
|
export const getGuildController: RequestHandler = async (req, res) => {
|
||||||
const account = await getAccountForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "../../models/guildModel.ts";
|
||||||
import { getDojoClient } from "@/src/services/guildService";
|
import { getDojoClient } from "../../services/guildService.ts";
|
||||||
import { Account } from "@/src/models/loginModel";
|
import { Account } from "../../models/loginModel.ts";
|
||||||
|
|
||||||
export const getGuildDojoController: RequestHandler = async (req, res) => {
|
export const getGuildDojoController: RequestHandler = async (req, res) => {
|
||||||
const guildId = req.query.guildId as string;
|
const guildId = req.query.guildId as string;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "../../models/guildModel.ts";
|
||||||
|
|
||||||
export const getGuildEventScoreController: RequestHandler = async (req, res) => {
|
export const getGuildEventScoreController: RequestHandler = async (req, res) => {
|
||||||
const account = await getAccountForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "../../models/guildModel.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IMongoDate } from "@/src/types/commonTypes";
|
import type { IMongoDate } from "../../types/commonTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const getGuildLogController: RequestHandler = async (req, res) => {
|
export const getGuildLogController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { toOid } from "@/src/helpers/inventoryHelpers";
|
import { toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { Account, Ignore } from "@/src/models/loginModel";
|
import { Account, Ignore } from "../../models/loginModel.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IFriendInfo } from "@/src/types/friendTypes";
|
import type { IFriendInfo } from "../../types/friendTypes.ts";
|
||||||
import { parallelForeach } from "@/src/utils/async-utils";
|
import { parallelForeach } from "../../utils/async-utils.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const getIgnoredUsersController: RequestHandler = async (req, res) => {
|
export const getIgnoredUsersController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
|
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { generateRewardSeed } from "@/src/services/rngService";
|
import { generateRewardSeed } from "../../services/rngService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const getNewRewardSeedController: RequestHandler = async (req, res) => {
|
export const getNewRewardSeedController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { EPOCH, getSeasonChallengePools, getWorldState, pushWeeklyActs } from "@/src/services/worldStateService";
|
import { EPOCH, getSeasonChallengePools, getWorldState, pushWeeklyActs } from "../../services/worldStateService.ts";
|
||||||
import { unixTimesInMs } from "@/src/constants/timeConstants";
|
import { unixTimesInMs } from "../../constants/timeConstants.ts";
|
||||||
import type { ISeasonChallenge } from "@/src/types/worldStateTypes";
|
import type { ISeasonChallenge } from "../../types/worldStateTypes.ts";
|
||||||
import { ExportChallenges } from "warframe-public-export-plus";
|
import { ExportChallenges } from "warframe-public-export-plus";
|
||||||
|
|
||||||
export const getPastWeeklyChallengesController: RequestHandler = async (req, res) => {
|
export const getPastWeeklyChallengesController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { config } from "@/src/services/configService";
|
import { config } from "../../services/configService.ts";
|
||||||
import allShipFeatures from "@/static/fixed_responses/allShipFeatures.json";
|
import allShipFeatures from "../../../static/fixed_responses/allShipFeatures.json" with { type: "json" };
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { createGarden, getPersonalRooms } from "@/src/services/personalRoomsService";
|
import { createGarden, getPersonalRooms } from "../../services/personalRoomsService.ts";
|
||||||
import type { IGetShipResponse, IPersonalRoomsClient } from "@/src/types/personalRoomsTypes";
|
import type { IGetShipResponse, IPersonalRoomsClient } from "../../types/personalRoomsTypes.ts";
|
||||||
import { getLoadout } from "@/src/services/loadoutService";
|
import { getLoadout } from "../../services/loadoutService.ts";
|
||||||
import { toOid } from "@/src/helpers/inventoryHelpers";
|
import { toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
|
|
||||||
export const getShipController: RequestHandler = async (req, res) => {
|
export const getShipController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { applyStandingToVendorManifest, getVendorManifestByTypeName } from "@/src/services/serversideVendorsService";
|
import { applyStandingToVendorManifest, getVendorManifestByTypeName } from "../../services/serversideVendorsService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { config } from "@/src/services/configService";
|
import { config } from "../../services/configService.ts";
|
||||||
|
|
||||||
export const getVendorInfoController: RequestHandler = async (req, res) => {
|
export const getVendorInfoController: RequestHandler = async (req, res) => {
|
||||||
let manifest = getVendorManifestByTypeName(req.query.vendor as string);
|
let manifest = getVendorManifestByTypeName(req.query.vendor as string);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { crackRelic } from "@/src/helpers/relicHelper";
|
import { crackRelic } from "../../helpers/relicHelper.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IVoidTearParticipantInfo } from "@/src/types/requestTypes";
|
import type { IVoidTearParticipantInfo } from "../../types/requestTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const getVoidProjectionRewardsController: RequestHandler = async (req, res) => {
|
export const getVoidProjectionRewardsController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,18 +1,18 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { Account } from "@/src/models/loginModel";
|
import { Account } from "../../models/loginModel.ts";
|
||||||
import { areFriends } from "@/src/services/friendService";
|
import { areFriends } from "../../services/friendService.ts";
|
||||||
import { createMessage } from "@/src/services/inboxService";
|
import { createMessage } from "../../services/inboxService.ts";
|
||||||
import {
|
import {
|
||||||
combineInventoryChanges,
|
combineInventoryChanges,
|
||||||
getEffectiveAvatarImageType,
|
getEffectiveAvatarImageType,
|
||||||
getInventory,
|
getInventory,
|
||||||
updateCurrency
|
updateCurrency
|
||||||
} from "@/src/services/inventoryService";
|
} from "../../services/inventoryService.ts";
|
||||||
import { getAccountForRequest, getSuffixedName } from "@/src/services/loginService";
|
import { getAccountForRequest, getSuffixedName } from "../../services/loginService.ts";
|
||||||
import { handleDailyDealPurchase, handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
import { handleDailyDealPurchase, handleStoreItemAcquisition } from "../../services/purchaseService.ts";
|
||||||
import type { IOid } from "@/src/types/commonTypes";
|
import type { IOid } from "../../types/commonTypes.ts";
|
||||||
import type { IPurchaseParams, IPurchaseResponse } from "@/src/types/purchaseTypes";
|
import type { IPurchaseParams, IPurchaseResponse } from "../../types/purchaseTypes.ts";
|
||||||
import { PurchaseSource } from "@/src/types/purchaseTypes";
|
import { PurchaseSource } from "../../types/purchaseTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportBundles, ExportFlavour } from "warframe-public-export-plus";
|
import { ExportBundles, ExportFlavour } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/wsService";
|
import { sendWsBroadcastTo } from "../../services/wsService.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addMiscItems, getInventory } from "@/src/services/inventoryService";
|
import { addMiscItems, getInventory } from "../../services/inventoryService.ts";
|
||||||
import type { TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { TEquipmentKey } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
import type { ArtifactPolarity } from "../../types/inventoryTypes/commonInventoryTypes.ts";
|
||||||
import { ExportRecipes } from "warframe-public-export-plus";
|
import { ExportRecipes } from "warframe-public-export-plus";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import type { IEquipmentClient } from "@/src/types/equipmentTypes";
|
import type { IEquipmentClient } from "../../types/equipmentTypes.ts";
|
||||||
import { EquipmentFeatures } from "@/src/types/equipmentTypes";
|
import { EquipmentFeatures } from "../../types/equipmentTypes.ts";
|
||||||
|
|
||||||
interface IGildWeaponRequest {
|
interface IGildWeaponRequest {
|
||||||
ItemName: string;
|
ItemName: string;
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { parseString } from "@/src/helpers/general";
|
import { parseString } from "../../helpers/general.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { giveKeyChainItem } from "@/src/services/questService";
|
import { giveKeyChainItem } from "../../services/questService.ts";
|
||||||
import type { IKeyChainRequest } from "@/src/types/requestTypes";
|
import type { IKeyChainRequest } from "../../types/requestTypes.ts";
|
||||||
|
|
||||||
export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, res) => {
|
export const giveKeyChainTriggeredItemsController: RequestHandler = async (req, res) => {
|
||||||
const accountId = parseString(req.query.accountId);
|
const accountId = parseString(req.query.accountId);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { giveKeyChainMessage } from "@/src/services/questService";
|
import { giveKeyChainMessage } from "../../services/questService.ts";
|
||||||
import type { IKeyChainRequest } from "@/src/types/requestTypes";
|
import type { IKeyChainRequest } from "../../types/requestTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const giveKeyChainTriggeredMessageController: RequestHandler = async (req, res) => {
|
export const giveKeyChainTriggeredMessageController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addItem, getInventory } from "@/src/services/inventoryService";
|
import { addItem, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { IOid } from "@/src/types/commonTypes";
|
import type { IOid } from "../../types/commonTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const giveQuestKeyRewardController: RequestHandler = async (req, res) => {
|
export const giveQuestKeyRewardController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addLoreFragmentScans, addShipDecorations, getInventory } from "@/src/services/inventoryService";
|
import { addLoreFragmentScans, addShipDecorations, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { ITypeCount } from "@/src/types/commonTypes";
|
import type { ITypeCount } from "../../types/commonTypes.ts";
|
||||||
import type { ILoreFragmentScan } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { ILoreFragmentScan } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const giveShipDecoAndLoreFragmentController: RequestHandler = async (req, res) => {
|
export const giveShipDecoAndLoreFragmentController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addStartingGear, getInventory } from "@/src/services/inventoryService";
|
import { addStartingGear, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import type { TPartialStartingGear } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { TPartialStartingGear } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
export const giveStartingGearController: RequestHandler = async (req, res) => {
|
export const giveStartingGearController: RequestHandler = async (req, res) => {
|
||||||
|
|||||||
@ -11,9 +11,9 @@ import {
|
|||||||
removePigmentsFromGuildMembers,
|
removePigmentsFromGuildMembers,
|
||||||
scaleRequiredCount,
|
scaleRequiredCount,
|
||||||
setGuildTechLogState
|
setGuildTechLogState
|
||||||
} from "@/src/services/guildService";
|
} from "../../services/guildService.ts";
|
||||||
import { ExportDojoRecipes, ExportRailjackWeapons } from "warframe-public-export-plus";
|
import { ExportDojoRecipes, ExportRailjackWeapons } from "warframe-public-export-plus";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import {
|
import {
|
||||||
addCrewShipWeaponSkin,
|
addCrewShipWeaponSkin,
|
||||||
addEquipment,
|
addEquipment,
|
||||||
@ -24,17 +24,17 @@ import {
|
|||||||
getInventory,
|
getInventory,
|
||||||
occupySlot,
|
occupySlot,
|
||||||
updateCurrency
|
updateCurrency
|
||||||
} from "@/src/services/inventoryService";
|
} from "../../services/inventoryService.ts";
|
||||||
import type { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IMiscItem } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { IInventoryChanges } from "@/src/types/purchaseTypes";
|
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
|
||||||
import { config } from "@/src/services/configService";
|
import { config } from "../../services/configService.ts";
|
||||||
import type { ITechProjectClient } from "@/src/types/guildTypes";
|
import type { ITechProjectClient } from "../../types/guildTypes.ts";
|
||||||
import { GuildPermission } from "@/src/types/guildTypes";
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
||||||
import { GuildMember } from "@/src/models/guildModel";
|
import { GuildMember } from "../../models/guildModel.ts";
|
||||||
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate, toOid } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
|
|
||||||
export const guildTechController: RequestHandler = async (req, res) => {
|
export const guildTechController: RequestHandler = async (req, res) => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import { createNewSession } from "@/src/managers/sessionManager";
|
import { createNewSession } from "../../managers/sessionManager.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import type { ISession } from "@/src/types/session";
|
import type { ISession } from "../../types/session.ts";
|
||||||
import { JSONParse } from "json-with-bigint";
|
import { JSONParse } from "json-with-bigint";
|
||||||
import { toOid2, version_compare } from "@/src/helpers/inventoryHelpers";
|
import { toOid2, version_compare } from "../../helpers/inventoryHelpers.ts";
|
||||||
|
|
||||||
const hostSessionController: RequestHandler = async (req, res) => {
|
const hostSessionController: RequestHandler = async (req, res) => {
|
||||||
const account = await getAccountForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { addBooster, getInventory } from "@/src/services/inventoryService";
|
import { addBooster, getInventory } from "../../services/inventoryService.ts";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getRandomInt } from "@/src/services/rngService";
|
import { getRandomInt } from "../../services/rngService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { ExportBoosters } from "warframe-public-export-plus";
|
import { ExportBoosters } from "warframe-public-export-plus";
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { Inbox } from "@/src/models/inboxModel";
|
import { Inbox } from "../../models/inboxModel.ts";
|
||||||
import {
|
import {
|
||||||
createMessage,
|
createMessage,
|
||||||
createNewEventMessages,
|
createNewEventMessages,
|
||||||
@ -7,20 +7,20 @@ import {
|
|||||||
deleteMessageRead,
|
deleteMessageRead,
|
||||||
getAllMessagesSorted,
|
getAllMessagesSorted,
|
||||||
getMessage
|
getMessage
|
||||||
} from "@/src/services/inboxService";
|
} from "../../services/inboxService.ts";
|
||||||
import { getAccountForRequest, getAccountFromSuffixedName, getSuffixedName } from "@/src/services/loginService";
|
import { getAccountForRequest, getAccountFromSuffixedName, getSuffixedName } from "../../services/loginService.ts";
|
||||||
import {
|
import {
|
||||||
addItems,
|
addItems,
|
||||||
combineInventoryChanges,
|
combineInventoryChanges,
|
||||||
getEffectiveAvatarImageType,
|
getEffectiveAvatarImageType,
|
||||||
getInventory,
|
getInventory,
|
||||||
updateCurrency
|
updateCurrency
|
||||||
} from "@/src/services/inventoryService";
|
} from "../../services/inventoryService.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { ExportFlavour } from "warframe-public-export-plus";
|
import { ExportFlavour } from "warframe-public-export-plus";
|
||||||
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
import { handleStoreItemAcquisition } from "../../services/purchaseService.ts";
|
||||||
import { fromStoreItem, isStoreItem } from "@/src/services/itemDataService";
|
import { fromStoreItem, isStoreItem } from "../../services/itemDataService.ts";
|
||||||
import type { IOid } from "@/src/types/commonTypes";
|
import type { IOid } from "../../types/commonTypes.ts";
|
||||||
|
|
||||||
export const inboxController: RequestHandler = async (req, res) => {
|
export const inboxController: RequestHandler = async (req, res) => {
|
||||||
const { deleteId, lastMessage: latestClientMessageId, messageId } = req.query;
|
const { deleteId, lastMessage: latestClientMessageId, messageId } = req.query;
|
||||||
|
|||||||
@ -1,25 +1,25 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
|
||||||
import { getInventory, addMiscItems, updateCurrency, addRecipes, freeUpSlot } from "@/src/services/inventoryService";
|
import { getInventory, addMiscItems, updateCurrency, addRecipes, freeUpSlot } from "../../services/inventoryService.ts";
|
||||||
import type { IOid } from "@/src/types/commonTypes";
|
import type { IOid } from "../../types/commonTypes.ts";
|
||||||
import type {
|
import type {
|
||||||
IConsumedSuit,
|
IConsumedSuit,
|
||||||
IHelminthFoodRecord,
|
IHelminthFoodRecord,
|
||||||
IInventoryClient,
|
IInventoryClient,
|
||||||
IMiscItem
|
IMiscItem
|
||||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
} from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { ExportMisc } from "warframe-public-export-plus";
|
import { ExportMisc } from "warframe-public-export-plus";
|
||||||
import { getRecipe } from "@/src/services/itemDataService";
|
import { getRecipe } from "../../services/itemDataService.ts";
|
||||||
import { toMongoDate, version_compare } from "@/src/helpers/inventoryHelpers";
|
import { toMongoDate, version_compare } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { colorToShard } from "@/src/helpers/shardHelper";
|
import { colorToShard } from "../../helpers/shardHelper.ts";
|
||||||
import {
|
import {
|
||||||
addInfestedFoundryXP,
|
addInfestedFoundryXP,
|
||||||
applyCheatsToInfestedFoundry,
|
applyCheatsToInfestedFoundry,
|
||||||
handleSubsumeCompletion
|
handleSubsumeCompletion
|
||||||
} from "@/src/services/infestedFoundryService";
|
} from "../../services/infestedFoundryService.ts";
|
||||||
|
|
||||||
export const infestedFoundryController: RequestHandler = async (req, res) => {
|
export const infestedFoundryController: RequestHandler = async (req, res) => {
|
||||||
const account = await getAccountForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import type { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
|
import { Inventory } from "../../models/inventoryModels/inventoryModel.ts";
|
||||||
import { config } from "@/src/services/configService";
|
import { config } from "../../services/configService.ts";
|
||||||
import allDialogue from "@/static/fixed_responses/allDialogue.json";
|
import allDialogue from "../../../static/fixed_responses/allDialogue.json" with { type: "json" };
|
||||||
import type { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
|
import type { ILoadoutDatabase } from "../../types/saveLoadoutTypes.ts";
|
||||||
import type { IInventoryClient, IShipInventory } from "@/src/types/inventoryTypes/inventoryTypes";
|
import type { IInventoryClient, IShipInventory } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { equipmentKeys } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { equipmentKeys } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import type { IPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
import type { IPolarity } from "../../types/inventoryTypes/commonInventoryTypes.ts";
|
||||||
import { ArtifactPolarity } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
import { ArtifactPolarity } from "../../types/inventoryTypes/commonInventoryTypes.ts";
|
||||||
import type { ICountedItem } from "warframe-public-export-plus";
|
import type { ICountedItem } from "warframe-public-export-plus";
|
||||||
import { eFaction, ExportCustoms, ExportFlavour, ExportResources, ExportVirtuals } from "warframe-public-export-plus";
|
import { eFaction, ExportCustoms, ExportFlavour, ExportResources, ExportVirtuals } from "warframe-public-export-plus";
|
||||||
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "@/src/services/infestedFoundryService";
|
import { applyCheatsToInfestedFoundry, handleSubsumeCompletion } from "../../services/infestedFoundryService.ts";
|
||||||
import {
|
import {
|
||||||
addEmailItem,
|
addEmailItem,
|
||||||
addItem,
|
addItem,
|
||||||
@ -21,22 +21,22 @@ import {
|
|||||||
cleanupInventory,
|
cleanupInventory,
|
||||||
createLibraryDailyTask,
|
createLibraryDailyTask,
|
||||||
getCalendarProgress
|
getCalendarProgress
|
||||||
} from "@/src/services/inventoryService";
|
} from "../../services/inventoryService.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { addString, catBreadHash } from "@/src/helpers/stringHelpers";
|
import { addString, catBreadHash } from "../../helpers/stringHelpers.ts";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { getNemesisManifest } from "@/src/helpers/nemesisHelpers";
|
import { getNemesisManifest } from "../../helpers/nemesisHelpers.ts";
|
||||||
import { getPersonalRooms } from "@/src/services/personalRoomsService";
|
import { getPersonalRooms } from "../../services/personalRoomsService.ts";
|
||||||
import type { IPersonalRoomsClient } from "@/src/types/personalRoomsTypes";
|
import type { IPersonalRoomsClient } from "../../types/personalRoomsTypes.ts";
|
||||||
import { Ship } from "@/src/models/shipModel";
|
import { Ship } from "../../models/shipModel.ts";
|
||||||
import { toLegacyOid, toOid, version_compare } from "@/src/helpers/inventoryHelpers";
|
import { toLegacyOid, toOid, version_compare } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { Inbox } from "@/src/models/inboxModel";
|
import { Inbox } from "../../models/inboxModel.ts";
|
||||||
import { unixTimesInMs } from "@/src/constants/timeConstants";
|
import { unixTimesInMs } from "../../constants/timeConstants.ts";
|
||||||
import { DailyDeal } from "@/src/models/worldStateModel";
|
import { DailyDeal } from "../../models/worldStateModel.ts";
|
||||||
import { EquipmentFeatures } from "@/src/types/equipmentTypes";
|
import { EquipmentFeatures } from "../../types/equipmentTypes.ts";
|
||||||
import { generateRewardSeed } from "@/src/services/rngService";
|
import { generateRewardSeed } from "../../services/rngService.ts";
|
||||||
import { getInvasionByOid, getWorldState } from "@/src/services/worldStateService";
|
import { getInvasionByOid, getWorldState } from "../../services/worldStateService.ts";
|
||||||
import { createMessage } from "@/src/services/inboxService";
|
import { createMessage } from "../../services/inboxService.ts";
|
||||||
|
|
||||||
export const inventoryController: RequestHandler = async (request, response) => {
|
export const inventoryController: RequestHandler = async (request, response) => {
|
||||||
const account = await getAccountForRequest(request);
|
const account = await getAccountForRequest(request);
|
||||||
@ -306,7 +306,7 @@ export const getInventoryResponse = async (
|
|||||||
inventoryResponse.PrimeTokens = 999999999;
|
inventoryResponse.PrimeTokens = 999999999;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.skipAllDialogue) {
|
if (inventory.skipAllDialogue) {
|
||||||
inventoryResponse.TauntHistory = [
|
inventoryResponse.TauntHistory = [
|
||||||
{
|
{
|
||||||
node: "TreasureTutorial",
|
node: "TreasureTutorial",
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
||||||
import { getInventory, updateCurrency, updateSlots } from "@/src/services/inventoryService";
|
import { getInventory, updateCurrency, updateSlots } from "../../services/inventoryService.ts";
|
||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { InventorySlot } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { InventorySlot } from "../../types/inventoryTypes/inventoryTypes.ts";
|
||||||
import { exhaustive } from "@/src/utils/ts-utils";
|
import { exhaustive } from "../../utils/ts-utils.ts";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
loadout slots are additionally purchased slots only
|
loadout slots are additionally purchased slots only
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getSessionByID } from "@/src/managers/sessionManager";
|
import { getSessionByID } from "../../managers/sessionManager.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
|
|
||||||
export const joinSessionController: RequestHandler = (req, res) => {
|
export const joinSessionController: RequestHandler = (req, res) => {
|
||||||
const reqBody = JSON.parse(String(req.body)) as IJoinSessionRequest;
|
const reqBody = JSON.parse(String(req.body)) as IJoinSessionRequest;
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
import { config } from "@/src/services/configService";
|
import { config } from "../../services/configService.ts";
|
||||||
import { buildConfig } from "@/src/services/buildConfigService";
|
import { buildConfig } from "../../services/buildConfigService.ts";
|
||||||
|
|
||||||
import { Account } from "@/src/models/loginModel";
|
import { Account } from "../../models/loginModel.ts";
|
||||||
import { createAccount, createNonce, getUsernameFromEmail, isCorrectPassword } from "@/src/services/loginService";
|
import { createAccount, createNonce, getUsernameFromEmail, isCorrectPassword } from "../../services/loginService.ts";
|
||||||
import type { IDatabaseAccountJson, ILoginRequest, ILoginResponse } from "@/src/types/loginTypes";
|
import type { IDatabaseAccountJson, ILoginRequest, ILoginResponse } from "../../types/loginTypes.ts";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "../../utils/logger.ts";
|
||||||
import { version_compare } from "@/src/helpers/inventoryHelpers";
|
import { version_compare } from "../../helpers/inventoryHelpers.ts";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/wsService";
|
import { sendWsBroadcastTo } from "../../services/wsService.ts";
|
||||||
|
|
||||||
export const loginController: RequestHandler = async (request, response) => {
|
export const loginController: RequestHandler = async (request, response) => {
|
||||||
const loginRequest = JSON.parse(String(request.body)) as ILoginRequest; // parse octet stream of json data to json object
|
const loginRequest = JSON.parse(String(request.body)) as ILoginRequest; // parse octet stream of json data to json object
|
||||||
@ -140,7 +140,11 @@ const createLoginResponse = (
|
|||||||
resp.MatchmakingBuildId = buildConfig.matchmakingBuildId;
|
resp.MatchmakingBuildId = buildConfig.matchmakingBuildId;
|
||||||
}
|
}
|
||||||
if (version_compare(buildLabel, "2023.04.25.23.40") >= 0) {
|
if (version_compare(buildLabel, "2023.04.25.23.40") >= 0) {
|
||||||
resp.platformCDNs = [`${myUrlBase}/`];
|
if (version_compare(buildLabel, "2025.08.26.09.49") >= 0) {
|
||||||
|
resp.platformCDNs = [`${myUrlBase}/dynamic/`];
|
||||||
|
} else {
|
||||||
|
resp.platformCDNs = [`${myUrlBase}/`];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return resp;
|
return resp;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,15 +1,14 @@
|
|||||||
import type { RequestHandler } from "express";
|
import type { RequestHandler } from "express";
|
||||||
import { getAccountForRequest } from "@/src/services/loginService";
|
import { getAccountForRequest } from "../../services/loginService.ts";
|
||||||
import type { ILoginRewardsReponse } from "@/src/services/loginRewardService";
|
import type { ILoginRewardsReponse } from "../../services/loginRewardService.ts";
|
||||||
import {
|
import {
|
||||||
claimLoginReward,
|
claimLoginReward,
|
||||||
getRandomLoginRewards,
|
getRandomLoginRewards,
|
||||||
isLoginRewardAChoice,
|
isLoginRewardAChoice,
|
||||||
setAccountGotLoginRewardToday
|
setAccountGotLoginRewardToday
|
||||||
} from "@/src/services/loginRewardService";
|
} from "../../services/loginRewardService.ts";
|
||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "../../services/inventoryService.ts";
|
||||||
import { config } from "@/src/services/configService";
|
import { sendWsBroadcastTo } from "../../services/wsService.ts";
|
||||||
import { sendWsBroadcastTo } from "@/src/services/wsService";
|
|
||||||
|
|
||||||
export const loginRewardsController: RequestHandler = async (req, res) => {
|
export const loginRewardsController: RequestHandler = async (req, res) => {
|
||||||
const account = await getAccountForRequest(req);
|
const account = await getAccountForRequest(req);
|
||||||
@ -17,41 +16,42 @@ export const loginRewardsController: RequestHandler = async (req, res) => {
|
|||||||
const isMilestoneDay = account.LoginDays == 5 || account.LoginDays % 50 == 0;
|
const isMilestoneDay = account.LoginDays == 5 || account.LoginDays % 50 == 0;
|
||||||
const nextMilestoneDay = account.LoginDays < 5 ? 5 : (Math.trunc(account.LoginDays / 50) + 1) * 50;
|
const nextMilestoneDay = account.LoginDays < 5 ? 5 : (Math.trunc(account.LoginDays / 50) + 1) * 50;
|
||||||
|
|
||||||
if (today == account.LastLoginRewardDate || config.disableDailyTribute) {
|
if (today != account.LastLoginRewardDate) {
|
||||||
res.json({
|
const inventory = await getInventory(account._id.toString());
|
||||||
DailyTributeInfo: {
|
if (!inventory.disableDailyTribute) {
|
||||||
IsMilestoneDay: isMilestoneDay,
|
const randomRewards = getRandomLoginRewards(account, inventory);
|
||||||
IsChooseRewardSet: isLoginRewardAChoice(account),
|
const response: ILoginRewardsReponse = {
|
||||||
LoginDays: account.LoginDays,
|
DailyTributeInfo: {
|
||||||
NextMilestoneReward: "",
|
Rewards: randomRewards,
|
||||||
NextMilestoneDay: nextMilestoneDay
|
IsMilestoneDay: isMilestoneDay,
|
||||||
}
|
IsChooseRewardSet: randomRewards.length != 1,
|
||||||
} satisfies ILoginRewardsReponse);
|
LoginDays: account.LoginDays,
|
||||||
return;
|
NextMilestoneReward: "",
|
||||||
}
|
NextMilestoneDay: nextMilestoneDay,
|
||||||
|
HasChosenReward: false
|
||||||
|
},
|
||||||
|
LastLoginRewardDate: today
|
||||||
|
};
|
||||||
|
if (!isMilestoneDay && randomRewards.length == 1) {
|
||||||
|
response.DailyTributeInfo.HasChosenReward = true;
|
||||||
|
response.DailyTributeInfo.ChosenReward = randomRewards[0];
|
||||||
|
response.DailyTributeInfo.NewInventory = await claimLoginReward(inventory, randomRewards[0]);
|
||||||
|
setAccountGotLoginRewardToday(account);
|
||||||
|
await Promise.all([inventory.save(), account.save()]);
|
||||||
|
|
||||||
const inventory = await getInventory(account._id.toString());
|
sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
|
||||||
const randomRewards = getRandomLoginRewards(account, inventory);
|
}
|
||||||
const response: ILoginRewardsReponse = {
|
res.json(response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.json({
|
||||||
DailyTributeInfo: {
|
DailyTributeInfo: {
|
||||||
Rewards: randomRewards,
|
|
||||||
IsMilestoneDay: isMilestoneDay,
|
IsMilestoneDay: isMilestoneDay,
|
||||||
IsChooseRewardSet: randomRewards.length != 1,
|
IsChooseRewardSet: isLoginRewardAChoice(account),
|
||||||
LoginDays: account.LoginDays,
|
LoginDays: account.LoginDays,
|
||||||
NextMilestoneReward: "",
|
NextMilestoneReward: "",
|
||||||
NextMilestoneDay: nextMilestoneDay,
|
NextMilestoneDay: nextMilestoneDay
|
||||||
HasChosenReward: false
|
}
|
||||||
},
|
} satisfies ILoginRewardsReponse);
|
||||||
LastLoginRewardDate: today
|
|
||||||
};
|
|
||||||
if (!isMilestoneDay && randomRewards.length == 1) {
|
|
||||||
response.DailyTributeInfo.HasChosenReward = true;
|
|
||||||
response.DailyTributeInfo.ChosenReward = randomRewards[0];
|
|
||||||
response.DailyTributeInfo.NewInventory = await claimLoginReward(inventory, randomRewards[0]);
|
|
||||||
setAccountGotLoginRewardToday(account);
|
|
||||||
await Promise.all([inventory.save(), account.save()]);
|
|
||||||
|
|
||||||
sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
|
|
||||||
}
|
|
||||||
res.json(response);
|
|
||||||
};
|
};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user