Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions app/Console/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@
use Pterodactyl\Console\Commands\Maintenance\PruneOrphanedBackupsCommand;
use Pterodactyl\Console\Commands\Maintenance\CleanServiceBackupFilesCommand;

use Pterodactyl\BlueprintFramework\GetExtensionSchedules;
// Import Blueprint schedules, telemetry and library
use Pterodactyl\Services\Telemetry\RegisterBlueprintTelemetry;
use Pterodactyl\BlueprintFramework\GetExtensionSchedules;
use Pterodactyl\BlueprintFramework\Libraries\ExtensionLibrary\Console\BlueprintConsoleLibrary as BlueprintExtensionLibrary;

class Kernel extends ConsoleKernel
Expand Down Expand Up @@ -60,9 +61,10 @@ protected function schedule(Schedule $schedule): void
$registerBlueprintTelemetry->register($schedule);
}

// Blueprint-related utilities.
// Blueprint-related utilities
$schedule->command('bp:version:cache')->dailyAt(str_pad(rand(0, 23), 2, '0', STR_PAD_LEFT) . ':' . str_pad(rand(0, 59), 2, '0', STR_PAD_LEFT));

// Blueprint extension schedules
GetExtensionSchedules::schedules($schedule);
}

Expand Down
4 changes: 4 additions & 0 deletions app/Http/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ class Kernel extends HttpKernel
ConvertEmptyStringsToNull::class,
];

protected $middlewarePriority = [
SubstituteClientBindings::class,
];

/**
* The application's route middleware groups.
*/
Expand Down
1 change: 1 addition & 0 deletions app/Providers/AppServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Pterodactyl\Extensions\Themes\Theme;
use Illuminate\Database\Eloquent\Relations\Relation;

// Blueprint-related shenanigans imports
use Pterodactyl\Providers\Blueprint\ExtensionfsConfigProvider;
use Pterodactyl\Providers\Blueprint\RouteServiceProvider;

