Update all imports

This commit is contained in:
Ferks-FK 2023-02-03 18:03:57 +00:00 committed by IceToast
parent 16ca760901
commit 1d2548a174
12 changed files with 429 additions and 413 deletions

View file

@ -2,7 +2,7 @@
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Classes\Pterodactyl; use App\Classes\PterodactylClient;
use App\Models\User; use App\Models\User;
use App\Traits\Referral; use App\Traits\Referral;
use Illuminate\Console\Command; use Illuminate\Console\Command;
@ -28,14 +28,14 @@ class MakeUserCommand extends Command
*/ */
protected $description = 'Create an admin account with the Artisan Console'; protected $description = 'Create an admin account with the Artisan Console';
private Pterodactyl $pterodactyl; private PterodactylClient $pterodactyl;
/** /**
* Create a new command instance. * Create a new command instance.
* *
* @return void * @return void
*/ */
public function __construct(Pterodactyl $pterodactyl) public function __construct(PterodactylClient $pterodactyl)
{ {
parent::__construct(); parent::__construct();
$this->pterodactyl = $pterodactyl; $this->pterodactyl = $pterodactyl;

View file

@ -3,8 +3,8 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Location; use App\Models\Pterodactyl\Location;
use App\Models\Nest; use App\Models\Pterodactyl\Nest;
use App\Models\Product; use App\Models\Product;
use Exception; use Exception;
use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\Foundation\Application;

View file

@ -2,7 +2,6 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Classes\Pterodactyl;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Server; use App\Models\Server;
use App\Models\User; use App\Models\User;
@ -65,7 +64,7 @@ class ServerController extends Controller
// try to update the owner on pterodactyl // try to update the owner on pterodactyl
try { try {
$response = Pterodactyl::updateServerOwner($server, $user->pterodactyl_id); $response = $this->client->updateServerOwner($server, $user->pterodactyl_id);
if ($response->getStatusCode() != 200) { if ($response->getStatusCode() != 200) {
return redirect()->back()->with('error', 'Failed to update server owner on pterodactyl'); return redirect()->back()->with('error', 'Failed to update server owner on pterodactyl');
} }
@ -118,7 +117,6 @@ class ServerController extends Controller
public function syncServers() public function syncServers()
{ {
$pteroServers = Pterodactyl::getServers();
$CPServers = Server::get(); $CPServers = Server::get();
$CPIDArray = []; $CPIDArray = [];
@ -129,7 +127,7 @@ class ServerController extends Controller
} }
} }
foreach ($pteroServers as $server) { //go thru all ptero servers, if server exists, change value to true in array. foreach ($this->client->getServers() as $server) { //go thru all ptero servers, if server exists, change value to true in array.
if (isset($CPIDArray[$server['attributes']['id']])) { if (isset($CPIDArray[$server['attributes']['id']])) {
$CPIDArray[$server['attributes']['id']] = true; $CPIDArray[$server['attributes']['id']] = true;
@ -149,7 +147,7 @@ class ServerController extends Controller
}, ARRAY_FILTER_USE_BOTH); //Array of servers, that dont exist on ptero (value == false) }, ARRAY_FILTER_USE_BOTH); //Array of servers, that dont exist on ptero (value == false)
$deleteCount = 0; $deleteCount = 0;
foreach ($filteredArray as $key => $CPID) { //delete servers that dont exist on ptero anymore foreach ($filteredArray as $key => $CPID) { //delete servers that dont exist on ptero anymore
if (!Pterodactyl::getServerAttributes($key, true)) { if (!$this->client->getServerAttributes($key, true)) {
$deleteCount++; $deleteCount++;
} }
} }

View file

@ -2,7 +2,6 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Classes\Pterodactyl;
use App\Events\UserUpdateCreditsEvent; use App\Events\UserUpdateCreditsEvent;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\User; use App\Models\User;
@ -26,14 +25,6 @@ use Spatie\QueryBuilder\QueryBuilder;
class UserController extends Controller class UserController extends Controller
{ {
private Pterodactyl $pterodactyl;
public function __construct(Pterodactyl $pterodactyl)
{
$this->pterodactyl = $pterodactyl;
}
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
@ -127,7 +118,7 @@ class UserController extends Controller
'referral_code' => "required|string|min:2|max:32|unique:users,referral_code,{$user->id}", 'referral_code' => "required|string|min:2|max:32|unique:users,referral_code,{$user->id}",
]); ]);
if (isset($this->pterodactyl->getUser($request->input('pterodactyl_id'))['errors'])) { if (isset($this->client->getUser($request->input('pterodactyl_id'))['errors'])) {
throw ValidationException::withMessages([ throw ValidationException::withMessages([
'pterodactyl_id' => [__("User does not exists on pterodactyl's panel")], 'pterodactyl_id' => [__("User does not exists on pterodactyl's panel")],
]); ]);

View file

@ -6,8 +6,23 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
use App\Settings\PterodactylSettings;
use App\Classes\PterodactylClient;
use Exception;
class Controller extends BaseController class Controller extends BaseController
{ {
use AuthorizesRequests, DispatchesJobs, ValidatesRequests; use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public $client = null;
public function __construct(PterodactylSettings $ptero_settings)
{
try {
$this->client = new PterodactylClient($ptero_settings);
}
catch (Exception $exception) {
}
}
} }

View file

@ -4,7 +4,6 @@ namespace App\Http\Controllers;
use App\Models\PartnerDiscount; use App\Models\PartnerDiscount;
use App\Models\UsefulLink; use App\Models\UsefulLink;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;

View file

@ -2,11 +2,12 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Classes\Pterodactyl; use App\Classes\PterodactylClient;
use App\Models\Egg; use App\Models\Pterodactyl\Egg;
use App\Models\Location; use App\Models\Pterodactyl\Location;
use App\Models\Node; use App\Models\Pterodactyl\Node;
use App\Models\Product; use App\Models\Product;
use app\Settings\PterodactylSettings;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -60,7 +61,7 @@ class ProductController extends Controller
{ {
$nodes = $this->getNodesBasedOnEgg($request, $egg); $nodes = $this->getNodesBasedOnEgg($request, $egg);
foreach ($nodes as $key => $node) { foreach ($nodes as $key => $node) {
$pteroNode = Pterodactyl::getNode($node->id); $pteroNode = $this->client->getNode($node->id);
if ($pteroNode['allocated_resources']['memory'] >= ($pteroNode['memory'] * ($pteroNode['memory_overallocate'] + 100) / 100) || $pteroNode['allocated_resources']['disk'] >= ($pteroNode['disk'] * ($pteroNode['disk_overallocate'] + 100) / 100)) { if ($pteroNode['allocated_resources']['memory'] >= ($pteroNode['memory'] * ($pteroNode['memory_overallocate'] + 100) / 100) || $pteroNode['allocated_resources']['disk'] >= ($pteroNode['disk'] * ($pteroNode['disk_overallocate'] + 100) / 100)) {
$nodes->forget($key); $nodes->forget($key);
} }
@ -109,7 +110,7 @@ class ProductController extends Controller
}) })
->get(); ->get();
$pteroNode = Pterodactyl::getNode($node->id); $pteroNode = $this->client->getNode($node->id);
foreach ($products as $key => $product) { foreach ($products as $key => $product) {
if ($product->memory > ($pteroNode['memory'] * ($pteroNode['memory_overallocate'] + 100) / 100) - $pteroNode['allocated_resources']['memory'] || $product->disk > ($pteroNode['disk'] * ($pteroNode['disk_overallocate'] + 100) / 100) - $pteroNode['allocated_resources']['disk']) { if ($product->memory > ($pteroNode['memory'] * ($pteroNode['memory_overallocate'] + 100) / 100) - $pteroNode['allocated_resources']['memory'] || $product->disk > ($pteroNode['disk'] * ($pteroNode['disk_overallocate'] + 100) / 100) - $pteroNode['allocated_resources']['disk']) {
$product->doesNotFit = true; $product->doesNotFit = true;

View file

@ -2,14 +2,15 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Classes\Pterodactyl; use App\Models\Pterodactyl\Egg;
use App\Models\Egg; use App\Models\Pterodactyl\Location;
use App\Models\Location; use App\Models\Pterodactyl\Nest;
use App\Models\Nest; use App\Models\Pterodactyl\Node;
use App\Models\Node;
use App\Models\Product; use App\Models\Product;
use App\Models\Server; use App\Models\Server;
use App\Notifications\ServerCreationError; use App\Notifications\ServerCreationError;
use App\Settings\UserSettings;
use App\Settings\ServerSettings;
use Exception; use Exception;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Client\Response; use Illuminate\Http\Client\Response;
@ -29,7 +30,7 @@ class ServerController extends Controller
foreach ($servers as $server) { foreach ($servers as $server) {
//Get server infos from ptero //Get server infos from ptero
$serverAttributes = Pterodactyl::getServerAttributes($server->pterodactyl_id, true); $serverAttributes = $this->client->getServerAttributes($server->pterodactyl_id, true);
if (! $serverAttributes) { if (! $serverAttributes) {
continue; continue;
} }
@ -65,10 +66,12 @@ class ServerController extends Controller
} }
/** Show the form for creating a new resource. */ /** Show the form for creating a new resource. */
public function create() public function create(UserSettings $user_settings, ServerSettings $server_settings)
{ {
if (! is_null($this->validateConfigurationRules())) { $validate_configuration = $this->validateConfigurationRules($user_settings, $server_settings);
return $this->validateConfigurationRules();
if (!is_null($validate_configuration)) {
return $validate_configuration;
} }
$productCount = Product::query()->where('disabled', '=', false)->count(); $productCount = Product::query()->where('disabled', '=', false)->count();
@ -104,7 +107,7 @@ class ServerController extends Controller
/** /**
* @return null|RedirectResponse * @return null|RedirectResponse
*/ */
private function validateConfigurationRules() private function validateConfigurationRules(UserSettings $user_settings, ServerSettings $server_settings)
{ {
//limit validation //limit validation
if (Auth::user()->servers()->count() >= Auth::user()->server_limit) { if (Auth::user()->servers()->count() >= Auth::user()->server_limit) {
@ -120,7 +123,7 @@ class ServerController extends Controller
$nodeName = $node->name; $nodeName = $node->name;
// Check if node has enough memory and disk space // Check if node has enough memory and disk space
$checkResponse = Pterodactyl::checkNodeResources($node, $product->memory, $product->disk); $checkResponse = $this->client->checkNodeResources($node, $product->memory, $product->disk);
if ($checkResponse == false) { if ($checkResponse == false) {
return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to allocate this product.")); return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to allocate this product."));
} }
@ -137,18 +140,17 @@ class ServerController extends Controller
} }
//Required Verification for creating an server //Required Verification for creating an server
if (config('SETTINGS::USER:FORCE_EMAIL_VERIFICATION', 'false') === 'true' && ! Auth::user()->hasVerifiedEmail()) { if ($user_settings->force_email_verification && !Auth::user()->hasVerifiedEmail()) {
return redirect()->route('profile.index')->with('error', __('You are required to verify your email address before you can create a server.')); return redirect()->route('profile.index')->with('error', __('You are required to verify your email address before you can create a server.'));
} }
//Required Verification for creating an server //Required Verification for creating an server
if (!$server_settings->creation_enabled && Auth::user()->role != 'admin') {
if (! config('SETTINGS::SYSTEM:CREATION_OF_NEW_SERVERS', 'true') && Auth::user()->role != 'admin') {
return redirect()->route('servers.index')->with('error', __('The system administrator has blocked the creation of new servers.')); return redirect()->route('servers.index')->with('error', __('The system administrator has blocked the creation of new servers.'));
} }
//Required Verification for creating an server //Required Verification for creating an server
if (config('SETTINGS::USER:FORCE_DISCORD_VERIFICATION', 'false') === 'true' && ! Auth::user()->discordUser) { if ($user_settings->force_discord_verification && !Auth::user()->discordUser) {
return redirect()->route('profile.index')->with('error', __('You are required to link your discord account before you can create a server.')); return redirect()->route('profile.index')->with('error', __('You are required to link your discord account before you can create a server.'));
} }
@ -183,13 +185,13 @@ class ServerController extends Controller
]); ]);
//get free allocation ID //get free allocation ID
$allocationId = Pterodactyl::getFreeAllocationId($node); $allocationId = $this->client->getFreeAllocationId($node);
if (! $allocationId) { if (! $allocationId) {
return $this->noAllocationsError($server); return $this->noAllocationsError($server);
} }
//create server on pterodactyl //create server on pterodactyl
$response = Pterodactyl::createServer($server, $egg, $allocationId); $response = $this->client->createServer($server, $egg, $allocationId);
if ($response->failed()) { if ($response->failed()) {
return $this->serverCreationFailed($response, $server); return $this->serverCreationFailed($response, $server);
} }
@ -257,7 +259,7 @@ class ServerController extends Controller
if ($server->user_id != Auth::user()->id) { if ($server->user_id != Auth::user()->id) {
return back()->with('error', __('´This is not your Server!')); return back()->with('error', __('´This is not your Server!'));
} }
$serverAttributes = Pterodactyl::getServerAttributes($server->pterodactyl_id); $serverAttributes = $this->client->getServerAttributes($server->pterodactyl_id);
$serverRelationships = $serverAttributes['relationships']; $serverRelationships = $serverAttributes['relationships'];
$serverLocationAttributes = $serverRelationships['location']['attributes']; $serverLocationAttributes = $serverRelationships['location']['attributes'];
@ -273,7 +275,7 @@ class ServerController extends Controller
$server->name = $serverAttributes['name']; $server->name = $serverAttributes['name'];
$server->egg = $serverRelationships['egg']['attributes']['name']; $server->egg = $serverRelationships['egg']['attributes']['name'];
$pteroNode = Pterodactyl::getNode($serverRelationships['node']['attributes']['id']); $pteroNode = $this->client->getNode($serverRelationships['node']['attributes']['id']);
$products = Product::orderBy('created_at') $products = Product::orderBy('created_at')
->whereHas('nodes', function (Builder $builder) use ($serverRelationships) { //Only show products for that node ->whereHas('nodes', function (Builder $builder) use ($serverRelationships) { //Only show products for that node
@ -306,7 +308,7 @@ class ServerController extends Controller
$user = Auth::user(); $user = Auth::user();
$oldProduct = Product::where('id', $server->product->id)->first(); $oldProduct = Product::where('id', $server->product->id)->first();
$newProduct = Product::where('id', $request->product_upgrade)->first(); $newProduct = Product::where('id', $request->product_upgrade)->first();
$serverAttributes = Pterodactyl::getServerAttributes($server->pterodactyl_id); $serverAttributes = $this->client->getServerAttributes($server->pterodactyl_id);
$serverRelationships = $serverAttributes['relationships']; $serverRelationships = $serverAttributes['relationships'];
// Get node resource allocation info // Get node resource allocation info
@ -317,7 +319,7 @@ class ServerController extends Controller
// Check if node has enough memory and disk space // Check if node has enough memory and disk space
$requireMemory = $newProduct->memory - $oldProduct->memory; $requireMemory = $newProduct->memory - $oldProduct->memory;
$requiredisk = $newProduct->disk - $oldProduct->disk; $requiredisk = $newProduct->disk - $oldProduct->disk;
$checkResponse = Pterodactyl::checkNodeResources($node, $requireMemory, $requiredisk); $checkResponse = $this->client->checkNodeResources($node, $requireMemory, $requiredisk);
if ($checkResponse == false) { if ($checkResponse == false) {
return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to upgrade the server.")); return redirect()->route('servers.index')->with('error', __("The node '".$nodeName."' doesn't have the required memory or disk left to upgrade the server."));
} }
@ -331,14 +333,14 @@ class ServerController extends Controller
$server->product_id = $request->product_upgrade; $server->product_id = $request->product_upgrade;
$server->update(); $server->update();
$server->allocation = $serverAttributes['allocation']; $server->allocation = $serverAttributes['allocation'];
$response = Pterodactyl::updateServer($server, $newProduct); $response = $this->client->updateServer($server, $newProduct);
if ($response->failed()) { if ($response->failed()) {
return $this->serverCreationFailed($response, $server); return $this->serverCreationFailed($response, $server);
} }
//update user balance //update user balance
$user->decrement('credits', $priceupgrade); $user->decrement('credits', $priceupgrade);
//restart the server //restart the server
$response = Pterodactyl::powerAction($server, 'restart'); $response = $this->client->powerAction($server, 'restart');
if ($response->failed()) { if ($response->failed()) {
return redirect()->route('servers.index')->with('error', $response->json()['errors'][0]['detail']); return redirect()->route('servers.index')->with('error', $response->json()['errors'][0]['detail']);
} }

View file

@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use App\Models\Pterodactyl\Nest; use App\Models\Pterodactyl\Nest;
use App\Models\Product;
class Egg extends Model class Egg extends Model
{ {

View file

@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use App\Models\Product;
class Node extends Model class Node extends Model
{ {

584
composer.lock generated

File diff suppressed because it is too large Load diff

150
package-lock.json generated
View file

@ -1,5 +1,5 @@
{ {
"name": "dashboard", "name": "controlpanel",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
@ -416,9 +416,9 @@
} }
}, },
"node_modules/@types/eslint": { "node_modules/@types/eslint": {
"version": "8.4.10", "version": "8.21.0",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz",
"integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==",
"dev": true, "dev": true,
"peer": true, "peer": true,
"dependencies": { "dependencies": {
@ -822,9 +822,9 @@
} }
}, },
"node_modules/browserslist": { "node_modules/browserslist": {
"version": "4.21.4", "version": "4.21.5",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
"integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -838,10 +838,10 @@
], ],
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"caniuse-lite": "^1.0.30001400", "caniuse-lite": "^1.0.30001449",
"electron-to-chromium": "^1.4.251", "electron-to-chromium": "^1.4.284",
"node-releases": "^2.0.6", "node-releases": "^2.0.8",
"update-browserslist-db": "^1.0.9" "update-browserslist-db": "^1.0.10"
}, },
"bin": { "bin": {
"browserslist": "cli.js" "browserslist": "cli.js"
@ -867,9 +867,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001449", "version": "1.0.30001450",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz",
"integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==", "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1027,9 +1027,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.284", "version": "1.4.285",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.285.tgz",
"integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "integrity": "sha512-47o4PPgxfU1KMNejz+Dgaodf7YTcg48uOfV1oM6cs3adrl2+7R+dHkt3Jpxqo0LRCbGJEzTKMUt0RdvByb/leg==",
"dev": true, "dev": true,
"peer": true "peer": true
}, },
@ -1336,9 +1336,9 @@
} }
}, },
"node_modules/immutable": { "node_modules/immutable": {
"version": "4.2.2", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.3.tgz",
"integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "integrity": "sha512-IHpmvaOIX4VLJwPOuQr1NpeBr2ZG6vpIj3blsLVxXRWJscLioaJRStqC+NcBsLeCDsnGlPpXd5/WZmnE7MbsKA==",
"devOptional": true "devOptional": true
}, },
"node_modules/inherits": { "node_modules/inherits": {
@ -1575,9 +1575,9 @@
"dev": true "dev": true
}, },
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.8", "version": "2.0.9",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz",
"integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==",
"dev": true, "dev": true,
"peer": true "peer": true
}, },
@ -1788,9 +1788,9 @@
"dev": true "dev": true
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "3.12.0", "version": "3.13.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.12.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.13.0.tgz",
"integrity": "sha512-4MZ8kA2HNYahIjz63rzrMMRvDqQDeS9LoriJvMuV0V6zIGysP36e9t4yObUfwdT9h/szXoHQideICftcdZklWg==", "integrity": "sha512-HJwQtrXAc0AmyDohTJ/2c+Bx/sWPScJLlAUJ1kuD7rAkCro8Cr2SnVB2gVYBiSLxpgD2kZ24jbyXtG++GumrYQ==",
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
}, },
@ -1809,9 +1809,9 @@
"dev": true "dev": true
}, },
"node_modules/sass": { "node_modules/sass": {
"version": "1.57.1", "version": "1.58.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz",
"integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", "integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==",
"devOptional": true, "devOptional": true,
"dependencies": { "dependencies": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
@ -2018,9 +2018,9 @@
} }
}, },
"node_modules/terser": { "node_modules/terser": {
"version": "5.16.1", "version": "5.16.3",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz",
"integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==",
"devOptional": true, "devOptional": true,
"peer": true, "peer": true,
"dependencies": { "dependencies": {
@ -2138,14 +2138,14 @@
"dev": true "dev": true
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "4.0.4", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz",
"integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==",
"dependencies": { "dependencies": {
"esbuild": "^0.16.3", "esbuild": "^0.16.14",
"postcss": "^8.4.20", "postcss": "^8.4.21",
"resolve": "^1.22.1", "resolve": "^1.22.1",
"rollup": "^3.7.0" "rollup": "^3.10.0"
}, },
"bin": { "bin": {
"vite": "bin/vite.js" "vite": "bin/vite.js"
@ -2465,9 +2465,9 @@
} }
}, },
"@types/eslint": { "@types/eslint": {
"version": "8.4.10", "version": "8.21.0",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz",
"integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==",
"dev": true, "dev": true,
"peer": true, "peer": true,
"requires": { "requires": {
@ -2813,16 +2813,16 @@
} }
}, },
"browserslist": { "browserslist": {
"version": "4.21.4", "version": "4.21.5",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
"integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
"dev": true, "dev": true,
"peer": true, "peer": true,
"requires": { "requires": {
"caniuse-lite": "^1.0.30001400", "caniuse-lite": "^1.0.30001449",
"electron-to-chromium": "^1.4.251", "electron-to-chromium": "^1.4.284",
"node-releases": "^2.0.6", "node-releases": "^2.0.8",
"update-browserslist-db": "^1.0.9" "update-browserslist-db": "^1.0.10"
} }
}, },
"buffer-from": { "buffer-from": {
@ -2839,9 +2839,9 @@
"dev": true "dev": true
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001449", "version": "1.0.30001450",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz",
"integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==", "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==",
"dev": true, "dev": true,
"peer": true "peer": true
}, },
@ -2965,9 +2965,9 @@
"dev": true "dev": true
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.4.284", "version": "1.4.285",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.285.tgz",
"integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "integrity": "sha512-47o4PPgxfU1KMNejz+Dgaodf7YTcg48uOfV1oM6cs3adrl2+7R+dHkt3Jpxqo0LRCbGJEzTKMUt0RdvByb/leg==",
"dev": true, "dev": true,
"peer": true "peer": true
}, },
@ -3207,9 +3207,9 @@
"peer": true "peer": true
}, },
"immutable": { "immutable": {
"version": "4.2.2", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.3.tgz",
"integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "integrity": "sha512-IHpmvaOIX4VLJwPOuQr1NpeBr2ZG6vpIj3blsLVxXRWJscLioaJRStqC+NcBsLeCDsnGlPpXd5/WZmnE7MbsKA==",
"devOptional": true "devOptional": true
}, },
"inherits": { "inherits": {
@ -3392,9 +3392,9 @@
"dev": true "dev": true
}, },
"node-releases": { "node-releases": {
"version": "2.0.8", "version": "2.0.9",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz",
"integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==",
"dev": true, "dev": true,
"peer": true "peer": true
}, },
@ -3553,9 +3553,9 @@
"dev": true "dev": true
}, },
"rollup": { "rollup": {
"version": "3.12.0", "version": "3.13.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.12.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.13.0.tgz",
"integrity": "sha512-4MZ8kA2HNYahIjz63rzrMMRvDqQDeS9LoriJvMuV0V6zIGysP36e9t4yObUfwdT9h/szXoHQideICftcdZklWg==", "integrity": "sha512-HJwQtrXAc0AmyDohTJ/2c+Bx/sWPScJLlAUJ1kuD7rAkCro8Cr2SnVB2gVYBiSLxpgD2kZ24jbyXtG++GumrYQ==",
"requires": { "requires": {
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
@ -3567,9 +3567,9 @@
"dev": true "dev": true
}, },
"sass": { "sass": {
"version": "1.57.1", "version": "1.58.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz",
"integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", "integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==",
"devOptional": true, "devOptional": true,
"requires": { "requires": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
@ -3703,9 +3703,9 @@
"peer": true "peer": true
}, },
"terser": { "terser": {
"version": "5.16.1", "version": "5.16.3",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz",
"integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==",
"devOptional": true, "devOptional": true,
"peer": true, "peer": true,
"requires": { "requires": {
@ -3776,15 +3776,15 @@
"dev": true "dev": true
}, },
"vite": { "vite": {
"version": "4.0.4", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz",
"integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==",
"requires": { "requires": {
"esbuild": "^0.16.3", "esbuild": "^0.16.14",
"fsevents": "~2.3.2", "fsevents": "~2.3.2",
"postcss": "^8.4.20", "postcss": "^8.4.21",
"resolve": "^1.22.1", "resolve": "^1.22.1",
"rollup": "^3.7.0" "rollup": "^3.10.0"
} }
}, },
"vite-plugin-full-reload": { "vite-plugin-full-reload": {