Rewrite in typescrypt #327

Merged
Sirherobrine23 merged 13 commits from re_Typescript into main 2022-03-28 21:43:14 +00:00
9 changed files with 468 additions and 148 deletions
Showing only changes of commit 8c53d8b5a0 - Show all commits

View File

@ -20,9 +20,6 @@ jobs:
latestDeploy: latestDeploy:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Publish latest name: Publish latest
environment:
name: PublishImage
url: "ghcr.io/ofvp-project/deamonmaneger"
steps: steps:
- uses: actions/checkout@v2.4.0 - uses: actions/checkout@v2.4.0
with: with:

View File

@ -13,9 +13,6 @@ jobs:
latestDeploy: latestDeploy:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Publish latest name: Publish latest
environment:
name: PublishImage
url: "ghcr.io/ofvp-project/deamonmaneger"
steps: steps:
- uses: actions/checkout@v2.4.0 - uses: actions/checkout@v2.4.0
with: with:

389
package-lock.json generated
View File

@ -18,16 +18,19 @@
"adm-zip": "^0.5.9", "adm-zip": "^0.5.9",
"axios": "^0.26.1", "axios": "^0.26.1",
"cors": "^2.8.5", "cors": "^2.8.5",
"cron": "^1.8.2",
"express": "^4.17.3", "express": "^4.17.3",
"strip-json-comments": "^4.0.0", "prismarine-nbt": "^2.2.1",
"properties-to-json": "^0.2.1",
"typescript": "^4.6.2", "typescript": "^4.6.2",
"yargs": "^17.4.0" "yargs": "^17.4.0"
}, },
"bin": { "bin": {
"bds_maneger": "bin/BdsManeger.js" "bds_maneger": "dist/cjs/index.js"
}, },
"devDependencies": { "devDependencies": {
"@types/adm-zip": "^0.4.34", "@types/adm-zip": "^0.4.34",
"@types/cron": "^1.7.3",
"@types/express": "^4.17.13", "@types/express": "^4.17.13",
"@types/node": "^17.0.22", "@types/node": "^17.0.22",
"@types/yargs": "^17.0.10", "@types/yargs": "^17.0.10",
@ -65,6 +68,16 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/cron": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/@types/cron/-/cron-1.7.3.tgz",
"integrity": "sha512-iPmUXyIJG1Js+ldPYhOQcYU3kCAQ2FWrSkm1FJPoii2eYSn6wEW6onPukNTT0bfiflexNSRPl6KWmAIqS+36YA==",
"dev": true,
"dependencies": {
"@types/node": "*",
"moment": ">=2.14.0"
}
},
"node_modules/@types/express": { "node_modules/@types/express": {
"version": "4.17.13", "version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
@ -157,6 +170,21 @@
"node": ">=6.0" "node": ">=6.0"
} }
}, },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ansi-regex": { "node_modules/ansi-regex": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -292,25 +320,6 @@
"node": ">= 0.6" "node": ">= 0.6"
} }
}, },
"node_modules/content-disposition/node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/content-type": { "node_modules/content-type": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@ -344,6 +353,14 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/cron": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz",
"integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==",
"dependencies": {
"moment-timezone": "^0.5.x"
}
},
"node_modules/debug": { "node_modules/debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -516,24 +533,15 @@
"node": ">= 0.10.0" "node": ">= 0.10.0"
} }
}, },
"node_modules/express/node_modules/safe-buffer": { "node_modules/fast-deep-equal": {
"version": "5.2.1", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
"funding": [ },
{ "node_modules/fast-json-stable-stringify": {
"type": "github", "version": "2.1.0",
"url": "https://github.com/sponsors/feross" "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
}, "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
}, },
"node_modules/finalhandler": { "node_modules/finalhandler": {
"version": "1.1.2", "version": "1.1.2",
@ -931,6 +939,11 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true "dev": true
}, },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"node_modules/load-json-file": { "node_modules/load-json-file": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@ -955,6 +968,16 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"node_modules/lodash.reduce": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
"integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs="
},
"node_modules/media-typer": { "node_modules/media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -1027,6 +1050,25 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
"engines": {
"node": "*"
}
},
"node_modules/moment-timezone": {
"version": "0.5.34",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz",
"integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==",
"dependencies": {
"moment": ">= 2.9.0"
},
"engines": {
"node": "*"
}
},
"node_modules/ms": { "node_modules/ms": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -1329,6 +1371,44 @@
"node": ">=0.10" "node": ">=0.10"
} }
}, },
"node_modules/prismarine-nbt": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/prismarine-nbt/-/prismarine-nbt-2.2.1.tgz",
"integrity": "sha512-Mb50c58CPnuZ+qvM31DBa08tf9UumlTq1LkvpMoUpKfCuN05GZHTqCUwER3lxTSHLL0GZKghIPbYR/JQkINijQ==",
"dependencies": {
"protodef": "^1.9.0"
}
},
"node_modules/properties-to-json": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/properties-to-json/-/properties-to-json-0.2.1.tgz",
"integrity": "sha512-JNrxz39D56CF50mw8T95AhJ3xTvl0ZjmO22KTFMnqDoP0TZzOtUneCOW0H/vE62FkIafUPavWPLHJs33sz7zBg=="
},
"node_modules/protodef": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/protodef/-/protodef-1.15.0.tgz",
"integrity": "sha512-bZ2Omw8dT+DACjJHLrBWZlqN4MlT9g9oSpJDdkUAJOStUzgJp+Zn42FJfPUdwutUxjaxA0PftN0PDlNa2XbneA==",
"dependencies": {
"lodash.get": "^4.4.2",
"lodash.reduce": "^4.6.0",
"protodef-validator": "^1.3.0",
"readable-stream": "^3.0.3"
},
"engines": {
"node": ">=14"
}
},
"node_modules/protodef-validator": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/protodef-validator/-/protodef-validator-1.3.1.tgz",
"integrity": "sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==",
"dependencies": {
"ajv": "^6.5.4"
},
"bin": {
"protodef-validator": "cli.js"
}
},
"node_modules/proxy-addr": { "node_modules/proxy-addr": {
"version": "2.0.7", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@ -1341,6 +1421,14 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"engines": {
"node": ">=6"
}
},
"node_modules/qs": { "node_modules/qs": {
"version": "6.9.7", "version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
@ -1409,6 +1497,19 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/require-directory": { "node_modules/require-directory": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -1434,6 +1535,25 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/safer-buffer": { "node_modules/safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@ -1546,6 +1666,14 @@
"node": ">= 0.6" "node": ">= 0.6"
} }
}, },
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/string-width": { "node_modules/string-width": {
"version": "4.2.3", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@ -1622,17 +1750,6 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/strip-json-comments": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-4.0.0.tgz",
"integrity": "sha512-LzWcbfMbAsEDTRmhjWIioe8GcDRl0fa35YMXFoJKDdiD/quGFmjJjdgPjFJJNwCMaLyQqFIDqCdHD2V4HfLgYA==",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/supports-preserve-symlinks-flag": { "node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@ -1700,6 +1817,19 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"node_modules/utils-merge": { "node_modules/utils-merge": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@ -1821,6 +1951,16 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"@types/cron": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/@types/cron/-/cron-1.7.3.tgz",
"integrity": "sha512-iPmUXyIJG1Js+ldPYhOQcYU3kCAQ2FWrSkm1FJPoii2eYSn6wEW6onPukNTT0bfiflexNSRPl6KWmAIqS+36YA==",
"dev": true,
"requires": {
"@types/node": "*",
"moment": ">=2.14.0"
}
},
"@types/express": { "@types/express": {
"version": "4.17.13", "version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
@ -1907,6 +2047,17 @@
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
"integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==" "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg=="
}, },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ansi-regex": { "ansi-regex": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -2016,13 +2167,6 @@
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"requires": { "requires": {
"safe-buffer": "5.2.1" "safe-buffer": "5.2.1"
},
"dependencies": {
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
} }
}, },
"content-type": { "content-type": {
@ -2049,6 +2193,14 @@
"vary": "^1" "vary": "^1"
} }
}, },
"cron": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz",
"integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==",
"requires": {
"moment-timezone": "^0.5.x"
}
},
"debug": { "debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -2189,15 +2341,18 @@
"type-is": "~1.6.18", "type-is": "~1.6.18",
"utils-merge": "1.0.1", "utils-merge": "1.0.1",
"vary": "~1.1.2" "vary": "~1.1.2"
},
"dependencies": {
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
}
} }
}, },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"finalhandler": { "finalhandler": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@ -2466,6 +2621,11 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true "dev": true
}, },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"load-json-file": { "load-json-file": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@ -2486,6 +2646,16 @@
} }
} }
}, },
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.reduce": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
"integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs="
},
"media-typer": { "media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@ -2534,6 +2704,19 @@
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
}, },
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"moment-timezone": {
"version": "0.5.34",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz",
"integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==",
"requires": {
"moment": ">= 2.9.0"
}
},
"ms": { "ms": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -2763,6 +2946,38 @@
"integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
"dev": true "dev": true
}, },
"prismarine-nbt": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/prismarine-nbt/-/prismarine-nbt-2.2.1.tgz",
"integrity": "sha512-Mb50c58CPnuZ+qvM31DBa08tf9UumlTq1LkvpMoUpKfCuN05GZHTqCUwER3lxTSHLL0GZKghIPbYR/JQkINijQ==",
"requires": {
"protodef": "^1.9.0"
}
},
"properties-to-json": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/properties-to-json/-/properties-to-json-0.2.1.tgz",
"integrity": "sha512-JNrxz39D56CF50mw8T95AhJ3xTvl0ZjmO22KTFMnqDoP0TZzOtUneCOW0H/vE62FkIafUPavWPLHJs33sz7zBg=="
},
"protodef": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/protodef/-/protodef-1.15.0.tgz",
"integrity": "sha512-bZ2Omw8dT+DACjJHLrBWZlqN4MlT9g9oSpJDdkUAJOStUzgJp+Zn42FJfPUdwutUxjaxA0PftN0PDlNa2XbneA==",
"requires": {
"lodash.get": "^4.4.2",
"lodash.reduce": "^4.6.0",
"protodef-validator": "^1.3.0",
"readable-stream": "^3.0.3"
}
},
"protodef-validator": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/protodef-validator/-/protodef-validator-1.3.1.tgz",
"integrity": "sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==",
"requires": {
"ajv": "^6.5.4"
}
},
"proxy-addr": { "proxy-addr": {
"version": "2.0.7", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@ -2772,6 +2987,11 @@
"ipaddr.js": "1.9.1" "ipaddr.js": "1.9.1"
} }
}, },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"qs": { "qs": {
"version": "6.9.7", "version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
@ -2821,6 +3041,16 @@
} }
} }
}, },
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"require-directory": { "require-directory": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@ -2837,6 +3067,11 @@
"supports-preserve-symlinks-flag": "^1.0.0" "supports-preserve-symlinks-flag": "^1.0.0"
} }
}, },
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@ -2939,6 +3174,14 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}, },
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"requires": {
"safe-buffer": "~5.2.0"
}
},
"string-width": { "string-width": {
"version": "4.2.3", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@ -2994,11 +3237,6 @@
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true "dev": true
}, },
"strip-json-comments": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-4.0.0.tgz",
"integrity": "sha512-LzWcbfMbAsEDTRmhjWIioe8GcDRl0fa35YMXFoJKDdiD/quGFmjJjdgPjFJJNwCMaLyQqFIDqCdHD2V4HfLgYA=="
},
"supports-preserve-symlinks-flag": { "supports-preserve-symlinks-flag": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@ -3041,6 +3279,19 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
}, },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"requires": {
"punycode": "^2.1.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge": { "utils-merge": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",

View File

@ -28,10 +28,10 @@
"package.json", "package.json",
"package-lock.json" "package-lock.json"
], ],
"exec": "node --trace-warnings ./bin/BdsManeger.js start --Develop" "exec": "npm run build:cjs && node --trace-warnings ./dist/cjs/index.js start --Develop"
}, },
"bin": { "bin": {
"bds_maneger": "bin/BdsManeger.js" "bds_maneger": "dist/cjs/index.js"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -66,13 +66,16 @@
"adm-zip": "^0.5.9", "adm-zip": "^0.5.9",
"axios": "^0.26.1", "axios": "^0.26.1",
"cors": "^2.8.5", "cors": "^2.8.5",
"cron": "^1.8.2",
"express": "^4.17.3", "express": "^4.17.3",
"strip-json-comments": "^4.0.0", "prismarine-nbt": "^2.2.1",
"properties-to-json": "^0.2.1",
"typescript": "^4.6.2", "typescript": "^4.6.2",
"yargs": "^17.4.0" "yargs": "^17.4.0"
}, },
"devDependencies": { "devDependencies": {
"@types/adm-zip": "^0.4.34", "@types/adm-zip": "^0.4.34",
"@types/cron": "^1.7.3",
"@types/express": "^4.17.13", "@types/express": "^4.17.13",
"@types/node": "^17.0.22", "@types/node": "^17.0.22",
"@types/yargs": "^17.0.10", "@types/yargs": "^17.0.10",

View File

@ -9,7 +9,9 @@ import os from "os";
import path from "path"; import path from "path";
import admZip from "adm-zip"; import admZip from "adm-zip";
import fs from "fs"; import fs from "fs";
import stripJsonComments from "strip-json-comments"; // import stripJsonComments from "strip-json-comments";
const stripJsonComments = (data) => data.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? "" : m);
function ensureFileSync(pathFile: string){ function ensureFileSync(pathFile: string){
if (!fs.existsSync(pathFile)){ if (!fs.existsSync(pathFile)){
@ -116,7 +118,7 @@ export function addonInstaller() {
// Gather pack details from the manifest.json file // Gather pack details from the manifest.json file
let manifest = await extractPackManifest(packPath); let manifest = await extractPackManifest(packPath);
let name = manifest.header.name.replace(/\W/g, ""); // let name = manifest.header.name.replace(/\W/g, "");
let uuid = manifest.header.uuid; let uuid = manifest.header.uuid;
let version = manifest.header.version; let version = manifest.header.version;
if (!version) version = manifest.header.modules[0].version; if (!version) version = manifest.header.modules[0].version;
@ -129,7 +131,7 @@ export function addonInstaller() {
throw new Error("Unable to install pack. Unknown pack manifest format.\n" + packPath); throw new Error("Unable to install pack. Unknown pack manifest format.\n" + packPath);
} }
console.log("BDSAddonInstaller - Installing " + name + "..."); // console.log("BDSAddonInstaller - Installing " + name + "...");
// Check if already installed // Check if already installed
let installedWorldPack, installedServerPack = null; let installedWorldPack, installedServerPack = null;
@ -147,11 +149,11 @@ export function addonInstaller() {
if (installedWorldPack && installedWorldPack.version.toString() != version.toString()) upToDate = false; if (installedWorldPack && installedWorldPack.version.toString() != version.toString()) upToDate = false;
if (installedServerPack && installedServerPack.version.toString() != version.toString()) upToDate = false; if (installedServerPack && installedServerPack.version.toString() != version.toString()) upToDate = false;
if (upToDate) { if (upToDate) {
console.log(`BDSAddonInstaller - The ${name} pack is already installed and up to date.`); // console.log(`BDSAddonInstaller - The ${name} pack is already installed and up to date.`);
return; return;
}else{ }else{
// uninstall pack if not up to date // uninstall pack if not up to date
console.log("BDSAddonInstaller - Uninstalling old version of pack"); // console.log("BDSAddonInstaller - Uninstalling old version of pack");
if (installedServerPack) await uninstallServerPack(uuid, installedServerPack.location); if (installedServerPack) await uninstallServerPack(uuid, installedServerPack.location);
if (installedWorldPack && type == "resources") await uninstallWorldResource(uuid, installedWorldPack.location); if (installedWorldPack && type == "resources") await uninstallWorldResource(uuid, installedWorldPack.location);
if (installedWorldPack && type == "data") await uninstallWorldBehavior(uuid, installedWorldPack.location); if (installedWorldPack && type == "data") await uninstallWorldBehavior(uuid, installedWorldPack.location);
@ -159,7 +161,7 @@ export function addonInstaller() {
} }
await installPack(packPath, manifest); await installPack(packPath, manifest);
console.log("BDSAddonInstaller - Successfully installed the " + name + " pack."); // console.log("BDSAddonInstaller - Successfully installed the " + name + " pack.");
} }
@ -180,7 +182,7 @@ export function addonInstaller() {
let location = path.join(addonPath, pack); let location = path.join(addonPath, pack);
await this.installAddon(location); await this.installAddon(location);
}catch(err) { }catch(err) {
console.error("BDSAddonInstaller - " + err); // console.error("BDSAddonInstaller - " + err);
} }
} }
} }
@ -254,7 +256,7 @@ async function installPack(packPath, manifest) {
* NOTE: This is why only packs found installed to the world will be removed from the server. * NOTE: This is why only packs found installed to the world will be removed from the server.
*/ */
async function uninstallAllWorldPacks() { async function uninstallAllWorldPacks() {
console.log("BDSAddonInstaller - Uninstalling all packs found saved to world."); // console.log("BDSAddonInstaller - Uninstalling all packs found saved to world.");
// Uninstall all cached world resource packs. // Uninstall all cached world resource packs.
for (let pack of installedWorldResources.values()) { for (let pack of installedWorldResources.values()) {
@ -295,13 +297,13 @@ async function uninstallWorldResource(uuid, location) {
if (packIndex != -1) { if (packIndex != -1) {
worldResourcesJSON.splice(packIndex, 1); worldResourcesJSON.splice(packIndex, 1);
fs.writeFileSync(worldResourcesJsonPath, JSON.stringify(worldResourcesJSON, undefined, 2)); fs.writeFileSync(worldResourcesJsonPath, JSON.stringify(worldResourcesJSON, undefined, 2));
console.log(`BDSAddonInstaller - Removed ${uuid} from world resource packs JSON.`); // console.log(`BDSAddonInstaller - Removed ${uuid} from world resource packs JSON.`);
} }
// Delete the provided pack path. // Delete the provided pack path.
if (fs.existsSync(location)) { if (fs.existsSync(location)) {
await fs.promises.rm(location, {recursive: true}); await fs.promises.rm(location, {recursive: true});
console.log(`BDSAddonInstaller - Removed ${location}`); // console.log(`BDSAddonInstaller - Removed ${location}`);
} }
} }
@ -319,13 +321,13 @@ async function uninstallWorldBehavior(uuid, location) {
if (packIndex != -1) { if (packIndex != -1) {
worldBehaviorsJSON.splice(packIndex, 1); worldBehaviorsJSON.splice(packIndex, 1);
fs.writeFileSync(worldBehaviorsJsonPath, JSON.stringify(worldBehaviorsJSON, undefined, 2)); fs.writeFileSync(worldBehaviorsJsonPath, JSON.stringify(worldBehaviorsJSON, undefined, 2));
console.log(`BDSAddonInstaller - Removed ${uuid} from world behavior packs JSON.`); // console.log(`BDSAddonInstaller - Removed ${uuid} from world behavior packs JSON.`);
} }
// Delete the provided pack path. // Delete the provided pack path.
if (fs.existsSync(location)) { if (fs.existsSync(location)) {
fs.promises.rm(location); fs.promises.rm(location);
console.log(`BDSAddonInstaller - Removed ${location}`); // console.log(`BDSAddonInstaller - Removed ${location}`);
} }
} }
@ -343,13 +345,13 @@ async function uninstallServerPack (uuid, location) {
if (packIndex != -1) { if (packIndex != -1) {
serverPacksJSON.splice(packIndex, 1); serverPacksJSON.splice(packIndex, 1);
fs.writeFileSync(serverPacksJsonPath, JSON.stringify(serverPacksJSON, undefined, 2)); fs.writeFileSync(serverPacksJsonPath, JSON.stringify(serverPacksJSON, undefined, 2));
console.log(`BDSAddonInstaller - Removed ${uuid} from server packs JSON.`); // console.log(`BDSAddonInstaller - Removed ${uuid} from server packs JSON.`);
} }
// Delete the provided pack path. // Delete the provided pack path.
if (fs.existsSync(location)) { if (fs.existsSync(location)) {
fs.promises.rm(location); fs.promises.rm(location);
console.log(`BDSAddonInstaller - Removed ${location}`); // console.log(`BDSAddonInstaller - Removed ${location}`);
} }
} }
@ -365,7 +367,7 @@ async function extractAddonPacks(addonPath) {
// Validate the provided path is to an addon. // Validate the provided path is to an addon.
if (!fs.existsSync(addonPath)) throw new Error("Unable to extract packs from addon. Invalid file path provided: " + addonPath); if (!fs.existsSync(addonPath)) throw new Error("Unable to extract packs from addon. Invalid file path provided: " + addonPath);
if (!addonPath.endsWith('.mcaddon')) throw new Error('Unable to extract packs from addon. The provided file is not an addon. ' + addonPath); if (!addonPath.endsWith('.mcaddon')) throw new Error('Unable to extract packs from addon. The provided file is not an addon. ' + addonPath);
console.log("BDSAddonInstaller - Extracting packs from " + addonPath); // console.log("BDSAddonInstaller - Extracting packs from " + addonPath);
// Extract file path and name info for saving the extracted packs. // Extract file path and name info for saving the extracted packs.
let addonName = path.basename(addonPath).replace(".mcaddon", ""); let addonName = path.basename(addonPath).replace(".mcaddon", "");
@ -379,7 +381,7 @@ async function extractAddonPacks(addonPath) {
// Move addon packs from temporary location to BDS-Addon directory. // Move addon packs from temporary location to BDS-Addon directory.
for (let pack of packs) { for (let pack of packs) {
console.log(`BDSAddonInstaller - Extracting ${pack} from ${addonName}.`); // console.log(`BDSAddonInstaller - Extracting ${pack} from ${addonName}.`);
// If the mcpack is already packaged, move the file. // If the mcpack is already packaged, move the file.
if (pack.endsWith(".mcpack")) { if (pack.endsWith(".mcpack")) {
@ -388,7 +390,7 @@ async function extractAddonPacks(addonPath) {
let packDestination = path.join(dirPath, packName); let packDestination = path.join(dirPath, packName);
await fs.promises.rename(packFile, packDestination); await fs.promises.rename(packFile, packDestination);
results.push(packDestination); results.push(packDestination);
console.log("BDSAddonInstaller - Extracted " + packDestination); // console.log("BDSAddonInstaller - Extracted " + packDestination);
}else { }else {
// The pack still needs to be zipped and then moved. // The pack still needs to be zipped and then moved.
let packName = addonName + "_" + pack + ".mcpack"; let packName = addonName + "_" + pack + ".mcpack";
@ -396,7 +398,7 @@ async function extractAddonPacks(addonPath) {
let packDestination = path.join(dirPath, packName); let packDestination = path.join(dirPath, packName);
await promiseZip(packFolder, packDestination); await promiseZip(packFolder, packDestination);
results.push(packDestination); results.push(packDestination);
console.log("BDSAddonInstaller - Extracted " + packDestination); // console.log("BDSAddonInstaller - Extracted " + packDestination);
} }
} }
@ -417,7 +419,7 @@ function extractPackManifest(packPath) {
// Validate the provided pack (path exists and file is correct type) // Validate the provided pack (path exists and file is correct type)
if (!fs.existsSync(packPath)) throw new Error("Unable to extract manifest file. Invalid file path provided: " + packPath); if (!fs.existsSync(packPath)) throw new Error("Unable to extract manifest file. Invalid file path provided: " + packPath);
if (!packPath.endsWith(".mcpack")) throw new Error("Unable to extract manifest file. The provided file is not a pack. " + packPath); if (!packPath.endsWith(".mcpack")) throw new Error("Unable to extract manifest file. The provided file is not a pack. " + packPath);
console.log("BDSAddonInstaller - Reading manifest data from " + packPath); // console.log("BDSAddonInstaller - Reading manifest data from " + packPath);
// Locate the manifest file in the zipped pack. // Locate the manifest file in the zipped pack.
let archive = new admZip(packPath); let archive = new admZip(packPath);
@ -436,7 +438,7 @@ function extractPackManifest(packPath) {
*/ */
function readWorldName() { function readWorldName() {
let propertyFile = path.join(serverPath, "server.properties"); let propertyFile = path.join(serverPath, "server.properties");
console.log("BDSAddonInstaller - Reading world name from " + propertyFile); // console.log("BDSAddonInstaller - Reading world name from " + propertyFile);
if (!fs.existsSync(propertyFile)) throw new Error("Unable to locate server properties @ " + propertyFile); if (!fs.existsSync(propertyFile)) throw new Error("Unable to locate server properties @ " + propertyFile);
let properties = fs.readFileSync(propertyFile); let properties = fs.readFileSync(propertyFile);
let levelName = properties.toString().match(/level-name=.*/); let levelName = properties.toString().match(/level-name=.*/);
@ -467,14 +469,14 @@ function mapInstalledPacks(directory) {
let subdirectories = fs.readdirSync(directory); let subdirectories = fs.readdirSync(directory);
subdirectories.forEach(subdirectory => { subdirectories.forEach(subdirectory => {
let location = path.join(directory, subdirectory); let location = path.join(directory, subdirectory);
console.log("BDSAddonInstaller - Reading manifest data from " + location); // console.log("BDSAddonInstaller - Reading manifest data from " + location);
// Locate the directory containing the pack manifest. // Locate the directory containing the pack manifest.
let manifestLocation = findFilesSync(["manifest.json", "pack_manifest.json"], location); let manifestLocation = findFilesSync(["manifest.json", "pack_manifest.json"], location);
if (!manifestLocation) { if (!manifestLocation) {
console.error(manifestLocation); // console.error(manifestLocation);
console.warn("BDSAddonInstaller - Unable to locate manifest file of installed pack."); // console.warn("BDSAddonInstaller - Unable to locate manifest file of installed pack.");
console.warn("BDSAddonInstaller - Installed location: " + location); // console.warn("BDSAddonInstaller - Installed location: " + location);
return; return;
} }

View File

@ -8,9 +8,7 @@ app.use(express.urlencoded({extended: true}));
app.use(express.json()); app.use(express.json());
app.use((req, res, next) => { app.use((req, res, next) => {
res.json = (body) => { res.json = (body) => {
if (!res.get("Content-Type")) { res.set("Content-Type", "application/json");
res.set("Content-Type", "application/json");
}
res.send(JSON.stringify(body, (key, value) => { res.send(JSON.stringify(body, (key, value) => {
if (typeof value === "bigint") value = value.toString(); if (typeof value === "bigint") value = value.toString();
else if (isDate(value)) value = value.toString(); else if (isDate(value)) value = value.toString();
@ -34,6 +32,17 @@ app.all("/", ({res}) => res.json((() => {
return data; return data;
})())); })()));
// Session info
app.get("/:SessionID", (req, res) => {
const SessionID: string = req.params.SessionID;
const Sessions = ServerManeger.getSessions();
if (!Sessions[SessionID]) return res.status(404).send({message: "Session not found"});
const filter = Object.keys(Sessions[SessionID]).filter(a => !(a === "addonManeger" || a ==="commands"));
const data = {};
filter.forEach(key => data[key] = Sessions[SessionID][key]);
return res.json(data);
});
// Get Players // Get Players
app.get("/:SessionID/player", (req, res) => { app.get("/:SessionID/player", (req, res) => {
const SessionID: string = req.params.SessionID; const SessionID: string = req.params.SessionID;

View File

@ -21,8 +21,8 @@ const Yargs = yargs(process.argv.slice(2)).command("download", "Download and Ins
console.log("Sucess to download server"); console.log("Sucess to download server");
console.info("Release date: %s", `${res.Date.getDate()}/${res.Date.getMonth()+1}/${res.Date.getFullYear()}`); console.info("Release date: %s", `${res.Date.getDate()}/${res.Date.getMonth()+1}/${res.Date.getFullYear()}`);
}); });
}).command("start", "Start Server", yargs => { }).command("start", "Start Server", async yargs => {
const options = yargs.option("platform", { const options = await yargs.option("platform", {
alias: "p", alias: "p",
describe: "Bds Core Platform", describe: "Bds Core Platform",
choices: ["bedrock", "java", "pocketmine", "spigot", "dragonfly"], choices: ["bedrock", "java", "pocketmine", "spigot", "dragonfly"],
@ -32,10 +32,10 @@ const Yargs = yargs(process.argv.slice(2)).command("download", "Download and Ins
describe: "Bds Core API port listen", describe: "Bds Core API port listen",
default: "3000", default: "3000",
type: "number" type: "number"
}).parseSync(); }).parseAsync();
const Platform = options.platform as bdsTypes.Platform; const Platform = options.platform as bdsTypes.Platform;
BdsCore.API.listen(options.api); BdsCore.API.listen(options.api);
const Server = BdsCore.Server.Start(Platform); const Server = await BdsCore.Server.Start(Platform);
console.log("Session ID: %s", Server.id); console.log("Session ID: %s", Server.id);
Server.on("all", data => process.stdout.write(data)); Server.on("all", data => process.stdout.write(data));
const Input = readline.createInterface({input: process.stdin,output: process.stdout}) const Input = readline.createInterface({input: process.stdin,output: process.stdout})
@ -48,4 +48,4 @@ const Yargs = yargs(process.argv.slice(2)).command("download", "Download and Ins
Yargs.showHelp(); Yargs.showHelp();
} }
}).help().version(false); }).help().version(false);
Yargs.parseSync(); Yargs.parseAsync();

View File

@ -3,16 +3,21 @@ import fs from "fs";
import os from "os"; import os from "os";
import crypto from "crypto"; import crypto from "crypto";
import child_process from "child_process"; import child_process from "child_process";
import node_cron from "cron";
import addon from "./addons/index"; import addon from "./addons/index";
import * as bdsBackup from "./backup";
import * as serverConfig from "./serverConfig";
import * as bdsTypes from "./globalType"; import * as bdsTypes from "./globalType";
type BdsSession = { type BdsSession = {
id: string; id: string;
startDate: Date; startDate: Date;
seed?: string;
addonManeger: { addonManeger: {
installAddon: (packPath: string) => Promise<void>; installAddon: (packPath: string) => Promise<void>;
installAllAddons: (removeOldPacks: boolean) => Promise<void>; installAllAddons: (removeOldPacks: boolean) => Promise<void>;
}; };
creteBackup: (crontime: string|Date) => void;
on: (from: "all"|"stdout"|"stderr", callback: (data: string) => void) => void; on: (from: "all"|"stdout"|"stderr", callback: (data: string) => void) => void;
exit: (callback: (code: number, signal: string) => void) => void; exit: (callback: (code: number, signal: string) => void) => void;
getPlayer: () => {[player: string]: {action: "connect"|"disconnect"|"unknown"; date: Date; history: Array<{action: "connect"|"disconnect"|"unknown"; date: Date}>}}; getPlayer: () => {[player: string]: {action: "connect"|"disconnect"|"unknown"; date: Date; history: Array<{action: "connect"|"disconnect"|"unknown"; date: Date}>}};
@ -28,7 +33,7 @@ const Sessions: {[Session: string]: BdsSession} = {};
export function getSessions() {return Sessions;} export function getSessions() {return Sessions;}
// Start Server // Start Server
export function Start(Platform: bdsTypes.Platform): BdsSession { export async function Start(Platform: bdsTypes.Platform): Promise<BdsSession> {
const ServerPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), Platform); const ServerPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), Platform);
if (!(fs.existsSync(ServerPath))) fs.mkdirSync(ServerPath, {recursive: true}); if (!(fs.existsSync(ServerPath))) fs.mkdirSync(ServerPath, {recursive: true});
const Process: {command: string; args: Array<string>; env: {[env: string]: string}; cwd: string;} = { const Process: {command: string; args: Array<string>; env: {[env: string]: string}; cwd: string;} = {
@ -81,46 +86,46 @@ export function Start(Platform: bdsTypes.Platform): BdsSession {
onLog("all", data => { onLog("all", data => {
if (Platform === "bedrock") { if (Platform === "bedrock") {
(() => { (() => {
const portParse = data.match(/(IPv[46])\s+.*,\s+port:\s+(.*)/); const portParse = data.match(/(IPv[46])\s+.*,\s+port:\s+(.*)/);
if (portParse) ports.push({ if (portParse) ports.push({
port: parseInt(portParse[2]), port: parseInt(portParse[2]),
protocol: "UDP",
version: portParse[1] as "IPv4"|"IPv6"
});
const portParse2 = data.match(/port:\s+(.*)/);
if (portParse2) {
if (!ports.find(p => p.port === parseInt(portParse2[1]))) ports.push({
port: parseInt(portParse2[1]),
protocol: "UDP", protocol: "UDP",
version: portParse[1] as "IPv4"|"IPv6"
}); });
const portParse2 = data.match(/port:\s+(.*)/);
if (portParse2) {
if (!ports.find(p => p.port === parseInt(portParse2[1]))) ports.push({
port: parseInt(portParse2[1]),
protocol: "UDP",
});
}
})()
const playerBedrock = (() => {
const [action, player, xuid] = (data.match(/r\s+(.*)\:\s+(.*)\,\s+xuid\:\s+(.*)/)||[]).slice(1, 4);
const __PlayerAction: {player: string, xuid: string|undefined, action: "connect"|"disconnect"|"unknown"} = {
player: player,
xuid: xuid,
action: "unknown"
};
if (action === "connected") __PlayerAction.action = "connect";
else if (action === "disconnected") __PlayerAction.action = "disconnect";
return __PlayerAction;
})();
if (playerBedrock.player && playerBedrock.action) {
const actionDate = new Date();
if (!!playersConnections[playerBedrock.player]) {
playersConnections[playerBedrock.player].action = playerBedrock.action;
playersConnections[playerBedrock.player].date = actionDate;
playersConnections[playerBedrock.player].history.push({action: playerBedrock.action, date: actionDate});
} else {
playersConnections[playerBedrock.player] = {
action: playerBedrock.action,
date: actionDate,
history: [{action: playerBedrock.action, date: actionDate}]
};
} }
})()
const playerBedrock = (() => {
const [action, player, xuid] = (data.match(/r\s+(.*)\:\s+(.*)\,\s+xuid\:\s+(.*)/)||[]).slice(1, 4);
const __PlayerAction: {player: string, xuid: string|undefined, action: "connect"|"disconnect"|"unknown"} = {
player: player,
xuid: xuid,
action: "unknown"
};
if (action === "connected") __PlayerAction.action = "connect";
else if (action === "disconnected") __PlayerAction.action = "disconnect";
return __PlayerAction;
})();
if (playerBedrock.player && playerBedrock.action) {
const actionDate = new Date();
if (!!playersConnections[playerBedrock.player]) {
playersConnections[playerBedrock.player].action = playerBedrock.action;
playersConnections[playerBedrock.player].date = actionDate;
playersConnections[playerBedrock.player].history.push({action: playerBedrock.action, date: actionDate});
} else {
playersConnections[playerBedrock.player] = {
action: playerBedrock.action,
date: actionDate,
history: [{action: playerBedrock.action, date: actionDate}]
};
} }
} }
}
}); });
// Exit callback // Exit callback
@ -141,13 +146,21 @@ export function Start(Platform: bdsTypes.Platform): BdsSession {
} }
// Return Session // Return Session
const Seesion = { const Seesion: BdsSession = {
id: crypto.randomUUID(), id: crypto.randomUUID(),
startDate: StartDate, startDate: StartDate,
seed: undefined,
addonManeger: { addonManeger: {
installAddon: async function (packPath: string) {console.log(packPath); return;}, installAddon: async function (packPath: string) {console.log(packPath); return;},
installAllAddons: async function (removeOldPacks: boolean) {console.log(removeOldPacks); return;} installAllAddons: async function (removeOldPacks: boolean) {console.log(removeOldPacks); return;}
}, },
creteBackup: (crontime: string|Date) => {
const cronJob = new node_cron.CronJob(crontime, async () => {
bdsBackup.CreateBackup(Platform);
});
cronJob.start();
return;
},
on: onLog, on: onLog,
exit: onExit, exit: onExit,
ports: () => ports, ports: () => ports,
@ -157,7 +170,11 @@ export function Start(Platform: bdsTypes.Platform): BdsSession {
tpPlayer: tpPlayer, tpPlayer: tpPlayer,
} }
}; };
if (Platform === "bedrock") Seesion.addonManeger = addon.bedrock.addonInstaller(); if (Platform === "bedrock") {
Seesion.addonManeger = addon.bedrock.addonInstaller();
const bedrockConfig = await serverConfig.parseConfig(Platform);
Seesion.seed = bedrockConfig.nbt.parsed.value.RandomSeed.value.toString();
}
const logFile = path.resolve(ServerPath, `../log/${Seesion.id}.log`); const logFile = path.resolve(ServerPath, `../log/${Seesion.id}.log`);
if(!(fs.existsSync(path.parse(logFile).dir))) fs.mkdirSync(path.parse(logFile).dir, {recursive: true}); if(!(fs.existsSync(path.parse(logFile).dir))) fs.mkdirSync(path.parse(logFile).dir, {recursive: true});
const logStream = fs.createWriteStream(logFile, {flags: "w+"}); const logStream = fs.createWriteStream(logFile, {flags: "w+"});

44
src/serverConfig.ts Normal file
View File

@ -0,0 +1,44 @@
import path from "path";
import os from "os";
import fs from "fs";
import * as prismarineNbt from "prismarine-nbt";
import properties_to_json from "properties-to-json";
import * as bdsType from "./globalType";
type BdsConfigGet = {
world: string;
description: string;
gamemode: string;
difficulty: "peaceful"|"easy"|"normal"|"hard";
players: number;
whitelist: true|false;
portv4: number;
portv6: number;
nbt?: {
parsed: prismarineNbt.NBT;
type: prismarineNbt.NBTFormat;
metadata: prismarineNbt.Metadata;
}|undefined;
}
export async function parseConfig(Platform: bdsType.Platform): Promise<BdsConfigGet> {
const serverPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), Platform);
if (Platform === "bedrock") {
const bedrockConfigPath = path.join(serverPath, "server.properties");
if (!(fs.existsSync(bedrockConfigPath))) throw new Error("Bedrock server config not found");
const bedrockConfig = properties_to_json(fs.readFileSync(bedrockConfigPath, "utf8"));
const bedrockConfigNbtPath = path.join(serverPath, "worlds", bedrockConfig["level-name"], "level.dat");
return {
world: bedrockConfig["level-name"],
description: bedrockConfig["server-name"],
difficulty: bedrockConfig["difficulty"],
gamemode: bedrockConfig["gamemode"],
players: parseInt(bedrockConfig["max-players"]),
whitelist: bedrockConfig["white-list"] === "true",
portv4: parseInt(bedrockConfig["server-port"]),
portv6: parseInt(bedrockConfig["server-portv6"]),
nbt: (fs.existsSync(bedrockConfigNbtPath)) ? await prismarineNbt.parse(fs.readFileSync(bedrockConfigNbtPath)) : undefined
};
}
throw new Error("Platform not supported");
}