Expand Down
4 changes: 2 additions & 2 deletions blueprint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ depend() {
if [[ $DEPEND_MISSING == true ]]; then
PRINT FATAL "Some framework dependencies couldn't be found or have issues. This is usually NOT a bug, do not report it as such."

if [[ $nodeMajor -lt 17 ]]; then
PRINT FATAL "Unsupported dependency \"node\" <17.x. (Requires >17.x)"
if [[ $nodeMajor -lt 22 ]]; then
PRINT FATAL "Unsupported dependency \"node\" <22.x. (Requires >22.x)"
fi

if ! [ -x "$(command -v unzip)" ]; then PRINT FATAL "Missing dependency \"unzip\"."; fi
Expand Down
306 changes: 153 additions & 153 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,157 +1,157 @@
{
"name": "pterodactyl-panel",
"engines": {
"node": ">=17"
},
"dependencies": {
"@floating-ui/react-dom-interactions": "^0.6.6",
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/react-fontawesome": "^0.1.11",
"@headlessui/react": "^1.6.4",
"@heroicons/react": "^1.0.6",
"@hot-loader/react-dom": "^16.14.0",
"@preact/signals-react": "^1.2.1",
"@tailwindcss/forms": "^0.5.2",
"@tailwindcss/line-clamp": "^0.4.0",
"axios": "^0.27.2",
"boring-avatars": "^1.7.0",
"chart.js": "^3.8.0",
"classnames": "^2.3.1",
"codemirror": "^5.57.0",
"copy-to-clipboard": "^3.3.1",
"date-fns": "^2.28.0",
"debounce": "^1.2.0",
"deepmerge-ts": "^4.2.1",
"easy-peasy": "^4.0.1",
"events": "^3.0.0",
"formik": "^2.2.6",
"framer-motion": "^6.3.10",
"i18next": "^21.8.9",
"i18next-http-backend": "^1.4.1",
"i18next-multiload-backend-adapter": "^1.0.0",
"qrcode.react": "^1.0.1",
"react": "^16.14.0",
"react-chartjs-2": "^4.2.0",
"react-dom": "npm:@hot-loader/react-dom",
"react-fast-compare": "^3.2.0",
"react-hot-loader": "^4.12.21",
"react-i18next": "^11.2.1",
"react-router-dom": "^5.1.2",
"react-transition-group": "^4.4.1",
"reaptcha": "^1.7.2",
"sockette": "^2.0.6",
"styled-components": "^5.2.1",
"styled-components-breakpoint": "^3.0.0-preview.20",
"swr": "^0.2.3",
"tailwindcss": "^3.0.24",
"use-fit-text": "^2.4.0",
"uuid": "^8.3.2",
"xterm": "^4.19.0",
"xterm-addon-fit": "^0.5.0",
"xterm-addon-search": "^0.9.0",
"xterm-addon-search-bar": "^0.2.0",
"xterm-addon-web-links": "^0.6.0",
"yup": "^0.29.1"
},
"devDependencies": {
"@babel/core": "^7.12.1",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.12.1",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-modules-commonjs": "^7.18.2",
"@babel/plugin-transform-react-jsx": "^7.12.1",
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/preset-env": "^7.12.1",
"@babel/preset-react": "^7.12.1",
"@babel/preset-typescript": "^7.12.1",
"@babel/runtime": "^7.12.1",
"@testing-library/dom": "^8.14.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "12.1.5",
"@testing-library/user-event": "^14.2.1",
"@types/codemirror": "^0.0.98",
"@types/debounce": "^1.2.0",
"@types/events": "^3.0.0",
"@types/jest": "^28.1.3",
"@types/node": "^14.11.10",
"@types/qrcode.react": "^1.0.1",
"@types/react": "^16.14.0",
"@types/react-copy-to-clipboard": "^4.3.0",
"@types/react-dom": "^16.9.16",
"@types/react-redux": "^7.1.1",
"@types/react-router": "^5.1.3",
"@types/react-router-dom": "^5.1.3",
"@types/react-transition-group": "^4.4.0",
"@types/styled-components": "^5.1.7",
"@types/uuid": "^3.4.5",
"@types/webpack-env": "^1.15.2",
"@types/yup": "^0.29.3",
"@typescript-eslint/eslint-plugin": "^5.29.0",
"@typescript-eslint/parser": "^5.29.0",
"autoprefixer": "^10.4.7",
"babel-jest": "^28.1.1",
"babel-loader": "^8.2.5",
"babel-plugin-styled-components": "^2.0.7",
"cross-env": "^7.0.2",
"css-loader": "^5.2.7",
"eslint": "^8.18.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-jest-dom": "^4.0.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.30.1",
"eslint-plugin-react-hooks": "^4.6.0",
"fork-ts-checker-webpack-plugin": "^6.2.10",
"identity-obj-proxy": "^3.0.0",
"jest": "^28.1.1",
"postcss": "^8.4.14",
"postcss-import": "^14.1.0",
"postcss-loader": "^4.0.0",
"postcss-nesting": "^10.1.8",
"postcss-preset-env": "^7.7.1",
"prettier": "^2.7.1",
"redux-devtools-extension": "^2.13.8",
"source-map-loader": "^1.1.3",
"style-loader": "^2.0.0",
"svg-url-loader": "^7.1.1",
"terser-webpack-plugin": "^4.2.3",
"ts-essentials": "^9.1.2",
"ts-jest": "^28.0.5",
"twin.macro": "^2.8.2",
"typescript": "^4.7.3",
"webpack": "^4.43.0",
"webpack-assets-manifest": "^3.1.1",
"webpack-bundle-analyzer": "^3.8.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0",
"yarn-deduplicate": "^1.1.1"
},
"scripts": {
"clean": "cd public/assets && find . \\( -name \"*.js\" -o -name \"*.map\" \\) -type f -delete && rm -rf node_modules/.cache",
"test": "jest",
"lint": "eslint ./resources/scripts/**/*.{ts,tsx} --ext .ts,.tsx",
"watch": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --watch --progress",
"build": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --progress",
"build:production": "yarn run clean && cross-env NODE_ENV=production ./node_modules/.bin/webpack --mode production",
"serve": "yarn run clean && cross-env WEBPACK_PUBLIC_PATH=/webpack@hmr/ NODE_ENV=development webpack-dev-server --host 0.0.0.0 --port 8080 --public https://pterodactyl.test --hot"
},
"browserslist": [
"> 0.5%",
"last 2 versions",
"firefox esr",
"not dead"
],
"babelMacros": {
"twin": {
"preset": "styled-components"
"name": "pterodactyl-panel",
"engines": {
"node": ">=22"
},
"styledComponents": {
"pure": true,
"displayName": true,
"fileName": true
"dependencies": {
"@floating-ui/react-dom-interactions": "^0.6.6",
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/react-fontawesome": "^0.1.11",
"@headlessui/react": "^1.6.4",
"@heroicons/react": "^1.0.6",
"@hot-loader/react-dom": "^16.14.0",
"@preact/signals-react": "^1.2.1",
"@tailwindcss/forms": "^0.5.2",
"@tailwindcss/line-clamp": "^0.4.0",
"axios": "^1.13.2",
"boring-avatars": "^1.7.0",
"chart.js": "^3.8.0",
"classnames": "^2.3.1",
"codemirror": "^5.57.0",
"copy-to-clipboard": "^3.3.1",
"date-fns": "^2.28.0",
"debounce": "^1.2.0",
"deepmerge-ts": "^4.2.1",
"easy-peasy": "^4.0.1",
"events": "^3.0.0",
"formik": "^2.2.6",
"framer-motion": "^6.3.10",
"i18next": "^21.8.9",
"i18next-http-backend": "^1.4.1",
"i18next-multiload-backend-adapter": "^1.0.0",
"pathe": "^2.0.3",
"qrcode.react": "^1.0.1",
"react": "^16.14.0",
"react-chartjs-2": "^4.2.0",
"react-dom": "npm:@hot-loader/react-dom",
"react-fast-compare": "^3.2.0",
"react-hot-loader": "^4.12.21",
"react-i18next": "^11.2.1",
"react-router-dom": "^5.1.2",
"react-transition-group": "^4.4.1",
"reaptcha": "^1.7.2",
"sockette": "^2.0.6",
"styled-components": "^5.3.0",
"styled-components-breakpoint": "^3.0.0-preview.20",
"swr": "^0.2.3",
"tailwindcss": "^3.0.24",
"use-fit-text": "^2.4.0",
"uuid": "^13.0.0",
"xterm": "^4.19.0",
"xterm-addon-fit": "^0.5.0",
"xterm-addon-search": "^0.9.0",
"xterm-addon-search-bar": "^0.2.0",
"xterm-addon-web-links": "^0.6.0",
"yup": "^0.29.1"
},
"devDependencies": {
"@babel/core": "^7.12.1",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.12.1",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-modules-commonjs": "^7.18.2",
"@babel/plugin-transform-react-jsx": "^7.12.1",
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/preset-env": "^7.12.1",
"@babel/preset-react": "^7.12.1",
"@babel/preset-typescript": "^7.12.1",
"@babel/runtime": "^7.12.1",
"@fontsource-variable/ibm-plex-sans": "^5.2.8",
"@testing-library/dom": "^8.14.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "12.1.5",
"@testing-library/user-event": "^14.2.1",
"@types/codemirror": "^0.0.98",
"@types/debounce": "^1.2.0",
"@types/events": "^3.0.0",
"@types/jest": "^28.1.3",
"@types/node": "^22.0.0",
"@types/path-browserify": "^1.0.3",
"@types/qrcode.react": "^1.0.1",
"@types/react": "^16.14.0",
"@types/react-copy-to-clipboard": "^4.3.0",
"@types/react-dom": "^16.9.16",
"@types/react-redux": "^7.1.1",
"@types/react-router": "^5.1.3",
"@types/react-router-dom": "^5.1.3",
"@types/react-transition-group": "^4.4.0",
"@types/styled-components": "5.1.7",
"@types/uuid": "^3.4.5",
"@types/webpack-env": "^1.18.8",
"@types/yup": "^0.29.3",
"@typescript-eslint/eslint-plugin": "^5",
"@typescript-eslint/parser": "^5",
"autoprefixer": "^10.4.7",
"babel-jest": "^28.1.1",
"babel-loader": "^10.0.0",
"babel-plugin-styled-components": "^2.0.7",
"cross-env": "^7.0.2",
"css-loader": "^7.1.2",
"eslint": "^8",
"eslint-config-prettier": "^8",
"eslint-plugin-jest-dom": "^4.0.2",
"eslint-plugin-prettier": "^4",
"eslint-plugin-react": "^7",
"eslint-plugin-react-hooks": "^4",
"identity-obj-proxy": "^3.0.0",
"jest": "^28.1.1",
"postcss": "^8.5.6",
"postcss-import": "^14.1.0",
"postcss-loader": "^8.2.0",
"postcss-nesting": "^13.0.2",
"postcss-preset-env": "^10.4.0",
"prettier": "^2.7.1",
"redux-devtools-extension": "^2.13.8",
"source-map-loader": "^5.0.0",
"style-loader": "^4.0.0",
"svg-url-loader": "^8.0.0",
"terser-webpack-plugin": "^5.3.14",
"ts-essentials": "^9.1.2",
"ts-jest": "^28.0.5",
"twin.macro": "^2.8.2",
"typescript": "~5.1.0",
"webpack": "^5.103.0",
"webpack-assets-manifest": "^6.4.0",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.2"
},
"scripts": {
"clean": "cd public/assets && find . \\( -name \"*.js\" -o -name \"*.map\" \\) -type f -delete",
"test": "jest",
"tsc": "tsc --noEmit",
"lint": "eslint ./resources/scripts/**/*.{ts,tsx} --ext .ts,.tsx",
"watch": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --watch --progress",
"build": "cross-env NODE_ENV=development ./node_modules/.bin/webpack --progress",
"build:production": "yarn run clean && cross-env NODE_ENV=production ./node_modules/.bin/webpack --mode production",
"serve": "yarn run clean && cross-env NODE_ENV=development USE_LOCAL_CERTS=true WEBPACK_PUBLIC_PATH=https://pterodactyl.test:5173/ webpack serve --progress --hot --server-type https"
},
"browserslist": [
"> 0.5%",
"last 2 versions",
"firefox esr",
"not dead"
],
"babelMacros": {
"twin": {
"preset": "styled-components"
},
"styledComponents": {
"pure": true,
"displayName": true,
"fileName": true
}
}
}
}
10 changes: 6 additions & 4 deletions resources/scripts/api/server/getServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export interface Server {
variables: ServerEggVariable[];
allocations: Allocation[];

// Define egg id from Blueprint
BlueprintFramework: {
eggId: number;
};
Expand All @@ -69,12 +70,13 @@ export const rawDataToServerObject = ({ attributes: data }: FractalResponseData)
featureLimits: { ...data.feature_limits },
isTransferring: data.is_transferring,
variables: ((data.relationships?.variables as FractalResponseList | undefined)?.data || []).map(
rawDataToServerEggVariable
rawDataToServerEggVariable,
),
allocations: ((data.relationships?.allocations as FractalResponseList | undefined)?.data || []).map(
rawDataToServerAllocation
rawDataToServerAllocation,
),

// Get egg id from Blueprint
BlueprintFramework: {
eggId: data.BlueprintFramework.egg_id,
},
Expand All @@ -89,8 +91,8 @@ export default (uuid: string): Promise<[Server, string[]]> => {
rawDataToServerObject(data),
// eslint-disable-next-line camelcase
data.meta?.is_server_owner ? ['*'] : data.meta?.user_permissions || [],
])
]),
)
.catch(reject);
});
};
};
Loading
Loading