Update cli and fix core servers
This commit is contained in:
6
.github/uploadToBucket.mjs
vendored
6
.github/uploadToBucket.mjs
vendored
@ -1,8 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
import { createReadStream } from "fs";
|
||||
import { oracleBucket } from "@sirherobrine23/cloud";
|
||||
import extendsFS from "@sirherobrine23/extends";
|
||||
import path from "node:path";
|
||||
import fs from "node:fs";
|
||||
|
||||
const [,, remote, local] = process.argv;
|
||||
const bucket = await oracleBucket.oracleBucket({
|
||||
@ -12,12 +12,12 @@ const bucket = await oracleBucket.oracleBucket({
|
||||
auth: {
|
||||
type: "preAuthentication",
|
||||
// Public auth (No write enabled).
|
||||
PreAuthenticatedKey: process.env.OCI_AUTHKEY
|
||||
PreAuthenticatedKey: process.env.ociauth || process.env.OCI_AUTHKEY
|
||||
}
|
||||
});
|
||||
|
||||
for await (const file of await extendsFS.readdir(path.resolve(process.cwd(), local))) {
|
||||
console.log("Uploading %O", file);
|
||||
await bucket.uploadFile(path.posix.resolve("/", remote ?? "", path.basename(file)), createReadStream(file));
|
||||
await bucket.uploadFile(path.posix.resolve("/", remote ?? "", path.basename(file)), await fs.promises.readFile(file).catch(() => fs.createReadStream(file)));
|
||||
console.log("Success %O", file);
|
||||
}
|
73
.github/workflows/spigotBuild.yaml
vendored
73
.github/workflows/spigotBuild.yaml
vendored
@ -12,76 +12,24 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
version:
|
||||
- latest
|
||||
- "1.19.2"
|
||||
- "1.19.1"
|
||||
- "1.19"
|
||||
- "1.18.2"
|
||||
- "1.18.1"
|
||||
- "1.18-rc3"
|
||||
- "1.18-pre8"
|
||||
- "1.18-pre5"
|
||||
- "1.18"
|
||||
- "1.17.1"
|
||||
- "1.17"
|
||||
- "1.16.5"
|
||||
- "1.16.4"
|
||||
- "1.16.3"
|
||||
- "1.16.2"
|
||||
- "1.16.1"
|
||||
- "1.15.2"
|
||||
- "1.15.1"
|
||||
- "1.15"
|
||||
- "1.14.4"
|
||||
- "1.14.3-pre4"
|
||||
- "1.14.3"
|
||||
- "1.14.2"
|
||||
- "1.14.1"
|
||||
- "1.14-pre5"
|
||||
- "1.14"
|
||||
- "1.13.2"
|
||||
- "1.13.1"
|
||||
- "1.13-pre7"
|
||||
- "1.13"
|
||||
- "1.12.2"
|
||||
- "1.12.1"
|
||||
- "1.12"
|
||||
- "1.11.2"
|
||||
- "1.11.1"
|
||||
- "1.11"
|
||||
- "1.10.2"
|
||||
- "1.10"
|
||||
- "1.9.4"
|
||||
- "1.9.2"
|
||||
- "1.9"
|
||||
- "1.8.8"
|
||||
- "1.8.7"
|
||||
- "1.8.6"
|
||||
- "1.8.5"
|
||||
- "1.8.4"
|
||||
- "1.8.3"
|
||||
- "1.8"
|
||||
steps:
|
||||
- name: Install ${{ startsWith(matrix.version, 'latest') && '19' || (startsWith(matrix.version, '1.19')||startsWith(matrix.version, '1.18')) && '17' || startsWith(matrix.version, '1.17') && '16' || '8' }} java
|
||||
- name: Install 19 java
|
||||
uses: actions/setup-java@v3
|
||||
continue-on-error: true
|
||||
with:
|
||||
distribution: liberica
|
||||
java-version: ${{ (startsWith(matrix.version, 'latest')||startsWith(matrix.version, '1.19')||startsWith(matrix.version, '1.18')) && '17' || startsWith(matrix.version, '1.17') && '16' || '8' }}
|
||||
java-version: "19"
|
||||
|
||||
- name: Build
|
||||
continue-on-error: true
|
||||
run: |
|
||||
wget -qO build.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
|
||||
java -jar build.jar --rev "${{ matrix.version || 'latest' }}"
|
||||
java -jar build.jar --rev "latest"
|
||||
|
||||
- name: Upload to actifial
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: ${{ matrix.version || 'latest' }}
|
||||
name: latest
|
||||
path: "*.jar"
|
||||
|
||||
# Upload
|
||||
@ -105,17 +53,8 @@ jobs:
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- name: Rename files
|
||||
run: |
|
||||
set -ex
|
||||
cd artifacts/
|
||||
find . -type f | grep -v ".jar" | xargs rm -rfv
|
||||
find . -type f | grep "build" | xargs rm -rfv
|
||||
for file in $(find . -type f | grep "spigot"); do
|
||||
mv -v "$file" "$(echo $file | sed 's|spigot-||g')"
|
||||
done
|
||||
|
||||
- name: Upload to actifial
|
||||
run: node .github/uploadToBucket.mjs SpigotBuild artifacts
|
||||
env:
|
||||
OCI_AUTHKEY: ${{ secrets.OCI_AUTHKEY }}
|
||||
ociauth: "${{ secrets.OCI_AUTHKEY }}"
|
||||
OCI_AUTHKEY: "${{ secrets.OCI_AUTHKEY }}"
|
14
.github/workflows/test.yaml
vendored
14
.github/workflows/test.yaml
vendored
@ -5,7 +5,14 @@ on:
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
name: "Test"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
package:
|
||||
- core
|
||||
- cli
|
||||
- docker
|
||||
name: "Testing ${{ matrix.package }}"
|
||||
env:
|
||||
bdscoreroot: "~/.bdsCore"
|
||||
steps:
|
||||
@ -30,4 +37,7 @@ jobs:
|
||||
|
||||
# Build Core
|
||||
- name: Core Build
|
||||
run: cd package/core && npm run build
|
||||
run: npm run -w package/core build
|
||||
|
||||
- name: Build ${{ matrix.package }}
|
||||
run: npm run -w "package/${{ matrix.package }}" build
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -4,6 +4,8 @@ node_modules/
|
||||
# Typescript
|
||||
packages/**/*.js
|
||||
packages/**/*.d.ts
|
||||
package/**/tsconfig.tsbuildinfo
|
||||
|
||||
# PHP Pre builds
|
||||
phpOutput/
|
||||
# PHP and Spigot Pre builds
|
||||
phpOutput/
|
||||
*.jar
|
625
package-lock.json
generated
625
package-lock.json
generated
@ -11,8 +11,12 @@
|
||||
"package/cli",
|
||||
"package/docker"
|
||||
],
|
||||
"dependencies": {
|
||||
"@sirherobrine23/cloud": "^3.2.6",
|
||||
"@sirherobrine23/http": "^3.2.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.14.0",
|
||||
"@types/node": "^18.14.1",
|
||||
"typescript": "^4.9.5"
|
||||
}
|
||||
},
|
||||
@ -348,12 +352,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sirherobrine23/cloud": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@sirherobrine23/cloud/-/cloud-3.2.2.tgz",
|
||||
"integrity": "sha512-MAIis4NHvBd3iFmSL6BaPgcSxdaCRG8myPySAqtDb7KMkkMULJDeG08FdGWsxG2+37rk6LpTUuI3wIPsdLI/vQ==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@sirherobrine23/cloud/-/cloud-3.2.6.tgz",
|
||||
"integrity": "sha512-MazWlPFvpiLbb3ILNGzYCmQsj78i/ruh3NnWv+1Kj/+syihIFhSGhJdX6fo9v97sy50Pd+SLubNYjq6gefu3Bw==",
|
||||
"dependencies": {
|
||||
"@sirherobrine23/extends": "3.2.2",
|
||||
"@sirherobrine23/http": "3.2.2",
|
||||
"@sirherobrine23/extends": "3.2.6",
|
||||
"@sirherobrine23/http": "3.2.6",
|
||||
"chokidar": "^3.5.3",
|
||||
"googleapis": "^110.0.0",
|
||||
"oci-common": "^2.50.4",
|
||||
@ -361,16 +365,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sirherobrine23/extends": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@sirherobrine23/extends/-/extends-3.2.2.tgz",
|
||||
"integrity": "sha512-m6riEmm6jsnB0BQSQfx1+OPCaZEdxbk9AU1Qjpc6jjvBAGVmTC6JSK8WiH7hUx3W1KkIJ7bfrqmRN7m9pLf96Q=="
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@sirherobrine23/extends/-/extends-3.2.6.tgz",
|
||||
"integrity": "sha512-kVaxbPIHPbQIy6uIj8HDq5IBt3XrnGBvQ24FAEmLBJRaOkwRUy9Lg3Uy4GaP0yhFbFbR3LW7QNZetN/S9SVdvA=="
|
||||
},
|
||||
"node_modules/@sirherobrine23/http": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@sirherobrine23/http/-/http-3.2.2.tgz",
|
||||
"integrity": "sha512-ncdmo4eZcfGr8tG2bWESNoIQdiPDMgE3BywIfsaGtCaq6zgCaMEh0gPxaWWNARPbdae9JT4t30Xaaw6nZ1Gjng==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@sirherobrine23/http/-/http-3.2.6.tgz",
|
||||
"integrity": "sha512-bu7ua8AOLSHgHQykXcfAdcP2eT9WpoI8biDELmkdd4izxubDyi7deMhh9KBOoQ0oJVDwIDkIG7wEqPJ9y48jyw==",
|
||||
"dependencies": {
|
||||
"@sirherobrine23/extends": "3.2.2",
|
||||
"@sirherobrine23/extends": "3.2.6",
|
||||
"acme-client": "^5.0.0",
|
||||
"adm-zip": "^0.5.10",
|
||||
"cloudflare": "^2.9.1",
|
||||
@ -413,15 +417,57 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/aws-lambda": {
|
||||
"version": "8.10.110",
|
||||
"resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.110.tgz",
|
||||
"integrity": "sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ=="
|
||||
"version": "8.10.111",
|
||||
"resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.111.tgz",
|
||||
"integrity": "sha512-8HR9UjIKmoemEzE2BviVtFkeenxfbizSu8raFjnT2VXxguZZ2JTlNww7INOH7IA0J/zRa3TjOftkYq6hVNkxDA=="
|
||||
},
|
||||
"node_modules/@types/body-parser": {
|
||||
"version": "1.19.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
|
||||
"integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/connect": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/btoa-lite": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz",
|
||||
"integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg=="
|
||||
},
|
||||
"node_modules/@types/connect": {
|
||||
"version": "3.4.35",
|
||||
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
|
||||
"integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/express": {
|
||||
"version": "4.17.17",
|
||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
|
||||
"integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/body-parser": "*",
|
||||
"@types/express-serve-static-core": "^4.17.33",
|
||||
"@types/qs": "*",
|
||||
"@types/serve-static": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/express-serve-static-core": {
|
||||
"version": "4.17.33",
|
||||
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz",
|
||||
"integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
"@types/qs": "*",
|
||||
"@types/range-parser": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/http-cache-semantics": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
|
||||
@ -450,10 +496,16 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
|
||||
"integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw=="
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
|
||||
"integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "18.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz",
|
||||
"integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A=="
|
||||
"version": "18.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.1.tgz",
|
||||
"integrity": "sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ=="
|
||||
},
|
||||
"node_modules/@types/opossum": {
|
||||
"version": "4.1.1",
|
||||
@ -463,12 +515,34 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/qs": {
|
||||
"version": "6.9.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
|
||||
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/range-parser": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
|
||||
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/semver": {
|
||||
"version": "7.3.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
|
||||
"integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/serve-static": {
|
||||
"version": "1.15.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz",
|
||||
"integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/mime": "*",
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/sshpk": {
|
||||
"version": "1.10.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/sshpk/-/sshpk-1.10.3.tgz",
|
||||
@ -516,6 +590,18 @@
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||
"integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
|
||||
},
|
||||
"node_modules/accepts": {
|
||||
"version": "1.3.8",
|
||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
|
||||
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
|
||||
"dependencies": {
|
||||
"mime-types": "~2.1.34",
|
||||
"negotiator": "0.6.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/acme-client": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/acme-client/-/acme-client-5.0.0.tgz",
|
||||
@ -623,6 +709,11 @@
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/array-flatten": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
|
||||
},
|
||||
"node_modules/arrify": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
|
||||
@ -731,6 +822,42 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/body-parser": {
|
||||
"version": "1.20.1",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
|
||||
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
|
||||
"dependencies": {
|
||||
"bytes": "3.1.2",
|
||||
"content-type": "~1.0.4",
|
||||
"debug": "2.6.9",
|
||||
"depd": "2.0.0",
|
||||
"destroy": "1.2.0",
|
||||
"http-errors": "2.0.0",
|
||||
"iconv-lite": "0.4.24",
|
||||
"on-finished": "2.4.1",
|
||||
"qs": "6.11.0",
|
||||
"raw-body": "2.5.1",
|
||||
"type-is": "~1.6.18",
|
||||
"unpipe": "1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8",
|
||||
"npm": "1.2.8000 || >= 1.4.16"
|
||||
}
|
||||
},
|
||||
"node_modules/body-parser/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/body-parser/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
},
|
||||
"node_modules/bottleneck": {
|
||||
"version": "2.19.5",
|
||||
"resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
|
||||
@ -765,6 +892,14 @@
|
||||
"node": ">=0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/bytes": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/cacheable-lookup": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
|
||||
@ -774,9 +909,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/cacheable-request": {
|
||||
"version": "10.2.7",
|
||||
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.7.tgz",
|
||||
"integrity": "sha512-I4SA6mKgDxcxVbSt/UmIkb9Ny8qSkg6ReBHtAAXnZHk7KOSx5g3DTiAOaYzcHCs6oOdHn+bip9T48E6tMvK9hw==",
|
||||
"version": "10.2.8",
|
||||
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.8.tgz",
|
||||
"integrity": "sha512-IDVO5MJ4LItE6HKFQTqT2ocAQsisOoCTUDu1ddCmnhyiwFQjXNPp4081Xj23N4tO+AFEFNzGuNEf/c8Gwwt15A==",
|
||||
"dependencies": {
|
||||
"@types/http-cache-semantics": "^4.0.1",
|
||||
"get-stream": "^6.0.1",
|
||||
@ -965,6 +1100,38 @@
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/content-disposition": {
|
||||
"version": "0.5.4",
|
||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
||||
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
|
||||
"dependencies": {
|
||||
"safe-buffer": "5.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/content-type": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
|
||||
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/cookie": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
||||
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/cookie-signature": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||
},
|
||||
"node_modules/core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
@ -1093,11 +1260,28 @@
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/depd": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
||||
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/deprecation": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
|
||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
|
||||
},
|
||||
"node_modules/destroy": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
|
||||
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
|
||||
"engines": {
|
||||
"node": ">= 0.8",
|
||||
"npm": "1.2.8000 || >= 1.4.16"
|
||||
}
|
||||
},
|
||||
"node_modules/domexception": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
|
||||
@ -1131,11 +1315,24 @@
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||
},
|
||||
"node_modules/encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
|
||||
@ -1165,6 +1362,11 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/escape-html": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
|
||||
},
|
||||
"node_modules/escodegen": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
|
||||
@ -1214,6 +1416,68 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/etag": {
|
||||
"version": "1.8.1",
|
||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/express": {
|
||||
"version": "4.18.2",
|
||||
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
|
||||
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
|
||||
"dependencies": {
|
||||
"accepts": "~1.3.8",
|
||||
"array-flatten": "1.1.1",
|
||||
"body-parser": "1.20.1",
|
||||
"content-disposition": "0.5.4",
|
||||
"content-type": "~1.0.4",
|
||||
"cookie": "0.5.0",
|
||||
"cookie-signature": "1.0.6",
|
||||
"debug": "2.6.9",
|
||||
"depd": "2.0.0",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"etag": "~1.8.1",
|
||||
"finalhandler": "1.2.0",
|
||||
"fresh": "0.5.2",
|
||||
"http-errors": "2.0.0",
|
||||
"merge-descriptors": "1.0.1",
|
||||
"methods": "~1.1.2",
|
||||
"on-finished": "2.4.1",
|
||||
"parseurl": "~1.3.3",
|
||||
"path-to-regexp": "0.1.7",
|
||||
"proxy-addr": "~2.0.7",
|
||||
"qs": "6.11.0",
|
||||
"range-parser": "~1.2.1",
|
||||
"safe-buffer": "5.2.1",
|
||||
"send": "0.18.0",
|
||||
"serve-static": "1.15.0",
|
||||
"setprototypeof": "1.2.0",
|
||||
"statuses": "2.0.1",
|
||||
"type-is": "~1.6.18",
|
||||
"utils-merge": "1.0.1",
|
||||
"vary": "~1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/express/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/express/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
},
|
||||
"node_modules/extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
@ -1248,6 +1512,36 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/finalhandler": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
|
||||
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
|
||||
"dependencies": {
|
||||
"debug": "2.6.9",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"on-finished": "2.4.1",
|
||||
"parseurl": "~1.3.3",
|
||||
"statuses": "2.0.1",
|
||||
"unpipe": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/finalhandler/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/finalhandler/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
@ -1288,6 +1582,22 @@
|
||||
"node": ">= 14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/forwarded": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
||||
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/fresh": {
|
||||
"version": "0.5.2",
|
||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/fromentries": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
|
||||
@ -1560,6 +1870,21 @@
|
||||
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
|
||||
"integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
|
||||
},
|
||||
"node_modules/http-errors": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
|
||||
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
|
||||
"dependencies": {
|
||||
"depd": "2.0.0",
|
||||
"inherits": "2.0.4",
|
||||
"setprototypeof": "1.2.0",
|
||||
"statuses": "2.0.1",
|
||||
"toidentifier": "1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/http-proxy-agent": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
|
||||
@ -1611,11 +1936,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
@ -1629,6 +1954,19 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"node_modules/ipaddr.js": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||
@ -1922,6 +2260,38 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/media-typer": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/merge-descriptors": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
|
||||
},
|
||||
"node_modules/methods": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
||||
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||
"bin": {
|
||||
"mime": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
@ -2007,6 +2377,14 @@
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"node_modules/negotiator": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
|
||||
@ -2159,6 +2537,17 @@
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/on-finished": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
|
||||
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
|
||||
"dependencies": {
|
||||
"ee-first": "1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
@ -2210,6 +2599,19 @@
|
||||
"url": "https://github.com/inikulin/parse5?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/path-to-regexp": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
@ -2237,6 +2639,18 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/proxy-addr": {
|
||||
"version": "2.0.7",
|
||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
|
||||
"dependencies": {
|
||||
"forwarded": "0.2.0",
|
||||
"ipaddr.js": "1.9.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/psl": {
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
|
||||
@ -2280,6 +2694,28 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/range-parser": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/raw-body": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
|
||||
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
|
||||
"dependencies": {
|
||||
"bytes": "3.1.2",
|
||||
"http-errors": "2.0.0",
|
||||
"iconv-lite": "0.4.24",
|
||||
"unpipe": "1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
||||
@ -2372,6 +2808,66 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/send": {
|
||||
"version": "0.18.0",
|
||||
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
|
||||
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
|
||||
"dependencies": {
|
||||
"debug": "2.6.9",
|
||||
"depd": "2.0.0",
|
||||
"destroy": "1.2.0",
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"etag": "~1.8.1",
|
||||
"fresh": "0.5.2",
|
||||
"http-errors": "2.0.0",
|
||||
"mime": "1.6.0",
|
||||
"ms": "2.1.3",
|
||||
"on-finished": "2.4.1",
|
||||
"range-parser": "~1.2.1",
|
||||
"statuses": "2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/send/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/send/node_modules/debug/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
},
|
||||
"node_modules/send/node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
},
|
||||
"node_modules/serve-static": {
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
|
||||
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
|
||||
"dependencies": {
|
||||
"encodeurl": "~1.0.2",
|
||||
"escape-html": "~1.0.3",
|
||||
"parseurl": "~1.3.3",
|
||||
"send": "0.18.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/setprototypeof": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||
},
|
||||
"node_modules/should-proxy": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz",
|
||||
@ -2423,6 +2919,14 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/statuses": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||
@ -2487,6 +2991,14 @@
|
||||
"node": ">=8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/toidentifier": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
||||
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
|
||||
"engines": {
|
||||
"node": ">=0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/tough-cookie": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
|
||||
@ -2536,6 +3048,18 @@
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/type-is": {
|
||||
"version": "1.6.18",
|
||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
||||
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
|
||||
"dependencies": {
|
||||
"media-typer": "0.3.0",
|
||||
"mime-types": "~2.1.24"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "4.9.5",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
|
||||
@ -2571,6 +3095,14 @@
|
||||
"node": ">= 4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/unpipe": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/unzip-response": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
|
||||
@ -2632,6 +3164,14 @@
|
||||
"resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
|
||||
"integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw=="
|
||||
},
|
||||
"node_modules/utils-merge": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
|
||||
"engines": {
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
|
||||
@ -2640,6 +3180,14 @@
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/vary": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/verror": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
|
||||
@ -2683,6 +3231,17 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/whatwg-encoding/node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/whatwg-fetch": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
|
||||
@ -2817,6 +3376,7 @@
|
||||
}
|
||||
},
|
||||
"package/cli": {
|
||||
"name": "@the-bds-maneger/cli",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -2828,12 +3388,13 @@
|
||||
}
|
||||
},
|
||||
"package/core": {
|
||||
"name": "@the-bds-maneger/core",
|
||||
"version": "1.0.0",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"@sirherobrine23/cloud": "^3.2.2",
|
||||
"@sirherobrine23/cloud": "^3.2.5",
|
||||
"@sirherobrine23/extends": "^3.2.1",
|
||||
"@sirherobrine23/http": "^3.2.1",
|
||||
"@sirherobrine23/http": "^3.2.6",
|
||||
"semver": "^7.3.8",
|
||||
"tar": "^6.1.13",
|
||||
"unzip-stream": "^0.3.1"
|
||||
@ -2845,12 +3406,18 @@
|
||||
}
|
||||
},
|
||||
"package/docker": {
|
||||
"name": "@the-bds-maneger/docker",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.18.2"
|
||||
},
|
||||
"bin": {
|
||||
"bdsdocker": "src/index.js"
|
||||
},
|
||||
"devDependencies": {}
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.17"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,12 +5,16 @@
|
||||
"author": "Matheus Sampaio Queiroga <srherobrine20@gmail.com>",
|
||||
"license": "GPL-3.0",
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.14.0",
|
||||
"@types/node": "^18.14.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"workspaces": [
|
||||
"package/core",
|
||||
"package/cli",
|
||||
"package/docker"
|
||||
]
|
||||
],
|
||||
"dependencies": {
|
||||
"@sirherobrine23/cloud": "^3.2.6",
|
||||
"@sirherobrine23/http": "^3.2.6"
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,9 @@
|
||||
"description": "",
|
||||
"main": "src/index.js",
|
||||
"type": "module",
|
||||
"scripts": {},
|
||||
"scripts": {
|
||||
"build": "tsc --build --clean && tsc --build"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "Matheus Sampaio Queiroga <srherobrine20@gmail.com>",
|
||||
"license": "ISC",
|
||||
|
@ -1,13 +1,15 @@
|
||||
#!/usr/bin/env node
|
||||
import { createInterface as readline } from "node:readline";
|
||||
import bdsCore from "@the-bds-maneger/core";
|
||||
import yargs from "yargs";
|
||||
|
||||
// Init yargs
|
||||
yargs(process.argv.slice(2)).version(false).help(true).strictCommands().demandCommand()
|
||||
yargs(process.argv.slice(2)).version(false).help(true).strictCommands().demandCommand().alias("h", "help")
|
||||
|
||||
// bedrock
|
||||
.command("bedrock", "Bedrock", yargs => yargs.command("install", "Install Server", async yargs => {
|
||||
.command("bedrock", "Bedrock", yargs => yargs.strictCommands().demandCommand().command("install", "Install Server", async yargs => {
|
||||
const options = yargs.option("altServer", {
|
||||
alias: "a",
|
||||
string: true,
|
||||
description: "Select a server other than Mojang",
|
||||
demandOption: false,
|
||||
@ -16,6 +18,10 @@ yargs(process.argv.slice(2)).version(false).help(true).strictCommands().demandCo
|
||||
"powernukkit",
|
||||
"cloudbust"
|
||||
],
|
||||
}).option("id", {
|
||||
alias: "i",
|
||||
string: true,
|
||||
description: "Select Server ID"
|
||||
}).option("list", {
|
||||
alias: "l",
|
||||
boolean: true,
|
||||
@ -26,13 +32,50 @@ yargs(process.argv.slice(2)).version(false).help(true).strictCommands().demandCo
|
||||
string: true,
|
||||
default: "latest",
|
||||
description: "Server version to install",
|
||||
}).option("update", {
|
||||
alias: "u",
|
||||
boolean: true,
|
||||
default: false,
|
||||
description: "Update/Downgrade installed server version"
|
||||
}).parseSync();
|
||||
if (options.list) return console.log(JSON.stringify(await bdsCore.Bedrock.listVersions({altServer: options.altServer as any}), null, 2));
|
||||
const data = await bdsCore.Bedrock.installServer({
|
||||
altServer: options.altServer as any,
|
||||
version: options.version,
|
||||
ID: options.id,
|
||||
newID: !options.update,
|
||||
});
|
||||
console.log("Server ID: %O", data.id);
|
||||
return console.log("Server ID: %O, Version: %O, Release Date: %s", data.id, data.version, data.releaseDate);
|
||||
}).command("run", "Start Server", async yargs => {
|
||||
const options = yargs.option("altServer", {
|
||||
alias: "a",
|
||||
string: true,
|
||||
description: "Select a server other than Mojang",
|
||||
demandOption: false,
|
||||
choices: [
|
||||
"pocketmine",
|
||||
"powernukkit",
|
||||
"cloudbust"
|
||||
],
|
||||
}).option("id", {
|
||||
alias: "i",
|
||||
string: true,
|
||||
description: "Select Server ID",
|
||||
demandOption: true,
|
||||
}).parseSync();
|
||||
const server = await bdsCore.Bedrock.startServer({
|
||||
newID: false,
|
||||
ID: options.id,
|
||||
altServer: options.altServer as any,
|
||||
});
|
||||
const read = readline(process.stdin, process.stdout).on("error", () => {}).on("line", data => server.sendCommand(data)).on("SIGINT", () => server.stopServer()).on("SIGCONT", () => server.stopServer()).on("SIGTSTP", () => server.stopServer());
|
||||
server.once("spawn", () => console.log("Stating server!"));
|
||||
server.on("line", (data, from) => console.log("[%s]: %O", from, data));
|
||||
server.on("player", data => console.log("%O", data));
|
||||
server.once("close", () => read.close());
|
||||
server.on("backup", status => console.log("Backup status %O", status));
|
||||
// process.stdin.pipe(server.stdin);
|
||||
return server;
|
||||
}))
|
||||
|
||||
// run
|
||||
|
@ -1,31 +1,9 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext",
|
||||
"target": "ESNext",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"declaration": true,
|
||||
"strict": false,
|
||||
"noUnusedLocals": true,
|
||||
"isolatedModules": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"skipLibCheck": true,
|
||||
"allowJs": true,
|
||||
"lib": [
|
||||
"ESNext"
|
||||
]
|
||||
"composite": true
|
||||
},
|
||||
"exclude": [
|
||||
"**/*.test.*"
|
||||
],
|
||||
"ts-node": {
|
||||
"esm": true
|
||||
},
|
||||
"references": [
|
||||
{
|
||||
"path": "../core"
|
||||
}
|
||||
]
|
||||
"references": [{
|
||||
"path": "../core"
|
||||
}]
|
||||
}
|
@ -11,9 +11,9 @@
|
||||
"build": "tsc --build --clean && tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@sirherobrine23/cloud": "^3.2.2",
|
||||
"@sirherobrine23/cloud": "^3.2.5",
|
||||
"@sirherobrine23/extends": "^3.2.1",
|
||||
"@sirherobrine23/http": "^3.2.1",
|
||||
"@sirherobrine23/http": "^3.2.6",
|
||||
"semver": "^7.3.8",
|
||||
"tar": "^6.1.13",
|
||||
"unzip-stream": "^0.3.1"
|
||||
|
@ -1,51 +1,154 @@
|
||||
import { createInterface as readline } from "node:readline";
|
||||
import { extendsFS } from "@sirherobrine23/extends";
|
||||
import child_process from "node:child_process";
|
||||
import crypto from "node:crypto";
|
||||
import path from "node:path";
|
||||
import fs from "node:fs/promises";
|
||||
import os from "node:os";
|
||||
import { format } from "node:util";
|
||||
import { createWriteStream } from "node:fs";
|
||||
|
||||
// Default bds maneger core
|
||||
export const bdsManegerRoot = process.env.bdscoreroot ? path.resolve(process.cwd(), process.env.bdscoreroot) : path.join(os.homedir(), ".bdsmaneger");
|
||||
if (!(await extendsFS.exists(bdsManegerRoot))) await fs.mkdir(bdsManegerRoot, {recursive: true});
|
||||
export type withPromise<T> = T|Promise<T>;
|
||||
|
||||
export type manegerOptions = {
|
||||
ID?: string,
|
||||
newID?: boolean,
|
||||
};
|
||||
|
||||
// only letters and numbers
|
||||
const idReg = /^[a-zA-Z0-9]+$/;
|
||||
|
||||
export type serverManegerV1 = {
|
||||
id: string,
|
||||
rootPath: string,
|
||||
serverFolder: string,
|
||||
backup: string,
|
||||
logs: string,
|
||||
runCommand(options: Omit<runOptions, "cwd">): ReturnType<typeof runServer>
|
||||
};
|
||||
|
||||
/**
|
||||
* Platform path maneger
|
||||
*/
|
||||
export async function serverManeger(platform: "bedrock"|"java", options: manegerOptions): Promise<serverManegerV1> {
|
||||
if (!((["java", "bedrock"]).includes(platform))) throw new TypeError("Invalid platform target!");
|
||||
if (!options) throw new TypeError("Please add serverManeger options!");
|
||||
const platformFolder = path.join(bdsManegerRoot, platform);
|
||||
if ((await fs.readdir(platformFolder).then(a => a.length).catch(() => 0)) === 0) options.newID = true;
|
||||
if (options.newID) while(true) {
|
||||
options.ID = crypto.randomBytes(16).toString("hex");
|
||||
if (!(idReg.test(options.ID))) continue;
|
||||
if (!(await fs.readdir(platformFolder).catch(() => [])).includes(options.ID)) break;
|
||||
}
|
||||
|
||||
// Test invalid ID
|
||||
if (!(!!options.ID && idReg.test(options.ID))) throw new TypeError("options.ID is invalid");
|
||||
|
||||
/**
|
||||
* Platform ID root path
|
||||
*/
|
||||
const rootPath = path.join(platformFolder, options.ID);
|
||||
if (!(await extendsFS.exists(rootPath))) await fs.mkdir(rootPath, {recursive: true});
|
||||
|
||||
// sub-folders
|
||||
const serverFolder = path.join(rootPath, "server");
|
||||
const backup = path.join(rootPath, "backups");
|
||||
const log = path.join(rootPath, "logs");
|
||||
|
||||
for await (const p of [
|
||||
serverFolder,
|
||||
backup,
|
||||
log,
|
||||
]) if (!(await extendsFS.exists(p))) await fs.mkdir(p, {recursive: true});
|
||||
|
||||
return {
|
||||
id: options.ID,
|
||||
rootPath,
|
||||
serverFolder,
|
||||
backup,
|
||||
logs: log,
|
||||
async runCommand(options: Omit<runOptions, "cwd">) {
|
||||
return runServer({...options, cwd: serverFolder});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export type portListen = {
|
||||
port: number,
|
||||
protocol: "TCP"|"UDP"|"both",
|
||||
listenOn?: string,
|
||||
};
|
||||
|
||||
export type playerAction = {
|
||||
playerName: string,
|
||||
onDate: Date,
|
||||
action: string,
|
||||
extra?: any
|
||||
};
|
||||
|
||||
export type runOptions = {
|
||||
cwd: string,
|
||||
env?: {[k: string]: string|number|boolean},
|
||||
command: string,
|
||||
args?: (string|number|boolean)[],
|
||||
stdio?: child_process.StdioOptions,
|
||||
paths: serverManegerV1,
|
||||
serverActions?: {
|
||||
stop?(child: serverRun): void|Promise<void>,
|
||||
stop?(this: serverRun): withPromise<void>,
|
||||
playerAction?(this: serverRun, lineString: string): withPromise<null|void|playerAction>,
|
||||
hotBackup?(this: serverRun): withPromise<string|void>,
|
||||
portListen?(this: serverRun, lineString: string): withPromise<void|portListen>,
|
||||
postStop?: {
|
||||
createBackup?(this: serverRun): withPromise<void>,
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export declare class serverRun extends child_process.ChildProcess {
|
||||
on(event: string, listener: (...args: any[]) => void): this;
|
||||
on(event: "error", listener: (err: Error) => void): this;
|
||||
on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||
on(event: "disconnect", listener: () => void): this;
|
||||
on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||
on(event: "message", listener: (message: child_process.Serializable, sendHandle: child_process.SendHandle) => void): this;
|
||||
on(event: "spawn", listener: () => void): this;
|
||||
|
||||
once(event: string, listener: (...args: any[]) => void): this;
|
||||
on(event: "error", listener: (err: Error) => void): this;
|
||||
once(event: "error", listener: (err: Error) => void): this;
|
||||
on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||
once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||
on(event: "disconnect", listener: () => void): this;
|
||||
once(event: "disconnect", listener: () => void): this;
|
||||
on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||
once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
|
||||
on(event: "message", listener: (message: child_process.Serializable, sendHandle: child_process.SendHandle) => void): this;
|
||||
once(event: "message", listener: (message: child_process.Serializable, sendHandle: child_process.SendHandle) => void): this;
|
||||
on(event: "spawn", listener: () => void): this;
|
||||
once(event: "spawn", listener: () => void): this;
|
||||
|
||||
// BDS Assigns
|
||||
once(event: "line", fn: (data: string, from: "stdout"|"stderr") => void): this;
|
||||
on(event: "line", fn: (data: string, from: "stdout"|"stderr") => void): this;
|
||||
once(event: "player", fn: (playerInfo: playerAction) => void): this;
|
||||
on(event: "player", fn: (playerInfo: playerAction) => void): this;
|
||||
once(event: "portListening", fn: (portInfo: portListen) => void): this;
|
||||
on(event: "portListening", fn: (portInfo: portListen) => void): this;
|
||||
once(event: "backup", fn: (status: "start"|"success"|"fail") => void): this;
|
||||
on(event: "backup", fn: (status: "start"|"success"|"fail") => void): this;
|
||||
|
||||
runOptions: runOptions;
|
||||
portListening: portListen[];
|
||||
logPath: {stderr: string, stdout: string};
|
||||
|
||||
stopServer(): Promise<{code?: number, signal?: NodeJS.Signals}>;
|
||||
sendCommand(...args: (string|number|boolean)[]): this;
|
||||
hotBackup(): this & Promise<Awaited<ReturnType<runOptions["serverActions"]["hotBackup"]>>>;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Run servers globally and hormonally across servers
|
||||
*/
|
||||
export async function runServer(options: runOptions): Promise<serverRun> {
|
||||
const child = child_process.execFile(options.command, [...((options.args ?? []).map(String))], {
|
||||
maxBuffer: Infinity,
|
||||
const child = child_process.spawn(options.command, [...((options.args ?? []).map(String))], {
|
||||
// maxBuffer: Infinity,
|
||||
stdio: options.stdio,
|
||||
cwd: options.cwd || process.cwd(),
|
||||
env: {
|
||||
...process.env,
|
||||
@ -55,6 +158,42 @@ export async function runServer(options: runOptions): Promise<serverRun> {
|
||||
}, {})
|
||||
}
|
||||
}) as serverRun;
|
||||
child.runOptions = options;
|
||||
child.portListening = [];
|
||||
for (const std of [child.stdout, child.stderr]) if (!std) {
|
||||
child.kill("SIGKILL");
|
||||
throw new TypeError("Stdout or Stderr stream disabled, killed process, cannot continue to exec server, check stdio passed to spawn!");
|
||||
}
|
||||
|
||||
// Log Write
|
||||
const currentDate = new Date();
|
||||
const baseLog = path.join(options.paths.logs, format("%s_%s_%s_%s-%s-%s", currentDate.getDate(), currentDate.getMonth()+1, currentDate.getFullYear(), currentDate.getHours(), currentDate.getMinutes(), currentDate.getSeconds()));
|
||||
await fs.mkdir(baseLog, {recursive: true});
|
||||
child.logPath = {stdout: path.join(baseLog, "stdout.log"), stderr: path.join(baseLog, "stderr.log")};
|
||||
child.stdout.pipe(createWriteStream(child.logPath.stdout));
|
||||
child.stderr.pipe(createWriteStream(child.logPath.stderr));
|
||||
|
||||
// Lines
|
||||
const stdout = readline(child.stdout).on("line", data => child.emit("line", data, "stdout")).on("error", err => child.emit("error", err));
|
||||
const stderr = readline(child.stderr).on("line", data => child.emit("line", data, "stderr")).on("error", err => child.emit("error", err));
|
||||
|
||||
if (typeof options.serverActions?.playerAction === "function") {
|
||||
for (const std of [stdout, stderr]) std.on("line", async data => {
|
||||
const playerData = await Promise.resolve(options.serverActions.playerAction.call(child, data) as ReturnType<typeof options.serverActions.playerAction>);
|
||||
if (!playerData) return;
|
||||
child.emit("player", playerData);
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof options.serverActions?.portListen === "function") {
|
||||
for (const std of [stdout, stderr]) std.on("line", async data => {
|
||||
const portData = await Promise.resolve(options.serverActions.portListen.call(child, data) as ReturnType<typeof options.serverActions.portListen>);
|
||||
if (!portData) return;
|
||||
child.portListening.push(portData);
|
||||
child.emit("portListening", portData);
|
||||
});
|
||||
}
|
||||
|
||||
child.sendCommand = function (...args) {
|
||||
if (!child.stdin.writable) {
|
||||
child.emit("error", new Error("cannot send command to server"));
|
||||
@ -65,57 +204,40 @@ export async function runServer(options: runOptions): Promise<serverRun> {
|
||||
}
|
||||
|
||||
child.stopServer = async function () {
|
||||
const stop = options.serverActions?.stop ?? function (child) {
|
||||
|
||||
const stop = options.serverActions?.stop ?? function () {
|
||||
child.kill("SIGINT");
|
||||
const kill = setTimeout(() => {
|
||||
clearTimeout(kill);
|
||||
if (child.exitCode !== null) return;
|
||||
child.kill("SIGKILL");
|
||||
}, 2500);
|
||||
};
|
||||
Promise.resolve().then(() => stop(child)).catch(err => child.emit("error", err));
|
||||
Promise.resolve().then(() => stop.call(child)).catch(err => child.emit("error", err));
|
||||
return new Promise((done, reject) => child.once("error", reject).once("exit", (code, signal) => done({code, signal})));
|
||||
}
|
||||
return child;
|
||||
}
|
||||
|
||||
export type manegerOptions = {
|
||||
ID?: string,
|
||||
newID?: boolean,
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export async function serverManeger(options: manegerOptions) {
|
||||
if (!options) throw new TypeError("Por favor adicione as opções do serverManeger!");
|
||||
if (!options.ID) options.newID = true;
|
||||
if (options.newID) {
|
||||
while(true) {
|
||||
options.ID = crypto.randomBytes(16).toString("hex");
|
||||
if (!(await fs.readdir(bdsManegerRoot)).includes(options.ID)) break;
|
||||
}
|
||||
child.hotBackup = function hotBackup() {
|
||||
return Object.assign(Promise.resolve().then((async () => {
|
||||
if (!options.serverActions?.hotBackup) throw new Error("Hot backup disabled to current platform!");
|
||||
child.emit("backup", "start");
|
||||
return Promise.resolve(options.serverActions.hotBackup.call(child) as ReturnType<typeof options.serverActions.hotBackup>).then(data => {
|
||||
child.emit("backup", "success");
|
||||
return data;
|
||||
}).catch(err => {
|
||||
child.emit("backup", "fail");
|
||||
return Promise.reject(err);
|
||||
});
|
||||
})), child);
|
||||
}
|
||||
|
||||
/**
|
||||
* Platform ID root path
|
||||
*/
|
||||
const rootPath = path.join(bdsManegerRoot, options.ID);
|
||||
if (!(await extendsFS.exists(rootPath))) await fs.mkdir(rootPath, {recursive: true});
|
||||
// Create backup post server stop
|
||||
if (typeof options.serverActions?.postStop?.createBackup === "function") child.on("close", () => {
|
||||
child.emit("backup", "start");
|
||||
return Promise.resolve(options.serverActions.postStop.createBackup.call(child)).then(() => child.emit("backup", "success")).catch(err => {
|
||||
child.emit("backup", "fail");
|
||||
child.emit("error", err);
|
||||
});
|
||||
});
|
||||
|
||||
// sub-folders
|
||||
const serverFolder = path.join(rootPath, "server");
|
||||
const backup = path.join(rootPath, "backups");
|
||||
|
||||
for await (const p of [
|
||||
serverFolder,
|
||||
backup,
|
||||
]) if (!(await extendsFS.exists(p))) await fs.mkdir(p, {recursive: true});
|
||||
|
||||
return {
|
||||
id: options.ID,
|
||||
rootPath,
|
||||
serverFolder,
|
||||
backup,
|
||||
async runCommand(options: Omit<runOptions, "cwd">) {
|
||||
return runServer({...options, cwd: serverFolder});
|
||||
}
|
||||
};
|
||||
return child;
|
||||
}
|
||||
|
||||
export type serverManegerV1 = Awaited<ReturnType<typeof serverManeger>>;
|
@ -3,12 +3,14 @@ import { manegerOptions, runOptions, serverManeger } from "../serverManeger.js";
|
||||
import { commandExists } from "../childPromisses.js";
|
||||
import { oracleStorage } from "../internal.js";
|
||||
import { pipeline } from "node:stream/promises";
|
||||
import extendsFS from "@sirherobrine23/extends";
|
||||
import semver from "semver";
|
||||
import unzip from "unzip-stream";
|
||||
import utils from "node:util";
|
||||
import path from "node:path";
|
||||
import tar from "tar";
|
||||
import extendsFS from "@sirherobrine23/extends";
|
||||
import { createWriteStream } from "node:fs";
|
||||
import { readdir } from "node:fs/promises";
|
||||
|
||||
export type bedrockOptions = manegerOptions & {
|
||||
/**
|
||||
@ -57,25 +59,26 @@ export async function listVersions(options?: Omit<bedrockOptions, keyof manegerO
|
||||
return acc;
|
||||
}, [] as {version: string, mcpeVersion: string, date: Date, variantType: "stable"|"snapshot", url: string}[]).filter(a => !!a.url).sort((b, a) => (b.date.getTime() - a.date.getTime()) - semver.compare(semver.valid(semver.coerce(a.version)), semver.valid(semver.coerce(b.version))));
|
||||
} else if (options.altServer === "cloudbust") throw new TypeError("O Cloudbust não tem listagem de versöes");
|
||||
return (await coreHttp.jsonRequest<{version: string, date: Date, release?: "stable"|"preview", url: {[platform in NodeJS.Platform]?: {[arch in NodeJS.Architecture]?: string}}}[]>("https://sirherobrine23.github.io/BedrockFetch/all.json")).body;
|
||||
return (await coreHttp.jsonRequest<{version: string, date: Date, release?: "stable"|"preview", url: {[platform in NodeJS.Platform]?: {[arch in NodeJS.Architecture]?: string}}}[]>("https://sirherobrine23.github.io/BedrockFetch/all.json")).body.sort((b, a) => semver.compare(semver.valid(semver.coerce(a.version)), semver.valid(semver.coerce(b.version))));
|
||||
}
|
||||
|
||||
export async function installServer(options: bedrockOptions & {version?: string, allowBeta?: boolean}): Promise<{id: string, version: string, mcpeVersion?: string, releaseDate: Date}> {
|
||||
const serverPath = await serverManeger(options);
|
||||
const serverPath = await serverManeger("bedrock", options);
|
||||
if (options.altServer === "pocketmine") {
|
||||
const version = (options.version ?? "latest").trim();
|
||||
const rel = (await pocketmineGithub.getRelease(version));
|
||||
if (!rel) throw new Error("Não foi possivel encontrar a versão informada do Pocketmine!");
|
||||
const version = (options.version || "latest").trim();
|
||||
const rel = await pocketmineGithub.getRelease(version === "latest" ? true : version);
|
||||
let fileURL: string;
|
||||
if (!(fileURL = rel?.assets?.find(a => a.name.endsWith(".phar"))?.browser_download_url)) throw new Error("Não foi possivel encontrar a versão informada do Pocketmine!");
|
||||
|
||||
const phpFile = (await oracleStorage.listFiles("php_bin")).find(file => file.name.includes(process.platform) && file.name.includes(process.arch));
|
||||
if (!phpFile) throw new Error(`Não foi possivel encontra os arquivos do php para o ${process.platform} com a arquitetura ${process.arch}`);
|
||||
if (phpFile.name.endsWith(".tar.gz")) await pipeline(await oracleStorage.getFileStream(phpFile.name), tar.extract({cwd: serverPath.serverFolder}));
|
||||
if (phpFile.name.endsWith(".tar.gz")||phpFile.name.endsWith(".tgz")||phpFile.name.endsWith(".tar")) await pipeline(await oracleStorage.getFileStream(phpFile.name), tar.extract({cwd: serverPath.serverFolder}));
|
||||
else if (phpFile.name.endsWith(".zip")) await pipeline(await oracleStorage.getFileStream(phpFile.name), unzip.Extract({path: serverPath.serverFolder}));
|
||||
else throw new Error("Arquivo encontrado não é suportado!");
|
||||
|
||||
// save phar
|
||||
await large.saveFile({
|
||||
url: rel.assets.find(a => a.name.endsWith(".phar"))?.browser_download_url,
|
||||
url: fileURL,
|
||||
path: path.join(serverPath.serverFolder, "server.phar")
|
||||
});
|
||||
|
||||
@ -141,7 +144,7 @@ export async function installServer(options: bedrockOptions & {version?: string,
|
||||
}
|
||||
|
||||
export async function startServer(options: bedrockOptions) {
|
||||
const serverPath = await serverManeger(options);
|
||||
const serverPath = await serverManeger("bedrock", options);
|
||||
if (options.altServer === "powernukkit"||options.altServer === "cloudbust") {
|
||||
return serverPath.runCommand({
|
||||
command: "java",
|
||||
@ -168,9 +171,10 @@ export async function startServer(options: bedrockOptions) {
|
||||
"-Daikars.new.flags=true",
|
||||
"-jar", "server.jar",
|
||||
],
|
||||
paths: serverPath,
|
||||
serverActions: {
|
||||
stop(child) {
|
||||
child.sendCommand("stop");
|
||||
stop() {
|
||||
this.sendCommand("stop");
|
||||
},
|
||||
}
|
||||
})
|
||||
@ -178,24 +182,62 @@ export async function startServer(options: bedrockOptions) {
|
||||
return serverPath.runCommand({
|
||||
command: (await extendsFS.readdir(serverPath.serverFolder)).find(file => file.endsWith("php")||file.endsWith("php.exe")),
|
||||
args: [
|
||||
"server.jar",
|
||||
"server.phar",
|
||||
"--no-wizard"
|
||||
]
|
||||
],
|
||||
paths: serverPath,
|
||||
serverActions: {
|
||||
stop() {
|
||||
this.sendCommand("stop")
|
||||
},
|
||||
}
|
||||
});
|
||||
}
|
||||
if (process.platform === "darwin") throw new Error("Run in docker or podman!");
|
||||
const run: Omit<runOptions, "cwd"> = {
|
||||
command: path.join(serverPath.serverFolder, "bedrock_server"),
|
||||
paths: serverPath,
|
||||
serverActions: {
|
||||
stop(child) {
|
||||
child.sendCommand("stop");
|
||||
postStop: {
|
||||
async createBackup() {
|
||||
const currentDate = new Date();
|
||||
return pipeline(tar.create({
|
||||
gzip: true,
|
||||
cwd: this.runOptions.paths.serverFolder,
|
||||
prefix: ""
|
||||
}, await readdir(this.runOptions.paths.serverFolder)), createWriteStream(path.join(this.runOptions.paths.backup, String(currentDate.getTime())+".tgz")));
|
||||
},
|
||||
},
|
||||
stop() {
|
||||
this.sendCommand("stop");
|
||||
},
|
||||
portListen(lineString) {
|
||||
// [INFO] IPv4 supported, port: 19132
|
||||
lineString = lineString.replace(/^(.*)?\[.*\]/, "").trim();
|
||||
if (lineString.startsWith("IPv")) {
|
||||
return {
|
||||
protocol: "UDP",
|
||||
listenOn: lineString.startsWith("IPv4") ? "0.0.0.0" : "[::]",
|
||||
port: Number(lineString.substring(lineString.indexOf("port: ")+6).replace(/:.*$/, "")),
|
||||
};
|
||||
}
|
||||
// NO LOG FILE! - [2023-02-23 21:09:52 INFO] Listening on IPv4 port: 19132
|
||||
else if (lineString.startsWith("Listening")) {
|
||||
lineString = lineString.substring(lineString.indexOf("IPv")-3);
|
||||
return {
|
||||
protocol: "UDP",
|
||||
listenOn: lineString.startsWith("IPv4") ? "0.0.0.0" : "[::]",
|
||||
port: Number(lineString.substring(lineString.indexOf("port: ")+6).replace(/:.*$/, "")),
|
||||
};
|
||||
}
|
||||
return null;
|
||||
},
|
||||
}
|
||||
};
|
||||
if ((["android", "linux"] as NodeJS.Process["platform"][]).includes(process.platform) && process.arch !== "x64") {
|
||||
for (const emu of ["qemu-x86_64-static", "qemu-x86_64", "box64"]) {
|
||||
if (await commandExists(emu)) {
|
||||
run.args = [emu, run.command];
|
||||
run.args = [run.command, ...run.args];
|
||||
run.command = emu;
|
||||
break;
|
||||
}
|
||||
|
@ -1,7 +1,11 @@
|
||||
import { manegerOptions, serverManeger } from "../serverManeger.js";
|
||||
import coreHttp, { large } from "@sirherobrine23/http";
|
||||
import coreHttp from "@sirherobrine23/http";
|
||||
import { oracleStorage } from "../internal.js";
|
||||
import { pipeline } from "node:stream/promises";
|
||||
import utils from "node:util";
|
||||
import path from "node:path";
|
||||
import fs from "node:fs";
|
||||
import semver from "semver";
|
||||
|
||||
export type javaOptions = manegerOptions & {
|
||||
/**
|
||||
@ -12,48 +16,58 @@ export type javaOptions = manegerOptions & {
|
||||
|
||||
export async function listVersions(options: Omit<javaOptions, keyof manegerOptions>) {
|
||||
if (options.altServer === "purpur") {
|
||||
return Promise.all((await coreHttp.jsonRequest<{versions: string[]}>("https://api.purpurmc.org/v2/purpur")).body.versions.map(async version => ({
|
||||
return (await Promise.all((await coreHttp.jsonRequest<{versions: string[]}>("https://api.purpurmc.org/v2/purpur")).body.versions.map(async version => ({
|
||||
version,
|
||||
downloadUrl: utils.format("https://api.purpurmc.org/v2/purpur/%s/latest/download", version),
|
||||
getFile: async () => coreHttp.streamRequest(utils.format("https://api.purpurmc.org/v2/purpur/%s/latest/download", version)),
|
||||
date: new Date((await coreHttp.jsonRequest<{timestamp: number}>(utils.format("https://api.purpurmc.org/v2/purpur/%s/latest", version))).body.timestamp)
|
||||
})));
|
||||
})))).sort((b, a) => semver.compare(semver.valid(semver.coerce(a.version)), semver.valid(semver.coerce(b.version))));
|
||||
} else if (options.altServer === "paper") {
|
||||
return Promise.all((await coreHttp.jsonRequest<{versions: string[]}>("https://api.papermc.io/v2/projects/paper")).body.versions.map(async version => {
|
||||
return (await Promise.all((await coreHttp.jsonRequest<{versions: string[]}>("https://api.papermc.io/v2/projects/paper")).body.versions.map(async version => {
|
||||
const build = (await coreHttp.jsonRequest<{builds: number[]}>(utils.format("https://api.papermc.io/v2/projects/paper/versions/%s", version))).body.builds.at(-1);
|
||||
const data = (await coreHttp.jsonRequest<{time: string, downloads: {[k: string]: {name: string, sha256: string}}}>(utils.format("https://api.papermc.io/v2/projects/paper/versions/%s/builds/%s", version, build))).body;
|
||||
|
||||
return {
|
||||
version,
|
||||
date: new Date(data.time),
|
||||
downloadUrl: utils.format("https://api.papermc.io/v2/projects/paper/versions/%s/builds/%s/downloads/%s", version, build, data.downloads["application"].name)
|
||||
getFile: async () => coreHttp.streamRequest(utils.format("https://api.papermc.io/v2/projects/paper/versions/%s/builds/%s/downloads/%s", version, build, data.downloads["application"].name))
|
||||
}
|
||||
}));
|
||||
}))).sort((b, a) => semver.compare(semver.valid(semver.coerce(a.version)), semver.valid(semver.coerce(b.version))));
|
||||
} else if (options.altServer === "spigot") {
|
||||
throw new Error("Não foi implementado!");
|
||||
return (await oracleStorage.listFiles("SpigotBuild")).filter(f => f.name.endsWith(".jar") && !f.name.includes("craftbukkit-")).map(file => ({
|
||||
getFile: file.getFile,
|
||||
version: semver.valid(semver.coerce(file.name.replace("SpigotBuild/", "").replace(".jar", ""))),
|
||||
})).sort((b, a) => semver.compare(semver.valid(semver.coerce(a.version)), semver.valid(semver.coerce(b.version))));
|
||||
}
|
||||
return (await Promise.all((await coreHttp.jsonRequest<{versions: {id: string, releaseTime: string, url: string}[]}>("https://launchermeta.mojang.com/mc/game/version_manifest_v2.json")).body.versions.map(async data => ({
|
||||
version: data.id,
|
||||
date: new Date(data.releaseTime),
|
||||
downloadUrl: (await coreHttp.jsonRequest<{downloads: {[k: string]: {size: number, url: string}}}>(data.url)).body.downloads?.["server"]?.url
|
||||
})))).filter(a => !!a.downloadUrl);
|
||||
return (await Promise.all((await coreHttp.jsonRequest<{versions: {id: string, releaseTime: string, url: string}[]}>("https://launchermeta.mojang.com/mc/game/version_manifest_v2.json")).body.versions.map(async data => {
|
||||
const fileURL = (await coreHttp.jsonRequest<{downloads: {[k: string]: {size: number, url: string}}}>(data.url)).body.downloads?.["server"]?.url;
|
||||
if (!fileURL) return null;
|
||||
return {
|
||||
version: data.id,
|
||||
date: new Date(data.releaseTime),
|
||||
getFile: async () => coreHttp.streamRequest(fileURL)
|
||||
};
|
||||
}))).filter(a => !!a);
|
||||
}
|
||||
|
||||
export async function installServer(options: javaOptions & {version?: string}) {
|
||||
const serverPath = await serverManeger(options);
|
||||
const serverPath = await serverManeger("java", options);
|
||||
const version = (await listVersions(options)).find(rel => (!options.version || options.version === "latest" || rel.version === options.version));
|
||||
if (!version) throw new Error("Não existe a versão informada!");
|
||||
await large.saveFile({
|
||||
path: path.join(serverPath.serverFolder, "server.jar"),
|
||||
url: version.downloadUrl
|
||||
});
|
||||
await pipeline(await version.getFile(), fs.createWriteStream(path.join(serverPath.serverFolder, "server.jar")));
|
||||
await fs.promises.writeFile(path.join(serverPath.serverFolder, "eula.txt"), "eula=true\n");
|
||||
return {
|
||||
...version,
|
||||
id: serverPath.id,
|
||||
version: version.version,
|
||||
};
|
||||
}
|
||||
|
||||
export async function startServer(options: javaOptions) {
|
||||
const serverPath = await serverManeger(options);
|
||||
const serverPath = await serverManeger("java", options);
|
||||
|
||||
// Fix to no interactive setup
|
||||
const extraArgs = [];
|
||||
if (options.altServer === "purpur") {} else if (options.altServer === "paper") {}
|
||||
|
||||
return serverPath.runCommand({
|
||||
command: "java",
|
||||
args: [
|
||||
@ -78,12 +92,15 @@ export async function startServer(options: javaOptions) {
|
||||
"-Dusing.aikars.flags=https://mcflags.emc.gs",
|
||||
"-Daikars.new.flags=true",
|
||||
"-jar", "server.jar",
|
||||
...(options.altServer === "paper" ? [] : options.altServer === "purpur" ? [] : options.altServer === "spigot" ? [] : ["--nogui", "--universe", "worlds"])
|
||||
// Save world in worlds folder
|
||||
"--nogui", "--universe", "worlds",
|
||||
...extraArgs,
|
||||
],
|
||||
paths: serverPath,
|
||||
serverActions: {
|
||||
stop(child) {
|
||||
child.sendCommand("stop");
|
||||
stop() {
|
||||
this.sendCommand("stop");
|
||||
},
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,27 +1,3 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext",
|
||||
"target": "ESNext",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"declaration": true,
|
||||
"strict": false,
|
||||
"noUnusedLocals": true,
|
||||
"isolatedModules": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"skipLibCheck": true,
|
||||
"allowJs": true,
|
||||
"lib": [
|
||||
"ESNext"
|
||||
],
|
||||
"composite": true
|
||||
},
|
||||
"exclude": [
|
||||
"**/*.test.*"
|
||||
],
|
||||
"ts-node": {
|
||||
"esm": true
|
||||
}
|
||||
"extends": "../../tsconfig.json"
|
||||
}
|
@ -7,11 +7,16 @@
|
||||
"bin": {
|
||||
"bdsdocker": "./src/index.js"
|
||||
},
|
||||
"devDependencies": {},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"build": "tsc --build --clean && tsc --build"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "Matheus Sampaio Queiroga <srherobrine20@gmail.com>",
|
||||
"license": "ISC"
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"express": "^4.18.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.17"
|
||||
}
|
||||
}
|
||||
|
2
package/docker/src/index.ts
Normal file
2
package/docker/src/index.ts
Normal file
@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env node
|
||||
console.log("OK");
|
@ -1,31 +1,9 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext",
|
||||
"target": "ESNext",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"declaration": true,
|
||||
"strict": false,
|
||||
"noUnusedLocals": true,
|
||||
"isolatedModules": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"skipLibCheck": true,
|
||||
"allowJs": true,
|
||||
"lib": [
|
||||
"ESNext"
|
||||
]
|
||||
"composite": true
|
||||
},
|
||||
"exclude": [
|
||||
"**/*.test.*"
|
||||
],
|
||||
"ts-node": {
|
||||
"esm": true
|
||||
},
|
||||
"references": [
|
||||
{
|
||||
"path": "../core"
|
||||
}
|
||||
]
|
||||
"references": [{
|
||||
"path": "../core"
|
||||
}]
|
||||
}
|
@ -13,14 +13,18 @@
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"skipLibCheck": true,
|
||||
"allowJs": true,
|
||||
"composite": true,
|
||||
"lib": [
|
||||
"ESNext"
|
||||
]
|
||||
},
|
||||
"exclude": [
|
||||
"**/*.test.ts"
|
||||
"**/*.test.ts",
|
||||
"node_modules/"
|
||||
],
|
||||
"ts-node": {
|
||||
"esm": true
|
||||
"files": true,
|
||||
"esm": true,
|
||||
"transpileOnly": true
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user